definir qué es un patrón de diseño. cuándo utilizarlos. clasificación de patrones. patrones mas...

57

Upload: cruz-tomey

Post on 03-Jan-2015

10 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos
Page 2: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos
Page 3: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Page 4: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

El diseño es una actividad₋ El cómo frente al qué₋ Hacerlo correcto frente a hacer lo correcto₋ Asignar responsabilidades a las clases

Page 5: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Algunas propiedades no funcionales₋ Reutilización₋ Facilidad de modificación₋ Facilidad de comprensión₋ Robustez₋ Eficiencia₋ Facilidad de uso

Page 6: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Definición:₋ Patrón: Modelo que sirve de muestra para

sacar otra cosa igual (RAE).₋ Patrón de diseño: Una solución general a un

problema general que puede adaptarse a un problema concreto.

Page 7: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Christopher Alexander - 1979 - The Timeless Way of Building.

Definió qué es un patrón de diseño Pattern Language. 1987, Ward Cunningham y Kent Beck Design Patterns - GoF

Page 8: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos
Page 9: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Según la escala o nivel de abstracción:₋ Patrones de arquitectura₋ Patrones de diseño₋ Patrones de Análisis₋ Patrones de bajo nivel(idiomas)

Page 10: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

La plantilla mas común es la utilizada por el GoF y consta de los siguientes apartados:₋ Nombre de patrón₋ Clasificación del patrón₋ Intención₋ Motivación₋ Aplicabilidad₋ Estructura₋ Participantes₋ Colaboraciones₋ Consecuencias₋ Implementación₋ Código de ejemplo₋ Patrones relacionados

Page 11: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Clasificación de patrones del libro GoF:₋ Creacionales₋ Estructurales₋ Comportamiento

Page 12: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Patrones creacionales:₋ Abstract Factory – (Fabrica abstracta)₋ Builder – (Constructor virtual)₋ Factory Method – (Método de fabricación)₋ Prototype – (Prototipo)₋ Singleton – (Instancia Única)

Page 13: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Patrones estructurales:₋ Adapter – (Adaptador)₋ Bridge – (Puente)₋ Composite – (Objeto compuesto)₋ Decorator – (Envoltorio)₋ Facade – (Fachada)₋ Flyweight – (Pero ligero)₋ Proxy

Page 14: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Patrones de comportamiento:₋ Chain of Responsability – (Cadena de

responsabilidad)₋ Command – (Orden)₋ Interpreter – (Interprete)₋ Iterator – (Iterador)₋ Mediator – (Mediador)

Page 15: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Patrones de comportamiento:₋ Chain of Responsability – (Cadena de

responsabilidad)₋ Command – (Orden)₋ Interpreter – (Interprete)₋ Iterator – (Iterador)₋ Mediator – (Mediador)₋ Memento – (Recuerdo)₋ Observer – (Observador)₋ State – (Estado)₋ Strategy – (Estrategia)₋ Template Method – (Método plantilla)₋ Visitor – (Visitante)

Page 16: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos
Page 17: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

En las próximas transparencias mostraremos los patrones más importantes que los alumnos deben saber, para desarrollar la mayor cantidad de problemas.

Estos son:₋ Strategy₋ State₋ Singleton₋ Composite₋ Template Method₋ Proxy₋ Observer₋ Iterator₋ Facade

Page 18: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Intención:₋ Definir un grupo de clases que representan un

conjunto de posibles comportamientos. Estos comportamientos pueden ser fácilmente intercambiados en una aplicación modificando la funcionalidad en cualquier instante.

Motivación:₋ Estructurar una familia de algoritmos de modo

que sus clientes puedan intercambiarlos en tiempo de ejecución.

Page 19: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos
Page 20: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Participantes:₋ Istrategy: declara una interfaz común para todos

las variantes de un algoritmo₋ StrategyX: implementa una variable del

algoritmo₋ StrategyClient: es el responsable de crear y

mantener una referencia a una estrategia concreta.

Colaboraciones:₋ El cliente de la estrategia decide la estrategia a

crear.

Page 21: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Intención:₋ Cambiar fácilmente el comportamiento de un

objeto en tiempo de ejecución.

Motivación:₋ Cambiar el comportamiento dependiendo del

estado.₋ Cuando queremos que un objeto cambie su

