La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Definir qué es un patrón de diseño. Cuándo utilizarlos. Clasificación de patrones. Patrones mas importantes. Ejemplos."— Transcripción de la presentación:

1

2

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

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

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

6 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.

7 Christopher Alexander 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

8

9 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)

10 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

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

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

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

14 Patrones de comportamiento: Chain of Responsability – (Cadena de responsabilidad) Command – (Orden) Interpreter – (Interprete) Iterator – (Iterador) Mediator – (Mediador)

15 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)

16

17 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

18 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.

19

20 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.

21 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.

22

23 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.

24 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.

25

26 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.

27 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.

28 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.

29

30 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.

31 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.

32 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

33 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.

34 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

35

36 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.

37 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.

38 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.

39 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.

40

41 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.

42 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.

43 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.

44

45 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.

46 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.

47 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.

48 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.

49

50 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.

51 Colaboraciones: Un iteradorConcreto almacena la posición del objetoactual en el agregado de modo que sabe cual es el objeto siguiente en el recorrido.

52 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

53

54 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.

55 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

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

57 GoF – Gang of Four


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

Presentaciones similares


Anuncios Google