Está en la página 1de 52

Diseño y Construcción de Software

Patrones de Diseño Estructurales

Mg. Ing. Efrain Bautista Ubillús


ebautistau@unmsm.edu.pe | efrainbautista@gmail.com

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Agenda
1. Adapter
2. Bridge
3. Composite
4. Decorator
5. Façade
6. Flyweight
7. Proxy
UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software
Clasificación de Patrones - Gang of Four

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Clasificación de Patrones - Gang of Four

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrones Estructurales
• Describe cómo clases y objetos se combinan para formar
estructuras más complejas.
• Patrones de clase
o Usan herencia
• Patrones de objeto
o Describen formas de combinar objetos para obtener
nueva funcionalidad.
o Posibilidad de cambiar la composición en tiempo de
ejecución.
UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software
Patrón Adapter
• Propósito
o Convertir la interface de un clase en otra que el cliente
espera, permitiendo a las clases trabajar en conjunto. De
otra manera las clases serían incompatibles.
o Este patrón sugiere el uso de una clase envoltura (wrapper)
sobre la clase que tiene la interface incompatible.
o Las llamadas a métodos del adaptador se convierten
internamente en llamadas a los métodos de la clase
adaptada, de la cual el cliente no tiene conocimiento.
UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software
Patrón Adapter
• Motivación
o Algunas veces las clases que son diseñadas para reuso, no
pueden ser reusadas debido a que su interface es
incompatible con la interface específica de una aplicación.
o Un editor gráfico incluye una jerarquía que modela
elementos gráficos (líneas, polígonos, texto, etc) y se desea
reutilizar una clase existente TextView para implementar la
clase que representa elementos de texto, pero que tiene una
interfaz incompatible.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Adapter
• Aplicabilidad
o Se desea usar una clase existente y su interfaz no coincide
con la que se necesita.
o Se desea crear una clase reutilizable que debe colaborar con
clases no relacionadas o imprevistas.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Adapter
• Estructura – Adaptador de Clase
Diseñado como una subclase de la clase adaptada. La clase
adaptadora implementa la interface esperada por el objeto cliente.
Cuando un cliente invoca a un método del adaptador, éste invoca
a un método de la clase adaptada que ha sido heredado.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Adapter
• Ejemplo – Adaptador de Clase

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Adapter
• Estructura – Adaptador de Objeto
El objeto adaptador contiene una referencia al objeto adaptado, la
clase adaptadora implementa la interface que es esperada por el
cliente. Cuando un cliente invoca a un método del adaptador, éste
invoca a un método del objeto adaptado.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Adapter
• Ejemplo – Adaptador de Objeto

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Adapter
• Consecuencias
o Incrementa el reuso de las clases quitando el acoplamiento
que existe entre la interface y su implementación.
o Forma efectiva de lograr Open Closed Principle.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Bridge
• Propósito
o Desaclopar una abstracción de sus implementaciones de tal
manera que puedan variar de manera independiente.
• Motivación
o Cuando se tiene una abstracción y herencia, ambas clases se
encuentran relacionadas, de tal forma que no se puede
afectar una sin impactar en la otra.
o Las relaciones de abstracción-herencia hacen difícil
modificar, extender y reusar las implementaciones de una
abstracción de manera independiente.
UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software
Patrón Bridge
• Aplicabilidad
o En sistemas con alta probabilidad de cambios, y éstos
necesitan ser encapsulados de los clientes.
• Estructura

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Bridge
• Ejemplo

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Bridge
• Ejemplo

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Bridge
• Consecuencias
o Mejora la mantenibilidad y extensibilidad de las clases al
descomponer las abstracciones de sus implementaciones.
o Seguir Open Closed Principle.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Composite
• Propósito
o Compone objetos en estructuras de árbol para representar
jerarquías de parte-todo. Permite que los clientes traten de
manera uniforme a los objetos individuales y a los compuestos.
• Aplicabilidad
o Representar jerarquías de objetos parte-todo.
o Que los clientes sean capaces de obviar las diferencias entre
composiciones de objetos y los objetos individuales. Los
clientes tratarán a todos los objetos de la estructura compuesta
de manera uniforme.
UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software
Patrón Composite
• Una estructura de objetos Compuestos típica puede parecerse a esto:

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Composite
• Estructura

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Composite
• Ejemplo

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Composite
• Ejemplo

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Composite
• Consecuencias
o Define jerarquías de clases formadas por objetos primitivos y

compuestos.
o Simplifica el cliente, éstos pueden tratar uniformemente a
las estructuras compuestas y a los objetos individuales.
o Facilita añadir nuevos tipos de componentes.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Decorator
• Propósito
o Asigna responsabilidades adicionales a un objeto
dinámicamente, proporcionando una alternativa flexible a la
herencia para extender la funcionalidad.
• Motivación
o Añadir una nueva funcionalidad sobre una clase puede
conllevar a incrementar las cantidad de clases que heredan de
la clase base. Es decir, se debe extender la clase base y luego
redefinir las operaciones para modificar las operaciones para
implementar la nueva funcionalidad, y esto puede llevar a un
crecimiento inapropiado de clases.
UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software
Patrón Decorator
• Aplicabilidad
o Para añadir objetos individuales de forma dinámica y

transparente, es decir, sin afectar a otros objetos.


o Cuando la extensión mediante la herencia no es viable. A

veces es posible tener un gran número de extensiones


