diseño basado en componentes. 2008/2009 - uc3mocw.uc3m.es/.../apuntes/05-patrones_de_diseno.pdf ·...

11
Diseño Basado en Componentes. 2008/2009 1 Diseño Basado en Componentes Curso 2008 / 09 Diseño Basado en Componentes Patrones de diseño Ingeniería Informática Universidad Carlos III de Madrid Patrones de diseño 2 Tabla de contenidos Patrones de diseño Relaciones entre patrones de diseño Catálogo de patrones de diseño Modelo-Vista-Controlador Abstract factory Factory Method Facade Observer Command Diseño Basado en Componentes Curso 2008 / 09 Patrones de diseño 3 Patrones de diseño Un patrón es un conjunto: Problema Solución Entorno Un patrón es una solución probada que se puede aplicar con éxito a un determinado tipo de problemas que aparece con frecuencia Se intenta reutilizar diseños que hayan demostrado su eficacia en previas aplicaciones Esqueleto de aplicación básica que el diseñador ha de adaptar a sus necesidades Diseño Basado en Componentes Curso 2008 / 09 Patrones de diseño 4 Relaciones entre patrones de diseño Diseño Basado en Componentes Curso 2008 / 09 Memento Iterator Builder Command Composite Decorator Flyweight Visitor Interpreter Chain of Responsibility Strategy Mediator Observer State Template Method Prototype Singleton Facade Abstract Factory Factory Method instancia única instancia única configurar fabricas dinámicas definir los pasos de un algoritmo cambiar la piel en vez de las tripas Implementado usando gestión de dependencia s complejas suele usar crear compuestos añadir responsabilidades a objetos compartir compuesto s compartir estrategias compartir estados añadir operaciones añadir operaciones compartir símbolos terminales definir la gramática guardar el estado de la iteración evitar la histéresis enumerar los hijos combinadas usando definir la cadena definir recorridos Adaptado de E. Gamma et al., Design Patterns: Elements of reusable Object- Oriented software

Upload: doankhanh

Post on 06-Feb-2018

217 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Diseño Basado en Componentes. 2008/2009 - UC3Mocw.uc3m.es/.../apuntes/05-Patrones_de_diseno.pdf · definir los pasos de un algoritmo ... Desacoplar los objetos del modelo y los objetos

Diseño Basado en Componentes. 2008/2009

1

Diseño Basado en Componentes Curso 2008 / 09

Diseño Basado en Componentes

Patrones de diseño

Ingeniería InformáticaUniversidad Carlos III de Madrid

Patrones de diseño2

Tabla de contenidos

� Patrones de diseño– Relaciones entre patrones de diseño– Catálogo de patrones de diseño

� Modelo-Vista-Controlador

� Abstract factory� Factory Method

� Facade

� Observer

� Command

Diseño Basado en Componentes Curso 2008 / 09

Patrones de diseño3

Patrones de diseño

� Un patrón es un conjunto:– Problema– Solución– Entorno

� Un patrón es una solución probada que se puede aplicar con éxito a un determinado tipo de problemas que aparece con frecuencia

� Se intenta reutilizar diseños que hayan demostrado su eficacia en previas aplicaciones

� Esqueleto de aplicación básica que el diseñador ha de adaptar a sus necesidades

Diseño Basado en Componentes Curso 2008 / 09

Patrones de diseño4

Relaciones entre patrones de diseño

Diseño Basado en Componentes Curso 2008 / 09

Memento

IteratorBuilder

Command

Composite

Decorator Flyweight

Visitor

InterpreterChain of ResponsibilityStrategy

Mediator

Observer

State

Template Method

Prototype

SingletonFacade

Abstract FactoryFactory Method

instancia única

instancia única

configurar fabricas dinámicas

definir los pasos de un algoritmo

cambiar la piel en vez de las tripas

Implementado usando

gestión de dependencias complejas

suele usar

crear compuestos

añadir responsabilidades a objetos compartir compuestos

compartir estrategias

compartir estados

añadir operaciones

añadir operaciones

compartir símbolos terminales

definir la gramática

guardar el estado de la iteración

evitar la histéresis

enumerar los hijos

combinadas usando

definir la cadena

definir recorridos

Adaptado de E. Gamma et al., Design Patterns: Elements of reusable Object-Oriented software

Page 2: Diseño Basado en Componentes. 2008/2009 - UC3Mocw.uc3m.es/.../apuntes/05-Patrones_de_diseno.pdf · definir los pasos de un algoritmo ... Desacoplar los objetos del modelo y los objetos

