Documentos de Académico
Documentos de Profesional
Documentos de Cultura
06patrones PDF
06patrones PDF
Patrones de Diseo
1
Introduccin
2
Definicin de un patrn
Alexander(arquitecto/urbanista)
3
Definicin de un patrn de diseo
[Gamma]
Un patrn de diseo es una descripcin
de clases y objetos comunicndose
entre s adaptada para resolver un
problema de diseo general en un
contexto particular.
4
Introduccin
6
Ms informacin en...
7
Clasificacin de los patrones
Segn su propsito:
De creacin: conciernen al proceso de creacin
de objetos.
De estructura: tratan la composicin de clases
y/o objetos.
De comportamiento: caracterizan las formas en
las que interactan y reparten responsabilidades
las distintas clases u objetos.
8
Clasificacin de los patrones
GoF (gang of Four) [Gamma]
Propsito
Creacin Estructural Comportamiento
mbito
9
Adems: PATRONES DE DISEO FUNDAMENTALES
Patrones de diseo fundamentales
10
Patrn DELEGATION
Utilidad:
Cuando se quiere extender y reutilizar la
funcionalidad de una clase SIN UTILIZAR LA
HERENCIA
Ventajas:
En vez de herencia mltiple
Cuando una clase que hereda de otra quiere
ocultar algunos de los mtodos heredados
Compartir cdigo que NO se puede heredar
11
Patrn DELEGATION
El problema
Clase A Clase B
a1() b1(),b2()
. .
Clase C
a1(), b1(), b2()
.
Clase A Clase B
a1() b1(), b2()
. .
usa
Clase C
a1(), b1()
. El mtodo b1() habr que
aadirlo a C
NO USAR HERENCIA
SINO LA RELACIN USA 13
Patrn DELEGATION
Implementacin
class C extends A {
B objB;
C ( ) { // En la constructora se puede crear obj. de B
objB=new B();
}
void b1( ) { objB.b1( );}
.
14
Patrn INTERFACE
Utilidad y Ventajas
Utilidad
Definir un comportamiento independiente de
donde vaya a ser utilizado
Ventajas
Desacople entre comportamiento y clase.
Realizacin de clases Utilities
15
Patrn INTERFACE
El problema
Utilities
implementa
Clase A
irAlPrimero(),
tieneElems(),
obtenerSiguiente().
Definicin: Counting.countIf(Container,UnaryPredicate);
19
Patrn MARKER INTERFACE
Utilidad y Ventajas
Utilidad
Sirve para indicar atributos semnticos de
una clase.
Ventajas:
Se puede preguntar si un objeto pertenece
a una clase de un determinado tipo o no.
Habitualmente se utiliza en clases de
utilidades que tienen que determinar algo
sobre objetos sin asumir que son
instancias de una determinada clase o no.
20
Patrn MARKER INTERFACE
22
Clasificacin de los patrones
GoF (gang of Four) [Gamma]
Propsito
Creacin Estructural Comportamiento
mbito
23
Patrn SINGLETON
Utilidad
Asegurar que una clase tiene una sola instancia y
proporcionar un punto de acceso global a ella
Ventajas
Es necesario cuando hay clases que tienen que
gestionar de manera centralizada un recurso
Una variable global no garantiza que slo se instancie
una vez
24
Patrn SINGLETON
La solucin
Clase CSingleton
- CSingleton laInstancia Atributos
.
- CSingleton ()
Mtodo + getInstance () Mtodos
static
- indica que es private + indica que es public
25
Patrn SINGLETON
Implementacin
Utilidad
Separar la clase que crea los objetos, de la
jerarqua de objetos a instanciar
Ventajas
Centralizacin de la creacin de objetos
Facilita la escalabilidad del sistema
El usuario se abstrae de la instancia a crear
29
Patrn FACTORY METHOD
El problema
Programa1
Clase A If (tipo==1)
create A
oper1() else
oper2() create A
...
Programa2
If (tipo==1)
Clase A Clase A create A
else
oper1() oper1() create A
oper2() oper2()
... ...
Programa2
A.create(2)
Clase A Clase A
oper1() oper1()
oper2() oper2()
... ...
Interfaz A
Clase CFactory
oper1() A create(tipo)
oper2() .
...
Clase A1 Clase A2
oper1() oper1()
oper2() oper2()
... ...
class Aplicacin {
...
A newA(...) {
A miA;
CFactory fact= new CFactory();
...
miA = fact.create(TIPO 2);
...
return miA; }
No se crean las instancias directamente en Aplicacin
Si se quisiera aadir un nuevo A A, NO
NECESARIAMENTE habra que modificar la clase
Aplicacin. Los tipos que CFactory puede crear los puede
33
devolver un mtodo y Aplicacin trabajar con l.
Patrn FACTORY METHOD
class CFactory {
...
A create(String tipo) {
if (TIPO 1.equals(tipo))
return new A1();
else if (TIPO 2.equals(tipo))
return new A2(); .... }
Se crean las instancias de los Aes en CFactory, no en la clase
Aplicacin
Se pueden aadir nuevos Aes sin modificar Aplicacin. Basta
con aadir la clase A3 y modificar CFactory (aadir el tipo 34
correspondiente a dicho A: TIPOX)
Clasificacin de los patrones
GoF (gang of Four) [Gamma]
Propsito
Creacin Estructural Comportamiento
mbito
35
Patrn ADAPTER
Intencin
Convertir la interfaz de una clase en otra interfaz esperada por los
clientes.
Permite que clases con interfaces incompatibles se comuniquen
Ventajas
Se quiere utilizar una clase ya existente y su interfaz no se
corresponde con la interfaz que se necesita
Se quiere envolver cdigo no orientado a objeto con forma de
clase
36
Patrn ADAPTER
El problema
Clase A Interfaz C
usa
ejec(Interfaz C) m1(.)
m2(.)
.
Clase B
usa
b1(.) Clase AdapterB
b2(.)
. AdapterB(B)
m1(.)
m2(.)
.
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)
38
objetoDeA.ejec(objetoDeAdapterB)
Patrn ADAPTER
Diagrama de interaccin
40
Patrn ADAPTER
Ejemplo de uso en JGL
class WhatIUse {
public void op(WhatIWant wiw)
{ wiw.f();} }
Grfico
Label
Dibujar( )
Draw( )
Mover( )
Move( )
43
Patrn COMPOSITE
Intencin
Componer objetos en jerarquas todo-parte y permitir a los clientes
tratar objetos simples y compuestos de manera uniforme
Ventajas
Permite tratamiento uniforme de objetos simples y complejos as
como composiciones recursivas
Simplifica el cdigo de los clientes, que slo usan una interfaz
Facilita aadir nuevos componentes sin afectar a los clientes
Inconvenientes
Es difcil restringir los tipos de los hijos
Las operaciones de gestin de hijos en los objetos simples pueden
presentar problemas: seguridad frente a flexibilidad
44
Patrn COMPOSITE
El problema: La escalabilidad
Documento
Pgina
Columna Marco
Imagen
LneaDeTexto
Carcter
Un documento est formado por varias pginas, las cuales estn formadas por columnas que
contienen lneas de texto, formadas por caracteres.
Las columnas y pginas pueden contener marcos. Los marcos pueden contener columnas.
45
Las columnas, marcos y lneas de texto pueden contener imgenes.
Patrn COMPOSITE
La solucin
0..n
ElementoDeDocumento
Un documento est formado por varias pginas, las cuales estn formadas por
columnas que contienen lneas de texto, formadas por caracteres.
Las columnas y pginas pueden contener marcos. Los marcos pueden
contener columnas.
Las columnas, marcos y lneas de texto pueden contener imgenes. 46
Patrn COMPOSITE
La solucin
Cliente Componente
Operacin() m_hijo unCompuesto
Participantes
Componente: declara una clase abstracta para la composicin de objetos,
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
47
Patrn COMPOSITE
Ejemplo: La jerarqua de clases de AWT
48
Patrn COMPOSITE
Ejemplo: La jerarqua de clases de AWT
COMPONENTE
Applet
CONTENEDOR
(todo contenedor es
Las posibilidades son infinitas un componente)
- Una ventana formada por 2 cajas de texto, 2 campos de texto, 3 botones, 1
panel que contenga 5 casillas de validacin y una lista desplegable.
-Una ventana formada por 2 etiquetas, 2 campos de texto y un botn
-
Adems, aadir nuevos tipos de contenedores y de componentes no sera muy
49
costoso (estaramos ante una solucin extensible)
Patrn COMPOSITE
Un diseo francamente malo
Button *
*
CheckBox
* Frame
TextField
*
- Se necesitaran mtodos addButton, addCheckBox, addTextField,
addFrame en la clase Frame (y los correspondientes a todos los que faltan)
- Adems el diagrama est muy incompleto, ya que un Button puede ser
componente de un Panel, Dialog,
- Si se quisiera aadir un nuevo componente XXX, habra que cambiar la
clase Frame y aadir el mtodo addXXX (nada extensible) 50
Componentes principales de Swing
Applet
JComponent JMenuBar
JWindow
JFrame JTextField,
JDialog
JPanel JList JComboBox JTextArea,
JApplet JButton
51
Patrn FACADE
Clases SERVIDORAS
Clase B
usa b1()
Clase CLIENTE .
Clase A Clase C
usa
a1()
. c1()
.
usa
La clase A debe saber cul Clase D
es exactamente la clase que
le proporciona el servicio: d1()
.
b1() es de B, c1() de C, d1()
de D, ...
. 53
Patrn FACADE
El problema
Linkador
Editor
Depurador
Compilador
AnaSin AnaLex
56
Clasificacin de los patrones
GoF (gang of Four) [Gamma]
Propsito
Creacin Estructural Comportamiento
mbito
57
Patrn 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-subscriptor)
58
Patrn OBSERVER
Ejemplo
observadores
notificacin de cambio
peticiones, modificaciones
a = 50%
b = 30%
c = 20%
sujeto
59
Patrn OBSERVER
La solucin
Se implementa
Clase OBSERVADA aadiendo el atributo
Vector susObservers
(Modelo) en Subject
Mtodos Significado
addObserver (o) Aade un nuevo observador o
deleteObserver(o) Elimina el observador o
deleteObservers Elimina todos los observadores
countObservers Devuelve el nmero de observadores
setChanged() marca el objeto como modificado
hasChanged Devuelve cierto si el objeto esta modificado
La interfaz Observer
http://csis.pace.edu/~bergin/mvc/mvcgui.html
Building Graphical User Interfaces
with the MVC Pattern
63
Patrn OBSERVER
Ejemplo: La clase Observable (el modelo)
package mvc;
import java.util.*;
public class Observado extends java.util.Observable{
public double getF(){return temperatureF;}
public double getC(){return (temperatureF - 32.0) * 5.0 / 9.0;}
public void setF(double tempF){
temperatureF = tempF;
setChanged();
notifyObservers();
}
public void setC(double tempC){
temperatureF = tempC*9.0/5.0 + 32.0;
setChanged();
notifyObservers();
}
private double temperatureF = 32.0;
64
}
Patrn OBSERVER
Ejemplo: La clase Observer (la vista)
65
Patrn OBSERVER
Ejemplo: El programa principal
o.setF(45.5);
}
OBSERVER
69
Patrn OBSERVER
Inicializacin
70
Patrn OBSERVER
Adaptabilidad de la solucin
Intencin:
Encapsular algoritmos relacionados en
clases y hacerlos intercambiables.
Se permite que la seleccin del algoritmo
se haga segn el objeto que se trate.
Ventajas
Se permite cambiar el algoritmo
dinmicamente
Se eliminan sentencias condicionales para
seleccionar el algoritmo deseado 75
Patrn STRATEGY
La solucin
SistemaLineal MtodoResolucin
... Resolver()
Resolver ()
...
instancia->Resolver();
76
Patrn STRATEGY
Interfaz Strategy
Clase Cliente 1 usa 0..1 operac()
.
.
class Cliente {
Strategy s;
// PARA SELECCIONAR EL ALGORITMO
// SE ASIGNA A s LA INSTANCIA
// DE LA SUBCLASE QUE LO IMPLEMENTA
Cliente(Strategy str) {s = str;}
// EL Cliente SIEMPRE SE EJECUTAR AS:
s.operac(); }
class Cliente {
// EN VEZ DE:
if (cond1) operac1();
else if (cond2) operac2();
else ...
}
Intencin:
Proporcionar una forma de acceder a los
elementos de una coleccin de objetos de manera
secuencial sin revelar su representacin interna.
Define una interfaz que declara mtodos para
acceder secuencialmente a la coleccin.
Ventajas:
La clase que accede a la coleccin solamente a
travs de dicho interfaz permanece independiente
de la clase que implementa la interfaz.
80
Patrn ITERATOR
Interfaz Agregado Cliente Interfaz Iterador
CrearIterador() : Iterador hasNextItem()
getNextItem()
AgregadoConcreto
IteradorConcreto
CrearIterador() : Iterador hasNextItem()
getNextItem()
return new IteradorConcreto(this);
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
81
para devolver una instancia apropiada de IteradorConcreto
Patrn ITERATOR
Ejemplos en Java:
Vector listOfStudents = new Vector();
// PARA RECORRER EL VECTOR: