Patrones de Diseo Metodologas de Desarrollo Software Javier

  • Slides: 118
Download presentation
Patrones de Diseño Metodologías de Desarrollo Software Javier Sánchez Pérez

Patrones de Diseño Metodologías de Desarrollo Software Javier Sánchez Pérez

Contenido Introducción p Patrones de Creación p Patrones Estructurales p Patrones de Comportamiento p

Contenido Introducción p Patrones de Creación p Patrones Estructurales p Patrones de Comportamiento p

Introducción Patrón de diseño: Descripciones de clases y objetos relacionados que están particularizados para

Introducción Patrón de diseño: Descripciones de clases y objetos relacionados que están particularizados para resolver un problema de diseño general p Experiencia en el diseño p Hacen un uso eficiente de la tecnología OO p Estructuran la arquitectura del producto p Promueven la reutilización del diseño p

Introducción Herencia de clase vs. Herencia de interfaces p Programar para interfaces, no para

Introducción Herencia de clase vs. Herencia de interfaces p Programar para interfaces, no para implementación p Herencia frente a composición p Herencia frente a tipos parametrizados p

Creación Estructurales Comportamiento Clase Factory Method Objeto Abstract Factory Builder Prototype Singleton Adapter Interpreter

Creación Estructurales Comportamiento Clase Factory Method Objeto Abstract Factory Builder Prototype Singleton Adapter Interpreter Template Method Adapter Bridge Composite Decorator Facade Flyweight Proxy Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor

Patrones de Creación Abstract Factory Builder Factory Method Prototype Singleton

Patrones de Creación Abstract Factory Builder Factory Method Prototype Singleton

Abstract Factory p Objetivo: n p Nombres: n p Interfaz para crear familias de

Abstract Factory p Objetivo: n p Nombres: n p Interfaz para crear familias de objetos relacionados sin especificar clases concretas Kit, Fábrica Abstracta Ejemplo: n Toolkit de interfaces de usuario en Windows, Linux, Mac

Abstract Factory - Ejemplo

Abstract Factory - Ejemplo

Abstract Factory - Estructura

Abstract Factory - Estructura

Abstract Factory - Aplicabilidad Sistema independiente de cómo se crean, componen y representan sus

Abstract Factory - Aplicabilidad Sistema independiente de cómo se crean, componen y representan sus productos p Sistema configurado con familias de productos p La familia de productos se diseña para ser utilizado conjuntamente p Conjunto de productos de los que sólo se conoce su interfaz y no su implementación p

Abstract Factory - Consecuencias Aísla las clases concretas p Facilita intercambio de familias de

Abstract Factory - Consecuencias Aísla las clases concretas p Facilita intercambio de familias de productos p Promueve la consistencia entre productos p Es difícil dar cabida a nuevos tipos de productos p

Builder p Objetivo: n p Nombres: n p Separa la construcción de un objeto

Builder p Objetivo: n p Nombres: n p Separa la construcción de un objeto complejo de su representación de forma que se puedan crear diferentes representaciones Constructor Ejemplo: n Convertir un fichero RTF a distintos tipos de formatos de texto

Builder - Ejemplo

Builder - Ejemplo

Builder - Estructura

Builder - Estructura

Builder - Aplicabilidad El algoritmo para crear un objeto complejo debiera ser independiente de

Builder - Aplicabilidad 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 p El proceso de construcción debe permitir diferentes representaciones del objeto que está siendo construido p

Builder - Consecuencias Permite variar la representación interna de un producto p Aísla el

Builder - Consecuencias Permite variar la representación interna de un producto p Aísla el código de construcción y representación p Proporciona un control más fino sobre el proceso de construcción p

Factory Method p Objetivo: n p Nombres: n p Define una interfaz para crear

Factory Method p Objetivo: n p Nombres: n p Define una interfaz para crear un objeto, pero deja que sean las subclases quienes decidan qué clase instanciar Virtual Constructor, Método de Fabricación Ejemplo: n Frameworks de aplicaciones