Diseño Basado en Componentes. 2008/2009

2

Catálogo de patrones de diseño

Patrones de diseño5

Diseño Basado en Componentes Curso 2008 / 09

Propósito

Arquitectura Creación Estructura Comportamiento

Presentation-abstraction-controlThree-tierPipelineImplicit invocationBlackboard systemPeer-to-peerService-oriented architectureNaked objectsModel-View-Controller

Ám

bito

Clase

(Com

pilación)

FactoryMethod

Adapter InterpreterTemplate Method

Objeto

(Ejecución)

AbstractFactoryBuilderPrototypeSingleton

AdapterBridgeCompositeDecoratorFacadeFlyweightProxy

Chain of ResponsibilityCommandIteratorMediatorMementoObserverStateStrategyVisitor

Patrón Modelo-Vista-Controlador

� Desacoplar los objetos del modelo y los objetos de la vista.

� El patrón de arquitectura MVC ayuda a reducir la complejidad en el diseño arquitectural e incrementar la flexibilidad y el reuso.

Patrones de diseño6

Diseño Basado en Componentes Curso 2008 / 09

OBJETIVO

Estructura MVC

Patrones de diseño7

Diseño Basado en Componentes Curso 2008 / 09

Modelo Vista

Controlador

Modelo

� Representación especifica del dominio donde la aplicación opera.

� La lógica del dominio añade significado a los datos (p.e. calcular si hoy es el cumpleaños del usuario, totales, impuestos, etc.)

� Muchas aplicaciones utilizan un mecanismo persistente de almacenamiento para almacenar datos.

� MVC no menciona específicamente la capa de acceso a datos porque se entiende que está por debajo o bien se encuentra encapsulada por el modelo

Patrones de diseño8

Diseño Basado en Componentes Curso 2008 / 09

Page 3: Diseño Basado en Componentes. 2008/2009 - UC3Mocw.uc3m.es/.../apuntes/05-Patrones_de_diseno.pdf · definir los pasos de un algoritmo ... Desacoplar los objetos del modelo y los objetos

Diseño Basado en Componentes. 2008/2009

3

Vista

� La vista renderiza o muestra de una forma apropiada para la interacción

� Típicamente es un elemento de la interfaz de usuario

� Pueden existir múltiples vistas para un mismo modelo.– Dichas vistas tendrán un propósito distinto.

Patrones de diseño9

Diseño Basado en Componentes Curso 2008 / 09

Controlador

� Procesa y responde a eventos– Normalmente suelen ser estímulos que proceden de

las acciones del usuario– Pero pueden ser estímulos que proceden del otros

sistemas, o incluso del propio software

� Estos estímulos deben ser tratados por el controlador y si procede realizará los cambios necesarios en el modelo.

Patrones de diseño10

Diseño Basado en Componentes Curso 2008 / 09

Funcionamiento MVC (i)

Patrones de diseño11

Diseño Basado en Componentes Curso 2008 / 09

Modelo Vista

Controlador

CLICK!

Evento Click!

Acceso al modelo

Evento cambio modelo

Funcionamiento MVC (ii)

� El usuario interactúa con la interfaz de usuario

� El controlador recibe la notificación de la acción solicitada por el usuario.

� El controlador accede al modelo, actualizándolo o modificándolo

� Los controladores complejos están a menudo estructurados usando un patrón de comando que encapsula las acciones y simplifica su extensión.

Patrones de diseño12

Diseño Basado en Componentes Curso 2008 / 09

Page 4: Diseño Basado en Componentes. 2008/2009 - UC3Mocw.uc3m.es/.../apuntes/05-Patrones_de_diseno.pdf · definir los pasos de un algoritmo ... Desacoplar los objetos del modelo y los objetos

Diseño Basado en Componentes. 2008/2009

4

Funcionamiento MVC (iii)

� El controlador delega a los objetos de la vista la tarea de desplegar la interfaz de usuario.

� La vista obtiene sus datos del modelo para generar la interfaz apropiada para el usuario donde se refleja los cambios en el modelo

� El modelo no debe tener conocimiento directo sobre la vista. Sin embargo, el patrón observer puede ser utilizado para proveer cierta indirección entre el modelo y la vista, permitiendo al modelo notificar a los interesados de cualquier cambio.

Patrones de diseño13

Diseño Basado en Componentes Curso 2008 / 09

Patrón Abstract Factory

Patrones de diseño14

Diseño Basado en Componentes Curso 2008 / 09

� Proporcionar un interfaz para la creación de familias de objetos relacionados o dependientes sin necesidad de especificar las clases concretas.