comportamiento, según cambia su estado, se presenta el problema de la complejidad de código.

Page 22: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos
Page 23: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Participantes:₋ Context: Define la Interfaz y mantiene una

instancia con el estado actual.₋ State: Define una interfaz para el

comportamiento asociado a un determinado estado del Contexto.

₋ ConcreteState: Cada subclase implementa el comportamiento asociado con un estado del contexto.

Page 24: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Intención:₋ Garantizar que una clase sólo tenga una

instancia y proporcionar un punto de acceso global a ella.

Motivación:₋ Es importante que algunas clases tengan

exactamente una instancia. Ejemplo: aunque puede haber muchas impresoras en un sistema, sólo debería haber una cola de impresión.

₋ Una variable global hace accesible a un objeto, pero no nos previene de crear múltiples instancias de un objeto.

Page 25: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos
Page 26: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Participantes:₋ Singleton: Define una operación getInstance

que permite que los clientes, accedan a su única instancia. GetInstance() es una operación de clase (es decir en java, tiene el modificador static). Es el responsable de crear su única instancia.

Page 27: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Consecuencias:₋ Acceso controlado a su única instancia. Puesto

que la misma encapsula su única instancia, puede tener un control estricto sobre cómo y cuándo acceden a ella los clientes.

₋ El patrón Singleton es una mejora sobre las variables globales. Ya que evita contaminar el espacio de nombres con instancias de clases.

₋ El patrón hace fácil cambiar de opinión y poder crear más de una instancia de la clase.

Page 28: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Intención:₋ Componer objetos en jerarquías parte-todo y

permitir a los clientes tratar objetos simples y compuestos de modo uniforme.

Motivación:₋ Necesitamos representar un conjunto de

elementos de una interfaz gráfica de usuario.₋ Algunos de estos elementos son simples, mientras

que otros están formados por varios elementos más simples. El comportamiento y/o la información que proporciona un elemento complejo está determinada por los elementos que lo componen.

Page 29: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos
Page 30: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Participantes:₋ Client: Manipula objetos a través de la interfaz

proporcionada por Component.

₋ Component: Declara la interfaz para los objetos de la composición, es la interfaz de acceso y manipulación de los componentes hijo e implementa algunos comportamientos por defecto.

Page 31: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Participantes:₋ Composite: Define el comportamiento de los

componentes compuestos, almacena a los hijos e implementa las operaciones de manejo de los componentes.

₋ Leaf: Definen comportamientos para objetos primitivos del compuesto.

Page 32: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Colaboración:₋ Los clientes utilizan la interfaz de la clase

component para interactuar con los elementos de la estructura compuesta. Si el recipiente es una hora, se trata correctamente, sino se redirige la petición a sus hijos realizando operaciones adicionales

Page 33: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Consecuencias:₋ Define jerarquías de clases formadas por

objetos primitivos y compuestos.₋ Simplifica al cliente, ya que puede tratar de

forma uniforme estructuras compuestas.₋ La desventaja de facilitar añadir nuevos

componentes es que hace difícil restringir los componentes de un compuesto.

Page 34: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Intención:₋ Proporcionar un método que permite que las

subclases redefinan parte del método sin reescribirlo.

Motivación:₋ Cuando se construyen jerarquías de clases

complejas para una aplicación, a menudo se duplican distintas partes de código. esa situación no es deseable, porque la intención es reutilizar tanto código como sea posible

Page 35: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos
Page 36: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Participantes:₋ Client: Manipula objetos a través de la interfaz

proporcionada por Component.₋ AbstractTemplate: Implementa un método

plantilla que define el esqueleto de un algoritmo y define métodos abstractos que implementan las subclases concretas.

Page 37: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Participantes:₋ ConcreteTemplate: Implementa los métodos

abstractos para realizar los pasos del algoritmo que son específicos de la subclase..

Colaboración:₋ Las clases concretas confían en que la clase

abstracta implemente la parte fija del algoritmo.

Page 38: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Consecuencias:₋ Favorece la reutilización del código. Muy útiles

para construir bibliotecas, pues ayuda a factorizar el comportamiento común de las clases.

₋ Lleva a una estructura de control invertido (Principio de Hollywood): la superclase base invoca los métodos de las subclases.

Page 39: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Intención:₋ Proporcionar un representante de otro objeto,

