e structural es
DESCRIPTION
Patrones de diseñoTRANSCRIPT
![Page 2: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/2.jpg)
PATRONES ESTRUCTURALES
● Tratan de cómo están compuestas las clases y objetos para formar estructuras más grandes.
● Las clases Estructurales usan herencia e interfaces para la composición. – Ej. Cómo la herencia múltiple combina dos o más
clases en una. El resultado es una clase que combina las propiedades de todos sus padres.
● Muy útiles para lograr que librerías desarrolladas independientemente trabajen juntas
![Page 3: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/3.jpg)
ADAPTER
● Intención:
Convertir la interfaz de una clase en la interfaz que el cliente espera. – Este patrón permite que dos clases con interfaces
incompatibles trabajen conjuntamente.
![Page 4: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/4.jpg)
ADAPTER
● Motivación: – Adaptador entre dos clases u objetos
– Cómo en la vida real, es un adaptador o puente entre dos objetos.
● Adpatador para el cargador de una laptop.
– Desarrollo de Software:● Se tiene una clase que espera cierto tipo de objeto, y se tiene un objeto
que ofrece la misma funcionalidad pero que expone una interfaz diferente.
● Lo ideal es usar las dos sin tener que implementar de nuevo uno de las dos clases, tampoco se quiere modificar una de las clases.
– Solución: Crear un Adapter
![Page 5: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/5.jpg)
ADAPTER
● Cuando usar:– Se requiere usar una clase en particular, pero su
interfaz no se adapta a la que usted necesita.
– Cuando se quiere crear una clase reutilizable que coopere con clases no previstas o no relacionadas. Dichas clases no necesariamente tienen interfaces compatibles
![Page 6: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/6.jpg)
ADAPTER
Adapter usando herencia (Class Adapter)
![Page 7: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/7.jpg)
ADAPTER
Adapter usando composición (Object Adapter)
![Page 8: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/8.jpg)
ADAPTEREjemplo 1
![Page 9: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/9.jpg)
ADAPTEREjemplo 2
![Page 10: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/10.jpg)
ADAPTER
● Consecuencias:– Adapta una clase Adaptee a una clase Target, usando una
clase específica Adaptador
– Permite que la clase Adaptadora sobreescriba parte del comportamiento de la clase que se va a Adaptar(Adaptee), debido a que Adapter es una subclase de Adaptee
– Permite que un único adaptador pueda trabajar con varias clases a la vez
– Dificulta sobreescribir el comportamiento de la clase que se va a adaptar(Adaptee)
![Page 11: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/11.jpg)
BRIDGE
● Intención:
Desacoplar una abstracción de su implementación de manera que las dos puedan variar independientemente
![Page 12: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/12.jpg)
BRIDGE
● Motivación: – Una abtracción puede tener múltiples
implementaciones (herencia)
– Herencia ata la implementación a su abstracción de manera permanente
● Difuculta modificar, extender y reusar las dos independientemente
![Page 13: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/13.jpg)
BRIDGE
![Page 14: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/14.jpg)
BRIDGE
![Page 15: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/15.jpg)
BRIDGE
● Cuando usar:– Se desea evitar un enlace permanente entre la abstracción y su
implementación. Esto puede ser debido a que la implementación debe ser seleccionada o cambiada en tiempo de ejecución.
– Tanto las abstracciones como sus implementaciones deben ser extensibles por medio de subclases. En este caso, el patrón Bridge permite combinar abstracciones e implementaciones diferentes y extenderlas independientemente.
– Cambios en la implementación de una abstracción no deben impactar en los clientes, es decir, su código no debe tener que ser recompilado.
![Page 16: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/16.jpg)
BRIDGE
![Page 17: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/17.jpg)
BRIDGE
● Participantes:– Abstraction: define una interface abstracta. Mantiene una
referencia a un objeto de tipo Implementor.
– RefinedAbstraction: extiende la interface definida por Abstraction
– Implementor: define la interface para la implementación de clases. Esta interface no se tiene que corresponder exactamente con la interface de Abstraction; de hecho, las dos interfaces pueden ser bastante diferente. Típicamente la interface Implementor provee sólo operaciones primitivas, y Abstraction define operaciones de alto nivel basadas en estas primitivas.
– ConcreteImplementor: implementa la interface de Implementor y define su implementación concreta.
![Page 18: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/18.jpg)
BRIDGE
![Page 19: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/19.jpg)
BRIDGE
![Page 20: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/20.jpg)
BRIDGE
● Consecuencias:– Desacopla interface e implementación. La
implementación de una abstracción puede ser configurada en tiempo de ejecución. Además le es posible a un objeto cambiar su implementación en tiempo de ejecución.
– Mejora la extensibilidad: se puede extender las jerarquías de Abstraction e Implementor independientemente
– Esconde los detalles de la implementación a los clientes.
![Page 21: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/21.jpg)
COMPOSITE
● Intención: – Facilita la creación de jerarquías de objetos donde
cada objeto se puede tratar de forma independiente o como un conjunto de objetos anidados a través de la misma interfaz.
![Page 22: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/22.jpg)
COMPOSITE
● Cuando usar:– Se requiere representar jerarquías de objetos todo-
parte
– Los objetos y composiciones de objetos deben ser tratados de manera uniforme.
![Page 23: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/23.jpg)
COMPOSITE
![Page 24: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/24.jpg)
COMPOSITE
![Page 25: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/25.jpg)
DECORATOR
● Intención: – Añade dinámicamente funcionalidad a un objeto.
– Permite no tener que crear subclases incorporando la nueva funcionalidad, sino otras que la implementan y se asocian a la primera.
![Page 26: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/26.jpg)
DECORATOR
● Cuando usar:– El comportamiento de objetos debe ser
dinámicamente modificable, sin afectar otros objetos.
– Las funcionalidades específicas no deben residir en la parte alta de la jerarquía de objetos.
![Page 27: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/27.jpg)
DECORATOR
![Page 28: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/28.jpg)
DECORATOR
![Page 29: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/29.jpg)
FACADE
● Intención: – Proporcionar una interfaz unificada de un conjunto
de interfaces de un subsistema
– Definir una interfaz de alto nivel que hace que un subsistema sea más fácil de utilizar
![Page 30: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/30.jpg)
FACADE
● Cuando usar:– Se usa para proporcionar una interfaz sencilla para
un sistema complejo.
– Se quiere desacoplar un subsistema de sus clientes u otros subsistemas, haciéndolo mas independiente y portable.
– Se quiera dividir los sistemas en niveles: las fachadas serian el punto de entrada a cada nivel.
![Page 31: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/31.jpg)
FACADE
![Page 32: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/32.jpg)
FACADE
![Page 33: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/33.jpg)
FLYWEIGHT
● Intención: – Eliminar o reducir la redundancia cuando tenemos
gran cantidad de objetos que contienen información idéntica
– Lograr un equilibrio entre flexibilidad y rendimiento (uso de recursos).
![Page 34: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/34.jpg)
FLYWEIGHT
● Cuando usar:– Cuando la aplicación usa un gran número de objetos.
– Cuando el costo de almacenamiento es alto debido al número de objetos
– La gran mayoría de los estados de los objetos puede hacerse extrínseco.
– Al separar el estado extrínseco, muchos grupos de objetos pueden reemplazarse por unos pocos objetos compartidos.
![Page 35: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/35.jpg)
FLYWEIGHT
![Page 36: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/36.jpg)
FLYWEIGHT
Marca: ToyotaModelo: YarisColor: BlancoPlaca: XXXX
Marca: ToyotaModelo: YarisColor: RojoPlaca: 1234
Marca: ToyotaModelo: YarisColor: NegroPlaca: YYYY
Marca: ToyotaModelo: YarisColor: PlataPlaca: 5678
![Page 37: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/37.jpg)
PROXY
● Intención: – Proporcionar un sustituto o intermediario para otro
objeto de modo que pueda controlarse el acceso que se tiene hacia él
![Page 38: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/38.jpg)
PROXY
● Cuando usar:– Proxy remoto: cuando el objeto representado es
externo al sistema.
– Proxy virtual: Los objetos se deben crear bajo demanda. Se encarga de instanciar objetos cuyo coste computacional es elevado.
– Proxy de protección: establece controles de acceso a un objeto dependiendo de permisos o reglas de autorización.
![Page 39: e Structural Es](https://reader033.vdocuments.co/reader033/viewer/2022042603/55cf9334550346f57b9cba58/html5/thumbnails/39.jpg)
PROXY