91
Ingeniería de Sistemas

8 Patrones de Diseño - Creacion.pdf

Embed Size (px)

Citation preview

Page 1: 8 Patrones de Diseño - Creacion.pdf

Ingeniería de Sistemas

Page 2: 8 Patrones de Diseño - Creacion.pdf

• Introducción. • Patrones. • Descripción de los Patrones. • Ejemplo: Patrones en el MVC de Smalltalk. • El catálogo de patrones.

• Patrones de Creación. • Patrones Estructurales. • Patrones de Comportamiento.

Page 3: 8 Patrones de Diseño - Creacion.pdf

“Una arquitectura orientada a objetos bien estructurada está llena de patrones. La calidad de un sistema orientado a objetos se mide por la atención que los diseñadores han prestado a las colaboraciones entre sus objetos.”

“Los patrones conducen a arquitecturas más pequeñas, más simples y más comprensibles”

G. Booch

Page 4: 8 Patrones de Diseño - Creacion.pdf

4

“Diseñar software orientado a objetos es difícil pero diseñar software orientado a objetos reutilizable es más difícil todavía. Diseños generales y flexibles son muy difíciles de encontrar la primera vez”

¿Qué conoce un programador experto que

desconoce uno inexperto?

Reutilizar soluciones que funcionaron en el pasado: Aprovechar la experiencia

Page 5: 8 Patrones de Diseño - Creacion.pdf

Hardware Software

Poder reusar componentes y lograr un mantenimiento fácil. Lograr un software flexible

habitualmente

Page 6: 8 Patrones de Diseño - Creacion.pdf

Problema Solución

Patrones de diseño

Page 7: 8 Patrones de Diseño - Creacion.pdf

Un esquema que se usa para solucionar un problema.

El esquema ha sido probado extensivamente, y ha funcionado. Se tiene experiencia sobre su uso.

Elementos principales: ◦ Nombre ◦ Problema ◦ Solución: Descripción abstracta ◦ Consecuencias

Page 8: 8 Patrones de Diseño - Creacion.pdf

Reutilizar diseños abstractos que no incluyan detalles de la implementación.

Un patrón es una descripción del problema y la esencia de su solución, que se puede reutilizar en casos distintos.

Es una solución adecuada a un problema común.

Asociado a orientación a objetos, pero el principio general es aplicable a todos los enfoques de diseño software.

Page 9: 8 Patrones de Diseño - Creacion.pdf

Nombre del patrón. ◦ Describe el problema de diseño, junto con sus soluciones y

consecuencias. ◦ Vocabulario de diseño.

Problema. ◦ Describe cuándo aplicar el patrón. ◦ Explica el problema y su contexto.

Solución. ◦ Elementos que forman el diseño, relaciones, responsabilidades. ◦ No un diseño concreto, sino una plantilla que puede aplicarse en

muchas situaciones distintas. Consecuencias. ◦ Resultados, ventajas e inconvenientes de aplicar el patrón. ◦ ej.: relación entre eficiencia en espacio y tiempo; cuestiones de

implementación etc.

Page 10: 8 Patrones de Diseño - Creacion.pdf
Page 11: 8 Patrones de Diseño - Creacion.pdf

Separar los objetos con los datos ( modelo), sus visualizaciones (vistas) y el modo en que la interfaz reacciona ante la entrada al usuario (controlador).

Separar estos componentes, para aumentar la flexibilidad y reutilización.

Desacoplar vistas de modelos, mediante un protocolo de subscripción/notificación.

Cada vez que cambian los datos del modelo, avisar a las vistas que dependen de él. Estas se actualizan.

Page 12: 8 Patrones de Diseño - Creacion.pdf
Page 13: 8 Patrones de Diseño - Creacion.pdf
Page 14: 8 Patrones de Diseño - Creacion.pdf

Asignación de Responsabilidades – Larman GRASP

Creación – Gamma y Grand Fcatory Method, Abstract Factory, Builder, Prototype, Singleton, etc.

Estructurales – Gamma y Grand Adapter, Iterator, Bridge, facade, Flyweight, Virtual Proxy, etc.

Arquitecturales – Bushman Distribuidos, Interactivos, adaptables, etc

Page 15: 8 Patrones de Diseño - Creacion.pdf