por distintas razones como pueden ser el acceso, la velocidad o la seguridad, entre otras.

Motivación:₋ Retrasar el coste de crear e inicializar un

objeto hasta que es realmente necesario. Por ejemplo, no abrir las imágenes de un documento hasta que no son visibles.

Page 40: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos
Page 41: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Participantes:₋ Subject: Define la interfaz común para el

RealSubject y el proxy, de modo que pueda usarse un Proxy en cualquier sitio en el que se espere un RealSubject.

₋ RealSubject: Define el objeto real representado.₋ Proxy: Mantiene una referencia que permite al

Proxy acceder al objeto real, Proporciona una interfaz idéntica a la del sujeto, de manera que un Proxy pueda ser sustituido por el sujeto real. Controla el acceso al sujeto real, y puede ser responsable de su creación y borrado.

Page 42: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Consecuencias:₋ El patrón Proxy introduce un nivel de

indirección al acceso a un objeto. Esta indirección adicional tiene muchos posibles usos, dependiendo del tipo de proxy.

Intención:₋ Proporcionar a los componentes una forma flexible de

enviar mensajes de difusión a los receptores interesados.

Page 43: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Motivación:₋ Muchas veces un efecto lateral de partir un sistema en una

colección de objetos relacionados es que necesitamos mantener la consistencia entre objetos relacionados.

Page 44: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos
Page 45: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Participantes:₋ Subject: Conoce a sus observadores,

Proporciona una Interfaz para que se suscriban los objetos Observer.

₋ Observer: Define una interfaz para actualizar los objetos que deben ser notificados de cambios en el objeto Subject.

₋ ConcreteSubject: Guarda el estado de interés para los objetos ConcreteObserver, envía una notificación a sus observadores cuando cambia su estado.

Page 46: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Participantes:₋ ConcreteObserver: Mantiene una referencia

a un objeto ConcreteSubject, Guarda el estado que debería permanecer sincronizado con el objeto observado, Implementa la interfaz Observer para mantener su estado consistente con el objeto observado.

Page 47: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Colaboraciones₋ El objeto observado notifica a sus

observadores cada vez que ocurre un cambio.₋ Después de ser informado de un cambio en el

objeto observado, cada observador concreto puede pedirle la información que necesita para reconciliar su estado con el de aquél.

Page 48: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Intención:₋ Proporcionar una forma coherente de acceder

secuencialmente a los elementos de una colección, independientemente del tipo de colección subyacente.

Motivación:₋ Un objeto agregado, tal como una lista, debería

proveer un modo de brindar acceso a sus elementos sin exponer su estructura interna. Más aún, quizás se desea recorrer la lista en diferentes formas, dependiendo de lo que Ud. quiera realizar.

Page 49: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos
Page 50: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Participantes:₋ Iterador: Define una interfaz para recorrer los

agregados.₋ IteradorConcreto: implementa la interfaz

iterador.₋ Agregado: Define la interfaz para crear un

objeto iterador.₋ AgregadoConcreto: Implementa la interfaz

de creación de un iterador para devolver un iterador concreto.

Page 51: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Colaboraciones:₋ Un iteradorConcreto almacena la posición del

objetoactual en el agregado de modo que sabe cual es el objeto siguiente en el recorrido.

Page 52: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Intención:₋ Proporcionar una interfaz simplificada para un grupo de

subsistemas o un sistema complejo.

Motivación:₋ Simplificar el acceso a un conjunto de clases

proporcionando una única clase que todos utilizan para comunicarse con dicho conjunto de clases.

₋ Reducir la complejidad y minimizar dependencias

Page 53: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos
Page 54: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Participantes:

₋ Facade: Conoce cuales clases del subsistema son responsables de una petición y delega las peticiones de los clientes en los objetos del subsistema.

₋ Clases del subsistema: Implementan la funcionalidad del subsistema, manejan el trabajo asignado por el objeto Facade y además de esto no tienen ningún conocimiento del Facade.

Page 55: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Consecuencias:₋ Oculta a los clientes el comportamiento del

subsistema, haciendo que este sea mas fácil de usar.

₋ Promueve un débil acoplamiento entre subsistemas

Page 56: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

Patrones de diseño. Clasificación de patrones. Historia Lista de Patrones Patrones más importantes. Ejercicios

Page 57: Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos

GoF – Gang of Four