08 Patrones I

download 08 Patrones I

of 70

Transcript of 08 Patrones I

  • 7/25/2019 08 Patrones I

    1/70

    Diseo de Sistemas

    Clase 8:

    Patrones de Diseo

    (Parte I)

    Hugo R. Cordero S.

  • 7/25/2019 08 Patrones I

    2/70

    Objetivos

    Comprender el concepto de patrn y su clasificacin dentro

    del diseo de los sistemas

    Conocer los patrones de diseo y sus categoras: creacionales,

    estructurales y de comportamiento

    Entender la importancia del uso de los patrones de diseo

    Conocer algunos patrones en detalle, sus motivaciones y sus

    aplicaciones

    2

  • 7/25/2019 08 Patrones I

    3/70

    Qu es un patrn? Son soluciones a los problemas que usted encuentra una y

    otra vez en el desarrollo de aplicaciones en el mundo real

    Estn formados por estructuras reutilizables en la

    construccin de aplicaciones Es recurrente, lo que hace la solucin relevante a otras

    situaciones

    Ensea, porque permite entender cmo adaptarlo a la variante

    particular del problema donde se quiere aplicar

    Introduccin

    3

  • 7/25/2019 08 Patrones I

    4/70

    Origen de los patrones 1977Christopher Alexander

    Lenguaje de Patrones.

    Patrones de Construccin

    Describen patrones, y mtodos deconstruccin para diseos prcticos, seguros yatractivos a gran escala , basado enconstrucciones conocidas.

    Tuvo gran influencia en otras reas ajenas a la

    Arquitectura.

    Introduccin

    4

  • 7/25/2019 08 Patrones I

    5/70

    Clasificacin de Patrones Arquitectnicos

    Expresan un paradigma fundamental para representar un sistemade software

    De DiseoDescriben el esquema bsico para estructurar subsistemas ycomponentes

    Dialectos, idiomas o de cdigoEspecficos de un lenguaje de programacin o casos particulares

    De Interaccin (o de interfaz)Para el diseo de interfaces web grficas de usuario

    Otros

    Introduccin

    5

  • 7/25/2019 08 Patrones I

    6/70

    Clasificacin de Patrones

    Introduccin

    6

  • 7/25/2019 08 Patrones I

    7/70

    Los patrones de diseo (design patterns) son la base para

    la bsqueda de soluciones a problemas comunes en eldesarrollo de software y otros mbitos referentes aldiseo de componentes, interaccin o interfaces.

    Son el esqueleto de las soluciones a problemas comunesen el desarrollo de software

    Patrn de diseo

    7

  • 7/25/2019 08 Patrones I

    8/70

    Es una solucin a un problema de diseo. Para que una

    solucin sea considerada un patrn debe poseer ciertascaractersticas. Una de ellas es que debe habercomprobado su efectividad resolviendo problemas

    similares en ocasiones anteriores. Otra es que debe serreusable, lo que significa que es aplicable a diferentesproblemas de diseo en distintas circunstancias.

    Patrn de diseo

    8

  • 7/25/2019 08 Patrones I

    9/70

    Partes de un Patrn

    9

    Patrn de diseo

  • 7/25/2019 08 Patrones I

    10/70

    Son importantes? Saber de patrones de diseo ayuda a tener un lenguaje

    comn con otros programadores.

    Cuando nos toque modificar un programa, el autor del

    cdigo seguramente tendr que explicar qu fue lo quehizo, cmo funciona su cdigo y por qu hizo cualquiercambio. Pero esa conversacin puede acortarse si dice,aqu estoy utilizando tal o cual patrn (por ejemplo: el

    patrn Factory).

    Patrn de diseo

    10

  • 7/25/2019 08 Patrones I

    11/70

    Causas comunes del Rediseo Hay que tener en cuenta cmo puede necesitar cambiar el

    sistema a lo largo del tiempo.

    Los patrones de diseo ayudan a asegurar que un sistema

    pueda cambiar de formas concretas.

    Crear un objeto especificando su clase explcitamente.(Creando objetos indirectamente)

    Dependencia de operaciones concretas. (Evitar ligar laspeticiones al cdigo)

    Patrones de diseo

    11

  • 7/25/2019 08 Patrones I

    12/70

    Causas comunes del Rediseo Dependencia de plataformas de HW o SW (Disear

    nuestro sistema de manera que no exista muchadependencia de la plataforma)

    Dependencias algortmicas. (Aquellos algoritmos que esprobable que cambien deben estar aislados).

    Fuerte acoplamiento. (Tcnicas de Acoplamientoabstracto)

    Incapacidad para modificar las clasesconvenientemente(Como adaptar una clase existente paraque podamos hacer uso de ella sin cambiar su estructura)

    Patrones de diseo

    12

  • 7/25/2019 08 Patrones I

    13/70

    Por Propsito: Qu hace el patrn? De Creacin: Establecen cmo deben crearselos objetos y

    clases. Ayudan a hacer el sistema independiente de cmo secrean, se componen y se representan sus objetos.

    Estructurales: Establecen cmo se combinanlas clases y losobjetos para formar estructuras ms grandes.

    De Comportamiento: Se relaciona en modo en que las clases

    y objetos interactan (algoritmo) y se reparten lasresponsabilidades.

    Categoras de Patrones de diseo

    13

  • 7/25/2019 08 Patrones I

    14/70

    Creacionales Aquellos que se desarrollan en el proceso de instanciar y

    configurar objetos y clases Factory

    Abstract Factory Singleton

    Builder

    Prototype

    Categoras de Patrones de diseo

    14

  • 7/25/2019 08 Patrones I

    15/70

    Estructurales Aquellos que separan la interfaz de la implementacin. Se

    ocupan de cmo las clases y objetos se organizan yrelacionan

    Adapter o Wrapper Bridge

    Composite

    Decorator

    Facade

    Proxy

    Flyweigth

    Categoras de Patrones de diseo

    15

  • 7/25/2019 08 Patrones I

    16/70

    Comportamentales Como se comunican los objetos, cooperan y distribuyen

    responsabilidades para lograr sus objetivos Template Method

    Interpreter Mediator

    Command

    Chain of responsibility

    Iterator

    Memento

    Observer

    State

    Strategy

    Visitor

    Categoras de Patrones de diseo

    16

  • 7/25/2019 08 Patrones I

    17/70

    Por mbito: A qu se aplica principalmente el patrn?

    A Clases: Relaciones estticas entre clases y subclases(Herencia).

    A Objetos: Relaciones dinmicas entre objetos

    Categoras de Patrones de diseo

    17

  • 7/25/2019 08 Patrones I

    18/70

    Categoras de Patrones de diseo

    18

  • 7/25/2019 08 Patrones I

    19/70

    Categoras de Patrones de diseo

    19

  • 7/25/2019 08 Patrones I

    20/70

    Cmo describir un Patrn?

    Patrones de diseo

    20

  • 7/25/2019 08 Patrones I

    21/70

    Cmo seleccionar un patrn? Considerar cmo los patrones de diseo solucionan

    problemas 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

    Patrones de diseo

    21

  • 7/25/2019 08 Patrones I

    22/70

    Cmo usar un patrn? Leer el patrn una vez para tener una visin general

    Volver y estudiar la estructura, los participantes y lascolaboraciones

    Ver un ejemplo concreto codificado del patrn Elegir nombres para los participantes del patrn que sean

    significativos en el contexto de la aplicacin

    Definir las clases

    Definir nombres especficos de la aplicacin para lasoperaciones en el patrn

    Implementar las operaciones que realizarn lasresponsabilidades y colaboraciones del patrn

    Patrones de diseo

    22

  • 7/25/2019 08 Patrones I

    23/70

    Utilidad Separar la clase que crea los objetos, de la jerarqua de objetos

    a instanciar

    Permite que una clase difiera la instanciacin a las subclases(son stas las que deciden qu clase instanciar)

    Tambin conocido como Factory Method

    Virtual Constructor

    Ventajas

    Centralizacin de la creacin de objetos Facilita la escalabilidad del sistema

    El usuario se abstrae de la instancia a crear

    Factory

    23

  • 7/25/2019 08 Patrones I

    24/70

    Problema: Qu sucede si queremos aadir A?

    Factory

    24

  • 7/25/2019 08 Patrones I

    25/70

    Una primera solucin

    Hay que recompilar todas las clases que heredan de A

    Puede que no tengamos acceso al cdigo de A

    Factory

    25

  • 7/25/2019 08 Patrones I

    26/70

    Solucin Separar el creador de las instancias de la propia clase las

    instancias se crean en una clase CFactory

    Factory

    26

  • 7/25/2019 08 Patrones I

    27/70

    Implementacin Dos variantes principales:

    Cuando la clase Creator es abstracta y no proporcionaimplementacin para el mtodo de fabricacin que declara.

    Cuando la clase Creator es concreta y proporciona una

    implementacin predeterminada para el mtodo de fabricacin. Mtodos de fabricacin parametrizados:

    Que los mtodos del Factory crean varios tipos de producto. Elmtodo recibe un parmetro que identifica el tipo de objeto acrear.

    Factory

    27

  • 7/25/2019 08 Patrones I

    28/70

    Estructura

    Factory

    28

  • 7/25/2019 08 Patrones I

    29/70

    Participantes1. Product: Interfaz de los objetos que crea el mtodo de

    fabricacin.

    2. ConcreteProduct*: Implementa la interfaz Product. Debeexistir una clase ConcreteProduct por cada tipo de producto

    que queremos crear3. Creator: Declara el mtodo de fabricacin, el cual devuelve

    un objeto de tipo Product. Tambin puede definir unaimplementacin predeterminada del mtodo de fabricacinque devuelva un objeto ConcreteProduct. Puede llamar al

    mtodo de fabricacin para crear un objeto Product.4. ConcreteCreator*: Redefine el mtodo de fabricacin para

    crear un objeto Product. Debe existir una claseConcreteCreator por cada tipo de producto que queremoscrear.

    Factory

    29

  • 7/25/2019 08 Patrones I

    30/70

    Ejemplo

    Factory

    30

  • 7/25/2019 08 Patrones I

    31/70

    Ejemplo La clase Aplicacin no sabe qu tipo de documento especfico

    debe crear, slo cundo debe hacerlo.

    Esto implicara que el framework debera crear instancias decada subclase, pero slo conoce a las clases abstractas (Aplicacin

    y Documento) y stas no pueden ser instanciadas.

    Factory

    31

  • 7/25/2019 08 Patrones I

    32/70

    Uso conocidos Framework de aplicaciones

    Conexiones a diferentes tipos de bases de datos

    Factory

    32

  • 7/25/2019 08 Patrones I

    33/70

    Desarrollar una aplicacin que debe poder conectarse adiferentes tipos de BD como Mysql, Sql Server, Oracle,PostgreSQL.

    Se debe ingresar el tipo de BD a utilizar y el sistema debercrear la conexin.

    Implemente el ejercicio utilizando el patrn Factory Method

    Explique detalladamente cules seran los participantes delpatrn

    Prctica: Factory

    33

  • 7/25/2019 08 Patrones I

    34/70

    Propsito Define una interfaz para crear familia de objetos relacionados o

    que dependen entre s, sin especificar sus clases concretas.

    Motivacin Su objetivo es soportar mltiples estndares en una aplicacin

    (MS-Windows, Open Office,) sin necesidad de implementar loscomponentes de cada estndar en particular. Esto ltimo podragenerar la creacin de un grupo de clases por cada tipo deestndar existente, generando cdigo complicado de mantener.

    Extensible para futuros estndares.

    Tenemos un toolkit para crear interfaces de usuario de diferentesestndares (Motif, Presentation Manager, WIN, OSX)

    Abstract Factory

    34

  • 7/25/2019 08 Patrones I

    35/70

    Motivacin

    Abstract Factory

    35

  • 7/25/2019 08 Patrones I

    36/70

    Proporciona una interfaz para crear familias de objetos ydependencias sin especificar sus clases concretas

    Ejemplo varias apariencias (Look & Feel):

    Abstract Factory

    36

  • 7/25/2019 08 Patrones I

    37/70

    Estructura

    Abstract Factory

    37

  • 7/25/2019 08 Patrones I

    38/70

    Participantes1. AbstractProduct: Declara una interfaz para un tipo de objeto

    Product.

    2. Product: Define un objeto para que sea creado por laConcreteFactory correspondiente. Implementa la interfaz

    AbstractProduct.3. AbstractFactory: Declara una interfaz para operaciones que

    crean objetos AbstractProduct.

    4. ConcreteFactory: Implementa las operaciones para crearobjetos Product.

    5. Client: Slo usa interfaces declaradas por las clasesAbstractFactory y AsbtractProduct.

    Abstract Factory

    38

  • 7/25/2019 08 Patrones I

    39/70

    Ventajas Asla las clases de implementacin: ayuda a controlar los objetos

    que se creen y encapsula la responsabilidad y el proceso decreacin de objetos producto. (cdigo del cliente)

    Hace fcil el intercambio de familias de productos sin mezclarse,

    permitiendo configurar un sistema con una de entre variasfamilias de productos: cambio de factory -> cambio de familia.

    Fomenta la consistencia entre productos.

    Desventajas Soportar nuevas clases de productos es difcil.

    La interfaz del Abstract Factory arregla el bloque de productosque pueden ser creados. Para soportar nuevas clases se requiereextender la interfaz factory. (cambios en AF clases y subclases)

    Abstract Factory

    39

  • 7/25/2019 08 Patrones I

    40/70

    Factory vs Abstract Factory

    40

  • 7/25/2019 08 Patrones I

    41/70

    Propsito Garantiza que una clase slo tenga una instancia y proporciona

    un punto de acceso global a ella.

    Motivacin Dentro de un sistema, existen elementos que deben ser nicos.

    Por lo general, estas clases (elementos) administran algn recursode uso comn.

    Singleton

    41

  • 7/25/2019 08 Patrones I

    42/70

    Utilidad Asegurar que una clase tiene una nica instancia y proporciona

    un punto de acceso global a dicha instancia

    Ventajas Es necesario cuando hay clases que tienen que gestionar de

    manera centralizada un recurso Algunas clases slo necesitan exactamente un ejemplar

    Un slo sistema de archivos

    Un slo gestor de ventanas

    Una variable global no garantiza que slo se instancie una vez

    Singleton

    42

  • 7/25/2019 08 Patrones I

    43/70

    Solucin El constructor de la clase debe ser PRIVADO

    Se proporciona un mtodo ESTTICO en la clase que devuelvela nica instancia de la clase: getInstance()

    Singleton

    43

  • 7/25/2019 08 Patrones I

    44/70

    Estructura

    Participantes Define una operacin INSTANCIA que permite que los clientes

    accedan a su nica instancia.

    Puede ser responsable de crear su nica instancia.

    Singleton

    44

  • 7/25/2019 08 Patrones I

    45/70

    Implementacin Definicin de la clase: asegurar que slo haya una instancia:

    Singleton

    45

  • 7/25/2019 08 Patrones I

    46/70

    Implementacin Utilizacin

    Singleton

    46

  • 7/25/2019 08 Patrones I

    47/70

    Consecuencias Acceso controlado a la nica instancia.

    Espacio de nombre reducido. Mejora sobre el uso de variablesglobales.

    Permite el refinamiento de operaciones y la representacin.

    Fcil modificacin para permitir un nmero variable deinstancias.

    Ms flexible que las operaciones de clase.

    Aplicacin

    Cuando slo puede haber un ejemplar de una clase, y debe seraccesible a los clientes desde un punto de acceso bienconocido

    Singleton

    47

  • 7/25/2019 08 Patrones I

    48/70

    Ejemplo Cada formulario captura el evento de cada uno de sus componentes e invocaal mtodo de la clase LOG para escribir en el archivo.

    Singleton

    48

  • 7/25/2019 08 Patrones I

    49/70

    Propsito Convierte la interfaz de una clase en otra interfaz que es la queesperan los clientes. Permite que cooperen clases que de otraforma no podran por tener interfaces incompatibles.

    Motivacin Una clase de un toolkit que ha sido rediseada para reutilizarse,

    no puede hacerlo porque su interfaz no coincide con la interfazespecfica del dominio que requiere la aplicacin.

    Adapter

    49

  • 7/25/2019 08 Patrones I

    50/70

    Adapter

    50

  • 7/25/2019 08 Patrones I

    51/70

    Utilidad Convertir la interfaz de una clase en otra interfaz esperada por

    los clientes.

    Permite que clases con interfaces incompatibles secomuniquen

    Tambin conocido como Wrapper

    Class Adapter y Object Adapter

    Ventajas

    Se quiere utilizar una clase ya existente y su interfaz no secorresponde con la interfaz que se necesita

    Se quiere envolver cdigo no orientado a objeto con forma declase

    Adapter

    51

  • 7/25/2019 08 Patrones I

    52/70

    Problema Se desea utilizar la clase A (el mtodo ejec) utilizando como

    entrada un objeto de la clase B:

    objetoDeA.ejec(objetoDeB)

    Pero no se puede, ya que la clase B no implementa la interfaz C

    Adapter

    52

  • 7/25/2019 08 Patrones I

    53/70

    Solucin Construir una clase Adaptadora de B que implemente la

    interfaz C. Al implementarla, usa un objeto de B y sus mtodos

    Para utilizar la clase A:objetoDeAdapterB = NEW AdapterB(objetoDeB)

    objetoDeA.ejec(objetoDeAdapterB)

    Adapter

    53

  • 7/25/2019 08 Patrones I

    54/70

    Estructura

    Participantes Target

    Define la interfaz especfica del dominio que usa el cliente. Cliente

    Colabora con los objetos conformando la interfaz del Target Adaptee (el adaptado)

    Define la interfaz existente que necesita adaptarse Adapter

    Adapta la interfaz Adaptee para usar en el objeto Target.

    Adapter

    54

  • 7/25/2019 08 Patrones I

    55/70

    Ejemplo La clase TextShape adapta TextView a la interfaz Shape, de

    manera que el editor grfico DrawingEditor puede reutilizar laclase TextView, que de otra manera sera incompatible.

    Adapter

    55

  • 7/25/2019 08 Patrones I

    56/70

    Adaptador de Clase Los clientes llaman a las operaciones de un objeto Adaptador

    A su vez, el Adaptador llama a las operaciones heredadas de laclase Adaptada que tratan la peticin

    Adapter

    56

  • 7/25/2019 08 Patrones I

    57/70

    Adaptador de Objeto Los clientes llaman a las operaciones de un objeto Adaptador

    A su vez, el Adaptador llama a las operaciones del Adaptadoque tratan la peticin

    Adapter

    57

  • 7/25/2019 08 Patrones I

    58/70

    Ejemplo

    Adapter

    58

  • 7/25/2019 08 Patrones I

    59/70

    Propsito Proporciona una interfaz unificada para un conjunto de

    interfaces de un subsistema. Define una interfaz de alto nivelque hace que el subsistema sea fcil de usar.

    Motivacin

    Estructurar un sistema en subsistemas ayuda a reducir sucomplejidad.

    Se debe minimizar las comunicaciones y dependencias entresubsistemas.

    Un modo de conseguir esto es introducir un objeto FACADE que

    proporcione una interfaz nica y simplificada a los servicios msgenerales del subsistema

    Facade

    59

  • 7/25/2019 08 Patrones I

    60/70

    Utilidad Simplificar el acceso a un conjunto de clases proporcionando

    una nica clase que todos utilizan para comunicarse con dichoconjunto de clases

    Ventajas

    Los clientes no necesitan conocer las clases que hay tras laclase FACADE

    Se pueden cambiar las clases ocultadas sin necesidad decambiar los clientes. Slo hay que realizar los cambiosnecesarios en FACADE

    Facade

    60

  • 7/25/2019 08 Patrones I

    61/70

    Problema La clase A debe saber cul es exactamente la clase que le

    proporciona el servicio: b1() es de B, c1() de C, d1() de D

    Facade

    61

  • 7/25/2019 08 Patrones I

    62/70

    Problema Adems puede haber muchas clases Cliente:

    Facade

    62

  • 7/25/2019 08 Patrones I

    63/70

    Solucin Proporcionar una clase que implemente todos los servicios

    (b1()). Los clientes slo usarn dicha clase.

    Facade

    63

  • 7/25/2019 08 Patrones I

    64/70

    Estructura

    Participantes Facade (Fachada)

    Clase que centraliza las comunicaciones a los subsistemas.

    Sabe qu clases del subsistema son las responsables por una peticin. Delega las peticiones de los clientes en los objetos apropiados del

    subsistema.

    Clases del Subsistema Implementan la funcionalidad del subsistema

    Facade

    64

  • 7/25/2019 08 Patrones I

    65/70

    Ejemplo Estructurando un entorno de compilacin

    Facade

    65

  • 7/25/2019 08 Patrones I

    66/70

    Ejemplo El subsistema de compilacin ofrece scanner, parser, ... a

    travs de una interfaz unificada (la fachada) de la funcionalidaddel compilador

    Facade

    66

  • 7/25/2019 08 Patrones I

    67/70

    Ejemplo (2) Pgina de compra por internet

    Las clases son: Inventario, Pago, Shipping y Cliente

    Facade

    67

  • 7/25/2019 08 Patrones I

    68/70

    Ejemplo (2) Oculta a los clientes los componentes del subsistema.

    Disminuye el acoplamiento entre un subsistema y sus clientes.

    Facade

    68

  • 7/25/2019 08 Patrones I

    69/70

    Crear una aplicacin que simule el encendido de unautomvil.

    Para tal motivo considere que se necesitan las siguientesoperaciones Comprobar gasolina

    Comprobar puertas

    Comprobar asientos

    Comprobar espejos

    Arrancar

    Utilice el patrn Facade para simplificar el encendido queutilizar el Cliente.

    Prctica: Facade

    69

  • 7/25/2019 08 Patrones I

    70/70

    Bibliografa

    Design Patterns CD, Elements of reusable Object-Oriented

    software, Erich Gamma, Richard Helm, Ralph Johnson, JohnVlissides