OBJETIVO

Caso de estudio (i) Abstract Factory

� Una situación real:

– Se desea desarrollar una aplicación con interfaz gráfica de usuario (GUI), que sea fácil de portar a dos sistemas operativos: Windows y Macintosh.

– Las GUI manejan una serie de objetos, generalmente conocidos como Widgets, tales como: ScrollBar, List, Button, etc.

� Problema de diseño:

– La GUI presenta una apariencia diferente (look and feel) para cada uno de estos objetos en cada sistema operativo.

– La aplicación debe poder crear los objetos con la apariencia apropiada para cada sistema operativo.

Patrones de diseño15

Diseño Basado en Componentes Curso 2008 / 09

Caso de estudio (ii) Problema mantenimiento� La creación de Widgets es diferente en cada sistema:

– ScrollBar sb = new WindowsScrollBar();

– ScrollBar sb = new MacScrollBar();

� Si se crean muchos Widgets (como suele ocurrir en aplicaciones de cierta complejidad) será muy difícil cambiar de una apariencia a otra, dado que hay que modificar muchas instrucciones que están diseminadas por diferentes partes del programa (problema de mantenimiento ).

� Solución : patrón de diseño Abstract Factory (fábrica abstracta).– Una “fábrica” es un objeto que se encarga de crear otros objetos.

� Los elementos de este patrón son: – Una fábrica abstracta y varias fábricas concretas.– Un producto abstracto y varios productos concretos.

Patrones de diseño16

Diseño Basado en Componentes Curso 2008 / 09

Page 5: Diseño Basado en Componentes. 2008/2009 - UC3Mocw.uc3m.es/.../apuntes/05-Patrones_de_diseno.pdf · definir los pasos de un algoritmo ... Desacoplar los objetos del modelo y los objetos

Diseño Basado en Componentes. 2008/2009

5

Caso de estudio (iii) Fábricas y productos

Patrones de diseño17

Diseño Basado en Componentes Curso 2008 / 09

WindowsFactoryWindowsFactoryWindowsFactoryWindowsFactory

createScrollBar()

createButton()

createMenu()

MacFactoryMacFactoryMacFactoryMacFactory

createScrollBar()

createButton()

createMenu()

GUIFactoryGUIFactoryGUIFactoryGUIFactory

createScrollBar()createButton()

createMenu()

WidgetWidgetWidgetWidget

WindowsScrollBarWindowsScrollBarWindowsScrollBarWindowsScrollBar

scrollTo()

MacScrollBarMacScrollBarMacScrollBarMacScrollBar

scrollTo()

ScrollBarScrollBarScrollBarScrollBar

scrollTo()

ButtonButtonButtonButton

press()

MenuMenuMenuMenu

popUp()

Para toda la aplicación:- una fábrica abstracta- dos fábricas concretas

Por cada tipo de Widget:- un producto abstracto - dos productos concretos

Caso de estudio (iii) Solución de problemas de mantenimiento

Patrones de diseño18

Diseño Basado en Componentes Curso 2008 / 09

� Creación de Widgets con constructores concretos , antes…– ScrollBar sb = new WindowsScrollBar();

– ScrollBar sb = new MacScrollBar();

� …y después, a través de operaciones abstractas de la fábrica.– ScrollBar sb = guiFactory.createScrollBar();

� La variable global guiFactory debe ser inicializada al comienzo del programa con una de las fábricas concretas:

– GUIFactory guiFactory = new MacFactory();

� Las operaciones de creación en las fábricas concretas usan los constructores concretos:

– public ScrollBar createScrollBar() {return new WindowsScrollBar();}

– public ScrollBar createScrollBar() {return new MacScrollBar();}

Abstract factory: ejemplo

Patrones de diseño19

Diseño Basado en Componentes Curso 2008 / 09

Abstract factory: esquema del patrón

Patrones de diseño20

Diseño Basado en Componentes Curso 2008 / 09

Page 6: Diseño Basado en Componentes. 2008/2009 - UC3Mocw.uc3m.es/.../apuntes/05-Patrones_de_diseno.pdf · definir los pasos de un algoritmo ... Desacoplar los objetos del modelo y los objetos

Diseño Basado en Componentes. 2008/2009

6

Patrón Factory Method

Patrones de diseño21

Diseño Basado en Componentes Curso 2008 / 09

� Definir una interfaz para crear un objeto, pero permitir a las subclases decidir que clase instanciar. Este patrón permite a una clase diferir la instanciación a las subclases

OBJETIVO

Descripción Factory Method

