Vous êtes sur la page 1sur 57

1

2
3
4
Un patrn describe soluciones a problemas que surgen cuando se desarrolla software
dentro de un contexto particular. Son descripciones de soluciones a problemas de diseo
general que se repiten una y otra vez.
Un patrn de diseo nos brinda las siguientes respuestas:
Problema: Qu problema de diseo soluciona?
Solucin: Cmo solucionar el problema?
Contexto: Precondiciones para que se pueda aplicar el pattern.
Restricciones: Qu afecta la aplicacin del pattern
Dentro de las propiedades no funcionales vemos que:
Reutilizacin: nos permite que el cdigo sea reutilizable.
Facilidad de modificacin: nos permite que el costo de cambio en el cdigo de
alguna funcionalidad sea mnimo.
Facilidad de comprensin: el aplicar patrones de diseo, ayuda a que el cdigo
sea legible y se entienda mejor su diseo.
Robustez: permite que la aplicacin sea robusta, bien definida y diseada.
Eficiencia: permite que el sistema sea eficiente.
Facilidad de uso: la aplicacin de un patrn es simple, solo basta con adaptar las
situaciones plateadas y aplicacin de cada patrn.
5
6
Cada patrn describe un problema que ocurre una y otra vez en nuestro entorno. Tambin
describe el ncleo de la solucin al problema, de forma que puede utilizarse un milln de
veces sin hacer dos veces lo mismo
7
En 1979 el arquitecto Christopher Alexander aport al mundo de la arquitectura el
libro The Timeless Way of Building; en l propona el aprendizaje y uso de una
serie de patrones para la construccin de edificios de una mayor calidad.
En palabras de este autor, "Cada patrn describe un problema que ocurre infinidad
de veces en nuestro entorno, as como la solucin al mismo, de tal modo que
podemos utilizar esta solucin un milln de veces ms adelante sin tener que
volver a pensarla otra vez.
Los patrones que Christopher Alexander y sus colegas definieron, publicados en
un volumen denominado A Pattern Language, son un intento de formalizar y
plasmar de una forma prctica generaciones de conocimiento arquitectnico. Los
patrones no son principios abstractos que requieran su redescubrimiento para
obtener una aplicacin satisfactoria, ni son especficos a una situacin particular o
cultural; son algo intermedio. Un patrn define una posible solucin correcta para
un problema de diseo dentro de un contexto dado, describiendo las cualidades
invariantes de todas las soluciones.
8
Ms tarde, en 1987, Ward Cunningham y Kent Beck usaron varias ideas de
Alexander para desarrollar cinco patrones de interaccin hombre-ordenador (HCI)
y publicaron un artculo en OOPSLA-87 titulado Using Pattern Languages for OO
Programs.
No obstante, no fue hasta principios de los 90's cuando los patrones de diseo
tuvieron un gran xito en el mundo de la informtica a partir de la publicacin del
libro Design Patterns escrito por el grupo Gang of Four (GoF) compuesto por
Erich Gamma, Richard Helm, Ralph Johnson y John Vlisides, en el que se
recogan 23 patrones de diseo comunes.
9
Patrones de arquitectura: Aqullos que expresan un
esquema organizativo estructural fundamental para sistemas software.
Patrones de diseo: Aqullos que expresan esquemas para definir estructuras
de diseo (o sus relaciones)
con las que construir sistemas software.
Patrones de Anlisis: Expresan estructuras comunes que surgen durante el
anlisis.
Idiomas: Patrones de bajo nivel especficos para un lenguaje de programacin o
entorno concreto.
10
Nombre de patrn: Nombre estndar del patrn por el cual ser reconocido en la
comunidad.
Clasificacin del patrn: creacional, estructural o de comportamiento.
Intencin: Qu problema pretende resolver el patrn?
Motivacin: Escenario de ejemplo para la aplicacin del patrn.
Aplicabilidad: Usos comunes y criterios de aplicabilidad del patrn.
Estructura: Diagramas de clases oportunos para describir las clases que intervienen
en el patrn.
Participantes: Enumeracin y descripcin de las entidades abstractas (y sus roles)
que participan en el patrn.
Colaboraciones: Explicacin de las interrelaciones que se dan entre los
participantes.
Consecuencias: Consecuencias positivas y negativas en el diseo derivadas de la
aplicacin del patrn.
Implementacin: Tcnicas o comentarios oportunos de cara a la implementacin
del patrn.
Cdigo de ejemplo: Cdigo fuente ejemplo de implementacin del patrn.Usos
conocidos: Ejemplos de sistemas reales que usan el patrn.
Patrones relacionados: Referencias cruzadas con otros
patrones.
11
Creacionales: Creacin de objetos
Estructurales: Composicin de clases
Comportamiento: Interaccin de objetos
12
Abstract Factory (Fbrica abstracta): Permite trabajar con objetos de distintas
familias de manera que las familias no se mezclen entre s y haciendo
transparente el tipo de familia concreta que se est usando.
Builder (Constructor virtual): Abstrae el proceso de creacin de un objeto
complejo, centralizando dicho proceso en un nico punto.
Factory Method (Mtodo de fabricacin): Centraliza en una clase constructora
la creacin de objetos de un subtipo de un tipo determinado, ocultando al usuario
la casustica para elegir el subtipo que crear.
Prototype (Prototipo): Crea nuevos objetos clonndolos de una instancia ya
existente.
Singleton (Instancia nica): Garantiza la existencia de una nica instancia para
una clase y la creacin de un mecanismo de acceso global a dicha instancia.
13
Adapter (Adaptador): Adapta una interfaz para que pueda ser utilizada por una
clase que de otro modo no podra utilizarla.
Bridge (Puente): Desacopla una abstraccin de su implementacin.
Composite (Objeto compuesto): Permite tratar objetos compuestos como si de
uno simple se tratase.
Decorator (Envoltorio): Aade funcionalidad a una clase dinmicamente.
Facade (Fachada): Provee de una interfaz unificada simple para acceder a una
interfaz o grupo de interfaces de un subsistema.
Flyweight (Peso ligero): Reduce la redundancia cuando gran cantidad de objetos
poseen idntica informacin.
Proxy: Mantiene un representante de un objeto.
14
Chain of Responsibility (Cadena de responsabilidad): Permite establecer la
lnea que deben llevar los mensajes para que los objetos realicen la tarea indicada.
Command (Orden): Encapsula una operacin en un objeto, permitiendo ejecutar
dicha operacin sin necesidad de conocer el contenido de la misma.
Interpreter (Intrprete): Dado un lenguaje, define una gramtica para dicho
lenguaje, as como las herramientas necesarias para interpretarlo.
Iterator (Iterador): Permite realizar recorridos sobre objetos compuestos
independientemente de la implementacin de estos.
Mediator (Mediador): Define un objeto que coordine la comunicacin entre
objetos de distintas clases, pero que funcionan como un conjunto.
15
Chain of Responsibility (Cadena de responsabilidad): Permite establecer la lnea
que deben llevar los mensajes para que los objetos realicen la tarea indicada.
Command (Orden): Encapsula una operacin en un objeto, permitiendo ejecutar
dicha operacin sin necesidad de conocer el contenido de la misma.
Interpreter (Intrprete): Dado un lenguaje, define una gramtica para dicho
lenguaje, as como las herramientas necesarias para interpretarlo.
Iterator (Iterador): Permite realizar recorridos sobre objetos compuestos
independientemente de la implementacin de estos.
Mediator (Mediador): Define un objeto que coordine la comunicacin entre objetos
de distintas clases, pero que funcionan como un conjunto.
Memento (Recuerdo): Permite volver a estados anteriores del sistema.
Observer (Observador): Define una dependencia de uno-a-muchos entre objetos, de
forma que cuando un objeto cambie de estado se notifique y actualicen
automticamente todos los objetos que dependen de l.
State (Estado): Permite que un objeto modifique su comportamiento cada vez que
cambie su estado interno.
Strategy (Estrategia): Permite disponer de varios mtodos para resolver un
problema y elegir cul utilizar en tiempo de ejecucin.
Template Method (Mtodo plantilla): Define en una operacin el esqueleto de un
algoritmo, delegando en las subclases algunos de sus pasos, esto permite que las
subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura.
Visitor (Visitante): Permite definir nuevas operaciones sobre una jerarqua de clases
sin modificar las clases sobre las que opera.
16
17
El patrn Strategy define una familia de algoritmos. Los cuales estn encapsulados lo
cual los hace intercambiables. Este patrn permite que el algoritmo vare
independientemente, segn el objeto que lo use.
Tambin es conocido como patrn Policy
18
En el siguiente diagrama vemos que la clase StrategyClient, posee un mtodo llamado
performStrategicMethod, el cual dentro de su bloque, contiene la siguiente lnea de
cdigo:
strategy.strategicMethod();
La idea es que segn el tipo de objeto que sea strategy, se ejecutara el mtodo de alguna
de las clases que heredan de la interace IStrategy.
Ejemplo:
Strategy1 strategy = new Strategy1();
strategy.strategicMethod();
19
Consecuencias:
Factoriza aspectos comunes de una familia de algoritmos y utilizarlos en las
clases base de la jerarqua.
Aumenta cohesin del cliente.
Sistematiza el uso de implementaciones alternativas.
El cliente es el responsable de crear estrategias, por tanto debe comprender
las responsabilidades que ofrecen.
Menor eficiencia. Aumento el numero de objetos creados.
20
21
El patrn State permite a un objeto alterar su comportamiento cuando su estado interno
cambia.
Como vemos en el diagrama, la clase cliente, utiliza la clase Context para cambiar su
estado. En base a ese cambio, el objeto podr alterar su comportamiento segn los
estados definidos en: StateOne, StateTwo y StateThree.
22
Consecuencias:
Localiza el comportamiento dependiente del estado y divide dicho
comportamiento en diferentes estados.
Hace explcitas las transiciones entre estados.
Los objetos Estado pueden compartirse.
23
24
Como mencionamos anteriormente, el patrn Singleton es utilizado para asegurarnos que
solo una instancia de dicha clase es creada. Para ello, es que se limita el acceso al
constructor de la misma, con visibilidad private, pudiendo acceder a la nica instancia
creada a travs del metodo getInstance().
El cdigo seria el siguiente:
public class Empresa
{
private Empresa empresa= new Empresa();
private Empresa(){}
public Empresa getInstance(){
return empresa;
}
}
25
26
27
28
Este patrn de diseo nos permite componer objetos en estructuras de arboles para
representar jerarquas. Permite tratar objetos individuales y composiciones de objetos de
forma uniforme.
Como vemos en el diagrama, este patrn define una estructura de rbol. Un ejemplo
practico lo vemos en la representacin de un sistema de archivos, donde una carpeta esta
formada por carpetas, y cada carpeta posee carpetas. En este ejemplo, la carpeta raz: C://
es un componente, el cual posee hijos: todas las carpetas (objetos Composite). Las
carpetas que no poseen carpetas, serian las hojas (Leaf). Como vemos, la estructura
definida es recursiva.
29
30
31
32
33
. La refactorizacin de cdigo para que los mtodos comunes estn en una superclase es
un paso en la direccin correcta. El problema es que algunas veces una operacin que ha
sido refactorizada confa en la informacin especifica que solamente esta disponible en
una subclase. Debido a esto, los desarrolladores a menudo deciden no refactorizar y
aceptar la presencia de cdigo duplicado en distintas clases.
34
Este patrn define el esqueleto de un algoritmo en una operacin, difiriendo en algunos
pasos en la sub clase. Este permite que en las sub clases, se redefinan ciertas operaciones
de un algoritmo sin cambiar la estructura del algoritmo principal.
Un claro ejemplo es una clase Empleado, la cual contenga un mtodo calcularSueldo();.
Segn ciertos factores, el sueldo de un empleado ira variando. Esa variacin, la cual esta
dada por la forma en que se realiza el calculo, es un ejemplo de aplicacin de este patrn,
ya que segn cada tipo de empleado, los descuentos aplicados irn variando
35
36
37
38
Puede haber ocasiones en que se desee posponer el coste de la creacin de un
objeto hasta que sea necesario usarlo.
El objeto proxy acta en lugar del verdadero objeto, y ofrece las misma
interfaz, y las solicita en el objeto cuando es necesario.
39
Este patrn provee un sustituto o representante de otro objeto, de manera de controlar el
acceso a el.
En el diagrama, vemos que el objeto real es: RealSubject, y el representante es el objeto
Proxy. Este patrn suele ser utilizado cuando se quiere limitar el acceso a un objeto, para
ello, se enva un representante de objeto real, el puede o no contener todos los datos del
mismo. Tambin es utilizado para aminorar la carga de los sistemas, de manera tal que
solo se enve la informacin que se necesita.
40
41
Un proxy remoto puede ocultar el hecho de que un objeto reside en un
espacio de direcciones diferente.
Un proxy virtual puede llevar a cabo optimizaciones tales como crear un
objeto por encargo.
Tales como los proxies de proteccin como las referencias inteligentes
permiten realizar tareas adicionales cuando se accede a un objeto.
42
43
Este patrn define una dependencia uno a muchos entre objetos que cuando uno de ellos
cambia de estado, todos los dependientes son notificados y actualizados
automticamente. Un ejemplo simple seria: Imaginemos que tenemos 3 supermercados.
En cada uno, tenemos un programa que lleva el stock de la mercadera. Si en una
sucursal, se ingresara mercadera nueva, las dems sucursales querran ser notificadas de
ese nuevo ingreso de mercadera, de manera que si un cliente solicita cierto producto, el
vendedor pueda decirle si poseen o no stock y en que sucursal se encuentra disponible.
En este caso, todas las sucursales deberan ser notificadas sobre el nuevo ingreso,
teniendo una relacin, o dependencia de uno a muchos.
44
45
46
47
La idea principal en este patrn es tomar la responsabilidad del acceso y
recorrido de la lista y colocarla dentro del objeto iterator.
La clase Iterator define una interfaz para el acceso de los elementos de la
lista. Un objeto iterador es responsable de mantener la pista del elemento
actual; esto es, sabe cules elementos ya han sido recorridos.
48
El patrn Iterator, provee una forma de acceder a elementos de una secuencia, sin
exponer la representacin de cada uno de ellos. Como vemos en el ejemplo, la clase
Iterator provee mtodos para acceder a los elementos de una secuencia, sin importar el
tipo o la estructura de los mismos.
49
50
51
52
El patrn Faade, provee una interfaz unificada a una serie de interfaces en un
subsistema. Es decir, que el nico punto de acceso al sistema es a travs de ella, por lo
que logra modularizarlo y separar las responsabilidades de cada clase.
Este patrn permite reducir la complejidad y minimizar la comunicacin y dependencias
entre los distintos subsistemas.
53
54
55
56
57

Vous aimerez peut-être aussi