Factory Method - Ejemplo

Factory Method - Ejemplo

Factory Method - Estructura

Factory Method - Estructura

Factory Method - Aplicabilidad Una clase no puede prever la clase de objetos que

Factory Method - Aplicabilidad Una clase no puede prever la clase de objetos que debe crear p Una clase quiere que sean sus subclases quienes especifiquen los objetos que ésta crea p Las clases delegan la responsabilidad en una de entre varias clases auxiliares p

Factory Method - Consecuencias Proporciona enganches para las subclases p Conecta jerarquías de clases

Factory Method - Consecuencias Proporciona enganches para las subclases p Conecta jerarquías de clases paralelas p

Prototype p Objetivo: n p Nombres: n p Crear nuevos objetos copiando una instancia

Prototype p Objetivo: n p Nombres: n p Crear nuevos objetos copiando una instancia prototípica Prototipo Ejemplo: n Editor de partituras musicales

Prototype - Ejemplo

Prototype - Ejemplo

Prototype - Estructura

Prototype - Estructura

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

Prototype - Aplicabilidad Cuando las clases a instanciar sean especificadas en tiempo de ejecución p Para evitar jerarquías de clases de fábricas con jerarquía de clases de productos p Cuando las instancias de clases puedan tener un estado de entre un conjunto reducido p

Prototype - Consecuencias Añadir y eliminar productos en tiempo de ejecución p Especificar nuevos

Prototype - Consecuencias Añadir y eliminar productos en tiempo de ejecución p Especificar nuevos objetos modificando valores p Especificar nuevos objetos variando la estructura p Reduce la herencia p Configurar dinámicamente una aplicación con clases p

Singleton p Objetivo: n p Nombres: n p Garantiza que una clase sólo tenga

Singleton p Objetivo: n p Nombres: n p Garantiza que una clase sólo tenga una instancia, y proporciona un punto de acceso global a ella Único Ejemplo: n Una única cola de impresión para múltiples impresoras

Singleton - Estructura

Singleton - Estructura

Singleton - Aplicabilidad p Cuando deba haber una única instancia de una clase

Singleton - Aplicabilidad p Cuando deba haber una única instancia de una clase

Singleton - Consecuencias Acceso controlado a la única instancia p Espacio de nombre reducido

Singleton - Consecuencias Acceso controlado a la única instancia p Espacio de nombre reducido p Permite un número variable de instancias p Más flexible que las operaciones de clase p

Patrones Estructurales Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy

Patrones Estructurales Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy

Adapter p Objetivo: n p Nombres: n p Convierte la interfaz de una clase

Adapter p Objetivo: n p Nombres: n p Convierte la interfaz de una clase en otra que es la que esperan los clientes Wrapper, Adaptador Ejemplo: n La pila a partir del vector

Adapter - Ejemplo

Adapter - Ejemplo

Adapter - Estructura Adaptador de clase Adaptador de objeto

Adapter - Estructura Adaptador de clase Adaptador de objeto

Adapter - Aplicabilidad Se quiere usar una clase existente y su interfaz no concuerda

Adapter - Aplicabilidad Se quiere usar una clase existente y su interfaz no concuerda con la que se necesita p Se quiere crear una clase reutilizable que coopere con clases no relacionadas p

Adapter - Consecuencias Un adaptador de clases no nos servirá cuando queramos adaptar una

Adapter - Consecuencias Un adaptador de clases no nos servirá cuando queramos adaptar una clase y sus subclases p Un adaptador de clases permite redefinir parte del comportamiento de Adaptable p Un adaptador de objetos permite que un mismo Adaptador funcione con muchos Adaptables p

Bridge p Objetivo: n p Nombres: n p Desacoplar una abstracción de su implementación

Bridge p Objetivo: n p Nombres: n p Desacoplar una abstracción de su implementación para que ambas varíen de forma independiente Handle/Body, Puente Ejemplo: n Herencia de ventanas en diferentes plataformas

Bridge - Ejemplo Bridge

Bridge - Ejemplo Bridge

Bridge - Estructura

Bridge - Estructura

Bridge - Aplicabilidad Evitar un enlace permanente entre una abstracción y su implementación p

Bridge - Aplicabilidad Evitar un enlace permanente entre una abstracción y su implementación p Los cambios en la implementación no deberían tener impacto en los clientes p Se quiere ocultar completamente a los clientes la implementación p Proliferación de clases p Se quiere compartir una implementación entre varios objetos p

Bridge - Consecuencias Desacopla la interfaz y la implementación p Mejora la extensibilidad p

Bridge - Consecuencias Desacopla la interfaz y la implementación p Mejora la extensibilidad p Oculta detalles de implementación a los clientes p

Composite p Objetivo: n p Nombres: n p Compone objetos en estructuras de árbol

Composite p Objetivo: n p Nombres: n p Compone objetos en estructuras de árbol parte -todo. Trata de forma uniforme elementos individuales y compuestos Compuesto Ejemplo: n Manejo de gráficos simples y compuestos

Composite - Ejemplo

Composite - Ejemplo

Composite - Estructura

Composite - Estructura

Composite - Aplicabilidad Se quiere representar jerarquías de objetos parte-todo p Se quiere que

Composite - Aplicabilidad Se quiere representar jerarquías de objetos parte-todo p Se quiere que los clientes obvien diferencias entre objetos compuestos e individuales p

Composite - Consecuencias Objetos primitivos y compuestos se tratan de igual forma p Simplifica

Composite - Consecuencias Objetos primitivos y compuestos se tratan de igual forma p Simplifica el cliente p Facilita añadir nuevos tipos de componentes p Puede hacer que un diseño sea demasiado general p

Decorator p Objetivo: n p Nombres: n p Asigna responsabilidades adicionales a un objeto

Decorator p Objetivo: n p Nombres: n p Asigna responsabilidades adicionales a un objeto dinámicamente. Alternativa flexible a la herencia para extender la funcionalidad Wrapper, Decorador Ejemplo: n Caja de texto con decoradores

Decorator - Ejemplo

Decorator - Ejemplo

Decorator - Estructura

Decorator - Estructura

Decorator - Aplicabilidad Añadir objetos individuales de forma dinámica y transparente p Retirar responsabilidades

Decorator - Aplicabilidad Añadir objetos individuales de forma dinámica y transparente p Retirar responsabilidades a los objetos p Cuando la extensión por herencia no es viable p

Decorator - Consecuencias Más flexibilidad que la herencia estática p Evita clases cargadas de

Decorator - Consecuencias Más flexibilidad que la herencia estática p Evita clases cargadas de funciones en la parte superior de la jerarquía p Un decorador y su componente no son idénticos p Muchos objetos pequeños p

Facade p Objetivo: n p Nombres: n p Proporciona una interfaz unificada para un

Facade p Objetivo: n p Nombres: n p Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema Fachada Ejemplo: n Compilador

Facade - Ejemplo

Facade - Ejemplo

Facade - Estructura

Facade - Estructura

Facade - Aplicabilidad Proporcionar una interfaz simple para un subsistema complejo p Hay muchas

Facade - Aplicabilidad Proporcionar una interfaz simple para un subsistema complejo p Hay muchas dependencias entre los clientes y las clases del subsistema p Queremos dividir en capa nuestros subsistemas p

Facade - Consecuencias Oculta a los clientes los componentes del subsistema haciendo que sea

Facade - Consecuencias Oculta a los clientes los componentes del subsistema haciendo que sea más fácil de utilizar p Promueve un débil acoplamiento entre el subsistema y los clientes p No impide que las aplicaciones usen las clases del subsistema p

Flyweight p Objetivo: n p Nombres: n p Hacer más eficiente los sistemas con

Flyweight p Objetivo: n p Nombres: n p Hacer más eficiente los sistemas con un gran número de objetos de grano fino Peso Ligero Ejemplo: n Procesador de texto