independientes, produciéndose una explosión de subclases
para permitir todas las combinaciones.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Decorator
• Estructura

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Decorator
• Ejemplo

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Decorator
• Ejemplo

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Decorator
• Ejemplo sin hacer uso del patrón decorator

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Decorator
• Consecuencias
o Más flexibilidad que la herencia estática. Con los decoradores

se puede añadir y quitar responsabilidades en tiempo de


ejecución simplemente poniéndolas y quitándolas.
o El decorador ofrece un enfoque para añadir responsabilidades
que consiste en pagar sólo por aquello que se necesita. Como
resultado una aplicación no necesita pagar por características
que no usa.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Façade
• Propósito
o Proporciona una interfaz unificada para un conjunto de
interfaces de un subsistema. Define una interfaz de alto nivel
que hace que el subsistema sea más fácil de usar.
• Motivación
o Estructurar un sistema en subsistemas ayuda a reducir la
complejidad. Un típico objetivo de diseño es minimizar la
comunicación y dependencias entre subsistemas. Un modo de
lograr esto es introduciendo un objeto fachada que
proporcione una interfaz única y simplificada.
UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software
Patrón Façade
• Motivación

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Façade
• Aplicabilidad
o Proporcionar una interfaz simple para un subsistema

complejo. La mayoría de los patrones, cuando se aplican, dan


como resultado más clases y más pequeñas. Esto hace que el
subsistema sea más reutilizable y fácil de personalizar, pero
esto también lo hace más difícil de usar para aquellos clientes
que no necesitan personalizarlo.
o Cuando existen muchas dependencias entre los clientes y las

clases que implementan una abstracción.


o Dividir en capas los subsistemas.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Façade
• Estructura

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Façade
• Ejemplo

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Façade
• Ejemplo

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Façade
• Ejemplo

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Façade
• Consecuencias
o Oculta a los clientes los componentes del subsistema,

reduciendo así el número de objetos con los que tratan los


clientes y haciendo que el subsistema sea más fácil de usar.
o Promueve un débil acoplamiento entre el subsistema y sus
clientes.
o No impide que las aplicaciones usen las clases del subsistema
en caso de que sea necesario.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Flyweight (Peso ligero)
• Propósito
o Usa compartimiento para permitir un gran número de objetos
de forma eficiente.
• Motivación
o Si bien algunas aplicaciones podrían beneficiarse de un diseño
en el que se empleasen objetos para todo, una implementación
simplista haría que este fuese prohibitivamente caro, teniendo
inconvenientes en el diseño por su costo.
o Compartir objetos para permitir su uso con granularidades
muy finas sin un costo prohibitivo.
UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software
Patrón Flyweight
• Aplicabilidad
o Una aplicación utiliza un gran número de objetos.

o Alto costo de almacenamiento por la gran cantidad de objetos.

o La mayor parte del estado del objeto puede hacerse extrínseco.

o Muchos grupos de objetos pueden reemplazarse por

relativamente pocos objetos compartidos, una vez que se ha


eliminado el estado extrínseco.
o La aplicación no depende de la identidad de un objeto. Puesto

que los objetos pueden ser compartidos, las comprobaciones de


identidad devolverán verdadero para objetos conceptualmente
distintos.
UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software
Patrón Flyweight
• Estructura

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Flyweight
• Ejemplo de Aplicación
Un editor de documentos contiene caracteres los cuales tendrá
sentido hacer compartibles, por motivos de eficiencia. Si por
cada carácter del documento creamos un objeto los problemas
de almacenamiento aparecerán de inmediato, mientras que éstos
se resolverán fácilmente si sólo se crea un objeto por cada tipo
distinto de carácter, compartible por cada aparición de los
mismos en el texto, en diferentes posiciones (este sería su estado
extrínseco).

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Flyweight
• Ejemplo

En términos simples, el estado intrínseco hace a la instancia


única, mientras que el extrínseco (no se puede compartir) es
pasado como argumentos.
UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software
Patrón Flyweight
• Ejemplo

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Flyweight
• Consecuencias
o Los pesos ligeros pueden introducir costos en tiempo de

ejecución asociados con la transferencia, búsqueda y cálculo de


estado extrínseco.
o Cuantos más objetos peso ligero se compartan, mayor será el
ahorro de almacenamiento. Este ahorro aumentará a medida
que se comparta más cantidad de estado, tanto intrínseco como
extrínseco, y cuando el estado extrínseco pueda calcularse en
vez de tener que ser guardado.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Proxy (Apoderado)
• Propósito
o Proporciona un representante o sustituto de otro objeto para
controlar el acceso a éste.
• Motivación
o Una razón para controlar el acceso a un objeto es retrasar
todo el costo de su creación e inicialización hasta que sea
realmente necesario usarlo.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Proxy
• Aplicabilidad
o Un proxy remoto proporciona un representante local de un

objeto, y abstrae los detalles de comunicación con el objeto


remoto.
o Un proxy virtual crea objetos costosos por encargo / demanda.
o Un proxy de protección controla el acceso al objeto original.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Proxy
• Estructura

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Proxy
• Ejemplo

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Proxy
• Ejemplo - Estructura Alterna

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software


Patrón Proxy
• Consecuencias
o Un proxy remoto puede ocultar el hecho de que un objeto

reside en un espacio de direcciones diferente.


o Un proxy virtual puede llevar a cabo optimizaciones tales
como crear un objeto por encargo o demanda.

UNMSM – Maestría en Ingeniería de Sistemas e Informática – Mención en Ingeniería de Software

También podría gustarte