Larman 10 patrones Gamma 23 patrones Bushman 17 patrones Grand 41 patrones

Page 16: 8 Patrones de Diseño - Creacion.pdf

PATRONES

GOF

GRASP

Experto

Creador

Bajo acoplamiento

Alta Cohesión

Controlador

Creacionales

Estructurales

Comportamiento

Instancia única, método de fabricación ,

Fabrica, constructor, prototipo .

Adaptador, puente, objeto Compuesto, envoltorio, fachada,

Peso ligero, proxy

Cadena responsabilidad, orden, Intérprete, iterador, mediador, recuerdo,

Observador, estado, estrategia, método plantilla, visitante

Page 17: 8 Patrones de Diseño - Creacion.pdf

Son para la asignación de responsabilidades, "General Responsibility Assignment Software Patterns". Son una serie de "buenas prácticas" de aplicación recomendable en el diseño de software. Patrones GRASP:

Experto, Creador, Bajo Acoplamiento, Alta Cohesión, Controlador

Page 18: 8 Patrones de Diseño - Creacion.pdf

En que consiste la responsabilidad? Obligaciones o contratos de una clase

Dos clases de responsabilidades

Conocer: información del objeto Hacer: acciones con otros objetos

Page 19: 8 Patrones de Diseño - Creacion.pdf

Es la abreviación del grupo Gang of Four, compuesto por Erich Gamma, Richard Helm, Ralph Jhonson y John Vlisides, quienes en su publicación “Design Patterns” describen 23 patrones de diseño comúnmente utilizados y de gran aplicabilidad en problemas de diseño usando modelamiento UML.

Page 20: 8 Patrones de Diseño - Creacion.pdf

Documentar la experiencia en el diseño, en forma de un catálogo de patrones.

Categorías de patrones: ◦ De creación: implica el proceso de instanciar

objetos. ◦ Estructurales: composición de objetos. ◦ De comportamiento: cómo se comunican los

objetos, cooperan y distribuyen las responsabilidades para lograr sus objetivos.

Page 21: 8 Patrones de Diseño - Creacion.pdf
Page 22: 8 Patrones de Diseño - Creacion.pdf

Los patrones UML son colaboraciones parametrizadas, esto es, son un grupo de clases/objetos colaborando entre sí que se pueden abstraer de un conjunto de escenarios general. Antes de comenzar a usar un patrón primero debe ser creado como un diagrama estándar de UML o existir como tal en algún repositorio

Page 23: 8 Patrones de Diseño - Creacion.pdf

Permite a una clase usar datos y servicios provistos por otras clases independientes proveyendo un acceso uniforme.

Page 24: 8 Patrones de Diseño - Creacion.pdf
Page 25: 8 Patrones de Diseño - Creacion.pdf
Page 26: 8 Patrones de Diseño - Creacion.pdf
Page 27: 8 Patrones de Diseño - Creacion.pdf

1. Instancia única (Singleton) : Asegure que una clase sólo tiene una instancia , y proporcionarle un punto global de acceso a dicha instancia

2. Método fabricación(Factory Method) : Define un interfaz para crear un objeto, pero dejar a subclases decidir sus instancias . El Método De la fábrica deja a una clase la creación de ejemplares o copias a subclases.

3. Fabrica abstracta (Abstract Factory) : Proporciona un interfaz para crear las familias de objetos relacionados o dependientes sin especificar sus clases concretas.

4. Constructor (Builder): Separa la construcción de un objeto complejo de su representación , de modo que el mismo proceso de construcción pueda crear representaciones diferentes.

5. Prototipo(Prototype) : Crea nuevos objetos creándolos de una instancia ya existente.

Page 28: 8 Patrones de Diseño - Creacion.pdf

6. Adaptador (adapter) :Convierte la interfaz de una clase en otra interfaz que otra clase puede usar . debido a que la interfaces es incompatibles con dicha clase

7. Puente ( bridge) :Desacopla una abstracción de su implementación de modo que los dos puedan variar por separado.

8. Peso ligero (Flyweight ) :Reduce la redundancia cuando gran cantidad de objetos poseen idéntica información.