Flyweight - Ejemplo

Flyweight - Ejemplo

Flyweight - Estructura

Flyweight - Estructura

Flyweight - Aplicabilidad Una aplicación utiliza un gran número de objetos p Los costes

Flyweight - Aplicabilidad Una aplicación utiliza un gran número de objetos p Los costes de almacenamiento son elevados p La mayor parte del estado del objeto se puede hacer extrínseco p Muchos objetos se pueden representar pocos p La aplicación no depende de la identidad de los objetos p

Flyweight - Consecuencias Disminuyen requisitos de almacenamiento p Aumenta tiempo de ejecución con la

Flyweight - Consecuencias Disminuyen requisitos de almacenamiento p Aumenta tiempo de ejecución con la transferencia, búsqueda y cálculo del estado extrínseco p

Proxy p Objetivo: n p Nombres: n p Proporciona un representante o sustituto de

Proxy p Objetivo: n p Nombres: n p Proporciona un representante o sustituto de otro objeto para controlar el acceso a éste Surrogate, Apoderado Ejemplo: n Visualización de imágenes en documentos

Proxy - Ejemplo

Proxy - Ejemplo

Proxy - Estructura

Proxy - Estructura

Proxy - Aplicabilidad Proxy remoto: proporciona un representante local de un objeto remoto p

Proxy - Aplicabilidad Proxy remoto: proporciona un representante local de un objeto remoto p Proxy virtual: crea objetos costosos por encargo p Proxy de protección: controla el acceso seguro al objeto original p Referencia inteligente: sustituto de un simple puntero p

Proxy - Consecuencias Control previo a un objeto p Se pueden realizar operaciones sobre

Proxy - Consecuencias Control previo a un objeto p Se pueden realizar operaciones sobre el objeto de forma más eficiente/inteligente p Introduce un nivel de indirección al acceder a un objeto p

Patrones de Comportamiento Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy,

Patrones de Comportamiento Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor

Chain of Responsibility p Objetivo: n p Nombres: n p Evita acoplar el emisor

Chain of Responsibility p Objetivo: n p Nombres: n p Evita acoplar el emisor de una petición a un receptor permitiendo responder a varios objetos Cadena de responsabilidad Ejemplo: n Ayuda contextual en una aplicación

Chain of Responsibility - Ejemplo

Chain of Responsibility - Ejemplo

Chain of Responsibility - Estructura

Chain of Responsibility - Estructura

Chain of Responsibility - Aplicabilidad Hay más de un objeto que puede manejar la

Chain of Responsibility - Aplicabilidad Hay más de un objeto que puede manejar la petición p No se conoce a priori el manejar sino que debería determinarse automáticamente p Se quiere enviar la petición a un grupo de objetos sin especificar el receptor p El conjunto de objetos que pueden tratar la petición debería ser especificado dinámicamente p

Chain of Responsibility Consecuencias Reduce el acoplamiento p Añade flexibilidad para asignar responsabilidades a

Chain of Responsibility Consecuencias Reduce el acoplamiento p Añade flexibilidad para asignar responsabilidades a objetos p No se garantiza la recepción p

Command p Objetivo: n p Nombres: n p Encapsular una petición en un objeto

Command p Objetivo: n p Nombres: n p Encapsular una petición en un objeto para tener un control más fino sobre la petición Action, Transaction, Orden Ejemplo: n Menús de las aplicaciones

Command - Ejemplo

Command - Ejemplo

Command - Estructura

Command - Estructura

Command - Diagrama secuencia

Command - Diagrama secuencia

Command - Aplicabilidad Parametrizar objetos con una acción a realizar p Especificar, poner en

Command - Aplicabilidad Parametrizar objetos con una acción a realizar p Especificar, poner en cola y ejecutar peticiones en diferentes instantes de tiempo p Permitir deshacer p Permitir registrar los cambios p Estructurar un sistema alrededor de operaciones de alto nivel p

