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
Top Related