� Se ocupa del problema de la creación de objetos (productos) sin especificar la clase exacta del objeto que será creado.

� Resuelve el problema definiendo un método distinto para la creación de objetos, el cual las subclases pueden sobrescribir para especificar el tipo derivado del producto que se va a crear.

� Frecuentemente se utiliza el termino “factory method” para referirse a cualquier método cuyo propósito principal es la creación de objetos.

Patrones de diseño22

Diseño Basado en Componentes Curso 2008 / 09

Estructura

Patrones de diseño23

Diseño Basado en Componentes Curso 2008 / 09

Participantes

� Producto (Product)– Define la interfaz de objetos que crea el “factory

method”

� Producto concreto (ConcreteProduct)– Implementa la interfaz producto

� Creador (Creator)– Declara el “factory method”, el cual decuelve un

objeto de tipo Producto

� Creador concreto (ConcreteCreator)– Sobrescribe el “factory method” para devolver una

instancia de un productoPatrones de diseño

24

Diseño Basado en Componentes Curso 2008 / 09

Page 7: Diseño Basado en Componentes. 2008/2009 - UC3Mocw.uc3m.es/.../apuntes/05-Patrones_de_diseno.pdf · definir los pasos de un algoritmo ... Desacoplar los objetos del modelo y los objetos

Diseño Basado en Componentes. 2008/2009

7

Patrón Facade

Patrones de diseño25

Diseño Basado en Componentes Curso 2008 / 09

� Ofrece una interfaz unificada a un conjunto de interfaces en un subsistema.

� Define una interfaz a alto nivel que hace al subsistema más fácil de usar.

OBJETIVO

Estructura

Patrones de diseño26

Diseño Basado en Componentes Curso 2008 / 09

Caso de estudio (i)

� Una situación real:– Entorno de programación que ofrece a las

aplicaciones acceso al subsistema de compilación– El subsistema ofrece clases como “Scanner”,

“Parser”, “ProgramNode”, “BytecodeStream” etc.– Quizá aplicaciones especializadas necesiten tener un

acceso a esas clases directamente– Pero la mayor parte de los códigos clientes no les

interesan entrar en ese detalle, simplemente quieren compilar cierto código.

– Las interfaces a bajo nivel dificultan el manejo simple del sistema.

Patrones de diseño27

Diseño Basado en Componentes Curso 2008 / 09

Caso de estudio (ii)

� Para proveer una interfaz a alto nivel para encapsular las clases de los clientes, el subsistema debe incluir una clase “Compilador”

� Esta clase define una interfaz unificada a la funcionalidad del compilador

� La clase compilador actúa como una fachada (Facade). Ofrece al cliente una interfaz única y simple del subsistema del compilador.

� La fachada “Compilador” hace la vida más fácil para la mayoría de los programadores, sin ocultar la funcionalidad a bajo nivel si la necesitáramos.

Patrones de diseño28

Diseño Basado en Componentes Curso 2008 / 09

Page 8: Diseño Basado en Componentes. 2008/2009 - UC3Mocw.uc3m.es/.../apuntes/05-Patrones_de_diseno.pdf · definir los pasos de un algoritmo ... Desacoplar los objetos del modelo y los objetos

Diseño Basado en Componentes. 2008/2009

8

Caso de estudio (iii)

Patrones de diseño29

Diseño Basado en Componentes Curso 2008 / 09

Participantes

� Facade (compilador)– Sabe que clases del subsistema son responsables de

una petición.– Delega al cliente peticiones más complejas a los

objetos del subsistema.

� Clases del subsistema (“Scanner”,”Parser” etc.)– Implementan la funcionalidad del subsistema.– Manejan las peticiones asignadas al objeto “Fachada”

(Facade)– No tienen ningún conocimiento del objeto “Fachada”.

Es decir no tiene ninguna referencia a él.

Patrones de diseño30

Diseño Basado en Componentes Curso 2008 / 09

Patrón Observer

Patrones de diseño31

Diseño Basado en Componentes Curso 2008 / 09

� Definir una dependencia uno a muchos entre objetos tal que cuando un objeto cambia de estado, todos los objetos dependientes (observadores) son notificados automáticamente.

OBJETIVO

Efecto de la POO

� Un efecto colateral de partir un sistema en colecciones de clases cooperantes es la necesidad de mantener la consistencia entre los objetos relacionados.

� Por otro lado no se quiere mantener la consistencia haciendo que las clases estén estrechamente acopladas, porque esto reduciría la reusabilidad.

Patrones de diseño32