Command - Consecuencias Desacopla el objeto que invoca la operación de aquél que sabe

Command - Consecuencias Desacopla el objeto que invoca la operación de aquél que sabe cómo realizarla p Las órdenes son objetos de primera clase p Se pueden ensamblar órdenes en una orden compuesta (Orden Macro) p Es fácil añadir nuevas órdenes p

Interpreter p Objetivo: n p Nombres: n p Define la representación de la gramática

Interpreter p Objetivo: n p Nombres: n p Define la representación de la gramática de un lenguaje junto con un intérprete Intérprete Ejemplo: n n n Expresion : : = literal | alternativa | secuencia | repetición | ‘(‘ expresion ‘)’ Alternativa : : = expresion ‘|’ expresion Secuencia : : = expresion ‘&’ expresion Repetición : : = expresion ‘*’ Literal : : = ‘a’ | ‘b’ | ‘c’ |… { ‘a’ | ‘b’ | ‘c’ |…}*

Interpreter - Ejemplo

Interpreter - Ejemplo

Interpreter - Estructura

Interpreter - Estructura

Interpreter - Aplicabilidad Cuando hay un lenguaje que interpretar p La gramática es simple

Interpreter - Aplicabilidad Cuando hay un lenguaje que interpretar p La gramática es simple p La eficiencia no es una preocupación crítica p

Interpreter - Consecuencias Es fácil cambiar y ampliar la gramática p Resulta fácil implementarla

Interpreter - Consecuencias Es fácil cambiar y ampliar la gramática p Resulta fácil implementarla p Las gramáticas complejas son difíciles de mantener p Añadir nuevos modos de interpretar expresiones p

Iterator p Objetivo: n p Nombres: n p Acceder a los elementos de un

Iterator p Objetivo: n p Nombres: n p Acceder a los elementos de un agregado sin exponer su representación interna Cursor, Iterador Ejemplo: n n Listas e iteradores sobre listas STL

Iterator - Ejemplo

Iterator - Ejemplo

Iterator - Estructura

Iterator - Estructura

Iterator - Aplicabilidad Acceder a un objeto agregado sin exponer su representación interna p

Iterator - Aplicabilidad Acceder a un objeto agregado sin exponer su representación interna p Permitir varios recorridos sobre los agregados p Proporcionar una interfaz uniforme para recorrer diferentes estructuras agregadas p

Iterator - Consecuencias Permite variaciones en el recorrido de un agregado p Los iteradores

Iterator - Consecuencias Permite variaciones en el recorrido de un agregado p Los iteradores simplifican la interfaz del agregado p Se puede hacer más de un recorrido a la vez sobre el mismo agregado p

Mediator p Objetivo: n p Nombres: n p Define un objeto que encapsula cómo

Mediator p Objetivo: n p Nombres: n p Define un objeto que encapsula cómo interactúan una serie de objetos Mediados Ejemplo: n Elementos de interfaces de usuario sincronizados

Mediator - Ejemplo

Mediator - Ejemplo

Mediator - Ejemplo

Mediator - Ejemplo

Mediator - Estructura

Mediator - Estructura

Mediator - Aplicabilidad Un conjunto de objetos se comunican de forma bien definida, pero

Mediator - Aplicabilidad Un conjunto de objetos se comunican de forma bien definida, pero compleja p Difícil reutilizar un objeto ya que éste se refiere a muchos otros p Comportamiento distribuido entre varias clases debería poder ser adaptado p

Mediator - Consecuencias Reduce la herencia p Desacopla a los “Colegas” p Simplifica los

Mediator - Consecuencias Reduce la herencia p Desacopla a los “Colegas” p Simplifica los protocolos de los objetos p Abstrae cómo cooperan los objetos p Centraliza el control p

Memento p Objetivo: n p Nombres: n p Representa y externaliza el estado interno

Memento p Objetivo: n p Nombres: n p Representa y externaliza el estado interno de un objeto sin violar la encapsulamiento Token, Recuerdo Ejemplo: n Deshacer