9. Fachada (Facade) : Proporciona un interfaz unificada a un juego de interfaces en un subsistema. La fachada define un interfaz de nivel más alto que hace el subsistema fácil de usar.

10. Envoltorio (Decorator) :Adjunta responsabilidades adicionales a un objeto dinámicamente. Los decoradores proporcionan una alternativa flexible a la subclasificación para ampliar la funcionalidad.

11. Objeto compuesto (Composite) :El objeto compuesto permite tratar a jerarquías de objetos en individuales y composiciones de objetos uniformemente como si se tratase de objetos simples

12. Proxy : Mantiene un representante de un objeto

Page 29: 8 Patrones de Diseño - Creacion.pdf

13. Cadena responsabilidad (Chain of Responsibility ): Encadena los objetos de encubrimiento y pasa la petición a lo largo de la cadena hasta que un objeto la maneja. Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada.

14. Orden (Command) : Encapsula una operación en un objeto, permitiendo ejecutar dicha operación sin necesidad de conocer el contenido de la misma.

15. Intérprete (Interpreter) :Considerando un lenguaje , define un representación para su gramática con un intérprete que usa la representación para interpretar sentencias en el mismo lenguaje.

16. Iterador (Iterator) :Proporciona un modo de tener acceso a los elementos de un objeto agregado secuencialmente sin exponer su representación subyacente.

17. Mediador (Mediator) :Define un objeto que coordine la comunicación entre objetos de distintas clases, pero que funcionan como un conjunto.

18. Recuerdo (Memento) : Sin violar encapsulación, captura y externaliza el estado interno de un objeto de modo que el objeto pueda ser restaurado a este estado más tarde.

Page 30: 8 Patrones de Diseño - Creacion.pdf

19. Observador (Observer) : Define de uno a varios la dependencia entre objetos de modo que cuando se produce un cambio de estado del objeto, todos sus dependientes sean notificados y puestos al día automáticamente.

20. Estado (State) :Permite que un objeto modifique su comportamiento cada vez que cambie su estado interno

21. estrategia (Strategy) : Define una familia de algoritmos (métodos), encapsula cada uno, y los hace permutables. La estrategia deja al algoritmo (método) variar por separado de los clientes (objetos) que lo usan o invocan .

22. método plantilla ( template method) :Define el esqueleto de un algoritmo en una operación, aplazando algunos pasos a subclases. El Método de Plantilla deja a subclases redefinir los ciertos pasos de un algoritmo sin cambiar la estructura del algoritmo.

23. Visitante (Visitor) :Permite definir nuevas operaciones sobre una jerarquía de clases sin modificar las clases sobre las que opera.

Page 31: 8 Patrones de Diseño - Creacion.pdf

Singleton Factory Method

Abstract Factory Builder

Prototype

Page 32: 8 Patrones de Diseño - Creacion.pdf

Abstraen el proceso de creación de instancias.

Ayudan a hacer a un sistema independiente de cómo se crean, se componen y se representan sus objetos.

Un patrón de creación de clases usa la herencia para cambiar la clase de la instancia crear.

Un patrón de creación de objetos delega la creación de la instancia en otro objeto.

Page 33: 8 Patrones de Diseño - Creacion.pdf

Objetivo: ◦ Garantiza que una clase sólo tenga una instancia, y

proporciona un punto de acceso global a ella Nombres: ◦ Único

Ejemplo: ◦ Una única cola de impresión para múltiples

impresoras

Page 34: 8 Patrones de Diseño - Creacion.pdf
Page 35: 8 Patrones de Diseño - Creacion.pdf

Cuando deba haber una única instancia de una clase

Page 36: 8 Patrones de Diseño - Creacion.pdf

Acceso controlado a la única instancia Espacio de nombre reducido Más flexible que las operaciones de clase

Page 37: 8 Patrones de Diseño - Creacion.pdf
Page 38: 8 Patrones de Diseño - Creacion.pdf
Page 39: 8 Patrones de Diseño - Creacion.pdf
Page 40: 8 Patrones de Diseño - Creacion.pdf

Objetivo: ◦ Define una interfaz para crear un objeto, pero deja

que sean las subclases quienes decidan qué clase instanciar

Nombres: ◦ Virtual Constructor, Método de Fabricación

Ejemplo: ◦ Conexiones múltiples