Diseño Basado en Componentes Curso 2008 / 09

Page 9: Diseño Basado en Componentes. 2008/2009 - UC3Mocw.uc3m.es/.../apuntes/05-Patrones_de_diseno.pdf · definir los pasos de un algoritmo ... Desacoplar los objetos del modelo y los objetos

Diseño Basado en Componentes. 2008/2009

9

Caso de estudio (i)

� En muchas aplicaciones están separados el aspecto de presentación de los datos de la aplicación

� Las clases que se refieren a los datos de la aplicación y clases dedicadas a ola representación pueden ser reutilizadas e intercambiadas.

� Por ejemplo, un objeto “Hoja de cálculo” y un objeto “Gráfico de barras” pueden representar el mismo objeto de datos usando destintas representaciones.

Patrones de diseño33

Diseño Basado en Componentes Curso 2008 / 09

Caso de estudio (ii)

� La hoja de cálculo y el gráfico de barras no saben el uno del otro, de tal modo que permiten su reutilización.

� Pero se comportan como si lo hicieran.

� Cuando el usuario cambian la información en el objeto “hoja de cálculo”, el objeto “gráfico de barra” refleja los cambios inmediatamente y viceversa.

Patrones de diseño34

Diseño Basado en Componentes Curso 2008 / 09

Ejemplo Observer

Patrones de diseño35

Diseño Basado en Componentes Curso 2008 / 09

Funcionamiento

� Los objetos clave son los “sujetos” y los “observadores”.

� Un “sujeto” debe tener cualquier número de “observadores” dependientes.

� Los “observadores” son independientes entre sí.

� Todos los “observadores” son notificados siempre que el “sujeto” experimenta un cambio de estado.

� En respuesta, cada “observador” pedirá al “sujeto” que se sincronice con su estado.

Patrones de diseño36

Diseño Basado en Componentes Curso 2008 / 09

Page 10: Diseño Basado en Componentes. 2008/2009 - UC3Mocw.uc3m.es/.../apuntes/05-Patrones_de_diseno.pdf · definir los pasos de un algoritmo ... Desacoplar los objetos del modelo y los objetos

Diseño Basado en Componentes. 2008/2009

10

Estructura Observer

Patrones de diseño37

Diseño Basado en Componentes Curso 2008 / 09

Patrón Command

Patrones de diseño38

Diseño Basado en Componentes Curso 2008 / 09

� Encapsular una petición como un objeto, permitir la parametrización de clientes, encolar o guardar en el log peticiones, y dar soporte a operaciones de tipo “deshacer”

OBJETIVO

Estructura

� Permite hacer peticiones y convertirlas en objetos.� Estos objetos “comandos” pueden ser almacenados o

enviados como otros objetos.� La clave en este patrón es la clase abstracta (o interface)

“Command”, la cual declara una interfaz para la ejecución de operaciones.

� Esta clase incluye una operación “execute” abstracta.� Los “comandos” concretos definen un par receptor-

acción, almacenando el receptor e implementando la operación “execute”

� El receptor sabe como actuar ante la recepción del mensaje

Patrones de diseño39

Diseño Basado en Componentes Curso 2008 / 09

Consecuencias

� Desacopla el objeto que invoca la operación del que sabe cómo realizarla.

� Los comandos son objetos manipulables y extensibles como cualquier otro.

� Permite combinar comandos en un comando compuesto: patrón Composite.

� Es fácil añadir nuevos comandos sin cambiar las clases existentes– Comandos reversibles: añadir unexecute( ), state,

history list…– Comandos registrados: añadir store( ), load( )…

Patrones de diseño40

Diseño Basado en Componentes Curso 2008 / 09

Page 11: Diseño Basado en Componentes. 2008/2009 - UC3Mocw.uc3m.es/.../apuntes/05-Patrones_de_diseno.pdf · definir los pasos de un algoritmo ... Desacoplar los objetos del modelo y los objetos

Diseño Basado en Componentes. 2008/2009

11

Estructura.

Patrones de diseño41

Diseño Basado en Componentes Curso 2008 / 09

Patrones de diseño42

Bibliografía

� E. Gamma et al., Design Patterns: Elements of reusable Object-Oriented software

� El Lenguaje Unificado de ModeladoGrady Booch, James Rumbaugh, Ivar JacobsonAddison Wesley, 1999

Diseño Basado en Componentes Curso 2008 / 09

Diseño Basado en Componentes Curso 2008 / 09

Diseño Basado en Componentes

Introducción

Ingeniería InformáticaUniversidad Carlos III de Madrid