Memento - Estructura

Memento - Estructura

Memento - Estructura

Memento - Estructura

Memento - Aplicabilidad p Hay que guardar la instantánea de un objeto y volverlo

Memento - Aplicabilidad p Hay que guardar la instantánea de un objeto y volverlo a recuperar más tarde

Memento - Consecuencias Preservación de los límites de la encapsulamiento p Simplifica al Creador

Memento - Consecuencias Preservación de los límites de la encapsulamiento p Simplifica al Creador p El uso de mementos puede ser costoso p Definición de interfaces reducidas y amplias p Costes ocultos en el cuidado de los mementos p

Observer p Objetivo: n p Nombres: n p Define una dependencia de uno a

Observer p Objetivo: n p Nombres: n p Define una dependencia de uno a muchos, de forma que cuando se modifique, se actualicen automáticamente los otros Dependents, Publish-Subscribe, Observador Ejemplo: n Varias vistas de unos mismos datos

Observer - Ejemplo a b c x 60 30 10 y 50 30 20

Observer - Ejemplo a b c x 60 30 10 y 50 30 20 z 80 10 10 a b c a= 50% b=30 % c=20%

Observer - Estructura

Observer - Estructura

Observer - Estructura

Observer - Estructura

Observer - Estructura

Observer - Estructura

Observer - Aplicabilidad Un cambio en un objeto requiere cambiar otros p Un objeto

Observer - Aplicabilidad Un cambio en un objeto requiere cambiar otros p Un objeto debería notificar algún cambio a otros objetos sin hacer suposiciones sobre quiénes son estos p

Observer - Consecuencias Bajo acoplamiento entre sujeto y observador p Capacidad de comunicación mediante

Observer - Consecuencias Bajo acoplamiento entre sujeto y observador p Capacidad de comunicación mediante difusión p Actualizaciones inesperadas p

State p Objetivo: n p Nombres: n p Permite que un objeto modifique su

State p Objetivo: n p Nombres: n p Permite que un objeto modifique su comportamiento cuando varíe su estado interno Estado Ejemplo: n Conexiones TCP/IP

State - Ejemplo

State - Ejemplo

State - Estructura

State - Estructura

State - Aplicabilidad El comportamiento de un objeto depende de su estado y debe

State - Aplicabilidad El comportamiento de un objeto depende de su estado y debe cambiar en tiempo de ejecución p Operaciones con muchas sentencias condicionales que dependen del estado p

State - Consecuencias Localiza el comportamiento dependiente del estado p Hace explícitas las transiciones

State - Consecuencias Localiza el comportamiento dependiente del estado p Hace explícitas las transiciones entre estados p Los objetos Estado pueden compartirse p

Visitor p Objetivo: n p Nombres: n p Representa una operación sobre los elementos

Visitor p Objetivo: n p Nombres: n p Representa una operación sobre los elementos de una estructura de objetos Visitante Ejemplo: n Compilador

Visitor - Ejemplo

Visitor - Ejemplo

Visitor - Estructura

Visitor - Estructura

Visitor - Estructura

Visitor - Estructura

Visitor - Aplicabilidad Muchas operaciones distintas sobre una misma estructura de objetos. Evitar contaminar

Visitor - Aplicabilidad Muchas operaciones distintas sobre una misma estructura de objetos. Evitar contaminar la estructura p Las clases de la estructura de objetos rara vez cambian y se quieren definir nuevas operaciones p

Visitor - Consecuencias Se facilita añadir nuevas operaciones p Se agrupan operaciones relacionadas p

Visitor - Consecuencias Se facilita añadir nuevas operaciones p Se agrupan operaciones relacionadas p Es difícil añadir nuevas clases de Elemento. Concreto p Visitar varias jerarquías de clases p Acumular el estado p Romper el encapsulamiento p

Referencias p Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, “Patrones de Diseño: Elementos

Referencias p Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, “Patrones de Diseño: Elementos de software orientado a objetos reutilizable”, Addison-Wesley 2003