PATRONES DE DISEÑO. Patrones estructurales (Structural patterns)

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Observador (observer) Visita (Visitor) Singleton
FACHADA COMPOSITOR MEMENTO
Adapter, Bridge, Decorator.
Lenguaje de programación Java
Análisis y Diseño de Software
FACHADA.
Arquitectura CLARO-TECNOTREE
Patrones de Diseño GEYFFER ALEXANDER ACOSTA CRISTHIAN DOUGLAS CASTRO
Introducción 1 Puntos Clave –La orientación a objetos representa un cambio radical en los métodos tradicionales de creación de software –Los métodos tradicionales.
RMI Remote Method Invocation
Aplicación del paradigma orientado a objetos
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno.
DIAGRAMAS DE CLASES Completando los diagramas de interacción, es posible identificar la especificación de las clases que participarán en la solución indicando.
Diseño y programación de
Encapsulamiento y Abstracción
DIAGRAMA DE COMPONENTES INTEGRANTES Córdova Vásquez Giovanny Escobar Alvares Calixto Gomez Quinteros Adelaida Pinto Flores Yarmila.
Modelo-Vista-Controlador (MVC)
Lic. Rosemary Torrico Bascopé
Abstracción de los datos y Orientación a Objeto Clase 13.
El patrón de diseño Proxy Raúl Heras Alberto Blasco José Manuel Arévalo.
Tema 10: Interfaces Antonio J. Sierra.
Contexto: Aplicación gráfica.  Siempre que se piensa en separar la funcionalidad de una aplicación de su interacción con el usuario, bien sea una aplicación.
Diseño de Sistemas. Patrones de Diseño. Geronimo Manso.
Patrones de Comportamiento: Patrón de Diseño Observer
Modelado Arquitectónico
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
Patrones de Diseno Flyweight Observer y Adapter Integrantes:
Javier Juárez González José Carlos Bernárdez Fdez. Alberto Barbosa León.
(c) P. Gomez-Gil, INAOE DISEÑO DE COMPONENTES DE SOFTWARE * NOTAS DEL CURSO Ingeniería de Software I DRA. MARIA DEL PILAR GÓMEZ GIL INAOEP.
Arquitectura de una aplicación
ANDRES FELIPE BORRERO SALAZAR COD ALEXANDRA CARREÑO SALAS COD LUCIO ANIBAL CRIOLLO COD ALEJANDRO RUIZ IDROBO COD
DISEÑO DE SOFTWARE 1ª. Parte
Bases de Datos Orientadas a Objetos (BDOO)
Lenguajes de Programación Tema 3
Presentado por Alfredo de la Mora Díaz Catedrático Dr. Jesús Favela
Patrones de diseño DECORATOR Mario Rodríguez Martín
Realizado por: Manuel González Joaquín Windmuller José Lorenzo Rodríguez
Patrones de Diseño: Command
Programación Orientada Objetos
Luis Pereda Calvo1 Comportamiento de Objetos Estrategia (Strategy) *Política (Policy)
Juan Manuel Perdigón Mario Felipe Monsalve
Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Simulación del patrón … (4)
PATRON DE SOFTWARE: COMMAND
Son la base para la búsqueda de soluciones o problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
Patrones de Diseño Carolina Perozo Julio Padrón Anthony Accardi.
Patrones de diseño Web Pierre Sergei Zuppa Azúa.
1 Diseño de Patrones Agustín J. González ELO329. Generalidades En Electrónica y en la vida en común usar soluciones probadas para problemas similares.
Universidad Central de Venezuela Facultad de Ciencias Postgrado en Ciencias de la Computación Sistemas Distribuidos Albany Márquez.
SOFTWARE PARA PAGOS DE SUELDOS Patrones de Diseño
PATRÓN ADAPTER (Adaptador) Elena Moreno Ramírez Laura Sánchez Romero Aroa Solana Ruiz.
GESTION DE PROCESOS DE NEGOCIO
Patrón Iterator Santiago García Sánchez Rebeca Marcos Salcedo Mª Cristina Zapatero Gironda.
Introducción a UML DIAGRAMA DE CLASES Departamento de Informática
Presentado por: PABLO ANDRES DIAZ SAIN HASSAM CAICEDO
TEMA 9: DIAGRAMA DE CLASE EN UML
Programación Orientada a Objeto
Ingeniería de Software
PATRON OBSERVADOR DEIRY ALI NIETO. El patrón observador lo podemos clasificar como un ejemplo claro de patrones de comportamiento, debido a que este posee.
Ingeniería de Requisitos
Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Simulación del patrón … (3)
Patrones de diseño equipo n.1
UML Casos de Uso (repaso) y Diagramas de Clase
M.C. Pedro Bello López 1 IMPLEMENTACIÓN. M.C. Pedro Bello López2.
Patrón de Diseño Brigde ( Handle/Body) Calderón Márquez Jorge Alberto Posgrado de Ciencia e Ingeniería en Computación. Tecnología Orientada a Objetos.
Arquitectura de una aplicación Arquitectur a: desarrolla un plan general del sistema, asegurando que las necesidades de los usuarios sean atendidas. Ingeniería.
Herencias Conceptos básicos i
DIAGRAMAS DE SECUENCIA. UML está compuesto por los siguientes diagramas:
Entregables del Proyecto
Geykel Raul Moreno Ceballos Sherpa Chairman & Chief Software Architect Adapter (Wrapper) Structural Pattern (Patrón Estructural)
Transcripción de la presentación:

