Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Is1 t06 Patrones PDF
Is1 t06 Patrones PDF
Patrones de Diseo
Patrones de Diseo
Ingeniera del Software I
Carlos Blanco
Universidad de Cantabria
Ingeniera del Software I
Patrones de Diseo 2
ndice
Introduccin
Clasificacin
Patrones Creacionales
Patrones Estructurales
Patrones de Comportamiento
Antipatrones
Ingeniera del Software I
Patrones de Diseo 3
Introduccin
Un patrn es una solucin probada que se puede aplicar
con xito a un determinado tipo de problemas que
aparecen repetidamente en algn campo
Propuestos por el Gang of Four (Gamma, Helm, Johnson
y Vlissides).
Design Patterns. Elements of Reusable Object-Oriented Software - Erich Gamma,
Richard Helm, Ralph Johnson, John Vlissides - Addison Wesley (GoF- Gang of
Four). Addison Wesley. 1994.
Son un esqueleto bsico que cada diseador adapta a las
peculiaridades de su aplicacin.
Ingeniera del Software I
Patrones de Diseo 4
Introduccin Resuelve el
problema
Establece el
aspecto de
diseo a ser
resuelto
Problema Solucin
Circunstancias
bajo las cuales
se establece el
problema y
Contexto debe ser
aplicable la
solucin
Ingeniera del Software I
Patrones de Diseo 5
Introduccin
Elementos de un patrn de diseo
Nombre:
Para describir el problema y la solucin en una o dos palabras.
Un buen nombre facilita la comunicacin entre los desarrolladores
Problema:
Especifica el problema y su contexto
Lista de condiciones para que pueda aplicarse el
patrn
Ingeniera del Software I
Patrones de Diseo 6
Introduccin
Elementos de un patrn de diseo
Solucin:
Describe que componen el diseo sus relaciones, responsabilidades, y
colaboraciones.
No describe una implementacin en particular
Consecuencias:
Son los resultados de aplicar el patrn
Son criticas para evaluar las alternativas
Entender los costos y beneficios de aplicar el
patrn
Ingeniera del Software I
Patrones de Diseo 7
Clasificacin
Segn el Propsito: Que hace el Patrn?
Creacional: creacin de objetos
Estructural: composicin de clases y objetos
de Comportamiento: interaccin entre objetos
Segn el mbito: Clases u Objetos?
De Clases
De Objetos
Ingeniera del Software I
Patrones de Diseo 8
Clasificacin
Ingeniera del Software I
Patrones de Diseo 9
Fbrica Abstracta
ABSTRACT FACTORY
Intencin:
Proporcionar una interfaz para crear familias de objetos
relacionados o dependientes sin especificar sus clases concretas
Tambin conocido como KIT
Motivacin:
Crear aplicaciones independientes del sistema de interfaz de
usuario
Ingeniera del Software I
Patrones de Diseo 10
Fbrica Abstracta
ABSTRACT FACTORY
Ingeniera del Software I
Patrones de Diseo 11
Fbrica Abstracta
ABSTRACT FACTORY
Fbrica Abstracta
ABSTRACT FACTORY
Estructura
Ingeniera del Software I
Patrones de Diseo 13
Fbrica Abstracta
ABSTRACT FACTORY
Participantes
FbricaAbstracta:
declara una interfaz para operaciones que crean productos abstractos
FbricaConcreta:
implementa las operaciones para crear los productos concretos
ProductoAbstracto:
declara una interfaz para un tipo de producto
ProductoConcreto:
define un producto para que pueda ser creado por la correspondiente
fbrica concreta
Cliente:
utiliza slo las interfaces declaradas por FbricaAbstracta y
ProductoAbstracto
Ingeniera del Software I
Patrones de Diseo 14
Fbrica Abstracta
ABSTRACT FACTORY
Ventajas e Inconvenientes
Aisla los clientes de las implementaciones, ya que slo usan la
interfaz. Las dependencias se encapsulan en las fbricas
concretas.
Facilita el cambio de familias de productos, ya que la clase
concreta slo aparece una vez en el cdigo de la aplicacin y es
fcil cambiarla.
Favorece la consistencia entre productos, ya que favorece que
slo se use una familia de productos a la vez.
Es difcil soportar nuevos productos, ya que afecta a la interfaz de
la fbrica abstracta y por lo tanto a la de todas sus subclases.
Ingeniera del Software I
Patrones de Diseo 15
Constructor
BUILDER
Intencin:
Construir de manera flexible un objeto complejo a partir de otro
objeto complejo en una serie de pasos
Constructor
BUILDER
Ingeniera del Software I
Patrones de Diseo 17
Constructor
BUILDER
Constructor
BUILDER
Estructura
Ingeniera del Software I
Patrones de Diseo 19
Constructor
BUILDER
Participantes
Constructor:
especifica una interfaz abstracta para crear un objeto complejo
Producto
ConstructorConcreto:
construye y ensambla las partes del Producto implementando la interfaz
de Constructor
Director:
obtiene las partes que forman el Producto y lo construye usando la
interfaz de Constructor
Parte:
representa las partes que se usan para construir el Producto
Producto:
representa el objeto complejo en construccin
Ingeniera del Software I
Patrones de Diseo 20
Constructor
BUILDER
Colaboraciones
El cliente crea el objeto director y lo configura con el objeto
constructor deseado
El director avisa al constructor cuando una parte del producto tiene
que ser construida
El constructor gestiona las peticiones del director y aade partes al
producto
Ingeniera del Software I
Patrones de Diseo 21
Constructor
BUILDER
Colaboraciones
El cliente obtiene el producto del constructor
Ingeniera del Software I
Patrones de Diseo 22
Constructor
BUILDER
Ventajas e Inconvenientes
Desacopla al director del constructor, permitiendo nuevas
representaciones de objetos cambiando el constructor
Singleton
SINGLETON
Intencin:
Asegurarse de que una clase tiene una sola instancia y
proporcionar un punto de acceso global a ella
Tambin conocido como de Instancia nica
Motivacin
Algunas clases slo pueden tener una instancia
Una variable global no garantiza que slo se instancie una vez
Ingeniera del Software I
Patrones de Diseo 24
Singleton
SINGLETON
Singleton
SINGLETON
Participantes
Singleton:
define una operacin GetInstancia que permite a los clientes acceder a
su instancia nica y adems es responsable de su creacin de
Constructor
Colaboraciones
Los clientes acceden a la nica instancia solamente a travs de la
operacin GetInstancia
Ingeniera del Software I
Patrones de Diseo 26
Singleton
SINGLETON
Ventajas e Inconvenientes
Acceso controlado a la nica instancia
Espacio de nombres reducido: no hay variables globales
Puede adaptarse para permitir ms de una instancia
Puede hacerse genrica mediante templates
Ingeniera del Software I
Patrones de Diseo 27
Adaptador
ADAPTER
Intencin:
Convertir la interfaz de una clase en otra interfaz esperada por los
clientes. Permite que clases con interfaces incompatibles puedan
comunicarse.
Tambin conocido como Wrapper
Motivacin
Extender un editor grfico con clases de otro toolkit
Ingeniera del Software I
Patrones de Diseo 28
Adaptador
ADAPTER
Ingeniera del Software I
Patrones de Diseo 29
Adaptador
ADAPTER
Adaptador
ADAPTER
Estructura
Ingeniera del Software I
Patrones de Diseo 31
Adaptador
ADAPTER
Participantes
Objetivo:
define la interfaz especfica que usa el cliente
Cliente:
colabora con objetos que respetan la interfaz de Objetivo
Adaptado:
define la interfaz existente que necesita ser adaptada
Adaptador:
adapta la interfaz de Adaptado a la interfaz de
Ingeniera del Software I
Patrones de Diseo 32
Adaptador
ADAPTER
Colaboraciones
Los clientes envan sus peticiones a una instancia de
Adaptador que la reenva a otra de Adaptado
Ventajas e inconvenientes
Una misma clase adaptadora puede adaptar a una clase
adaptada y a todas sus subclases
La adaptacin no siempre consiste en cambiar el nombre
y/o los parmetros de las operaciones, puede ser ms
compleja
Ingeniera del Software I
Patrones de Diseo 33
Compuesto
COMPOSITE
Intencin:
Componer objetos en jerarquas todo-parte y permitir a los clientes
tratar objetos simples y compuestos de manera uniforme
Tambin conocido como Composite
Motivacin
Tratar grupos de objetos en un editor grfico
Ingeniera del Software I
Patrones de Diseo 34
Compuesto
COMPOSITE
Ingeniera del Software I
Patrones de Diseo 35
Compuesto
COMPOSITE
Compuesto
COMPOSITE
Estructura
Ingeniera del Software I
Patrones de Diseo 37
Compuesto
COMPOSITE
Participantes
Componente:
Declara la interfaz para la composicin de objetos, implementa
acciones por defecto cuando es oportuno y, opcionalmente,
accede al padre en la jerarqua
Simple:
Representa los objetos de la composicin que no tienen hijos
e implementa sus operaciones
Compuesto:
Implementa las operaciones para los componentes con hijos y
almacena a los hijos
Cliente:
Utiliza objetos de la composicin mediante la interfaz de
Componente
Ingeniera del Software I
Patrones de Diseo 38
Compuesto
COMPOSITE
Ventajas e inconvenientes
Permite tratamiento uniforme de objetos simples y
complejos as como composiciones recursivas
Simplifica el cdigo de los clientes, que slo usan una
interfaz
Ingeniera del Software I
Patrones de Diseo 39
Compuesto
COMPOSITE
Ventajas e Inconvenientes
Facilita aadir nuevos componentes sin afectar a los clientes
Es difcil restringir los tipos de hijos
Ingeniera del Software I
Patrones de Diseo 40
Fachada
FACADE
Intencin:
Proporcionar una interfaz unificada para un conjunto de interfaces
en un subsistema, hacindolo ms fcil de usar.
Motivacin
Reducir la complejidad y minimizar dependencias
Ingeniera del Software I
Patrones de Diseo 41
Fachada
FACADE
Ingeniera del Software I
Patrones de Diseo 42
Fachada
FACADE
Ingeniera del Software I
Patrones de Diseo 43
Fachada
FACADE
Fachada
FACADE
Estructura
Ingeniera del Software I
Patrones de Diseo 45
Fachada
FACADE
Participantes
Fachada:
conoce las clases del subsistema y delega las peticiones de
los clientes en los objetos del subsistema
Clases del subsistema:
implementan la funcionalidad del subsistema y llevan a cabo
las peticiones que les enva la fachada, aunque no la conocen
Ingeniera del Software I
Patrones de Diseo 46
Fachada
FACADE
Colaboraciones
Los clientes se comunican con el subsistema a travs de
la fachada, que reenva las peticiones a los objetos del
subsistema apropiados y puede realizar tambin algn
trabajo de traduccin
Fachada
FACADE
Ventajas e inconvenientes
Oculta a los clientes de la complejidad del subsistema y lo
hace ms fcil de usar
Favorece un acoplamiento dbil entre el subsistema y sus
clientes, ayuda a dividir un sistema en capas y reduce
dependencias de compilacin
No evita que se usen las clases del sistema si es
necesario, dejando la puerta del subsistema abierta por si
es necesario
Ingeniera del Software I
Patrones de Diseo 48
Proxy
PROXY
Intencin:
Proporcionar un representante para controlar el acceso a un
objeto .
Tambin conocido como:
Surrogate, Embajador, Representante, Smart Pointer
Ingeniera del Software I
Patrones de Diseo 49
Proxy
PROXY
Motivacin
Procesador de texto capaz de incluir grficos. Necesita conocer
tamao y posicin de los grficos pero quiere cargarlos bajo
demanda, cuando tenga que visualizarlos en pantalla
El proxy, que conoce el tamao y la posicin de la imagen,
responde a todas las peticiones que pueda hasta que no le queda
ms remedio que cargar la imagen desde el disco
Una vez que ha creado la imagen ya no da la cara por ella y le
reenva las peticiones directamente
Ingeniera del Software I
Patrones de Diseo 50
Proxy
PROXY
Ingeniera del Software I
Patrones de Diseo 51
Proxy
PROXY
Proxy
PROXY
Estructura
Ingeniera del Software I
Patrones de Diseo 53
Proxy
PROXY
Participantes
Sujeto:
define la interfaz comn para SujetoReal y Proxy
Sujeto real:
define el objeto real al que Proxy representa
Proxy
representa a un objeto real y adems...
mantiene una referencia para acceder al sujeto real, controla el
acceso y puede ser responsable de crearlo y destruirlo
tiene una interfaz idntica a la de Sujeto para que ambos sean
intercambiables
Ingeniera del Software I
Patrones de Diseo 54
Proxy
PROXY
los proxys remotos deben codificar las peticiones y envirselas al
sujeto real remoto
los proxys virtuales pueden tener un cach con informacin sobre
el sujeto real para evitar accesos innecesarios
los proxys de proteccin comprueban que el cliente tenga
permisos de acceso para realizar una peticin
Colaboraciones
El proxy reenva las peticiones de los clientes al sujeto
real cuando es conveniente, dependiendo del tipo de proxy
Ingeniera del Software I
Patrones de Diseo 55
Proxy
PROXY
Ventajas e Inconvenientes
El proxy remoto oculta espacios de direcciones diferentes
El proxy virtual evita consumir recursos hasta que no es
necesario
El proxy de proteccin y los punteros inteligentes permiten
realizar tareas internas (recoleccin de basura, controlar
accesos, etc.)
Ingeniera del Software I
Patrones de Diseo 56
Mtodo Plantilla
TEMPLATE METHOD
Intencin:
Definir el esqueleto de un algoritmo en una operacin delegando
algunos pasos en las subclases
Tambin conocido como: Template
Ingeniera del Software I
Patrones de Diseo 57
Mtodo Plantilla
TEMPLATE METHOD
Motivacin
FW de Visual C++: en las aplicaciones SDI, el documento debe
limpiarse cuando se selecciona la opcin Nuevo del men Archivo
La clase abstracta CDocument no sabe como limpiar todas los
posibles clases de documentos, as que declara una operacin
abstracta DeleteContents que las subclases deben implementar
Mtodo Plantilla
TEMPLATE METHOD
Mtodo Plantilla
TEMPLATE METHOD
Estructura
Ingeniera del Software I
Patrones de Diseo 60
Mtodo Plantilla
TEMPLATE METHOD
Participantes
ClaseAbstracta:
implementa un mtodo plantilla que define el esqueleto de un
algoritmo y define operaciones primitivas abstractas que
implementan las subclases concretas para definir ciertos
pasos del algoritmo
ClaseConcreta:
implementa las operaciones primitivas para realizar los pasos
del algoritmo que son especficos de la subclase
Ingeniera del Software I
Patrones de Diseo 61
Mtodo Plantilla
TEMPLATE METHOD
Colaboraciones
Las clases concretas confan en que la clase abstracta
implemente la parte fija del algoritmo
Ingeniera del Software I
Patrones de Diseo 62
Mtodo Plantilla
TEMPLATE METHOD
Ventajas e Inconvenientes
Favorece la reutilizacin del cdigo (toolkits y FWs). Los
mtodos plantilla suelen llamar a los siguiente tipos de
operaciones:
Operaciones concretas de la propia clase abstracta o de
clases clientes
Operaciones primitivas (abstractas), como los mtodos fbrica
Operaciones gancho (hook operations), que proporcionan
una conducta por defecto (normalmente no hacer nada) que
las subclases pueden ampliar si es necesario. Es importante
especificar qu operaciones son ganchos (pueden redefinirse)
y cuales son abstractas (deben redefinirse)
Ingeniera del Software I
Patrones de Diseo 63
Iterador
ITERATOR
Intencin:
Proporcionar una forma de acceder secuencialmente a los
elementos de un agregado sin revelar su representacin interna
Motivacin
Iterar sobre los elementos de una lista sin ampliar la interfaz de la
lista y permitiendo recorridos simultneos
Ingeniera del Software I
Patrones de Diseo 64
Iterador
ITERATOR
Ingeniera del Software I
Patrones de Diseo 65
Iterador
ITERATOR
Iterador
ITERATOR
Estructura
Ingeniera del Software I
Patrones de Diseo 67
Iterador
ITERATOR
Participantes
Iterador:
define una interfaz para acceder a los elementos del agregado
y recorrerlos
IteradorConcreto:
implementa la interfaz de Iterador y mantiene la posicin
actual del recorrido
Agregado:
define una interfaz para crear un objeto iterador
AgregadoConcreto:
implementa la interfaz de creacin del iterador para devolver
una instancia apropiada de IteradorConcreto
Ingeniera del Software I
Patrones de Diseo 68
Iterador
ITERATOR
Colaboraciones
Un iterador concreto mantiene el objeto actual del
recorrido y es capaz de calcular el siguiente objeto
Ventajas e Inconvenientes
Permite variaciones en el recorrido del agregado
encapsulando los algoritmos de recorrido en distintas
subclases de iteradores
Simplifica la interfaz del agregado al no incluir las
operaciones de iteracin
Permite recorridos simultneos con varios iteradores a la
vez
Ingeniera del Software I
Patrones de Diseo 69
Observador
OBSERVER
Intencin:
Definir una dependencia 1:n de forma que cuando el objeto 1
cambie su estado, los n objetos sean notificados y se actualicen
automticamente
Motivacin
En un toolkit de GUI, separar los objetos de presentacin (vistas)
de los objetos de datos, de forma que se puedan tener varias
vistas sincronizadas de los mismos datos (editor-suscriptor)
Ingeniera del Software I
Patrones de Diseo 70
Observador
OBSERVER
Ingeniera del Software I
Patrones de Diseo 71
Observador
OBSERVER
Observador
OBSERVER
Estructura
Ingeniera del Software I
Patrones de Diseo 73
Observador
OBSERVER
Participantes
Sujeto:
conoce a sus observadores y proporciona una interfaz para
suscribirlos y desuscribirlos
Observador:
define una interfaz para actualizar los objetos que deban ser
notificados de cambios en el sujeto
SujetoConcreto:
enva una notificacin a sus observadores cuando cambia su
estado
ObservadorConcreto:
mantiene una referencia a un sujeto (SujetoConcreto),
almacena parte del estado del sujeto e implementa la interfaz
de actualizacin de Observador para mantener su estado
consistente con el del sujeto
Ingeniera del Software I
Patrones de Diseo 74
Observador
OBSERVER
Colaboraciones
SujetoConcreto notifica a sus observadores cuando ocurre
un cambio que pueda hacer inconsistente el estado de los
observadores con el suyo propio.
Ingeniera del Software I
Patrones de Diseo 75
Observador
OBSERVER
Cuando se le informa del cambio, los observadores
pueden solicitar informacin al sujeto para actualizar su
estado
Ingeniera del Software I
Patrones de Diseo 76
Observador
OBSERVER
Ventajas e Inconvenientes
Permite reutilizar sujetos y observadores por separado as
como aadir nuevos observadores sin modificar el sujeto o
los otros observadores
El acoplamiento abstracto entre el sujeto y el observador
ayuda a la divisin en niveles del sistema
Puede que cambios pequeos para unos observadores
representen grandes cambios en otros, que adems
pueden tener problemas para detectar qu es lo que ha
cambiado
Ingeniera del Software I
Patrones de Diseo 77
Mediador
MEDIATOR
Intencin:
Definir un objeto que encapsule como interactan un conjunto de
objetos, evitando que tengan que conocerse entre ellos y
permitiendo cambiar la interaccin de forma independiente
Motivacin
Que cada objeto encapsule toda su conducta suele ser bueno,
aunque en ciertos casos implica un nmero excesivo de enlaces
Ingeniera del Software I
Patrones de Diseo 78
Mediador
MEDIATOR
Ingeniera del Software I
Patrones de Diseo 79
Mediador
MEDIATOR
Mediador
MEDIATOR
Mediador
MEDIATOR
Ingeniera del Software I
Patrones de Diseo 82
Mediador
MEDIATOR
Mediador
MEDIATOR
Estructura
Ingeniera del Software I
Patrones de Diseo 84
Mediador
MEDIATOR
Participantes
Mediador:
define una interfaz para comunicarse con los objetos colegas
MediadorConcreto:
implementa la conducta cooperativa coordinando los colegas,
a los que conoce y mantiene actualizados
Clases colegas:
cada clase colega conoce a su mediador y se comunica con l
cuando en otras circunstancias lo hubiera tenido que hacer
con otro colega
Ingeniera del Software I
Patrones de Diseo 85
Mediador
MEDIATOR
Colaboraciones
Los objetos colegas envan y reciben peticiones del
mediador, que es el que implementa la conducta
cooperativa redirigiendo las peticiones entre los colegas
apropiados
Ingeniera del Software I
Patrones de Diseo 86
Mediador
MEDIATOR
Ventajas e Inconvenientes
Evita derivar nuevas clases de colegas: para cambiar la
conducta slo hay que derivar un nuevo mediador
Desacopla colegas, permitiendo que cambien
independientemente
Abstrae la cooperacin entre objetos y la encapsula en el
mediador, con lo que es ms fcil entender como funciona
el sistema
Centraliza el control en el mediador, que es un objeto
complejo y difcil de mantener
Ingeniera del Software I
Patrones de Diseo 87
Antipatrones de Diseo
Clase Gorda: Dotar a una clase con demasiados atributos y/o
mtodos, hacindola responsable de la mayora de la lgica
de negocio.
Fbrica de combustible (gas factory): Disear de manera
innecesariamente compleja.
Acoplamiento secuencial (sequential coupling): Construir
una clase que necesita que sus mtodos se invoquen en un
orden determinado.
BaseBean: Heredar funcionalidad de una clase utilidad en
lugar de delegar en ella.
Objeto todopoderoso (god object): Concentrar demasiada
funcionalidad en una nica parte del diseo (clase).
Poltergeist: Emplear objetos cuyo nico propsito es pasar la
informacin a terceros objetos.
Singletonitis: Abuso de la utilizacin del patrn singleton.
...