2.14PDOO

download 2.14PDOO

of 54

Transcript of 2.14PDOO

  • 7/28/2019 2.14PDOO

    1/54

    Patrones de diseo orientado a objetosProgramacin Orientada a Objetos

    Facultad de Informtica

    Juan Pavn Mestras

    Dep. Ingeniera del Software e Inteligencia Artificial

    Universidad Complutense Madrid

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 2

    Hacer software no es fcil

    Disear software orientado a objetos es difcil, y disearsoftware orientado a objetos reutilizable es todava msdifcil

    Chapter 1: Introduction. Design Patterns, The Gang of Four

    ...y un software capaz de evolucionar tiene queser reutilizable (al menos para las versionesfuturas)

  • 7/28/2019 2.14PDOO

    2/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 3

    Disear para el cambio

    El software cambia Para anticiparse a los cambios en los requisitos hay que

    disear pensando en qu aspectos pueden cambiar Los patrones de diseo estn orientados al cambio

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 4

    Patrones

    Cmo llegar a ser un maestro de ajedrez Primero aprender las reglas del juego

    nombres de las piezas, movimientos legales, geometra y orientacindel tablero, etc.

    A continuacin aprender los principios relativo valor de las piezas, valor estratgico de las casillas

    centrales, jaque cruzado, etc.

    Sin embargo, para llegar a ser un maestro, hay que estudiar laspartidas de otros maestros Estas partidas contienen patrones que deben ser entendidos,

    memorizados y aplicados repetidamente

    Hay cientos de estos patrones

  • 7/28/2019 2.14PDOO

    3/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 5

    Patrones

    Cmo llegar a ser un maestro del software Primero aprender las reglas

    algoritmos, estructuras de datos, lenguajes de programacin, etc. A continuacin aprender los principios

    programacin estructurada, programacin modular, programacinOO, programacin genrica, etc.

    Sin embargo, para llegar a ser un maestro, hay que estudiar losdiseos de otros maestros Estos diseos contienen patrones que deben ser entendidos,

    memorizados y aplicados repetidamente

    Hay cientos de estos patrones

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 6

    Patrones

    Christopher Alexander (1977):Cada patrn describe un problema que ocurre una y otra vez en nuestroentorno, y describe la esencia de la solucin a ese problema, de tal modo quepueda utilizarse esta solucin un milln de veces ms, sin siquiera hacerlo dela misma manera dos veces

    Un patrn es: una solucin a un problema en un contexto particular recurrente (lo que hace la solucin relevante a otras situaciones) ensea (permite entender cmo adaptarlo a la variante particular del

    problema donde se quiere aplicar) tiene un nombre para referirse al patrn

    Los patrones facilitan la reutilizacin de diseos y arquitecturassoftware que han tenido xito

  • 7/28/2019 2.14PDOO

    4/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 7

    Motivacin de los Patrones

    Capturan la experiencia y la hacen accesible a los noexpertos

    El conjunto de sus nombres forma un vocabulario queayuda a que los desarrolladores se comuniquen mejor Lenguajes de patrones

    Ayudan a la gente a comprender un sistema msrpidamente cuando est documentado con los patronesque usa

    Los patrones pueden ser la base de un manual deingeniera de software

    Si el software se convierte en una ingeniera, las prcticasexitosas deben ser documentadas sistemticamente y

    ampliamente difundidas

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 8

    Motivacin de los Patrones

    Facilitan la reestructuracin de un sistema tanto si fue ono concebido con patrones en mente

    Reutilizacin: Los patrones de diseo soportan la reutilizacin de

    arquitecturas software Los armazones soportan la reutilizacin del diseo y del

    cdigo

    El software cambia Para anticiparse a los cambios en los requisitos hay que

    disear pensando en qu aspectos pueden cambiar Los patrones de diseo estn orientados al cambio

  • 7/28/2019 2.14PDOO

    5/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 9

    Clasificacin de patrones

    Patrones arquitecturales Expresan un paradigma fundamental para estructurar un

    sistema software Proporcionan un conjunto de subsistemas predefinidos, con

    reglas y guas para organizar las relaciones entre ellos Patrones de diseo

    Compuestos de varias unidades arquitecturales mspequeas

    Describen el esquema bsico para estructurar subsistemas ycomponentes

    Patrones elementales (idioms) Especficos de un lenguaje de programacin

    Describen cmo implementar componentes particulares deun patrn

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 10

    Ejemplos de patrones

    Patrones arquitecturales Jerarqua de capas Tuberas y filtros Cliente/Servidor

    Maestro-Esclavo Control centralizado ydistribuido

    Patrones de diseo Proxies Factoras Adaptadores Composicin Broker

    Patrones elementales(idioms)

    Modularidad Interfaces mnimas

    Encapsulacin Objetos Acciones y Eventos Concurrencia

  • 7/28/2019 2.14PDOO

    6/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 11

    Patrones y Armazones

    Los patrones de diseo tienen descripciones ms abstractas quelos armazones Las descripciones de patrones suelen ser independientes de los

    detalles de implementacin o del lenguaje de programacin (salvoejemplos usados en su descripcin) Los armazones estn implementados en un lenguaje de

    programacin, y pueden ser ejecutados y reutilizados directamente Los patrones de diseo son elementos arquitecturales ms

    pequeos que los armazones Un armazn incorpora varios patrones Los patrones se pueden usar para documentar armazones

    Los patrones de diseo estn menos especializados que losarmazones Los armazones siempre se aplican a un dominio de aplicacin

    particular

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 12

    Armazones (Frameworks)

    Caractersticas Un armazn ofrece un conjunto integrado de funcionalidad

    especfica de un dominio P.ej.: aplicaciones financieras, servicios de telecomunicacin,

    sistemas de ventanas, bases de datos, aplicaciones distribuidas,ncleos de SO

    Los armazones invierten el control en ejecucin entre laaplicacin y el software sobre el que est basada

    El armazn determina qu mtodos se invocan en respuesta aeventos (se reusa el cdigo del cuerpo principal y se escribe elcdigo al que llama)

    Un armazn es una aplicacin medio-acabada Las aplicaciones completas se desarrollan mediante herencia, e

    instanciando componentes parametrizados del armazn

  • 7/28/2019 2.14PDOO

    7/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 13

    Armazones (Frameworks)

    Diferencias con bibliotecas

    LGI CAESPECFICA

    DE LAAPLICACIN

    BUCLE DEEVENTOS

    GUI

    ADTs

    BASE DEDATOS

    MATHinvoca

    Arquitectura basada enbiblioteca de clases

    BUCLE DEEVENTOS

    GUI

    BASE DE DATOS

    ADTs

    MATHinvoca

    LGI CAESPECFICA

    DE LAAPLICACIN

    Arquitectura basada enarmazn

    " reutilizacin de cdigo " reutilizacin de diseo y cdigo

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 14

    Ejemplo de patrn de diseo

    Modelo-Vista-Controlador Utilizado en Smalltalk [Krasner and Pope, 1988] Distribucin de responsabilidades Utilizado en JFC (componentes Swing)

    Controlador

    Modelo

    Vista

    aplicacin

    visualizacinen pantalla

    objetos de control,eventos

  • 7/28/2019 2.14PDOO

    8/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 15

    Descripcin de patrones de diseo

    Nombre e intencin del patrn Referencia al patrn Incrementa el vocabulario de diseo

    Problema y contexto Cundo aplicar el patrn

    Solucin Estructura: elementos que conforman el diseo, sus relaciones,

    responsabilidades y colaboraciones es una descripcin abstracta de cmo una disposicin de elementos

    (clases y objetos) solucionan el problema Se ilustra con un ejemplo de cdigo

    Consecuencias (positivas y negativas) Necesidades (tiempo, memoria), aspectos de implementacin y

    lenguaje de programacin, flexibilidad, extensibilidad, portabilidad Patrones relacionados

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 16

    Categoras de patrones de diseo

    Patrones de creacin Tratan de la inicializacin y configuracin de clases y objetos

    Patrones estructurales Tratan de desacoplar interfaz e implementacin de clases y

    objetos: Cmo se componen clases y objetos?

    Patrones de comportamiento Tratan de las interacciones dinmicas entre sociedades de

    clases y objetos: Cmo interaccionan y se distribuyen responsabilidades los

    objetos?

  • 7/28/2019 2.14PDOO

    9/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 17

    Cmo seleccionar un patrn de diseo

    Considerar cmo los patrones de diseo solucionanproblemas de diseo

    Buscar las intenciones de cada patrn Estudiar cmo se interrelacionan los patrones Estudiar patrones de propsito similar Examinar la causa de un rediseo Considerar qu debera ser variable en un diseo

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 18

    Cmo usar un patrn de diseo

    1. Leer el patrn una vez para tener una visin general2. Volver y estudiar la estructura, los participantes y las

    colaboraciones3. Ver un ejemplo concreto codificado del patrn4. Elegir nombres para los participantes del patrn que

    sean significativos en el contexto de la aplicacin5. Definir las clases6. Definir nombres especficos de la aplicacin para las

    operaciones en el patrn7. Implementar las operaciones que realizarn las

    responsabilidades y colaboraciones del patrn

  • 7/28/2019 2.14PDOO

    10/54

    Patrones de creacin

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 20

    Patrones de creacin

    En Java para crear un objeto se utiliza el operador newunObjeto=newClaseObjetos();

    Una clase Factora puede ocuparse de los detalles de quclase de implementacin utilizar para crear un objeto de

    un tipo determinado

    XY XZ

    XFactoria

    creaX()

    :X

    Selecciona laimplementacin de X

    new

  • 7/28/2019 2.14PDOO

    11/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 21

    Patrones de creacin

    Permiten que el sistema sea independiente de cmo secrean, componen o representan sus objetos Sistemas ms dependientes de la composicin de objetos

    que de la herencia de clases Se trata de que el comportamiento se defina ms por la

    composicin de un conjunto pequeo de comportamientosfundamentales que por la definicin mediante herencia de todoslos comportamientos posibles

    Por tanto, la creacin de objetos es algo ms que instanciar unaclase

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 22

    Patrones de creacin

    Temas recurrentes en los patrones de creacin: Encapsulan el conocimiento sobre las clases concretas que se

    van a utilizar Ocultan la manera de crear objetos de estas clases y cmo se

    juntan La visin global de los objetos del sistema son sus interfaces

    (que pueden definirse como clases abstractas o interfaces)

    Se da independencia de qu se crea quin lo crea cmo se crea cundo se crea

  • 7/28/2019 2.14PDOO

    12/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 23

    Patrones de creacin

    Tipos de patrones de creacin De clase: usa herencia para variar la clase del objeto creado

    Factora abstracta Factora para construir familias de objetos

    Builder Factora para construir objetos complejos de forma incremental

    De objeto: delega la creacin en otro objeto Mtodo Factora

    Interfaz que permite que sean las subclases las que determinen qu clase instanciar

    Prototype Factora para clonar nuevos ejemplares copiando de un prototipo

    Singleton Object Pool

    Factora que asegura que slo hay un miembro (singleton) o un conjunto determinado

    (object pool) de una clase, y proporciona un punto global de acceso a l

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 24

    Mtodo Factora

    Propsito:Permite que una clase difiera la instanciacin a las subclases (sonstas las que deciden qu clase instanciar)

    Otras denominaciones:

    Factory Method Virtual Constructor

    Motivacin Un armazn utiliza clases abstractas para definir y mantener

    relaciones entre objetos El armazn tambin es responsable de crear esos objetos En principio el armazn no conoce las clases concretas que se van a definir

    en una aplicacin concreta El mtodo factora es un mtodo abstracto que encapsula el conocimiento

    de qu subclase se va a crear y pone este conocimiento fuera del armazn

  • 7/28/2019 2.14PDOO

    13/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 25

    Mtodo Factora

    Documento

    Grafico

    Documento doc= crearDocumento();documentos.anadirDocumento(doc);doc.abrir();

    returnnewDocumentoTextual();

    MiProcesadorTextos

    crearDocumento()

    DocumentoTextual

    Aplicacion

    crearDocumento()

    nuevoDocumento()abrirDocumento()

    Documento

    abrir()

    cerrar()salvar()restaurar()

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 26

    Mtodo Factora

    Aplicacin Cuando una clase no puede anticipar el tipo de objetos que

    debe crear Cuando una clase quiere que sus clases especifiquen los

    objetos que deben crear Cuando una clase delega la responsabilidad a una subclase

    de ayuda (entre varias), y se quiere localizar el conocimientode qu subclase de ayuda es la delegada

  • 7/28/2019 2.14PDOO

    14/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 27

    Mtodo Factora

    Esquema, participantes y colaboracionesEl Creator deja que sus subclases definan el mtodo factora queconstruye y devuelve un objeto del ConcreteProduct apropiado

    Interfaz de losobjetos que crea elmtodo factora

    Una clase queimplementa la

    interfaz Product

    Redefine el mtodo factora

    Declara el mtodo factora quedevuelve un objeto de tipo

    Product.Puede definir una

    implementacin por defectoque devuelva un objeto

    ConcreteProduct

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 28

    Mtodo Factora

    Consecuencias Elimina la necesidad de enlazar clases especficas de la

    aplicacin en el cdigo Es ms flexible crear un objeto con un mtodo factora que

    directamente Un mtodo factora puede dar una implementacin por defecto,

    por ejemplo, para crear un archivo, mostrar un dilogo quepermita abrir uno ya existente

    En este ejemplo el mtodo factora no es abstracto

    Conectar jerarquas de clases paralelas Los mtodos factora pueden ser llamados por los clientes, no

    slo por los CreatorEjemplo: manipuladores de figuras: un tipo de manipuladorcon varios mtodos factora para cada tipo de figura

  • 7/28/2019 2.14PDOO

    15/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 29

    Mtodo Factora

    Implementacin Implementacin de la clase Creator

    El mtodo factora es abstracto El mtodo factora proporciona una implementacin por defecto:

    Permite extensibilidad: se pone la creacin de objetos en unaoperacin separada por si el usuario quiere cambiarla

    Mtodos factora parametrizados Para crear distintos tipos de objetos

    public classCreator {

    public Product create(ProductId);

    };

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 30

    Factora Abstracta

    Propsito:Proporcionar una interfaz para crear familias de objetosrelaciones o dependientes, sin especificar sus clasesconcretas

    Otras denominaciones: Abstract Factory Kit

    Motivacin Definir una interfaz que soporte diferentes sistemas de

    ventanes, p.ej. Motif, Windows, Openview, ...

  • 7/28/2019 2.14PDOO

    16/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 31

    Factora abstracta: motivacin

    Varias apariencias (Look & Feel) para la interfaz grfica:

    JAVA L&F Motif L&F Windows L&F

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 32

    Factora Abstracta

  • 7/28/2019 2.14PDOO

    17/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 33

    Factora Abstracta

    Aplicacin Para sistemas independientes de cmo se crean, componen y

    representan sus productos Para sistemas que pueden configurarse con una de varias

    familias de productos Para obligar a utilizar juntos objetos de una familia de

    productos Para ofrecer una librera de clases, mostrando slo sus

    interfaces y no sus implementaciones

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 34

    Factora Abstracta

    Esquema, participantes y colaboraciones

    FactoriaConcreta1

    CreaProductoA()CreaProductoB()

    FactoriaConcreta2

    CreaProductoA()CreaProductoB()

    ProductoA1 ProductoA2

    ProductoB1 ProductoB2

    FactoriaAbstracta

    CreaProductoA()CreaProductoB()

    ProductoAbstractoA

    Cliente

    ProductoAbstractoB

  • 7/28/2019 2.14PDOO

    18/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 35

    Factora Abstracta

    Consecuencias Se oculta a los clientes las clases de implementacin

    los clientes manipulan los objetos a travs de las interfaces oclases abstractas

    Facilita el intercambio de familias de productos Al crear una familia completa de objetos con una factora

    abstracta, es fcil cambiar toda la familia de una vezsimplemente cambiando la factora concreta

    Mejora la consistencia entre productos El uso de la factora abstracta permite forzar a utilizar un

    conjunto de objetos de una misma familia

    No es fcil soportar nuevos tipos de productos

    Si se tiene que extender la interfaz de la Factora abstracta

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 36

    Factora Abstracta

    Implementacin Factoras como singletons

    En muchas ocasiones basta con una factora concreta por cada familia deproductos

    Creacin de productos:

    Mtodo factora por cada producto:La factora abstracta slo define una interfaz para crear productos, y es lasubclase factora concreta la que los crea. sta especificar sus productosredefiniendo el mtodo factora para cada uno.

    Prototipo para cada factora concretaSe crea la factora concreta inicializada con un objeto prototipo de cadaproducto. Los nuevos se crean haciendo clones del prototipo

    Definicin de factoras extensibles Qu ocurre cuando se quiere aadir un nuevo tipo de producto? Una solucin es aadir un parmetro a las operaciones que crean objetos

    para especificar el tipo de objeto que se va a crear. (Slo hara falta unaoperacin de creacin que tendra este parmetro)

    Esta solucin requiere tambin que el cliente haga narrowing odynamic-cast

  • 7/28/2019 2.14PDOO

    19/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 37

    Aplicacin en Swing

    Abstract factory : LookAndFeel Eleccin de la fbrica concreta : UIManager Producto abstracto : ComponentUI y sus clases derivadas

    (UIDelegate) Producto concreto : BasicListUI, MetalListUI

    Seleccin de apariencia en Swingprivatevoid seleccionarApariencia() {

    // Fuerza al sistema a adoptar una apariencia concretaStringlaf =UIManager.getSystemLookAndFeelClassName();try{

    UIManager.setLookAndFeel(laf);}catch(UnsupportedLookAndFeelExceptionexc)

    {System.err.println("Unsupported: " +laf);}catch(Exceptionexc)

    {System.err.println("Error loading" +laf);}}

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 38

    Builder

    Propsito:Permite a un cliente construir un objeto complejoespecificando slo su tipo y contenido, ocultndole todoslos detalles de la construccin del objeto

  • 7/28/2019 2.14PDOO

    20/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 39

    Builder

    Motivacin Supongamos un editor que quiere convertir un tipo de texto

    (p.ej. RTF) a varios formatos de representacin diferentes, yque puede ser necesario en el futuro definir nuevos tipos derepresentacin

    El lector de RTF(RTFReader) puede configurarse con una clase deConversor de texto (TextConverter) que convierta de RTF a otrarepresentacin

    A medida que el RTFReader lee y analiza el documento, usa elconversor de texto para realizar la conversin: cada vez quereconoce un token RTF llama al conversor de texto paraconvertirlo

    Hay subclases de TextConverter para cada tipo de representacin

    El conversor (builder) est separado del lector (director): sesepara el algoritmo para interpretar un formato textual de cmose convierte y se representa

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 40

    Builder

  • 7/28/2019 2.14PDOO

    21/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 41

    Builder

    Aplicacin Cuando el algoritmo para crear un objeto complejo debe ser

    independiente de las partes que constituyen el objeto y cmose juntan

    Cuando el proceso de construccin debe permitirrepresentaciones diferentes para el objeto que se estconstruyendo

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 42

    Builder

    Esquema y participantesInterfaz para crear

    partes de unproducto

    Construye unobjeto usando la

    interfaz de Builder Construye y junta

    las partes delproducto

    Representa elobjeto complejo

    que se est

    construyendo

  • 7/28/2019 2.14PDOO

    22/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 43

    Builder

    Colaboraciones

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 44

    Builder

    Consecuencias Permite variar la representacin interna de un producto

    El Builder ofrece una interfaz al Director para construir unproducto y encapsula la representacin interna del producto ycmo se juntan sus partes.

    Si se cambia la representacin interna basta con crear otroBulider que respete la interfaz

    Separa el cdigo de construccin del de representacin Las clases que definen la representacin interna del producto no

    aparecen en la interfaz del Bulider Cada ConcreteBuilder contiene el cdigo para crear y juntar una

    clase especfica de producto Distintos Directors pueden usar un mismo ConcreteBuilder

    Da mayor control en el proceso de construccin Permite que el Director controle la construccin de un producto

    paso a paso Slo cuando el producto est acabado lo recupera el director del

    builder

  • 7/28/2019 2.14PDOO

    23/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 45

    Builder

    Implementacin y patrones relacionados El Builder define las operaciones para construir cada parte

    El ConcreteBuilder implementa estas operaciones Con la Factora Abstracta tambin se pueden construir

    objetos complejos Pero el objetivo del patrn Builder es construir paso a paso El nfasis de la Factora Abstracta es tratar familias de objetos

    El objeto construido con el patrn Builder suele ser unComposite

    El Mtodo Factora se puede utilizar por el Builder paradecidir qu clase concreta instanciar para construir el tipo deobjeto deseado

    El patrn Visitor permite la creacin de un objeto complejo,

    en vez de paso a paso, dando todo de golpe como objetovisitante

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 46

    Singleton

    Propsito:Asegurar que una clase slo tiene un ejemplar, yproporcionar un punto de acceso global a ste

    Motivacin Algunas clases slo necesitan exactamente un ejemplar

    Un spoolerde impresin en un sistema, aunque haya variasimpresoras

    Un slo sistema de archivos Un slo gestor de ventanas ...

    En vez de tener una variable global para acceder a eseejemplar nico, la clase se encarga de proporcionar unmtodo de acceso

  • 7/28/2019 2.14PDOO

    24/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 47

    Singleton

    Aplicacin Cuando slo puede haber un ejemplar de una clase, y debe

    ser accesible a los clientes desde un punto de acceso bienconocido

    Cuando el nico ejemplar pudiera ser extensible porherencia, y los clientes deberan usar el ejemplar de unasubclase sin modificar su cdigo

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 48

    Singleton

    Esquema, participantes y colaboraciones Los clientes acceden al ejemplar de Singleton nicamente a

    travs del mtodo Instance de la clase Singleton

    Define un mtodo Instance( )que permite a los clientes

    acceder al ejemplar

    Puede ser responsable decrear su ejemplar nico

    Singleton

    static ejemplarUnicodatosSingleton

    static ejemplar()operacion()getDatosSingleton() return ejemplarUnico

  • 7/28/2019 2.14PDOO

    25/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 49

    Singleton

    Consecuencias Acceso controlado a un ejemplar nico

    Cmo y cuando los clientes pueden acceder al ejemplar

    Espacio de nombres reducido Evita la necesidad de utilizar variables globales

    Permite refinar las operaciones y la representacin Se puede heredar de la clase Singleton para configurar el

    ejemplar para una aplicacin concreta

    Permite un nmero de ejemplares variable Es posible tener un conjunto de ejemplares en vez de uno slo:

    Object Pool

    Ms flexible que las operaciones de clase (static) Con static no es posible considerar que hubiera ms de un solo

    ejemplar En C++ las funciones static no pueden ser virtuales, y por tanto

    las subclases no pueden redefinirlas polimrficamente

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 50

    Singleton

    Implementacin Definicin de la clase: asegurar que slo hay un ejemplar

    classSingleton{

    privatestatic Singletonejemplar =null;public static SingletongetEjemplar() {

    if ( ejemplar ==null )ejemplar =newSingleton();

    returnejemplar;}protected Singleton() {

    // lo que sea necesario}public void metodo() {...}

    }

  • 7/28/2019 2.14PDOO

    26/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 51

    Singleton

    Implementacin Utilizacin:

    Singleton instance = Singleton.getEjemplar();// instance.metodo();

    Herencia de la clase Singleton Cmo determinar en instance() qu subclase utilizar?

    Usando variables de entorno Poner la implementacin de instance() en las subclases Usando un registro de singletons

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 52

    Discusin

    Hay dos maneras de parametrizar un sistema por lasclases de objetos que crea:

    Usando una subclase de la clase que crea los objetos:

    Mtodo Factora Requiere una nueva subclase por cada nuevo tipo de producto

    Mediante composicin de objetos: un objeto es elresponsable de conocer la clase de los objetos de producto:

    Factora Abstracta, que puede producir objetos de varias clases Builder, que puede construir un producto complejo paso a paso Prototipo, construye un producto copia de otro prototipo

    Son ms flexibles que el Mtodo Factora pero ms complejos deimplementar

  • 7/28/2019 2.14PDOO

    27/54

    Patrones estructurales

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 54

    Patrones estructurales

    Lo fundamental son las relaciones de uso entre objetos Se trata de conseguir que cambios en los requisitos de la

    aplicacin no ocasionen cambios en las relaciones entrelos objetos

    Las relaciones de uso estn determinadas por lasinterfaces que soportan los objetos

  • 7/28/2019 2.14PDOO

    28/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 55

    Patrones estructurales

    Tipos de patrones estructurales De clase: usa herencia para componer interfaces o

    implementaciones Herencia mltiple: una clase que hereda de otras combina sus

    propiedades Class Adapter

    De objeto: composicin de objetos en tiempo de ejecucin Object Adapter Bridge Composite Decorator Facade

    Flyweight Proxy

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 56

    Adaptador

    Propsito: Convertir la interfaz de una clase en otra que esperan los

    clientes

    Otras denominaciones: Class Adapter y Object Adapter Wrapper (Envolvente)

    Motivacin Para reutilizar una clase de una biblioteca aunque su interfaz

    no correspondiera exactamente con el que requiere unaaplicacin concreta

    En el ejemplo, la clase TextView

    Para aadir funcionalidad que la clase reutilizada noproporciona

    En el ejemplo, la operacin CreateManipulator()

  • 7/28/2019 2.14PDOO

    29/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 57

    Adaptador

    La clase TextShape adapta TextView a la interfaz Shape, demanera que el editor grfico DrawingEditor puede reutilizar laclase TextView, que de otra manera sera incompatible.

    TextShape se puede hacer de dos maneras:1) Heredando la interfaz Shape y la clase TextView (Adaptador de

    clases)2) Componiendo un objeto TextView en un TextShape, que se

    implementa utilizando el objeto TextView (Adaptador de objeto)

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 58

    Adaptador

    Aplicacin Para usar una clase existente cuya interfaz no se

    corresponde con el que se necesita Para crear una clase reutilizable que coopera con clases

    imprevistas (esto es, que no tienen necesariamenteinterfaces compatibles) El adaptador de objeto slo: para utilizar varias subclases

    existentes para las que sera poco prctico adaptar suinterfaz heredando de cada una. Un adaptador de objetopuede adaptar la interfaz de su clase padre

  • 7/28/2019 2.14PDOO

    30/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 59

    Adaptador

    Esquema, participantes y colaboraciones (Adaptador de claseAdaptador de clase) Los clientes llaman a las operaciones de un objeto Adaptador. A su vez, el Adaptador llama a las operaciones heredadas de la clase

    Adaptada que tratan la peticin

    Define unainterfaz existente

    que necesitaadaptacin

    Adapta lainterfaz de

    Adapteea lainterfaz Target

    Define la interfazespecfica aldominio que

    utiliza el cliente

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 60

    Adaptador

    Esquema, participantes y colaboraciones (Adaptador de objetoAdaptador de objeto) Los clientes llaman a las operaciones de un objeto Adaptador. A su vez, el Adaptador llama a las operaciones del Adaptado que

    tratan la peticin

    Define unainterfaz existente

    que necesitaadaptacin

    Adapta la

    interfaz deAdapteea la

    interfaz Target

    Define la interfazespecfica aldominio que

    utiliza el cliente

  • 7/28/2019 2.14PDOO

    31/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 61

    Adaptador

    Consecuencias Un adaptador de clase:

    Adapta una clase Adaptada a una interfaz Objetivo reutilizando los

    mtodos de la clase Adaptada. Por tanto, no funcionar cuando se quieranadaptar la clase adaptada y todas sus subclases La clase adaptadora puede redefinir algunos de los mtodos de la clase

    adaptada Slo se introduce un objeto, y no hace falta delegar en otro adaptado

    Un adaptador de objeto: Permite trabajar un slo adaptador con muchos adaptados (esto es, de la

    clase adaptada y sus subclases) Se puede aadir funcionalidad a todos los adaptados de una vez Es ms difcil si se necesita redefinir el comportamiento del adaptado

    Cuanta adaptacin hace un adaptador?

    Desde cambiar el nombre de los mtodos hasta aadir nuevas operaciones

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 62

    Bridge

    Propsito:Desacopla una abstraccin de su implementacin de manera quelas dos puedan evolucionar independientemente

    Otras denominaciones:

    Handle/Body Motivacin

    La herencia permite que una abstraccin tenga variasimplementaciones: esta relacin se define en tiempo decompilacin

    Hay casos en los que puede haber una gran jerarqua de clases deuna abstraccin (p.ej. Window, IconWindow, TransientWindow) yvarias jerarquas de implementacin (en diferentes plataformas)

    Es necesario desacoplar la abstraccin de la implementacin

  • 7/28/2019 2.14PDOO

    32/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 63

    Bridge

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 64

    Bridge

    Aplicacin Para evitar una vinculacin permanente entre una abstraccin y su

    implementacin Permite cambiar la implementacin en tiempo de ejecucin

    Cuando tanto las abstracciones como las implementaciones podran

    ser susceptibles de extensin mediante subclases El patrn Bridge permite combinar las abstracciones e implementaciones yextenderlas independientemente

    Permite adems reducir la proliferacin de clases (ver ejemplo demotivacin)

    Para que cambios en la implementacin de una abstraccin no haganrecompilar el cdigo de los clientes

    En C++ es ms crtico porque la representacin de una clase es visible ensu definicin

    Para compartir una implementacin entre mltiples objetos, sin quelo noten los clientes

  • 7/28/2019 2.14PDOO

    33/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 65

    Bridge

    Esquema, participantes y colaboraciones La Abstraccin pasa las peticiones del cliente al objeto Implementor

    Define la interfazde las clases deimplementacin,que no se tiene

    que correspondercon la de

    Abstraction

    Extiende la interfazAbstraction

    Define la interfazde abstraccin ymantiene una

    referencia al objetoImplementor

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 66

    Bridge

    Consecuencias Se desacopla interfaz e implementacin

    La implementacin no est vinculada permanentemente a lainterfaz, y se puede determinar en tiempo de ejecucin (incluso

    cambiar) Se eliminan dependencias de compilacin Se consigue una arquitectura ms estructurada en niveles

    Se mejora la extensibilidad Las jerarquas de abstraccin y de implementacin pueden

    evolucionar independientemente

    Se esconden detalles de implementacin a los clientes

  • 7/28/2019 2.14PDOO

    34/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 67

    Bridge

    Implementacin y patrones relacionados Una sola clase de implementacin

    En este caso no es necesario salvo casos donde no se quiere tener que

    recompilar el cliente ante cambios de la implementacin (en C++ slohabra que volver a linkar)

    Creacin del objeto de implementacin apropiado Cmo, cundo y dnde se decide qu clase de implementacin

    instanciar? La Factora Abstracta permite crear y configurar un Bridge particular (y

    esta factora puede ser un Singleton): ver ejemplo de cdigo en el GoF

    Compartir objetos de implementacin El patrn Adaptador tiene tambin el objetivo de hacer trabajar

    juntas clases con distinta interfaz, pero en general se aplica asistemas que ya existen. El patrn Bridge suele aplicarse al

    empezar un diseo, para permitir que las abstracciones eimplementaciones evolucionen independientemente

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 68

    Proxy

    Propsito: Es un sustituto de otro objeto, para controlar el acceso a l

    Otras denominaciones: Surrogate Virtual proxy

    Motivacin Puede haber ocasiones en que se desee posponer el coste de

    la creacin de un objeto hasta que sea necesario usarlo Al abrir un documento, postergar el crear una imagen hasta que

    se tenga que visualizar En programas de comunicaciones, para un objeto remoto

    El objeto proxy acta en lugar del verdadero objeto, y ofrecelas misma interfaz, y las solicita en el objeto cuando es

    necesario Por ejemplo cuando el editor del documento invoca la operacin

    Draw en la imagen para visualizarla

  • 7/28/2019 2.14PDOO

    35/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 69

    Proxy

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 70

    Proxy

    Aplicacin: cuando es necesario una referencia a un objetoms sofisticada que el simple puntero o referencia aobjeto Proxy remoto, cuando el objeto est en otro espacio de

    memoria (proceso) Stubs en RPC y CORBA

    Proxy virtual, para postergar la creacin de objetos caroshasta el momento en que se necesitan

    Imgenes en documentos Proxy de proteccin, para controlar el acceso al objeto

    original Controla derechos de acceso diferentes

    Referencias inteligentes, remplazan a una referencia opuntero para realizar alguna accin adicional:

    Contar el nmero de referencias a un objeto para liberarlocuando nadie lo usa

    Cargar un objeto persistente en memoria cuando se referenciapor primera vez

    Sincronizar el acceso a un objeto con un cerrojo

  • 7/28/2019 2.14PDOO

    36/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 71

    Proxy

    Esquema, participantes y colaboraciones El Proxy pasa las peticiones al RealSubject cuando sea apropiado,

    dependiendo del tipo de proxy

    Mantiene una referencia al sujetoreal y proporciona la misma interfazControla el acceso al sujeto real ypuede ser responsable de crearlo y

    destruirlo

    Define la intefazcomn al SujetoReal y al Proxy

    Define el objetoreal que

    representa elproxy

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 72

    Proxy

    Consecuencias Introduce un nivel de indireccin al acceder a un objeto

    Este nivel de indireccin tiene usos distintos dependiendo del tipode proxy:

    Un proxy remoto puede ocultar dnde est el objeto real Un proxy virtual puede mejorar la eficiencia por ejemplo al crearun objeto bajo demanda

    Tanto los proxies de proteccin como las referencias inteligentesrealizan tareas de gestin interna cuando se accede al objeto

    Permite implementar de manera eficiente copy-on-write Un objeto costoso slo se copia si se ha modificado

  • 7/28/2019 2.14PDOO

    37/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 73

    Proxy

    Implementacin y patrones relacionados Un Proxy no tiene que conocer el tipo de un sujeto real

    Puede acceder a l a travs de la interfaz abstracta

    Se pueden utilizar facilidades de los lenguajes paraimplementarlo:

    En C++ se puede sobrecargar el operador de acceso a unmiembro (->). As cuando se accede a un miembro se puedenhacer acciones adicionales

    Esto es vlido slo cuando no es necesario distinguir el tipo deoperacin que se accede en el objeto

    El patrn Proxy se puede ver como un caso particular deBridge:

    un Proxy slo tiene una implementacin, y un Bridge puede tenerms de una un Proxy se suele usar para controlar el acceso a su

    implementacin, el Bridge permite cambiar una implementacindinmicamente

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 74

    Proxy

    Implementacin y patrones relacionados El Adaptador proporciona una interfaz diferente al objeto que

    adapta, pero el proxy tiene la misma interfaz Aunque el proxy puede rehusar realizar una operacin (as su

    interfaz puede verse como un subconjunto) El Decorador se puede implementar de manera similar al

    Proxy pero el propsito es diferente: el decorador aaderesponsabilidades a un objeto, el proxy slo controla suacceso

  • 7/28/2019 2.14PDOO

    38/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 75

    Composite

    Propsito: Construir objetos complejos mediante la composicin

    recursiva de objetos similares de manera similar a un rbol

    Motivacin Las aplicaciones grficas tienen componentes que pueden

    agruparse para formar componentes mayores (contenedores)

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 76

    Composite

  • 7/28/2019 2.14PDOO

    39/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 77

    Composite

    Aplicacin Para representar jerarquas de objetos parte-todo

    Para que los clientes puedan manejar indistintamente objetosindividuales o composiciones de objetos Los clientes tratan todos los objetos en la estructura composite

    de manera uniforme

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 78

    Composite

    Esquema, participantes y colaboraciones Los clientes usan la clase Componente para interaccionar con los

    objetos de la estructura composite. Si el recipiente es una Hoja lapeticin se maneja directamente. Si se trata de un Composite, sepasa a sus componentes hijos, pudindose realizar operacionesadicionales antes o despus

    Guarda sus hijosImplementa operaciones

    sobre los hijos de la interfazComponentLas hojas definen el

    comportamiento de losobjetos primitivos

    Manipula losobjetos de la

    composicin atravs de la interfaz

    Component

    Interfaz de los objetos de lacomposicinImplementa el

    comportamiento por defecto

  • 7/28/2019 2.14PDOO

    40/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 79

    Composite

    Consecuencias Define jerarquas de clases que tienen objetos primitivos y

    objetos compuestos (composite) La composicin puede ser recursiva

    Hace el cliente simple Puede tratar la estructura y los objetos individuales

    uniformemente

    Facilita la adicin de nuevas clases de componentes Puede hacer que el diseo sea demasiado general

    Hace ms difcil restringir los componentes de un composite Si se quiere hacer que un composite slo tenga ciertos

    componentes hay que codificar las comprobaciones para que se

    realicen en tiempo de ejecucin

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 80

    Composite

    Implementacin y patrones relacionados Referencias explcitas al padre Comparticin de componentes Maximizar la interfaz Component Operaciones de gestin de hijos Debe implementar Component una lista de Components? Orden de los hijos Mejora de la eficiencia con caching Quin debe eliminar los componentes? Cul es la mejor estructura de datos para almacenar los

    componentes? Los Iteradores se pueden usar para recorrer composites

    El Visitor localiza operaciones y comportamiento que de otramanera se distribuira entre las hojas y el composite

  • 7/28/2019 2.14PDOO

    41/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 81

    Decorador

    Propsito: Asignar nuevas responsabilidades a un objeto

    dinmicamente. Es una alternativa a la creacin de subclasespor herencia

    Otras denominaciones: Decorator Wrapper

    Motivacin Para aadir nuevas responsabilidades a objetos individuales y

    no a toda la clase Por ejemplo, una ventana de una interfaz grfica puede tener

    bordes, scrolling, u otros artifactos Esto se puede hacer dinmicamente

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 82

    Decorador

  • 7/28/2019 2.14PDOO

    42/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 83

    Decorador

    Aplicacin Para asignar responsabilidades a objetos individuales de

    forma dinmica y transparente, sin afectar a otros objetos Para responsabilidades que pueden ser suprimidas Cuando no es prctico utilizar herencia de clases (porque se

    producira una explosin del nmero de clases, o porque nose tiene la definicin de la clase)

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 84

    Decorador

    Esquema, participantes y colaboraciones El Decorador enva las peticiones a su objeto Componente, y puede

    realizar alguna operacin adicional antes o despus

    Aade responsabilidades alcomponente

    Define la interfazde los objetos a losque se les puedenasignar nuevas

    responsabilidades

    Mantiene una referencia alobjeto Componente y define

    una interfaz conforme

  • 7/28/2019 2.14PDOO

    43/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 85

    Decorador

    Consecuencias Ms flexibilidad que la herencia de clases (esttica)

    Las responsabilidades se aaden y quitan dinmicamente (entiempo de ejecucin)

    Evita la explosin de clases Permiten aadir una propiedad ms de una vez

    Por ejemplo, aadir doble borde a una ventana

    Se puede definir una clase sencilla y aadirle nuevascaractersticas mediante decoradores, pudiendo as obtenergran funcionalidad combinando piezas sencillas

    Slo se incorpora lo que se usa

    Muchos componentes pequeos

    Al usar Decoradores, el sistema tiene muchos objetos pequeos Puede ser difcil de entender y depurar

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 86

    Decorador

    Implementacin y patrones relacionados Conformidad de interfaces

    La interfaz de un objeto decorador debe ser conforme con la delcomponente que decora, por tanto un objeto decorador concretodebe heredar de una clase comn

    Omisin de la clase abstracta Decorador Si slo se va a definir una nueva responsabilidad no hace faltadefinir la clase abstracta Decorador

    Las clases Componente deben ser ligeras La definicin de los datos internos de la clase se debe dejar a las

    implementaciones Decorador vs. Strategy: el Decorador puede actuar antes o

    despus de llamar a los mtodos de otro objeto, paracambiar lo que se hace en medio de la llamada a un mtodose usa el patrn Strategy

    Es distinto del Adaptador ya que slo aaderesponsabilidades a un objeto, no su interfaz

    Puede verse como un caso degenerado de Composite con unsolo componente. Sin embargo, el decorador aaderesponsabilidades

  • 7/28/2019 2.14PDOO

    44/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 87

    Fachada

    Propsito: Simplifica el acceso a un conjunto de objetos proporcionando uno

    que todos los clientes pueden usar para comunicarse con el conjunto

    Otras denominaciones: Faade

    Motivacin Minimizar las comunicaciones y dependencias entre subsistemas

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 88

    Fachada

    El subsistema de compilacin ofrece scanner, parser, ... a travs de unainterfaz unificada (la fachada) de la funcionalidad del compilador, sinocultar completamente las clases que lo implementan

  • 7/28/2019 2.14PDOO

    45/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 89

    Fachada

    Aplicacin Para proporcionar una interfaz sencilla a un subsistema

    complejo A medida que un subsistema evoluciona va teniendo ms clases,

    ms pequeas, ms flexibles y configurables Hay clientes que no necesitan tanta flexibilidad y que quieren

    una visin ms simple del subsistema Slo los clientes que necesiten detalles de ms bajo nivel

    accedern a las clases detrs de la fachada

    Cuando hay muchas dependencias entre los clientes y lasclases de implementacin de una abstraccin

    La fachada desacopla el subsistema de los clientes y de otrossubsistemas

    Esto mejora la independencia de subsistemas y la portabilidad

    Para estructurar un sistema en capas La fachada define el punto de entrada de cada nivel Se pueden simplificar las dependencias obligando a los

    subsistemas a comunicarse nicamente a travs de sus fachadas

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 90

    Fachada

    Esquema, participantes y colaboraciones Los clientes se comunican con el subsistema haciendo peticiones a

    la Fachada, que las enva a los objetos del subsistema apropiados(la fachada podra tambin traducir su interfaz a la de las interfacesdel subsistema)

    Los clientes que usan la fachada no tienen que acceder a losobjetos del subsistema directamenteConoce los objetos del subsistemaresponsables para cada peticin, ydelega en ellos las peticiones de

    los clientes

    Implementan lafuncionalidaddel subsistema.No tienenconocimiento de

    la fachada

  • 7/28/2019 2.14PDOO

    46/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 91

    Fachada

    Consecuencias Oculta a los clientes los componentes del subsistema

    Reduce el nmero de objetos con los que tienen que tratar losclientes

    Disminuye el acoplamiento entre un subsistema y susclientes

    Un menor acoplamiento facilita el cambio de los componentes delsubsistema sin afectar a sus clientes

    Las fachadas permiten estructurar el sistema en capas Reduce las dependencias de compilacin

    No evita que las aplicaciones puedan usar las clases delsubsistema si lo necesitan

    Se puede elegir entre facilidad de uso y generalidad

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 92

    Fachada

    Implementacin y patrones relacionados Reduccin del acoplamiento cliente-subsistema

    Se puede reducir ms el acoplamiento haciendo la fachada unaclase abstracta con subclases concretas para las distintasimplementaciones del subsistema. Los clientes se comunican con

    el subsistema usando la interfaz de la clase fachada abstracta Otra posibilidad es configurar el objeto fachada con diferentes

    objetos del subsistema. Para personalizar la fachada basta conreemplazar uno o varios de sus objetos del subsistema

    La factora abstracta se puede utilizar junto a la fachada paracrear objetos del subsistema de manera independiente alsubsistema

    Clases del subsistema privadas y pblicas En Java se puede utilizar los paquetes para determinar las clases

    que son visibles fuera o no. En C++ los namespaces no soportanla ocultacin de clases

    Normalmente slo hace falta un objeto Fachada, por lo cualsuele implementarse como Singleton

  • 7/28/2019 2.14PDOO

    47/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 93

    Discusin

    Muchos patrones estructurales tienen bastante similituden el esquema, los participantes y las colaboraciones

    Las diferencias estn principalmente en el propsito Adaptador y Bridge

    Ambos envan peticiones a un objeto cuya interfaz es distinta El adaptador trata de resolver incompatibilidades entre interfaces

    existentes, bridge trata de proporcionar una interfaz estable a losclientes, independiente de cmo evolucione la implementacin

    Por tanto el Adaptador suele aparecer cuando ya hay clasesdesarrolladas, pero el Bridge es algo que el diseador avanza alprincipio del ciclo de vida del sistema

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 94

    Discusin

    Las diferencias estn principalmente en el propsito Composite y Decorator

    Ambos se basan en la composicin recursiva para organizar unconjunto de objetos ilimitado

    El Decorador pretende facilitar el aadir responsabilidades a losobjetos sin hacer subclases. Composite trata de que mltiplesobjetos se puedan tratar de manera uniforme, como uno (elnfasis est en la representacin y no en el embellecimiento)

    Los propsitos son complementarios y por tanto se suelen usarlos dos patrones conjuntamente

    Proxy Similar estructura que Decorator Especializacin de Bridge

  • 7/28/2019 2.14PDOO

    48/54

    Patrones de comportamiento

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 96

    Patrones de comportamiento

    Algoritmos y asignacin de responsabilidades entreobjetos y patrones de comunicacin entre objetos

    Distribucin del comportamiento entre varias clases Mediante herencia

    Mtodo Template: definicin abstracta de un algoritmo Intrprete: representa una gramtica como una jerarqua declases

    Mediante composicin de clases Mediador: entre varios objetos para desacoplarlos Cadena de responsabilidad Observador (MVC)

    Encapsulado de comportamientos Estrategia: encapsula un algoritmo en un objeto Comando: encapsula una peticin a un objeto

    Estado: encapsula el estado de un objeto Visitor: encapsula un comportamiento Iterador: el mtodo de recorrer una coleccin de clases

  • 7/28/2019 2.14PDOO

    49/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 97

    Patrones de comportamiento

    Chain of responsability Peticin delegada al proveedor de servicio responsable

    Command Encapsula una peticin como un objeto

    Interpreter Intrprete de lenguaje para una gramtica sencilla

    Iterator Para acceder secuencialmente a elementos de una agregacin

    Mediator El mediador coordina las interacciones entre sus asociados

    Memento

    Captura el estado de un objeto y lo restaura posteriormente

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 98

    Patrones de comportamiento

    Observer Para notificar automticamente cambios de estado de un objeto a

    todos los dependientes

    State

    Objeto cuyo comportamiento depende de un estado (el objeto puedeaparentar cambiar de clase segn un estado)

    Strategy Abstraccin para seleccionar uno o varios algoritmos

    Template method Algoritmo con varios pasos suministrados por una clase derivada

    Visitor Operaciones aplicadas a elementos de una estructura de objetos

    heterognea

  • 7/28/2019 2.14PDOO

    50/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 99

    Mtodo Template

    Propsito: Permite construir el esqueleto de un algoritmo dejando los

    detalles a las subclases

    Aplicacin Permite escribir las partes fijas de un algoritmo una sola vez

    y definir las partes que varan en las subclases Refactorizacin de cdigo

    Identificar las diferencias en el cdigo existente Separar las diferencias en nuevas operaciones Reemplazar el cdigo diferente con un mtodo template que

    llama a esas operaciones nuevas

    Define los puntos de extensin de las subclases til en frameworks: indica en qu puntos se puede extender

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 100

    Mtodo Template

    Esquema, participantes y colaboraciones La clase abstracta define las operaciones primitivas (pasos

    del algoritmo) que deben implementar las subclasesconcretas

    El mtodo template define el esqueleto del algoritmo

  • 7/28/2019 2.14PDOO

    51/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 101

    Mtodo Template

    Consecuencias Ayuda a la reutilizacin de cdigo

    Por ejemplo, factorizando comportamiento en bibliotecas declases

    Soporte de frameworks: invierte el flujo de control Los mtodos que nos deja implementar son llamados por el

    framework

    El mtodo template puede llamar a: Operaciones concretas (de la clase concreta o de las clientes) Operaciones concretas de la clase abstracta (operaciones tiles

    para las subclases) Operaciones primitivas (pasos del algoritmo)

    Mtodos factora Operaciones Hook, que proporcionan el comportamiento por

    defecto que las subclases pueden extender si fuera necesario(por defecto no suelen hacer nada)

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 102

    Estrategia

    Propsito: Permite definir una familia de algoritmos, encapsulndolos de

    manera que se pueda intercambiar uno por otro Otras denominaciones:

    Policy(polticas) Motivacin

    En un procesador de textos, una clase Composition se encarga degestionar la divisin de lneas de un texto y para ello delega enCompositor el algoritmo de divisin (por lneas, por prrafos, o porun nmero fijo de caracteres)

  • 7/28/2019 2.14PDOO

    52/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 103

    Estrategia

    Aplicacin Cuando hay muchas clases similares que slo difieren en

    algn comportamiento Se puede configurar una clase con varios comportamientos

    Se necesitan variantes de un algoritmo Para ocultar estructuras de datos complejas que usa el

    algoritmo En vez de utilizar muchas instrucciones condicionales poner

    los comportamientos alternativos en clases estrategiaconcretas

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 104

    Estrategia

    Esquema, participantes y colaboraciones La estrategia y el contexto colaboran para implementar un algoritmo

    concreto: La clase Strategy declara la interfaz comn a todos los algoritmos El contexto se configura con una estrategia concreta y mantiene la

    referencia correspondiente El contexto puede definir una interfaz para que la clase estrategia acceda

    a sus datos (y le pasar a la estrategia su referencia) o bien le pasa todoslos datos necesarios en las operaciones

  • 7/28/2019 2.14PDOO

    53/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 105

    Estrategia

    Consecuencias Permite gestionar familias de algoritmos

    Se puede definir una jerarqua de clases de algoritmos Sacar factor comn del cdigo Se comprende mejor la relacin entre los algoritmos de la familia

    Elimina instrucciones condicionales Permite definir varias implementaciones del mismo

    comportamiento Como inconveniente, los clientes tienen que conocer las

    distintas estrategias para elegir la ms apropiada

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 106

    Discusin

    Template Method vs. Strategy El patrn mtodo template utiliza herencia para variar parte

    de un algoritmo El patrn estrategia utiliza delegacin para variar todo el

    algoritmo

    Los mtodos factora se llaman frecuentemente por losmtodos template

  • 7/28/2019 2.14PDOO

    54/54

    Juan Pavn MestrasFacultad de Informtica UCM, 2004 Patrones de creacin 107

    Bibliografa

    Gamma E., Helm R., Johnson R., Vlissides J., ; Design Patterns.Elements of Reusable Object-Oriented Software; Addison-Wesley, 1995. Traduccin al castellano (2002): Diseo de

    patrones. Pearson Educacin James W. Cooper, The Design Patterns Java Companion. Addison

    Wesley, 1998 Steven J. Metsker, Design Patterns Java Workbook, Addison

    Wesley, 2002