PATRONES DE DISEÑO

Patrones estructurales (Structural patterns)

Patrón Adapter Propósito. Convertir la interfaz de una clase en otra esperada por el cliente Motivación Shape EditorDibujo BoundigBox() createManipulator TextView getExtent() TextShape BoundigBox() createManipulator LineShape BoundigBox() createManipulator Patrones estructurales

Estructura. Class Adapter El adaptador implementa la intertaz del Target y extiende la clase adaptada Target Adapter Client request() request() Adaptee specificRequest() Patrones estructurales

Patrón Adapter Estructura. Object adapter. El adaptador extiende la interfaz del target y tiene un objeto del tipo del objeto adaptado (composición) Target Adapter Client Request() request() Adaptee specificRequest() Target Adapter Client Request() request() Adaptee specificRequest() Patrones estructurales

Participantes Target (Figura) Client (EditorDibujo) Adaptado (TextView) Adaptador (FiguraDeTexto) Colaboraciones Los clientes invocan operaciones a un objeto del tipo Adapter A su vez el adaptador invoca operaciones en un objeto de la clase del adaptador (o invoca operaciones definidas en la superclase) Patrones estructurales

Bridge (puente) Propósito. Desacoplar una abstracción de su implementación de manera que las dos puedan variar independientemente Motivación WindowImp XWindowImp devDrawText() devDrawText() PMWindowImp devDrawText() Window drawText() drawRect() IconWindow() drawBorder() DialogWindow() drawBorder() Patrones estructurales

Estructura Implementador ConcreteImplA operationImp() operationImp() ConcreteImplB operationImp() Abstraction operacion() RefinedAbstraction Abstraction operacion()