Page 41: 8 Patrones de Diseño - Creacion.pdf

Una clase no puede prever la clase de objetos que debe crear

Una clase quiere que sean sus subclases quienes especifiquen los objetos que ésta crea

Las clases delegan la responsabilidad en una de entre varias clases auxiliares

Page 42: 8 Patrones de Diseño - Creacion.pdf

Creador

MetodoDeFabricacion() UnaOperacion()

ProductoConcretoA CreadorConcreto

MetodoDeFabricacion()

<<creates>>

... producto = MetodoDeFabricacion() ...

return new ProductoConcreto

<<Abstract>> Producto

ProductoConcretoB

Page 43: 8 Patrones de Diseño - Creacion.pdf

Contabilidad

MetodoDeFabricacion() UnaOperacion()

SqlConexion Fabrica

creaConexion()

<<creates>>

... miConexion= miFab.creaConexion() ...

return new OracleConexion

<<Abstract>> Conexion

OracleConexion

Page 44: 8 Patrones de Diseño - Creacion.pdf

Conexion conx = new OracleConexion() Conexion conx = new SQLConexion() Conexion conx = new MySqlConexion() Conexion conx = new PostgreSqlConexion()

Page 45: 8 Patrones de Diseño - Creacion.pdf

Fabrica

Oracle Sql

Server

MySql PostgreSql

Conexion

Page 46: 8 Patrones de Diseño - Creacion.pdf

OracleConexion

<<Abstract>> Conexion

SqlConexion

Page 47: 8 Patrones de Diseño - Creacion.pdf
Page 48: 8 Patrones de Diseño - Creacion.pdf
Page 49: 8 Patrones de Diseño - Creacion.pdf
Page 50: 8 Patrones de Diseño - Creacion.pdf

Fabrica

creaConexion()

<<creates>>

OracleConexion

Page 51: 8 Patrones de Diseño - Creacion.pdf
Page 52: 8 Patrones de Diseño - Creacion.pdf
Page 53: 8 Patrones de Diseño - Creacion.pdf

Objetivo: ◦ Proporciona una Interfaz para crear familias de objetos

relacionados sin especificar clases concretas Nombres: ◦ Kit, Fábrica Abstracta

Ejemplo: ◦ Toolkit de interfaces de usuario en Windows, Linux, Mac

Page 54: 8 Patrones de Diseño - Creacion.pdf

IFabricaAbstracta

CrearProductoA() CrearProductoB()

<<Interface>>

Cliente

FabricaConcreta1

CrearProductoA() CrearProductoB()

IProductoA

FabricaConcreta2

CrearProductoA() CrearProductoB()

ProductoA1 ProductoA2

IProductoB

ProductoB1 ProductoB2

<<creates>>

<<creates>>

<<creates>>

Page 55: 8 Patrones de Diseño - Creacion.pdf
Page 56: 8 Patrones de Diseño - Creacion.pdf

FabricaAbstracta

creaConexion() : Conexion

<<Interface>>

Pagos

Conexion

FabricaHeredada

CrearConexion()

SqlConexion OracleConexion <<creates>>

Page 57: 8 Patrones de Diseño - Creacion.pdf

FabricaAbstracta

creaConexion() : Conexion

<<Interface>>

FabricaHeredada

CrearConexion()

Page 58: 8 Patrones de Diseño - Creacion.pdf
Page 59: 8 Patrones de Diseño - Creacion.pdf

Conexion

SqlConexion OracleConexion

Page 60: 8 Patrones de Diseño - Creacion.pdf
Page 61: 8 Patrones de Diseño - Creacion.pdf
Page 62: 8 Patrones de Diseño - Creacion.pdf
Page 63: 8 Patrones de Diseño - Creacion.pdf

Objetivo: ◦ Permitir que el código cliente controle el proceso de

construcción de los objetos. ◦ Separar la construcción de un objeto de su

representación, de manera que el mismo procesos de construcción pueda crear diferentes representaciones

Nombres: ◦ Constructor

Ejemplo: ◦ Robot constructor de hamburguesas

Page 64: 8 Patrones de Diseño - Creacion.pdf

El algoritmo para crear un objeto complejo debiera ser independiente de las partes de que se compone dicho objeto y de cómo se ensamblan