Participantes  Abstracción (Window)  RefinedAbstraction (IconWindow)  Implementor (WindowImp)  ConcreteImplementor (XwindowImp, PMWindowImp Colaboraciones.  La abstracción envía las solicitudes de los clientes a las implementaciones Patrones estructurales

Consecuencias Desacoplamiento entre interfaz e implementación Más facilidad para extender el sistema Esconde los detalles de la implementación

Composite (composición) Organizar objetos en estructuras de árbol para representar jerarquías todo-parte. Permite a los clientes tratar de manera uniforme a objetos individuales y a agrupaciones de objetos Motivación Graphic Rectangle draw() add(graphic) remove(graphic) draw() Picture draw() add(graphic) Line draw() Patrones estructurales

Estructura Componente Hoja operacion() agregar(comp) eliminar(comp) operacion() Compuesto operation() agregar(comp) Cliente

Patrones estructurales Participantes Componente (Figura) Hoja (Rectángulo, círculo, línea, texto) Compuesto (Dibujo) Cliente Colaboraciones Los clientes usan la interfaz Componente para interactuar con objetos en la jerarquía Composite Si el receptor es una hoja la solicitud es manejada directamente. Si es un Compuesto la solicitud es pasada a sus Componentes hijos

Patrones estructurales Consecuencias Define jerarquías de objetos primitivos y compuestos que son iguales para los clientes Hace más simple al cliente. Los clientes pueden manejar los objetos simples y compuestos de una misma forma Facilita el agregar nuevos tipos de componentes. Los nuevos objetos funcionan bien con el código de cliente existente

Decorator (decorador). Wrapper Propósito. Dar responsabilidades adicionales a un objeto dinámicamente. Es una alternativa a la herencia para extender funcionalidad Motivación Patrones estructurales VisualComponent TextView draw() draw() Decorator ScrollDecorator draw() drawBorder() draw() BorderDecorator draw() drawBorder()

Patrones estructurales Aplicabilidad Para agregar funcionalidad a objetos individuales dinámicamente sin afectar otros objetos Cuando la extensión por herencia es impráctica Participantes Componente ComponenteConcreto Decorador DecoradorConcreto

Patrones estructurales Estructura Component TextView operation() operation() Decorator operation() ConcreteDecoratorB operation() addedBehavior() ConcreteDecoratorA operation() addedBehavior()

Patrones estructurales Colaboraciones Decorator pasa las solicitudes a su objeto interno. Puede realizar operaciones adicionales antes o después de invocar al objeto. Consecuencias Más flexibilidad que usar herencia Evita que las clases tengan exceso de características Un decorador y su componente no son idénticos Muchos objetos pequeños.

Patrón Facade (fachada) Propósito. Proveer una interfaz unificada a un conjunto de interfaces que constituyen un subsistema Motivación. Un sistema administrativo Cliente Factura Artículo ManejadorFacturas (la fachada) Un compilador Escaner, Parser, BytecodeStream Compilador (la fachada) Patrones estructurales

Aplicabilidad. Usar Fachada cuando Se desea proveer una interfaz simple a un sistema complejo Hay muchas dependencias entre los clientes y las clases que implementan una abstracción Se desea organizar el sistema en capas. Participantes Fachada. Sabe cuales clases son responsables de una solicitud Clases del subsistema. Implemente la funcionalidad

Patrones estructurales Colaboraciones Los clientes se comunican con el subsistema enviando solicitudes a la fachada, la cual las envía a los objetos apropiados. La fachada puede hacer cierto trabajo adicional. Los clientes que usan la fachada no tienen acceso a los objetos del subsistema.

Patrones estructurales Consecuencias Aísla a los clientes de los componentes del subsistema, lo cual reduce el número de componentes que el cliente utiliza Promueve un acoplamiento débil entre el subsistema y los clientes. No impide que las aplicaciones utilicen las clases del subsistema.

Patrones estructurales Patrón Flyweight. Propósito. Compartir objetos cuando la cantidad es muy grande. Motivación. Los caracteres de un procesador de palabras podrían ser objetos. La cantidad de caracteres en un documento puede ser muy grando Cada caracter es compartido por los objetos que lo contetienen.

Patrones estructurales Estado intrínseco y extríniseco El estado intrínseco es almacenado en el objeto. El estado extrínseco es pasado (contexto) como parámetro en las operaciones. Aplicabilidad. Usar Flyweight cuando Una aplicación usa un gran número de objetos Los costos de almacenamiento son altos debido al gran número de objetos La mayor parte del estado del objeto puede ser extrínseco

Patrones estructurales Estructura

Patrones estructurales Participantes Flyweight ConcreteFlyweight UnsharedConcreteFlyweight FlyweightFactory Cliente

Patrones estructurales Colaboraciones Los clientes no crean directamente los objetos Flyweight, sino que deben invocar las fábricas El estado extrínseco es mantenido por el cliente y pasado cuando se invocan métodos que lo requieren. Consecuencias Produce ahorro de la capacidad almacenamiento Reduce el número total de objetos Reduce el tamaño del estado intrínseco por objeto.

Patrones estructurales Proxy. Provee un sustituto de un objeto Motivación Un procesador de palabras debe crear muchos objetos. Algunos son costosos (imágenes) En lugar de crear imágenes al abrir el documento, se crea un proxy Cuando se necesita la imagen el proxy la crea

Patrones estructurales Aplicabilidad Remote proxy. Provee un representante local de objetos que están en otro espacio de direcciones (embajador) Proxy virtual. Usado para crear objetos costosos por demanda Protection proxy. Provee control de acceso a ciertos objetos.

Patrones estructurales Estructura

Patrones estructurales Participantes Proxy. Mantiene una referencia que permite al proxy acceder al sujeto real Provee una interfaz idéntica a la del sujeto Controla el acceso al objeto real y puede ser responsible de crearlo y destruirlo Subject RealSubject

Patrones estructurales Colaboraciones El proxy envía solicitudes a los sujetos reales cuando sea apropiado. Consecuencias Un proxy remoto puede ocultar el hecho de que el objeto reside en otro proceso Un proxy virtual puede realizar optimizaciones, tales como crear un objeto por demanda

Patrones de comportamiento (Behavioral patterns)

Patrón Command Propósito. Encapsular una solucitud como un objeto de manera que se puedan parametrizar clientes con diferentes solicitudes, poner solicitudes en cola y soportar “deshacer operaciones” Motivación. Patrones de diseño MenuIte m Menu Command execute() Applicati on Clicked addMenuIte m() command.execu te()

Aplicabilidad. Usar el patrón command cuando se desea Parametrizar objetos con una acción a realizar Especificar, encolar y ejecutar solicitudes en diferentes momentos Soportar desacer. La operación execute puede almacenar estado para revertir efectos en el objeto command Estructura. Patrones de diseño Invoker ConcreteCommand Client execute() Command execute() ConcreteCommand execute()

Patrones de diseño Participantes Command ConcreteCommand Client Invoker Receiver Colaboraciones El cliente crea un comando concreto y especifica el recibidor Todos los invocadores guardan el objeto command El invocador emite una solicitud invocando execute en el comando El comando concreto invoca operaciones en el recibidor para realizar la solicitud

Patrones de diseño Consecuencias Comando desacopla a los objetos que invocan la operación del objeto que sabe como realizarla. Los comandos pueden ser extendidos Es fácil agregar nuevos comandos porque no hay que cambiar las clases existentes.

Patrón Iterator Propósito. Proveer un mecanismo para acceder a los elementos de un objeto “agregado” sin exponer su representación interna Motivación AbstractList Iterator first() next() isDone() currentItem() ListIterator Patrones de diseño createIterator() append() remove() List Client

Aplicabilidad. Usar para Acceder al contenido de un objeto agregado sin exponer su representación interna Soportar múltiples formas de recorrer el agregado Proveer una plataforma común para recorrer objetos agregados diferentes Estructura. Agregate Iterator first() next() isDone() currentItem() ConcreteIterator Patrones de diseño createIterator() ConcreteAgregat e createIterator()

Patrones de diseño Participantes Iterator. Define una interfaz para recorrer los elementos ConcreteIterator. Implementa la interfaz iterator. Aggregate. Define una interfaz para crear un objeto iterador ConcreateAggregate. Implementa la interfaz de creación del iterador. Colaboraciones. Un iterador concreto lleva registro del objeto actual en el agregado y determina el objeto siguiente en el recorrido.

Patrones de diseño Consecuencias Soporta variaciones en el recorrido de un agregado Los iteradores simplifican la interfaz del agregado. Puede haber más de un recorrido pendiente.

Patrón Strategy Propósito. Definir una familia de algoritmos, encapsularlos y hacerlos intercambiables Motivación. Composition Compositor compose() ArrayCompositor Traverse() repair() TexCompositor SimpleCompositor compose() Patrones de diseño

Aplicabilidad. Usar Strategy cuando Muchas clases relacionadas difieren solamente en su comportamiento. Permite configurar una clase con uno de múltiples comportamientos Se necesitan diferentes variantes de un algortimo. Un algoritmo usa datos cuya estructura los clientes no deben conocer. Una clase define muchos comportamientos Patrones de diseño

Estructura. Context Strategy AlgorithmInterface( ) ConcreteStrategyC contextInterface( ) ConcreteStrategyB ConcreteStrategyA AlgorithmInterface() Patrones de diseño

Participantes Strategy. Declara una interfaz común a todos los algoritmos soportados ConcreteStrategy. Implementa el algoritmo que que usa la interfaz strategy. Context. Se configuran con un objeto ConcreteStrategy Mantiene una referencia a un objeto Strategy Puede definir una interfaz que permite acceder a sus datos

Patrones de diseño Colaboraciones La estrategia y el contexto interactúan para implementar el algoritmo seleccionado. Un contexto envía las solicitudes que le hacen los clientes a la estrategia. Consecuencias Es una alternativa a la herencia Eliminan estructuras condicionales Selección de implementaciones.

Patrones de diseño Patrón Observer Propósito. Definir una relación de dependencia uno a muchos entre objetos de manera que cuando el estado de un objeto cambia, todos sus dependientes son notificados y actualizados automáticamente. Motivación

Patrones de diseño Aplicabilidad. Usar en las siguientes situaciones Cuando una abstracción tiene dos aspectos, uno dependiente del otro. Cuando un cambio a un objeto requiere cambios en otros y no se sabe cuantos objetos deben ser cambiados. Cuando un objeto debe ser capaz de notificar a otros objetos sin saber quienes son.

Patrones de diseño Estructura Subject Attach(observer ) detach(observer ) notify() Observer Update() ConcreteObserver Update() ObserverState Subject attach(observer) detach(observer ) notify() SubjectState

Patrones de diseño Participantes Subject Observer ConcreteSubject ConcreteObserver Colaborations ConcreteSubject notifica a sus observadores cuando ocurre un cambio Al ser informado del cambio el observador puede solicitar al sujeto información sobre dichos cambios

Patrones de diseño Patrón Chain of Responsibility Evitar acoplar al receptor de una solititud con el receptor. Motivación. Sistema de ayuda HelpHandle r HandleHelp() Widget

Patrones de diseño Aplicabilidad. Usar cuando Más de un objeto puede manejar una solicitud. No se sabe quién manejará la solicitud. Se desea emitir una solicitud a uno de varios objetos sin decir quién la realizará. Se debe especificar dinámicamente el conjunto de objetos que pueden manejar una solictud

Patrones de diseño Estructura Handler HandleReque st() ConcreteHand ler1 HandleRequest( ) ConcreteHand ler2 HandleRequest( )

Patrones de diseño Participantes Handler ConcreteHandler Client Colaboraciones. Cuando un cliente emite una solicitud, ésta se propaga a lo largo de la cadena hasta que un manejador concreto asuma la responsabilidad de manejarlo.