El proceso de construcción debe permitir diferentes representaciones del objeto que está siendo construido

Page 65: 8 Patrones de Diseño - Creacion.pdf

Permite variar la representación interna de un producto

Aísla el código de construcción y representación

Proporciona un control más fino sobre el proceso de construcción

Page 66: 8 Patrones de Diseño - Creacion.pdf

Producto ConstructorConcreto

ConstruirParte() ObtenerResultado()

Cliente (from Logical View)

Director

Construir()

-constructor

<<creates>>

para todos los objetos { constructor->ConstruirParte() }

Constructor

ConstruirParte()

Page 67: 8 Patrones de Diseño - Creacion.pdf

RobotHamburguesa

trabajar() cargaAcciones()

Cliente (from Logical View)

Builder

Construir()

-constructor

<<creates>>

para todos los objetos { robot->cargaAcciones () }

<<interface>> Robot

trabajar() cargaAcciones()

RobotHotDog

trabajar() cargaAcciones()

ProductoHam ProductoHot

Page 68: 8 Patrones de Diseño - Creacion.pdf
Page 69: 8 Patrones de Diseño - Creacion.pdf
Page 70: 8 Patrones de Diseño - Creacion.pdf

RobotHamburguesa

trabajar() cargaAcciones()

<<interface>> Robot

trabajar() cargaAcciones()

RobotHotDog

trabajar() cargaAcciones()

Page 71: 8 Patrones de Diseño - Creacion.pdf

RobotHamburguesa

trabajar() cargaAcciones()

Page 72: 8 Patrones de Diseño - Creacion.pdf
Page 73: 8 Patrones de Diseño - Creacion.pdf

RobotHotDog

cargaAcciones()

Page 74: 8 Patrones de Diseño - Creacion.pdf
Page 75: 8 Patrones de Diseño - Creacion.pdf

Builder

Construir()

-constructor <<interface>>

Robot

trabajar() cargaAcciones()

Page 76: 8 Patrones de Diseño - Creacion.pdf
Page 77: 8 Patrones de Diseño - Creacion.pdf
Page 78: 8 Patrones de Diseño - Creacion.pdf
Page 79: 8 Patrones de Diseño - Creacion.pdf

Objetivo: ◦ Crear nuevos objetos copiando una instancia

prototípica Nombres: ◦ Prototipo

Ejemplo: ◦ Editor de partituras musicales

Page 80: 8 Patrones de Diseño - Creacion.pdf

Cuando las clases a instanciar sean especificadas en tiempo de ejecución

Para evitar jerarquías de clases de fábricas con jerarquía de clases de productos

Cuando las instancias de clases puedan tener un estado de entre un conjunto reducido

Page 81: 8 Patrones de Diseño - Creacion.pdf

Añadir y eliminar productos en tiempo de ejecución

Especificar nuevos objetos modificando valores

Especificar nuevos objetos variando la estructura

Reduce la herencia Configurar dinámicamente una aplicación con

clases

Page 82: 8 Patrones de Diseño - Creacion.pdf

Prototype

Clonar() : Prototype

Cliente prototipo

1 1

PrototipoConcreto1

Clonar() : Prototype

p = prototipo->Clonar() PrototipoConcreto2

Clonar() : Prototype

devuelven una copia a sí mismos

devuelven una copia a sí mismos

Page 83: 8 Patrones de Diseño - Creacion.pdf

Figura

Clonar() : Figura

PruebaFiguras prototipo

1 1

Circulo

Clonar() : Figura

p = circulo.Clonar() Cuadrado

Clonar() : Figura

devuelven una copia a sí mismos

devuelven una copia a sí mismos

Page 84: 8 Patrones de Diseño - Creacion.pdf
Page 85: 8 Patrones de Diseño - Creacion.pdf
Page 86: 8 Patrones de Diseño - Creacion.pdf
Page 87: 8 Patrones de Diseño - Creacion.pdf
Page 88: 8 Patrones de Diseño - Creacion.pdf
Page 89: 8 Patrones de Diseño - Creacion.pdf
Page 90: 8 Patrones de Diseño - Creacion.pdf
Page 91: 8 Patrones de Diseño - Creacion.pdf