SlideShare una empresa de Scribd logo
1
Reutilización del Software
Patrones de Diseño
2
Introducción
• El diseño OO es difícil y el diseño de software
orientado a objetos reutilizable lo es aún más.
• Los diseñadores expertos no resuelven los
problemas desde sus principios; reutilizan
soluciones que han funcionado en el pasado.
– Se encuentran patrones de clases y objetos de
comunicación recurrentes en muchos sistemas
orientados a objetos.
– Estos patrones resuelven problemas de diseño
específicos y hacen el diseño flexible y reusable.
3
Definición de un patrón
Alexander(arquitecto/urbanista)
Cada patrón describe un problema que
ocurre una y otra vez en nuestro
entorno y describe también el núcleo de
la solución al problema, de forma que
puede utilizarse un millón de veces sin
tener que hacer dos veces lo mismo.
4
Definición de un patrón de diseño
[Gamma]
Un patrón de diseño es una descripción
de clases y objetos comunicándose
entre sí adaptada para resolver un
problema de diseño general en un
contexto particular.
5
Introducción
• Es un tema importante en el desarrollo de
software actual: permite capturar la experiencia
• Busca ayudar a la comunidad de desarrolladores
de software a resolver problemas comunes,
creando un cuerpo literario de base
– Crea un lenguaje común para comunicar ideas y
experiencia acerca de los problemas y sus soluciones
• El uso de patrones ayuda a obtener un software
de calidad (reutilización y extensibilidad)
6
Elementos de un patrón
• Nombre: describe el problema de diseño.
• El problema: describe cuándo aplicar el
patrón.
• La solución: describe los elementos que
componen el diseño, sus relaciones,
responsabilidades y colaboración.
7
Más información en...
• Desing Patterns. E. Gamma, R. Helm, R.
Johnson, and J. Vlissides. Design Patterns.
Addison Wesley, 1995.
• Patterns Home Page: http://hillside.net/patterns/
• Thinking in patterns with java
http://www.mindview.net/Books/TIPatterns/
8
Clasificación de los patrones
• Según su propósito:
– De creación: conciernen al proceso de creación
de objetos.
– De estructura: tratan la composición de clases
y/o objetos.
– De comportamiento: caracterizan las formas en
las que interactúan y reparten responsabilidades
las distintas clases u objetos.
9
Estructural ComportamientoCreación
Clase
Objeto
üFactory Method üAdapter Interpreter
Template Method
Abstract Factory
Builder
Prototype
üSingleton
üAdapter
Bridge
üComposite
Decorator
üFacade
Flyweight
Proxy
Chain of Responsability
Command
üIterator
Mediator
Memento
üObserver
State
üStrategy
Visitor
Propósito
Ámbito
Además: PATRONES DE DISEÑO FUNDAMENTALES
Clasificación de los patrones
GoF (gang of Four) [Gamma]
10
Patrones de diseño fundamentales
Son patrones que no aparecen la tabla definida
por Gamma, pero se utilizan habitualmente:
• DELEGATION
• INTERFACE
• MARKER INTERFACE
11
Patrón DELEGATION
Utilidad:
Cuando se quiere extender y reutilizar la
funcionalidad de una clase SIN UTILIZAR LA
HERENCIA
Ventajas:
• En vez de herencia múltiple
• Cuando una clase que hereda de otra quiere
ocultar algunos de los métodos heredados
• Compartir código que NO se puede heredar
12
Patrón DELEGATION
El problema
Clase A
a1()
….
Clase B
b1(),b2()
….
Clase C
a1(), b1(), b2()
….
- El lenguaje utilizado NO PERMITE HERENCIA MÚLTIPLE
- La clase C no desea TODOS los métodos de B
13
Patrón DELEGATION
La solución
Clase A
a1()
….
Clase B
b1(), b2()
….
Clase C
a1(), b1()
….
NO USAR HERENCIA
SINO LA RELACIÓN “USA”
usa
El método b1() habrá que
añadirlo a C
14
Patrón DELEGATION
Implementación
class C extends A {
B objB;
C ( ) { // En la constructora se puede crear obj. de B
objB=new B();
}
void b1( ) { objB.b1( );}
….
15
Patrón INTERFACE
Utilidad y Ventajas
Utilidad
Definir un comportamiento independiente de
donde vaya a ser utilizado
Ventajas
Desacople entre comportamiento y clase.
Realización de clases “Utilities”
16
Patrón INTERFACE
El problema
Utilities
void imprimirEstructura (????? o) {
o.irAlPrimero();
while (o.tieneElems() );
imprimir (o.obtenerSiguiente() );
}
Todos los objeto o, tienen que implementar:
irAlPrimero(), tieneElems(), obtenerSiguiente().
Problema: De qué tipo son los objetos o?
17
Patrón INTERFACE
La solución
Clase Utilities
ImprimirEstructura(Recorrible o)
….
Interfaz Recorrible
irAlPrimero(),
tieneElems(),
obtenerSiguiente().
usa
Clase A
Solución: Definir los parámetros de un tipo Interfaz.
Todas las clases(instancias) que quieran utilizar ese comportamiento
deberán implementar dicho interfaz
implementa
irAlPrimero(),
tieneElems(),
obtenerSiguiente().
18
Patrón INTERFACE
Implementación
class MiClase<T> implements Recorrible<T> {
Vector<T> v=new Vector<T>();
int pos;
void irAlPrimero() { pos=0;}
boolean tieneElems() {v.lenght < pos;}
T obtenerSiguiente() {
T o=v.elementAt(pos); pos++;
return o; }
}
}
19
Patrón INTERFACE
Ejemplo
// Estructuras de datos, algoritmos y predicados JGL
Array queue = new Array( );
queue.add( ...);
Counting.countIf(queue, new MayorEdad());
class MayorEdad implements UnaryPredicate {
public boolean execute (Object o1)
{ ...... } }
Definición: Counting.countIf(Container,UnaryPredicate);
Uso de
countIf
20
Patrón MARKER INTERFACE
Utilidad y Ventajas
• Utilidad
– Sirve para indicar atributos semánticos 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.
21
Patrón MARKER INTERFACE
Clase Utilidad
operacion(Object o)
….
Interfaz Markerusa
Clase Marcada
m1()
….
Dentro del código del método operacion(Object o) de la
clase Utilidad podemos preguntar si el objeto o es de una
clase Marker:
if (o instanceof Marker) {...}
else {...}
Clase NoMarcada
nm1()
….
22
Patrón MARKER INTERFACE
Ejemplo
En Java hay clases “serializables”,
“cloneables”, etc. Para ello, basta con
que implementen las interfaces
Serializable, Cloneable, etc.
23
Estructural ComportamientoCreación
Clase
Objeto
üFactory Method üAdapter Interpreter
Template Method
Abstract Factory
Builder
Prototype
üSingleton
üAdapter
Bridge
üComposite
Decorator
üFacade
Flyweight
Proxy
Chain of Responsability
Command
üIterator
Mediator
Memento
üObserver
State
üStrategy
Visitor
Propósito
Ámbito
Clasificación de los patrones
GoF (gang of Four) [Gamma]
24
Patrón 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 sólo se instancie
una vez
25
Patrón SINGLETON
La solución
Clase CSingleton
- CSingleton laInstancia
….
- CSingleton ()
+ getInstance ()
Atributos
Métodos
- indica que es private + indica que es public
Método
static
– El constructor de la clase DEBE SER PRIVADO
– Se proporciona un método ESTÁTICO en la clase que devuelve
LA ÚNICA INSTANCIA DE LA CLASE: getInstance()
26
Patrón SINGLETON
Implementación
public class CSingleton {
private static CSingleton laInstancia = new CSingleton();
private CSingleton() {}
public static CSingleton getInstance() {
return laInstancia;
}
………………………….
}
27
Patrón SINGLETON
Inconvenientes
Se podría obtener una nueva instancia usando el esquema anterior:
public class MiCSingleton extends CSingleton
implements Cloneable {}
MiCSingleton mcs = new MiCSingleton();
MiCSingleton mcsCopia = mcs.clone();
Para solucionarlo: definir CSingleton como final
public final class CSingleton {...}
28
public final class Facultad implements Serializable {
private Vector listaProfesores;
private Vector listaEstudiantes;
private Vector listaAsigs;
private Vector listaMatrs;
private static Facultad laFacultad=new Facultad();
private Facultad() // EL CONSTRUCTOR ES PRIVADO
{ listaProfesores = new Vector(); // Sólo hay UNA instancia
listaEstudiantes= new Vector(); // y se guarda en laFacultad
listaAsigs = new Vector();
listaMatrs = new Vector(); }
public static Facultad getInstance() {return laFacultad;}
public Vector obtListaProfesores()
{return listaProfesores;}
public void anadirProfesor(Profesor p)
{listaProfesores.addElement(p); }
EJEMPLO DE
PATRÓN
SINGLETON
29
Utilidad
Separar la clase que crea los objetos, de la
jerarquía de objetos a instanciar
Ventajas
– Centralización de la creación de objetos
– Facilita la escalabilidad del sistema
– El usuario se abstrae de la instancia a crear
Patrón FACTORY METHOD
30
Patrón FACTORY METHOD
El problema
Clase A
oper1()
oper2()
...
Clase A’
oper1()
oper2()
...
Clase A’’
oper1()
oper2()
...
If (tipo==1)
create A’
else
create A’’
Programa1
If (tipo==1)
create A’
else
create A’’
Programa2
Problema: Qué sucede si queremos añadir A’’’?
31
Patrón FACTORY METHOD
Una primera solución
Clase A
oper1()
oper2()
static A create(tipo)
Clase A’
oper1()
oper2()
...
Clase A’’
oper1()
oper2()
...
A.create(1);
Programa1
A.create(2)
Programa2
Solución: Hay que recompilar todas las clases que heredan de A
Puede que no tengamos acceso al código de A
32
Patrón FACTORY METHOD
La solución final
Interfaz A
oper1()
oper2()
...
Clase CFactory
A create(tipo)
….
Solución: Separar el creador de las instancias de la propia clase
las instancias se crean en una clase CFactory
Clase A1
oper1()
oper2()
...
Clase A2
oper1()
oper2()
...
33
Patrón FACTORY METHOD
class Aplicación {
...
A newA(...) {
A miA;
CFactory fact= new CFactory();
...
miA = fact.create(“TIPO 2”);
...
return miA; }
• No se crean las instancias directamente en Aplicación
• Si se quisiera añadir un nuevo A A’’’, NO
NECESARIAMENTE habría que modificar la clase
Aplicación. Los tipos que CFactory puede crear los puede
devolver un método y Aplicación trabajar con él.
34
Patrón 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
Aplicación
• Se pueden añadir nuevos Aes sin modificar Aplicación. Basta
con añadir la clase A3 y modificar CFactory (añadir el tipo
correspondiente a dicho A: “TIPOX”)
35
Estructural ComportamientoCreación
Clase
Objeto
üFactory Method üAdapter Interpreter
Template Method
Abstract Factory
Builder
Prototype
üSingleton
üAdapter
Bridge
üComposite
Decorator
üFacade
Flyweight
Proxy
Chain of Responsability
Command
üIterator
Mediator
Memento
üObserver
State
üStrategy
Visitor
Propósito
Ámbito
Clasificación de los patrones
GoF (gang of Four) [Gamma]
36
Patrón ADAPTER
Intención
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 código no orientado a objeto con forma de
clase
37
Patrón ADAPTER
El problema
Clase A usa Interfaz C
Clase B
m1(….)
m2(….)
….
b1(….)
b2(….)
….
Se desea utilizar la clase A (el método
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
ejec(Interfaz C)
38
Patrón ADAPTER
La solución
usa
Interfaz C
m1(….)
m2(….)
….
Clase B
b1(….)
b2(….)
….
Clase A
ejec(Interfaz C)
Solución: construir una clase Adaptadora de B que implemente la
interfaz C. Al implementarla, usa un objeto de B y sus métodos
Clase AdapterB
m1(….)
m2(….)
….
usa
Para utilizar la clase A:
objetoDeAdapterB =NEW AdapterB(objetoDeB)
AdapterB(B)
objetoDeA.ejec(objetoDeAdapterB)
39
Patrón ADAPTER
Diagrama de interacción
El cliente quiere usar el objeto a (para que ejecute el
método ejec) con un objeto de b. Para ello necesita
crear un objeto adaptador que encapsule b
ab: AdapterB
new AdapterB(b)
ejec(ab)
ab
a : A
m1(...)
b1()
b : B
m2(...)
b2()
: Cliente
40
Patrón ADAPTER
• Convierte la interfaz de una clase en
otra interfaz que los clientes esperan.
Permite que clases con interfaces
incompatibles puedan ser utilizadas
conjuntamente.
– La interfaz de la clase B (los métodos
b1(),b2()…) los convierte/adapta a los
métodos esperados por la clase A
(métodos m1(),m2(),…)
41
Patrón ADAPTER
Ejemplo de uso en JGL
usa
Interfaz Sequence
Array Java nativo: int[]
Clase Sorting
sort(Sequence)
OBJETIVO: PODER USAR LOS ALGORITMOS DE JGL CON int []
int ints[] = { 3, -1, 2, -3, 4 };
IntArray intArray = new IntArray( ints );
Sorting.sort( intArray );
Clase IntArray
usa
IntArray(int [] )
add, clear, isEmpty,
size. (de Container)
at, put, contains, ...
Operaciones con arrays:
acceso elº i: int[i], ...
Implementa: add,
clear, isEmpty, size..Adapter proporcionado por JGL
De JGL
De Java
42
Patrón ADAPTER
Ejemplo I
class WhatIUse {
public void op(WhatIWant wiw)
{ wiw.f();} }
class WhatIHave {
public void g() {}
public void h() {} }
class Adapter implements WhatIWant {
WhatIHave whatIHave;
public Adapter(WhatIHave wih) {
whatIHave = wih; }
public void f() {
// Implementa usando los
// métodos de WhatIHave:
whatIHave.g();
whatIHave.h(); } }
interface WhatIWant
{ void f(); }
43
Gráfico
Dibujar( )
Mover( )
Polígono
Dibujar( )
Mover( )
Cuadrado
Dibujar( )
Mover( )
Círculo
Dibujar( )
Mover( )
Label
Draw( )
Move( )
Texto
Dibujar( )
Mover( )
♦Extender un editor gráfico con clases de otro toolkit
Patrón ADAPTER
Ejemplo II
44
Patrón COMPOSITE
Intención
Componer objetos en jerarquías 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 código de los clientes, que sólo usan una interfaz
♦Facilita añadir nuevos componentes sin afectar a los clientes
Inconvenientes
♦Es difícil restringir los tipos de los hijos
♦Las operaciones de gestión de hijos en los objetos simples pueden
presentar problemas: seguridad frente a flexibilidad
45
Patrón COMPOSITE
El problema: La escalabilidad
Documento
Página
MarcoColumna
Imagen
LíneaDeTexto
Carácter
Un documento está formado por varias páginas, las cuales están formadas por columnas que
contienen líneas de texto, formadas por caracteres.
Las columnas y páginas pueden contener marcos. Los marcos pueden contener columnas.
Las columnas, marcos y líneas de texto pueden contener imágenes.
46
Patrón COMPOSITE
La solución
ElementoDeDocumento
Carácter Imagen ElemDeDocCompuesto
Documento Página Columna Marco LíneaDeTexto
Un documento está formado por varias páginas, las cuales están formadas por
columnas que contienen líneas de texto, formadas por caracteres.
Las columnas y páginas pueden contener marcos. Los marcos pueden
contener columnas.
Las columnas, marcos y líneas de texto pueden contener imágenes.
0..n
47
Patrón COMPOSITE
La solución
para cada hijo en m_hijo
hijo->Operación();
Simple
Operación()
Compuesto
Operación()
Add(c : Componente)
Remove(c : Componente)
Iterar() : Componente
m_hijo
Cliente Componente
Operación() unCompuesto
unCompuesto
unSimpleunSimpleunSimple
unSimple unSimple
♦Participantes
♦Componente: declara una clase abstracta para la composición de objetos,
♦Simple: representa los objetos de la composición 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 composición mediante la interfaz de Componente
48
Patrón COMPOSITE
Ejemplo: La jerarquía de clases de AWT
• Sirve para diseñar clases que agrupen
a objetos complejos, los cuales a su vez
están formados por objetos complejos
y/o simples
• La jerarquía de clases AWT se ha diseñado
según el patrón COMPOSITE
49
Patrón COMPOSITE
Ejemplo: La jerarquía de clases de AWT
COMPONENTE
CONTENEDOR
(todo contenedor es
un componente)
Applet
Las posibilidades son infinitas…
- Una ventana formada por 2 cajas de texto, 2 campos de texto, 3 botones, 1
panel que contenga 5 casillas de validación y una lista desplegable.
-Una ventana formada por 2 etiquetas, 2 campos de texto y un botón
-…
Además, añadir nuevos tipos de contenedores y de componentes no sería muy
costoso (estaríamos ante una solución extensible)
50
Patrón COMPOSITE
Un diseño francamente malo …
Frame
Button
CheckBox
TextField
…
- Se necesitarían métodos addButton, addCheckBox, addTextField,
addFrame en la clase Frame (y los correspondientes a todos los que faltan)
- Además el diagrama está muy incompleto, ya que un Button puede ser
componente de un Panel, Dialog, …
- Si se quisiera añadir un nuevo componente XXX, habría que cambiar la
clase Frame y añadir el método addXXX (nada extensible)
*
*
*
*
51
Componentes principales de Swing
JComponent
JFrame
JWindow
JPanel
JDialog
JList JComboBox
JMenuBar
JTextField,
JTextArea,
JButton…
Applet
JApplet
52
Intención: El patrón FACADE simplifica el acceso a
un conjunto de clases proporcionando una única
clase que todos utilizan para comunicarse con dicho
conjunto de clases.
Ventajas
– Los clientes no necesitan conocer las clases que
hay tras la clase FACADE
– Se pueden cambiar las clases “ocultadas” sin
necesidad de cambiar los clientes. Sólo hay que
realizar los cambios necesarios en FACADE
Patrón FACADE
53
Patrón FACADE
El problema
Clase A
a1()
….
Clase D
d1()
….
Clase C
c1()
….
Clase B
b1()
….
usa
usa
usa
….
Clase CLIENTE
Clases SERVIDORAS
La clase A debe saber cuál
es exactamente la clase que
le proporciona el servicio:
b1() es de B, c1() de C, d1()
de D, ...
54
Patrón FACADE
El problema
Clase CLI1
cl11()
….
Clase D
d1()
….
Clase C
c1()
….
Clase B
b1()
….
usa
usa...
….
Clases CLIENTES Clases SERVIDORAS
Problema: Además puede haber
muchas clases cliente...
Clase CLI2
cl21()
….
Clase CLI3
cl31()
….
55
Patrón FACADE
La solución
Clase CLI1
cl11()
….
Clase D
d1()
….
Clase C
c1()
….
Clase B
b1()
….
….
Clases CLIENTES Clases SERVIDORAS
Solución: Proporcionar una clase que
implemente todos los servicios (b1()…).
Los clientes sólo usarán dicha clase.
Clase CLI2
cl21()
….
Clase CLI3
cl31()
….
Clase Facade
b1(), c1(), d1(),..
usa
usa
public class Facade {
B objB = new B();
C objC = new C();…
void b1() { objB.b1();}..}
56
Compilador
Clases del
subsistema de
compilación
Editor
Depurador
Linkador
Token
AnaLexAnaSin
ASA TabSim
Compilar()
Patrón FACADE
Ejemplo: Estructurar un entorno de programación
57
Estructural ComportamientoCreación
Clase
Objeto
üFactory Method üAdapter Interpreter
Template Method
Abstract Factory
Builder
Prototype
üSingleton
üAdapter
Bridge
üComposite
Decorator
üFacade
Flyweight
Proxy
Chain of Responsability
Command
üIterator
Mediator
Memento
üObserver
State
üStrategy
Visitor
Propósito
Ámbito
Clasificación de los patrones
GoF (gang of Four) [Gamma]
58
• Intención
– Definir una dependencia 1:n de forma que
cuando el objeto 1 cambie su estado, los n
objetos sean notificados y se actualicen
automáticamente
• Motivación
– En un toolkit de GUI, separar los objetos
de presentación (vistas) de los objetos de
datos, de forma que se puedan tener
varias vistas sincronizadas de los mismos
datos (editor-subscriptor)
Patrón OBSERVER
59
a = 50%
b = 30%
c = 20%
notificación de cambio
peticiones, modificaciones
sujeto
observadores
Patrón OBSERVER
Ejemplo
60
Clases OBSERVADORAS
(Vistas)
Interfaz Observer
update()
….
Clase OBSERVADA
(Modelo)
susObservers
0..*
Clase ObsConcreta
update() {
// Qué hacer cuando
// cambie el “objeto
// observado” suSubject
// Llamará: suSubject.get()
} ...
suSubject
Se implementa
añadiendo el atributo
Observable suSubject
en ObsConcreta
Se implementa
añadiendo el atributo
Vector susObservers
en Subject
Class ObsConcreto
set(...){
// call notifyObservers()}
get() {...}
.....
1
Class Observable
addObserver(Observer)
removeObserver(Observer)
notifyObservers()
setChanged()
Patrón OBSERVER
La solución
61
Patrón OBSERVER
Diagrama de interacción
s: Observable oi: Observer
set(...)
update()
Llama a update()
para cada objeto
de susObservers
get(...)
“actualizarse con los
nuevos valores” de s
addObserver(oi) Registrarse como
“observador” de s
Se cambia algún
valor de s
setChanged()
notityObservers()
62Este método es invocado cuando el objeto observado ha cambiadoupdate()
countObservers
deleteObservers
deleteObserver(o)
addObserver (o)
Métodos
notifyObservers
hasChanged
setChanged()
Devuelve el número de observadores
Elimina todos los observadores
Elimina el observador o
Añade un nuevo observador o
Notifica a todos los objetos suscritos si el objeto esta en
Estado “modificado”
Devuelve cierto si el objeto esta “modificado”
marca el objeto como “modificado”
Significado
Patrón OBSERVER
La clase Observable
La interfaz Observer
63
Patrón OBSERVER
Otro Ejemplo
http://csis.pace.edu/~bergin/mvc/mvcgui.html
Building Graphical User Interfaces
with the MVC Pattern
64
Patrón 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;
}
65
Patrón OBSERVER
Ejemplo: La clase Observer (la vista)
public class Observador implements java.util.Observer
{
private Observado modelo;
public Observador(Observado model)
{
modelo=model;
model.addObserver(this); // Conecta la Vista con el Modelo
}
public void update(Observable t, Object o) // Invocada desde el modelo
{ System.out.println("La temperatura ha cambiado" + modelo.getF());
}
}
66
Patrón OBSERVER
Ejemplo: El programa principal
public static void main(String[] args) {
Observado o=new Observado();
Observador ob=new Observador(o);
Observador2 ob2=new Observador2(o);
o.setF(45.5);
}
The temperature has changed45.5
La temperatura ha cambiado45.5
Process exited with exit code 0.
67Ejemplo de patrón OBSERVER
OBSERVABLE
OBSERVER
68
...
public class ObserverQuePinta extends Frame
implements Observer{
Label label1 = new Label();
Panel panel1 = new Panel();
Observable suSubject;
public ObserverQuePinta(Observable s) {
suSubject = s;
s.addObserver(this);
}
public void update() {
String c = suSubject.getColor();
if (c.equals("ROJO")) panel1.setBackground(Color.red);
else if (c.equals("VERDE")) panel1.setBackground(Color.green);
else if (c.equals("AZUL")) panel1.setBackground(Color.blue);
} }
public interface Observer {
void update();
}
VISTA
69
public class Subject extends Observable {
Choice choice1 = new Choice();
public Subject() {
choice1.addItem("ROJO"); choice1.addItem("VERDE");
choice1.addItem("AZUL");
choice1.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(ItemEvent e) {
setChanged();
notifyObservers(); }}
}
public String getColor() {return choice1.getSelectedItem();}
}
MODELO
70
Subject s = new Subject();
Observer o1 = new ObserverQuePinta(s);
Observer o2 = new ObserverQuePinta(s);
CREACIÓN DE OBJETOS SUBJECT
Y OBSERVER
Patrón OBSERVER
Inicialización
71
• Si se quisiera añadir un nuevo OBSERVER
que en vez de pintar escribiera un número
para cada color (1 si ROJO, 2 si VERDE, 3 si
AZUL), ¿qué habría que hacer?
– Escribir nueva clase OBSERVER que implemente
“notificar”
• Si se quisiera cambiar el SUBJECT para
escoger el color pinchando un Checkbox en
vez de escogerlo de un Choice
– Hay que sustituir el Subject y llamar a “notificar”
de los observers cuando se seleccione un nuevo
Checkbox
A
B
Patrón OBSERVER
Adaptabilidad de la solución
72
...
public class ObserverQueEscribeNums extends Frame
implements Observer{
Label label1 = new Label();
TextArea textArea1 = new TextArea();
Subject suSubject;
public ObserverQueEscribeNums(Subject s) {
suSubject = s;
s.addObserver(this); ... }
public void update() {
String c = suSubject.getColor();
if (c.equals("ROJO"))
textArea1.append("NUEVO COLOR: "+1+"n");
else if (c.equals("VERDE"))
textArea1.append("NUEVO COLOR: "+2+"n");
else if (c.equals("AZUL"))
textArea1.append("NUEVO COLOR: "+3+"n");
} }
public interface Observer {
void notificar();
}
EXTENDER CON UN NUEVO OBSERVER
A
73
...
public class Subject extends Frame {
Checkbox checkbox1 = new Checkbox();
Checkbox checkbox2 = new Checkbox(); // ... y checkbox3
CheckboxGroup checkboxGroup1 = new CheckboxGroup();
public Subject() {
checkbox1.setLabel("ROJO");
checkbox1.setCheckboxGroup(checkboxGroup1);
checkbox1.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(ItemEvent e) {
notificar(); } });
checkbox2.setLabel("VERDE"); // y checkbox3.setLabel("AZUL");...
public void addObserver(Observer o) {susObservers.addElement(o);}
public void notificar() {
setChanged();
notifyObservers(); } }
public String getColor() {
return checkboxGroup1.getSelectedCheckbox().getLabel();} }
CAMBIAR DE SUBJECT
B
74
75
Intención:
– Encapsular algoritmos relacionados en
clases y hacerlos intercambiables.
– Se permite que la selección del algoritmo
se haga según el objeto que se trate.
Ventajas
– Se permite cambiar el algoritmo
dinámicamente
– Se eliminan sentencias condicionales para
seleccionar el algoritmo deseado
Patrón STRATEGY
76
MétodoResolución
Resolver()
SistemaLineal
...
Resolver ()
...
MétodoResolución1
Resolver ()
MétodoResolución2
Resolver ()
MétodoResolución3
Resolver ()
instancia->Resolver();
Patrón STRATEGY
La solución
77
Patrón STRATEGY
Clase Cliente
….
Clase StrConcr1
operac()
….
Interfaz Strategy
operac()
….
usa
….
0..11
Clase StrConcr2
operac()
….
La clase Cliente necesita ejecutar un método: operac(),
que puede ser implementado siguiendo distintos
algoritmos. Se pueden implementar todos ellos (en las
clases StrConcrX) y ser trasparente a Cliente.
78
Patrón STRATEGY
Implementación
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(); }
Cliente c = new Cliente(new StrConcr1());
Se indica cuál es el algoritmo que se ejecutará
79
Patrón STRATEGY
Implementación
class Cliente {
// EN VEZ DE:
if (cond1) operac1();
else if (cond2) operac2();
else ...
}
• Sentencias condicionales para seleccionar el algoritmo
• Si se quisiera añadir una nueva forma de ejecutar
operac() entonces HABRÍA QUE CAMBIAR EL
CÓDIGO DE LA CLASE Cliente
80
• Intención:
– Proporcionar una forma de acceder a los
elementos de una colección de objetos de manera
secuencial sin revelar su representación interna.
Define una interfaz que declara métodos para
acceder secuencialmente a la colección.
• Ventajas:
– La clase que accede a la colección solamente a
través de dicho interfaz permanece independiente
de la clase que implementa la interfaz.
Patrón ITERATOR
81
Cliente
IteradorConcreto
Interfaz Iterador
hasNextItem()
getNextItem()
Interfaz Agregado
CrearIterador() : Iterador
AgregadoConcreto
CrearIterador() : Iterador hasNextItem()
getNextItem()
♦Participantes
♦Iterador: define una interfaz para acceder a los elementos del
agregado y recorrerlos
♦IteradorConcreto: implementa la interfaz de Iterador y mantiene
la posición actual del recorrido
♦Agregado: define una interfaz para crear un objeto iterador
♦AgregadoConcreto: implementa la interfaz de creación del iterador
para devolver una instancia apropiada de IteradorConcreto
return new IteradorConcreto(this);
Patrón ITERATOR
82
• Ejemplos en Java:
Patrón ITERATOR
Vector listOfStudents = new Vector();
// PARA RECORRER EL VECTOR:
Enumeration list = listOfStudents.elements();
while ( list.hasMoreElements() )
System.out.println( list.nextElement() );
Hashtable anIndex = new Hashtable();
// PARA RECORRER LA TABLA HASH:
Enumeration list = anIndex.keys();
while ( list.hasMoreElements() )
System.out.println( list.nextElement() );

Más contenido relacionado

La actualidad más candente

Metodologia orientada a objeto - libro
Metodologia orientada a objeto -  libroMetodologia orientada a objeto -  libro
Metodologia orientada a objeto - libro
taninof
 
ProgramacióN Orientada A Objetos
ProgramacióN Orientada A ObjetosProgramacióN Orientada A Objetos
ProgramacióN Orientada A Objetos
Patricio Abad
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
still01
 
Diapositivas de la poo
Diapositivas de la pooDiapositivas de la poo
Diapositivas de la poo
Brayan Garcia Garcia
 
8.Clases y objetos Java
8.Clases y objetos Java8.Clases y objetos Java
8.Clases y objetos Java
Ramiro Estigarribia Canese
 
POO
POOPOO
Presentacion Patrones De Diseno GoF
Presentacion Patrones De Diseno GoFPresentacion Patrones De Diseno GoF
Presentacion Patrones De Diseno GoF
juansoto86
 
Unidad 1_Programacion Orientada a Objetos
Unidad 1_Programacion Orientada a ObjetosUnidad 1_Programacion Orientada a Objetos
Unidad 1_Programacion Orientada a Objetos
Cindy Adriana Bohórquez Santana
 
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Sergio Sanchez
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETO
Anabel Jaramillo
 
Programación orientada a objetos (I)
Programación orientada a objetos (I)Programación orientada a objetos (I)
Programación orientada a objetos (I)
Cristian
 
Net1 oop vbnet
Net1 oop vbnetNet1 oop vbnet
Net1 oop vbnet
jhordy2000
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
chutas666
 
Introduccionjava
IntroduccionjavaIntroduccionjava
Introduccionjava
OLGA MONTES
 
Programación Orientada Objetos Java Unidad 1
Programación Orientada Objetos Java Unidad 1Programación Orientada Objetos Java Unidad 1
Programación Orientada Objetos Java Unidad 1
Gustavo Alejandro Galindo Rosales
 
Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.
Whaleejaa Wha
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
Juan Carlos Riva
 
Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015
Renny Batista
 
Proyecto en android completado
Proyecto en android completadoProyecto en android completado
Proyecto en android completado
Kai Exo
 

La actualidad más candente (19)

Metodologia orientada a objeto - libro
Metodologia orientada a objeto -  libroMetodologia orientada a objeto -  libro
Metodologia orientada a objeto - libro
 
ProgramacióN Orientada A Objetos
ProgramacióN Orientada A ObjetosProgramacióN Orientada A Objetos
ProgramacióN Orientada A Objetos
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
 
Diapositivas de la poo
Diapositivas de la pooDiapositivas de la poo
Diapositivas de la poo
 
8.Clases y objetos Java
8.Clases y objetos Java8.Clases y objetos Java
8.Clases y objetos Java
 
POO
POOPOO
POO
 
Presentacion Patrones De Diseno GoF
Presentacion Patrones De Diseno GoFPresentacion Patrones De Diseno GoF
Presentacion Patrones De Diseno GoF
 
Unidad 1_Programacion Orientada a Objetos
Unidad 1_Programacion Orientada a ObjetosUnidad 1_Programacion Orientada a Objetos
Unidad 1_Programacion Orientada a Objetos
 
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETO
 
Programación orientada a objetos (I)
Programación orientada a objetos (I)Programación orientada a objetos (I)
Programación orientada a objetos (I)
 
Net1 oop vbnet
Net1 oop vbnetNet1 oop vbnet
Net1 oop vbnet
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Introduccionjava
IntroduccionjavaIntroduccionjava
Introduccionjava
 
Programación Orientada Objetos Java Unidad 1
Programación Orientada Objetos Java Unidad 1Programación Orientada Objetos Java Unidad 1
Programación Orientada Objetos Java Unidad 1
 
Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015
 
Proyecto en android completado
Proyecto en android completadoProyecto en android completado
Proyecto en android completado
 

Similar a 06 patrones

Transparencias_Patrones.ppt
Transparencias_Patrones.pptTransparencias_Patrones.ppt
Transparencias_Patrones.ppt
BenaventeSolorzanoCa
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
jjegonzalezf
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
Iker Canarias
 
Arquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseñoArquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseño
Germania Rodriguez
 
Astema3
Astema3Astema3
Patrones de diseño [DdA-2]
Patrones de diseño [DdA-2]Patrones de diseño [DdA-2]
Patrones de diseño [DdA-2]
Karloz Dz
 
Patrones de diseño - Andrés Dorado
Patrones de diseño - Andrés DoradoPatrones de diseño - Andrés Dorado
Patrones de diseño - Andrés Dorado
2008PA2Info3
 
Patrones de Diseño. (Design Patterns).pdf
Patrones de Diseño. (Design Patterns).pdfPatrones de Diseño. (Design Patterns).pdf
Patrones de Diseño. (Design Patterns).pdf
millonario2
 
200812 - Patrones de Diseño de Software (parte 1/4)
200812 - Patrones de Diseño de Software (parte 1/4)200812 - Patrones de Diseño de Software (parte 1/4)
200812 - Patrones de Diseño de Software (parte 1/4)
Javier Gonzalez-Sanchez
 
Patrones de diseño.pptx
Patrones de diseño.pptxPatrones de diseño.pptx
Patrones de diseño.pptx
gigoallspam1
 
Prog oo con_java
Prog oo con_javaProg oo con_java
Prog oo con_java
JoseEstebanTelloEstr
 
Patrones de-diseño-mañana
Patrones de-diseño-mañanaPatrones de-diseño-mañana
Patrones de-diseño-mañana
ale abad aguilar
 
6070_TRECALDE_00288.ppt
6070_TRECALDE_00288.ppt6070_TRECALDE_00288.ppt
6070_TRECALDE_00288.ppt
Hector Manuel Vanegas Solis
 
Unidad II_1.pptx
Unidad II_1.pptxUnidad II_1.pptx
Unidad II_1.pptx
Arigol15Gomez
 
Unidad i poo avanzada
Unidad i   poo avanzadaUnidad i   poo avanzada
Unidad i poo avanzada
Jose Angel Rodriguez
 
Patrones de diseño - Henry Vallejo
Patrones de diseño - Henry VallejoPatrones de diseño - Henry Vallejo
Patrones de diseño - Henry Vallejo
2008PA2Info3
 
Construcción de Software (Patrones)
Construcción de Software (Patrones)Construcción de Software (Patrones)
Construcción de Software (Patrones)
sandyx17
 
Conceptos básicos de programación orientada a objetos (poo)
Conceptos básicos de programación orientada a objetos (poo)Conceptos básicos de programación orientada a objetos (poo)
Conceptos básicos de programación orientada a objetos (poo)
Maria Garcia
 
Como ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesComo ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicaciones
Micael Gallego
 
chuy
chuy chuy

Similar a 06 patrones (20)

Transparencias_Patrones.ppt
Transparencias_Patrones.pptTransparencias_Patrones.ppt
Transparencias_Patrones.ppt
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
 
Arquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseñoArquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseño
 
Astema3
Astema3Astema3
Astema3
 
Patrones de diseño [DdA-2]
Patrones de diseño [DdA-2]Patrones de diseño [DdA-2]
Patrones de diseño [DdA-2]
 
Patrones de diseño - Andrés Dorado
Patrones de diseño - Andrés DoradoPatrones de diseño - Andrés Dorado
Patrones de diseño - Andrés Dorado
 
Patrones de Diseño. (Design Patterns).pdf
Patrones de Diseño. (Design Patterns).pdfPatrones de Diseño. (Design Patterns).pdf
Patrones de Diseño. (Design Patterns).pdf
 
200812 - Patrones de Diseño de Software (parte 1/4)
200812 - Patrones de Diseño de Software (parte 1/4)200812 - Patrones de Diseño de Software (parte 1/4)
200812 - Patrones de Diseño de Software (parte 1/4)
 
Patrones de diseño.pptx
Patrones de diseño.pptxPatrones de diseño.pptx
Patrones de diseño.pptx
 
Prog oo con_java
Prog oo con_javaProg oo con_java
Prog oo con_java
 
Patrones de-diseño-mañana
Patrones de-diseño-mañanaPatrones de-diseño-mañana
Patrones de-diseño-mañana
 
6070_TRECALDE_00288.ppt
6070_TRECALDE_00288.ppt6070_TRECALDE_00288.ppt
6070_TRECALDE_00288.ppt
 
Unidad II_1.pptx
Unidad II_1.pptxUnidad II_1.pptx
Unidad II_1.pptx
 
Unidad i poo avanzada
Unidad i   poo avanzadaUnidad i   poo avanzada
Unidad i poo avanzada
 
Patrones de diseño - Henry Vallejo
Patrones de diseño - Henry VallejoPatrones de diseño - Henry Vallejo
Patrones de diseño - Henry Vallejo
 
Construcción de Software (Patrones)
Construcción de Software (Patrones)Construcción de Software (Patrones)
Construcción de Software (Patrones)
 
Conceptos básicos de programación orientada a objetos (poo)
Conceptos básicos de programación orientada a objetos (poo)Conceptos básicos de programación orientada a objetos (poo)
Conceptos básicos de programación orientada a objetos (poo)
 
Como ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesComo ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicaciones
 
chuy
chuy chuy
chuy
 

Más de Oswaldo Coronado

Castro requena
Castro requenaCastro requena
Castro requena
Oswaldo Coronado
 
Ancajima ubillus
Ancajima ubillusAncajima ubillus
Ancajima ubillus
Oswaldo Coronado
 
Ancajima ubillus
Ancajima ubillusAncajima ubillus
Ancajima ubillus
Oswaldo Coronado
 
Manual de impresora maury
Manual de impresora mauryManual de impresora maury
Manual de impresora maury
Oswaldo Coronado
 
Libro de trabajo
Libro de trabajoLibro de trabajo
Libro de trabajo
Oswaldo Coronado
 
Los sacramentos de la iglesia
Los sacramentos de la iglesiaLos sacramentos de la iglesia
Los sacramentos de la iglesia
Oswaldo Coronado
 
Breve historia de la educación
Breve historia de la educaciónBreve historia de la educación
Breve historia de la educación
Oswaldo Coronado
 

Más de Oswaldo Coronado (7)

Castro requena
Castro requenaCastro requena
Castro requena
 
Ancajima ubillus
Ancajima ubillusAncajima ubillus
Ancajima ubillus
 
Ancajima ubillus
Ancajima ubillusAncajima ubillus
Ancajima ubillus
 
Manual de impresora maury
Manual de impresora mauryManual de impresora maury
Manual de impresora maury
 
Libro de trabajo
Libro de trabajoLibro de trabajo
Libro de trabajo
 
Los sacramentos de la iglesia
Los sacramentos de la iglesiaLos sacramentos de la iglesia
Los sacramentos de la iglesia
 
Breve historia de la educación
Breve historia de la educaciónBreve historia de la educación
Breve historia de la educación
 

Último

PRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptx
PRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptxPRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptx
PRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptx
ANGELJOELSILVAPINZN
 
DIAGRAMA DE FLUJO DE ALGORITMO......
DIAGRAMA DE FLUJO   DE   ALGORITMO......DIAGRAMA DE FLUJO   DE   ALGORITMO......
DIAGRAMA DE FLUJO DE ALGORITMO......
taniarivera1015tvr
 
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapasexposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
raul958375
 
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTOOPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
GERARDO GONZALEZ
 
Operaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica MaizOperaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica Maiz
carolina838317
 
Focos SSO Fin de Semana del 31 MAYO A al 02 de JUNIO de 2024.pdf
Focos SSO Fin de Semana del 31 MAYO A  al 02 de JUNIO  de 2024.pdfFocos SSO Fin de Semana del 31 MAYO A  al 02 de JUNIO  de 2024.pdf
Focos SSO Fin de Semana del 31 MAYO A al 02 de JUNIO de 2024.pdf
PatoLokooGuevara
 
SISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOS
SISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOSSISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOS
SISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOS
micoltadaniel2024
 
Ducto Barras para instalaciones electricas
Ducto Barras para instalaciones electricasDucto Barras para instalaciones electricas
Ducto Barras para instalaciones electricas
Edgar Najera
 
muros de contencion, diseño y generalidades
muros de contencion, diseño y generalidadesmuros de contencion, diseño y generalidades
muros de contencion, diseño y generalidades
AlejandroArturoGutie1
 
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIAMETODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
LuisCiriacoMolina
 
Infografía de operaciones básicas....pdf
Infografía de operaciones básicas....pdfInfografía de operaciones básicas....pdf
Infografía de operaciones básicas....pdf
jahirrtorresa
 
Informe Municipal provincial de la ciudad de Tacna
Informe Municipal provincial de la ciudad de TacnaInforme Municipal provincial de la ciudad de Tacna
Informe Municipal provincial de la ciudad de Tacna
BrusCiriloPintoApaza
 
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomomRinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
DanielaLoaeza5
 
Infografia - Hugo Hidalgo - Construcción
Infografia - Hugo Hidalgo - ConstrucciónInfografia - Hugo Hidalgo - Construcción
Infografia - Hugo Hidalgo - Construcción
MaraManuelaUrribarri
 
Uso de equipos de protección personal.pptx
Uso de equipos de protección personal.pptxUso de equipos de protección personal.pptx
Uso de equipos de protección personal.pptx
OmarPadillaGarcia
 
AE 34 Serie de sobrecargas aisladas_240429_172040.pdf
AE  34 Serie de sobrecargas aisladas_240429_172040.pdfAE  34 Serie de sobrecargas aisladas_240429_172040.pdf
AE 34 Serie de sobrecargas aisladas_240429_172040.pdf
sebastianpech108
 
COMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCE
COMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCECOMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCE
COMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCE
jhunior lopez rodriguez
 
Presentación- de motor a combustión -diesel.pptx
Presentación- de motor a combustión -diesel.pptxPresentación- de motor a combustión -diesel.pptx
Presentación- de motor a combustión -diesel.pptx
ronnyrocha223
 
380378757-velocidades-maximas-y-minimas-en-los-canales.pdf
380378757-velocidades-maximas-y-minimas-en-los-canales.pdf380378757-velocidades-maximas-y-minimas-en-los-canales.pdf
380378757-velocidades-maximas-y-minimas-en-los-canales.pdf
DiegoAlexanderChecaG
 
EXPOSICIÓN NTP IEC 60364-1 - Orlando Chávez Chacaltana.pdf
EXPOSICIÓN NTP IEC 60364-1 - Orlando Chávez Chacaltana.pdfEXPOSICIÓN NTP IEC 60364-1 - Orlando Chávez Chacaltana.pdf
EXPOSICIÓN NTP IEC 60364-1 - Orlando Chávez Chacaltana.pdf
hugodennis88
 

Último (20)

PRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptx
PRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptxPRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptx
PRACTICA 2 EDAFOLOGÍA TEXTURA DEL SUELO.pptx
 
DIAGRAMA DE FLUJO DE ALGORITMO......
DIAGRAMA DE FLUJO   DE   ALGORITMO......DIAGRAMA DE FLUJO   DE   ALGORITMO......
DIAGRAMA DE FLUJO DE ALGORITMO......
 
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapasexposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
 
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTOOPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
 
Operaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica MaizOperaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica Maiz
 
Focos SSO Fin de Semana del 31 MAYO A al 02 de JUNIO de 2024.pdf
Focos SSO Fin de Semana del 31 MAYO A  al 02 de JUNIO  de 2024.pdfFocos SSO Fin de Semana del 31 MAYO A  al 02 de JUNIO  de 2024.pdf
Focos SSO Fin de Semana del 31 MAYO A al 02 de JUNIO de 2024.pdf
 
SISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOS
SISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOSSISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOS
SISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOS
 
Ducto Barras para instalaciones electricas
Ducto Barras para instalaciones electricasDucto Barras para instalaciones electricas
Ducto Barras para instalaciones electricas
 
muros de contencion, diseño y generalidades
muros de contencion, diseño y generalidadesmuros de contencion, diseño y generalidades
muros de contencion, diseño y generalidades
 
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIAMETODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
 
Infografía de operaciones básicas....pdf
Infografía de operaciones básicas....pdfInfografía de operaciones básicas....pdf
Infografía de operaciones básicas....pdf
 
Informe Municipal provincial de la ciudad de Tacna
Informe Municipal provincial de la ciudad de TacnaInforme Municipal provincial de la ciudad de Tacna
Informe Municipal provincial de la ciudad de Tacna
 
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomomRinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
 
Infografia - Hugo Hidalgo - Construcción
Infografia - Hugo Hidalgo - ConstrucciónInfografia - Hugo Hidalgo - Construcción
Infografia - Hugo Hidalgo - Construcción
 
Uso de equipos de protección personal.pptx
Uso de equipos de protección personal.pptxUso de equipos de protección personal.pptx
Uso de equipos de protección personal.pptx
 
AE 34 Serie de sobrecargas aisladas_240429_172040.pdf
AE  34 Serie de sobrecargas aisladas_240429_172040.pdfAE  34 Serie de sobrecargas aisladas_240429_172040.pdf
AE 34 Serie de sobrecargas aisladas_240429_172040.pdf
 
COMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCE
COMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCECOMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCE
COMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCE
 
Presentación- de motor a combustión -diesel.pptx
Presentación- de motor a combustión -diesel.pptxPresentación- de motor a combustión -diesel.pptx
Presentación- de motor a combustión -diesel.pptx
 
380378757-velocidades-maximas-y-minimas-en-los-canales.pdf
380378757-velocidades-maximas-y-minimas-en-los-canales.pdf380378757-velocidades-maximas-y-minimas-en-los-canales.pdf
380378757-velocidades-maximas-y-minimas-en-los-canales.pdf
 
EXPOSICIÓN NTP IEC 60364-1 - Orlando Chávez Chacaltana.pdf
EXPOSICIÓN NTP IEC 60364-1 - Orlando Chávez Chacaltana.pdfEXPOSICIÓN NTP IEC 60364-1 - Orlando Chávez Chacaltana.pdf
EXPOSICIÓN NTP IEC 60364-1 - Orlando Chávez Chacaltana.pdf
 

06 patrones

  • 2. 2 Introducción • El diseño OO es difícil y el diseño de software orientado a objetos reutilizable lo es aún más. • Los diseñadores expertos no resuelven los problemas desde sus principios; reutilizan soluciones que han funcionado en el pasado. – Se encuentran patrones de clases y objetos de comunicación recurrentes en muchos sistemas orientados a objetos. – Estos patrones resuelven problemas de diseño específicos y hacen el diseño flexible y reusable.
  • 3. 3 Definición de un patrón Alexander(arquitecto/urbanista) Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno y describe también el núcleo de la solución al problema, de forma que puede utilizarse un millón de veces sin tener que hacer dos veces lo mismo.
  • 4. 4 Definición de un patrón de diseño [Gamma] Un patrón de diseño es una descripción de clases y objetos comunicándose entre sí adaptada para resolver un problema de diseño general en un contexto particular.
  • 5. 5 Introducción • Es un tema importante en el desarrollo de software actual: permite capturar la experiencia • Busca ayudar a la comunidad de desarrolladores de software a resolver problemas comunes, creando un cuerpo literario de base – Crea un lenguaje común para comunicar ideas y experiencia acerca de los problemas y sus soluciones • El uso de patrones ayuda a obtener un software de calidad (reutilización y extensibilidad)
  • 6. 6 Elementos de un patrón • Nombre: describe el problema de diseño. • El problema: describe cuándo aplicar el patrón. • La solución: describe los elementos que componen el diseño, sus relaciones, responsabilidades y colaboración.
  • 7. 7 Más información en... • Desing Patterns. E. Gamma, R. Helm, R. Johnson, and J. Vlissides. Design Patterns. Addison Wesley, 1995. • Patterns Home Page: http://hillside.net/patterns/ • Thinking in patterns with java http://www.mindview.net/Books/TIPatterns/
  • 8. 8 Clasificación de los patrones • Según su propósito: – De creación: conciernen al proceso de creación de objetos. – De estructura: tratan la composición de clases y/o objetos. – De comportamiento: caracterizan las formas en las que interactúan y reparten responsabilidades las distintas clases u objetos.
  • 9. 9 Estructural ComportamientoCreación Clase Objeto üFactory Method üAdapter Interpreter Template Method Abstract Factory Builder Prototype üSingleton üAdapter Bridge üComposite Decorator üFacade Flyweight Proxy Chain of Responsability Command üIterator Mediator Memento üObserver State üStrategy Visitor Propósito Ámbito Además: PATRONES DE DISEÑO FUNDAMENTALES Clasificación de los patrones GoF (gang of Four) [Gamma]
  • 10. 10 Patrones de diseño fundamentales Son patrones que no aparecen la tabla definida por Gamma, pero se utilizan habitualmente: • DELEGATION • INTERFACE • MARKER INTERFACE
  • 11. 11 Patrón DELEGATION Utilidad: Cuando se quiere extender y reutilizar la funcionalidad de una clase SIN UTILIZAR LA HERENCIA Ventajas: • En vez de herencia múltiple • Cuando una clase que hereda de otra quiere ocultar algunos de los métodos heredados • Compartir código que NO se puede heredar
  • 12. 12 Patrón DELEGATION El problema Clase A a1() …. Clase B b1(),b2() …. Clase C a1(), b1(), b2() …. - El lenguaje utilizado NO PERMITE HERENCIA MÚLTIPLE - La clase C no desea TODOS los métodos de B
  • 13. 13 Patrón DELEGATION La solución Clase A a1() …. Clase B b1(), b2() …. Clase C a1(), b1() …. NO USAR HERENCIA SINO LA RELACIÓN “USA” usa El método b1() habrá que añadirlo a C
  • 14. 14 Patrón DELEGATION Implementación class C extends A { B objB; C ( ) { // En la constructora se puede crear obj. de B objB=new B(); } void b1( ) { objB.b1( );} ….
  • 15. 15 Patrón INTERFACE Utilidad y Ventajas Utilidad Definir un comportamiento independiente de donde vaya a ser utilizado Ventajas Desacople entre comportamiento y clase. Realización de clases “Utilities”
  • 16. 16 Patrón INTERFACE El problema Utilities void imprimirEstructura (????? o) { o.irAlPrimero(); while (o.tieneElems() ); imprimir (o.obtenerSiguiente() ); } Todos los objeto o, tienen que implementar: irAlPrimero(), tieneElems(), obtenerSiguiente(). Problema: De qué tipo son los objetos o?
  • 17. 17 Patrón INTERFACE La solución Clase Utilities ImprimirEstructura(Recorrible o) …. Interfaz Recorrible irAlPrimero(), tieneElems(), obtenerSiguiente(). usa Clase A Solución: Definir los parámetros de un tipo Interfaz. Todas las clases(instancias) que quieran utilizar ese comportamiento deberán implementar dicho interfaz implementa irAlPrimero(), tieneElems(), obtenerSiguiente().
  • 18. 18 Patrón INTERFACE Implementación class MiClase<T> implements Recorrible<T> { Vector<T> v=new Vector<T>(); int pos; void irAlPrimero() { pos=0;} boolean tieneElems() {v.lenght < pos;} T obtenerSiguiente() { T o=v.elementAt(pos); pos++; return o; } } }
  • 19. 19 Patrón INTERFACE Ejemplo // Estructuras de datos, algoritmos y predicados JGL Array queue = new Array( ); queue.add( ...); Counting.countIf(queue, new MayorEdad()); class MayorEdad implements UnaryPredicate { public boolean execute (Object o1) { ...... } } Definición: Counting.countIf(Container,UnaryPredicate); Uso de countIf
  • 20. 20 Patrón MARKER INTERFACE Utilidad y Ventajas • Utilidad – Sirve para indicar atributos semánticos 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.
  • 21. 21 Patrón MARKER INTERFACE Clase Utilidad operacion(Object o) …. Interfaz Markerusa Clase Marcada m1() …. Dentro del código del método operacion(Object o) de la clase Utilidad podemos preguntar si el objeto o es de una clase Marker: if (o instanceof Marker) {...} else {...} Clase NoMarcada nm1() ….
  • 22. 22 Patrón MARKER INTERFACE Ejemplo En Java hay clases “serializables”, “cloneables”, etc. Para ello, basta con que implementen las interfaces Serializable, Cloneable, etc.
  • 23. 23 Estructural ComportamientoCreación Clase Objeto üFactory Method üAdapter Interpreter Template Method Abstract Factory Builder Prototype üSingleton üAdapter Bridge üComposite Decorator üFacade Flyweight Proxy Chain of Responsability Command üIterator Mediator Memento üObserver State üStrategy Visitor Propósito Ámbito Clasificación de los patrones GoF (gang of Four) [Gamma]
  • 24. 24 Patrón 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 sólo se instancie una vez
  • 25. 25 Patrón SINGLETON La solución Clase CSingleton - CSingleton laInstancia …. - CSingleton () + getInstance () Atributos Métodos - indica que es private + indica que es public Método static – El constructor de la clase DEBE SER PRIVADO – Se proporciona un método ESTÁTICO en la clase que devuelve LA ÚNICA INSTANCIA DE LA CLASE: getInstance()
  • 26. 26 Patrón SINGLETON Implementación public class CSingleton { private static CSingleton laInstancia = new CSingleton(); private CSingleton() {} public static CSingleton getInstance() { return laInstancia; } …………………………. }
  • 27. 27 Patrón SINGLETON Inconvenientes Se podría obtener una nueva instancia usando el esquema anterior: public class MiCSingleton extends CSingleton implements Cloneable {} MiCSingleton mcs = new MiCSingleton(); MiCSingleton mcsCopia = mcs.clone(); Para solucionarlo: definir CSingleton como final public final class CSingleton {...}
  • 28. 28 public final class Facultad implements Serializable { private Vector listaProfesores; private Vector listaEstudiantes; private Vector listaAsigs; private Vector listaMatrs; private static Facultad laFacultad=new Facultad(); private Facultad() // EL CONSTRUCTOR ES PRIVADO { listaProfesores = new Vector(); // Sólo hay UNA instancia listaEstudiantes= new Vector(); // y se guarda en laFacultad listaAsigs = new Vector(); listaMatrs = new Vector(); } public static Facultad getInstance() {return laFacultad;} public Vector obtListaProfesores() {return listaProfesores;} public void anadirProfesor(Profesor p) {listaProfesores.addElement(p); } EJEMPLO DE PATRÓN SINGLETON
  • 29. 29 Utilidad Separar la clase que crea los objetos, de la jerarquía de objetos a instanciar Ventajas – Centralización de la creación de objetos – Facilita la escalabilidad del sistema – El usuario se abstrae de la instancia a crear Patrón FACTORY METHOD
  • 30. 30 Patrón FACTORY METHOD El problema Clase A oper1() oper2() ... Clase A’ oper1() oper2() ... Clase A’’ oper1() oper2() ... If (tipo==1) create A’ else create A’’ Programa1 If (tipo==1) create A’ else create A’’ Programa2 Problema: Qué sucede si queremos añadir A’’’?
  • 31. 31 Patrón FACTORY METHOD Una primera solución Clase A oper1() oper2() static A create(tipo) Clase A’ oper1() oper2() ... Clase A’’ oper1() oper2() ... A.create(1); Programa1 A.create(2) Programa2 Solución: Hay que recompilar todas las clases que heredan de A Puede que no tengamos acceso al código de A
  • 32. 32 Patrón FACTORY METHOD La solución final Interfaz A oper1() oper2() ... Clase CFactory A create(tipo) …. Solución: Separar el creador de las instancias de la propia clase las instancias se crean en una clase CFactory Clase A1 oper1() oper2() ... Clase A2 oper1() oper2() ...
  • 33. 33 Patrón FACTORY METHOD class Aplicación { ... A newA(...) { A miA; CFactory fact= new CFactory(); ... miA = fact.create(“TIPO 2”); ... return miA; } • No se crean las instancias directamente en Aplicación • Si se quisiera añadir un nuevo A A’’’, NO NECESARIAMENTE habría que modificar la clase Aplicación. Los tipos que CFactory puede crear los puede devolver un método y Aplicación trabajar con él.
  • 34. 34 Patrón 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 Aplicación • Se pueden añadir nuevos Aes sin modificar Aplicación. Basta con añadir la clase A3 y modificar CFactory (añadir el tipo correspondiente a dicho A: “TIPOX”)
  • 35. 35 Estructural ComportamientoCreación Clase Objeto üFactory Method üAdapter Interpreter Template Method Abstract Factory Builder Prototype üSingleton üAdapter Bridge üComposite Decorator üFacade Flyweight Proxy Chain of Responsability Command üIterator Mediator Memento üObserver State üStrategy Visitor Propósito Ámbito Clasificación de los patrones GoF (gang of Four) [Gamma]
  • 36. 36 Patrón ADAPTER Intención 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 código no orientado a objeto con forma de clase
  • 37. 37 Patrón ADAPTER El problema Clase A usa Interfaz C Clase B m1(….) m2(….) …. b1(….) b2(….) …. Se desea utilizar la clase A (el método 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 ejec(Interfaz C)
  • 38. 38 Patrón ADAPTER La solución usa Interfaz C m1(….) m2(….) …. Clase B b1(….) b2(….) …. Clase A ejec(Interfaz C) Solución: construir una clase Adaptadora de B que implemente la interfaz C. Al implementarla, usa un objeto de B y sus métodos Clase AdapterB m1(….) m2(….) …. usa Para utilizar la clase A: objetoDeAdapterB =NEW AdapterB(objetoDeB) AdapterB(B) objetoDeA.ejec(objetoDeAdapterB)
  • 39. 39 Patrón ADAPTER Diagrama de interacción El cliente quiere usar el objeto a (para que ejecute el método ejec) con un objeto de b. Para ello necesita crear un objeto adaptador que encapsule b ab: AdapterB new AdapterB(b) ejec(ab) ab a : A m1(...) b1() b : B m2(...) b2() : Cliente
  • 40. 40 Patrón ADAPTER • Convierte la interfaz de una clase en otra interfaz que los clientes esperan. Permite que clases con interfaces incompatibles puedan ser utilizadas conjuntamente. – La interfaz de la clase B (los métodos b1(),b2()…) los convierte/adapta a los métodos esperados por la clase A (métodos m1(),m2(),…)
  • 41. 41 Patrón ADAPTER Ejemplo de uso en JGL usa Interfaz Sequence Array Java nativo: int[] Clase Sorting sort(Sequence) OBJETIVO: PODER USAR LOS ALGORITMOS DE JGL CON int [] int ints[] = { 3, -1, 2, -3, 4 }; IntArray intArray = new IntArray( ints ); Sorting.sort( intArray ); Clase IntArray usa IntArray(int [] ) add, clear, isEmpty, size. (de Container) at, put, contains, ... Operaciones con arrays: acceso elº i: int[i], ... Implementa: add, clear, isEmpty, size..Adapter proporcionado por JGL De JGL De Java
  • 42. 42 Patrón ADAPTER Ejemplo I class WhatIUse { public void op(WhatIWant wiw) { wiw.f();} } class WhatIHave { public void g() {} public void h() {} } class Adapter implements WhatIWant { WhatIHave whatIHave; public Adapter(WhatIHave wih) { whatIHave = wih; } public void f() { // Implementa usando los // métodos de WhatIHave: whatIHave.g(); whatIHave.h(); } } interface WhatIWant { void f(); }
  • 43. 43 Gráfico Dibujar( ) Mover( ) Polígono Dibujar( ) Mover( ) Cuadrado Dibujar( ) Mover( ) Círculo Dibujar( ) Mover( ) Label Draw( ) Move( ) Texto Dibujar( ) Mover( ) ♦Extender un editor gráfico con clases de otro toolkit Patrón ADAPTER Ejemplo II
  • 44. 44 Patrón COMPOSITE Intención Componer objetos en jerarquías 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 código de los clientes, que sólo usan una interfaz ♦Facilita añadir nuevos componentes sin afectar a los clientes Inconvenientes ♦Es difícil restringir los tipos de los hijos ♦Las operaciones de gestión de hijos en los objetos simples pueden presentar problemas: seguridad frente a flexibilidad
  • 45. 45 Patrón COMPOSITE El problema: La escalabilidad Documento Página MarcoColumna Imagen LíneaDeTexto Carácter Un documento está formado por varias páginas, las cuales están formadas por columnas que contienen líneas de texto, formadas por caracteres. Las columnas y páginas pueden contener marcos. Los marcos pueden contener columnas. Las columnas, marcos y líneas de texto pueden contener imágenes.
  • 46. 46 Patrón COMPOSITE La solución ElementoDeDocumento Carácter Imagen ElemDeDocCompuesto Documento Página Columna Marco LíneaDeTexto Un documento está formado por varias páginas, las cuales están formadas por columnas que contienen líneas de texto, formadas por caracteres. Las columnas y páginas pueden contener marcos. Los marcos pueden contener columnas. Las columnas, marcos y líneas de texto pueden contener imágenes. 0..n
  • 47. 47 Patrón COMPOSITE La solución para cada hijo en m_hijo hijo->Operación(); Simple Operación() Compuesto Operación() Add(c : Componente) Remove(c : Componente) Iterar() : Componente m_hijo Cliente Componente Operación() unCompuesto unCompuesto unSimpleunSimpleunSimple unSimple unSimple ♦Participantes ♦Componente: declara una clase abstracta para la composición de objetos, ♦Simple: representa los objetos de la composición 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 composición mediante la interfaz de Componente
  • 48. 48 Patrón COMPOSITE Ejemplo: La jerarquía de clases de AWT • Sirve para diseñar clases que agrupen a objetos complejos, los cuales a su vez están formados por objetos complejos y/o simples • La jerarquía de clases AWT se ha diseñado según el patrón COMPOSITE
  • 49. 49 Patrón COMPOSITE Ejemplo: La jerarquía de clases de AWT COMPONENTE CONTENEDOR (todo contenedor es un componente) Applet Las posibilidades son infinitas… - Una ventana formada por 2 cajas de texto, 2 campos de texto, 3 botones, 1 panel que contenga 5 casillas de validación y una lista desplegable. -Una ventana formada por 2 etiquetas, 2 campos de texto y un botón -… Además, añadir nuevos tipos de contenedores y de componentes no sería muy costoso (estaríamos ante una solución extensible)
  • 50. 50 Patrón COMPOSITE Un diseño francamente malo … Frame Button CheckBox TextField … - Se necesitarían métodos addButton, addCheckBox, addTextField, addFrame en la clase Frame (y los correspondientes a todos los que faltan) - Además el diagrama está muy incompleto, ya que un Button puede ser componente de un Panel, Dialog, … - Si se quisiera añadir un nuevo componente XXX, habría que cambiar la clase Frame y añadir el método addXXX (nada extensible) * * * *
  • 51. 51 Componentes principales de Swing JComponent JFrame JWindow JPanel JDialog JList JComboBox JMenuBar JTextField, JTextArea, JButton… Applet JApplet
  • 52. 52 Intención: El patrón FACADE simplifica el acceso a un conjunto de clases proporcionando una única clase que todos utilizan para comunicarse con dicho conjunto de clases. Ventajas – Los clientes no necesitan conocer las clases que hay tras la clase FACADE – Se pueden cambiar las clases “ocultadas” sin necesidad de cambiar los clientes. Sólo hay que realizar los cambios necesarios en FACADE Patrón FACADE
  • 53. 53 Patrón FACADE El problema Clase A a1() …. Clase D d1() …. Clase C c1() …. Clase B b1() …. usa usa usa …. Clase CLIENTE Clases SERVIDORAS La clase A debe saber cuál es exactamente la clase que le proporciona el servicio: b1() es de B, c1() de C, d1() de D, ...
  • 54. 54 Patrón FACADE El problema Clase CLI1 cl11() …. Clase D d1() …. Clase C c1() …. Clase B b1() …. usa usa... …. Clases CLIENTES Clases SERVIDORAS Problema: Además puede haber muchas clases cliente... Clase CLI2 cl21() …. Clase CLI3 cl31() ….
  • 55. 55 Patrón FACADE La solución Clase CLI1 cl11() …. Clase D d1() …. Clase C c1() …. Clase B b1() …. …. Clases CLIENTES Clases SERVIDORAS Solución: Proporcionar una clase que implemente todos los servicios (b1()…). Los clientes sólo usarán dicha clase. Clase CLI2 cl21() …. Clase CLI3 cl31() …. Clase Facade b1(), c1(), d1(),.. usa usa public class Facade { B objB = new B(); C objC = new C();… void b1() { objB.b1();}..}
  • 56. 56 Compilador Clases del subsistema de compilación Editor Depurador Linkador Token AnaLexAnaSin ASA TabSim Compilar() Patrón FACADE Ejemplo: Estructurar un entorno de programación
  • 57. 57 Estructural ComportamientoCreación Clase Objeto üFactory Method üAdapter Interpreter Template Method Abstract Factory Builder Prototype üSingleton üAdapter Bridge üComposite Decorator üFacade Flyweight Proxy Chain of Responsability Command üIterator Mediator Memento üObserver State üStrategy Visitor Propósito Ámbito Clasificación de los patrones GoF (gang of Four) [Gamma]
  • 58. 58 • Intención – Definir una dependencia 1:n de forma que cuando el objeto 1 cambie su estado, los n objetos sean notificados y se actualicen automáticamente • Motivación – En un toolkit de GUI, separar los objetos de presentación (vistas) de los objetos de datos, de forma que se puedan tener varias vistas sincronizadas de los mismos datos (editor-subscriptor) Patrón OBSERVER
  • 59. 59 a = 50% b = 30% c = 20% notificación de cambio peticiones, modificaciones sujeto observadores Patrón OBSERVER Ejemplo
  • 60. 60 Clases OBSERVADORAS (Vistas) Interfaz Observer update() …. Clase OBSERVADA (Modelo) susObservers 0..* Clase ObsConcreta update() { // Qué hacer cuando // cambie el “objeto // observado” suSubject // Llamará: suSubject.get() } ... suSubject Se implementa añadiendo el atributo Observable suSubject en ObsConcreta Se implementa añadiendo el atributo Vector susObservers en Subject Class ObsConcreto set(...){ // call notifyObservers()} get() {...} ..... 1 Class Observable addObserver(Observer) removeObserver(Observer) notifyObservers() setChanged() Patrón OBSERVER La solución
  • 61. 61 Patrón OBSERVER Diagrama de interacción s: Observable oi: Observer set(...) update() Llama a update() para cada objeto de susObservers get(...) “actualizarse con los nuevos valores” de s addObserver(oi) Registrarse como “observador” de s Se cambia algún valor de s setChanged() notityObservers()
  • 62. 62Este método es invocado cuando el objeto observado ha cambiadoupdate() countObservers deleteObservers deleteObserver(o) addObserver (o) Métodos notifyObservers hasChanged setChanged() Devuelve el número de observadores Elimina todos los observadores Elimina el observador o Añade un nuevo observador o Notifica a todos los objetos suscritos si el objeto esta en Estado “modificado” Devuelve cierto si el objeto esta “modificado” marca el objeto como “modificado” Significado Patrón OBSERVER La clase Observable La interfaz Observer
  • 64. 64 Patrón 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; }
  • 65. 65 Patrón OBSERVER Ejemplo: La clase Observer (la vista) public class Observador implements java.util.Observer { private Observado modelo; public Observador(Observado model) { modelo=model; model.addObserver(this); // Conecta la Vista con el Modelo } public void update(Observable t, Object o) // Invocada desde el modelo { System.out.println("La temperatura ha cambiado" + modelo.getF()); } }
  • 66. 66 Patrón OBSERVER Ejemplo: El programa principal public static void main(String[] args) { Observado o=new Observado(); Observador ob=new Observador(o); Observador2 ob2=new Observador2(o); o.setF(45.5); } The temperature has changed45.5 La temperatura ha cambiado45.5 Process exited with exit code 0.
  • 67. 67Ejemplo de patrón OBSERVER OBSERVABLE OBSERVER
  • 68. 68 ... public class ObserverQuePinta extends Frame implements Observer{ Label label1 = new Label(); Panel panel1 = new Panel(); Observable suSubject; public ObserverQuePinta(Observable s) { suSubject = s; s.addObserver(this); } public void update() { String c = suSubject.getColor(); if (c.equals("ROJO")) panel1.setBackground(Color.red); else if (c.equals("VERDE")) panel1.setBackground(Color.green); else if (c.equals("AZUL")) panel1.setBackground(Color.blue); } } public interface Observer { void update(); } VISTA
  • 69. 69 public class Subject extends Observable { Choice choice1 = new Choice(); public Subject() { choice1.addItem("ROJO"); choice1.addItem("VERDE"); choice1.addItem("AZUL"); choice1.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(ItemEvent e) { setChanged(); notifyObservers(); }} } public String getColor() {return choice1.getSelectedItem();} } MODELO
  • 70. 70 Subject s = new Subject(); Observer o1 = new ObserverQuePinta(s); Observer o2 = new ObserverQuePinta(s); CREACIÓN DE OBJETOS SUBJECT Y OBSERVER Patrón OBSERVER Inicialización
  • 71. 71 • Si se quisiera añadir un nuevo OBSERVER que en vez de pintar escribiera un número para cada color (1 si ROJO, 2 si VERDE, 3 si AZUL), ¿qué habría que hacer? – Escribir nueva clase OBSERVER que implemente “notificar” • Si se quisiera cambiar el SUBJECT para escoger el color pinchando un Checkbox en vez de escogerlo de un Choice – Hay que sustituir el Subject y llamar a “notificar” de los observers cuando se seleccione un nuevo Checkbox A B Patrón OBSERVER Adaptabilidad de la solución
  • 72. 72 ... public class ObserverQueEscribeNums extends Frame implements Observer{ Label label1 = new Label(); TextArea textArea1 = new TextArea(); Subject suSubject; public ObserverQueEscribeNums(Subject s) { suSubject = s; s.addObserver(this); ... } public void update() { String c = suSubject.getColor(); if (c.equals("ROJO")) textArea1.append("NUEVO COLOR: "+1+"n"); else if (c.equals("VERDE")) textArea1.append("NUEVO COLOR: "+2+"n"); else if (c.equals("AZUL")) textArea1.append("NUEVO COLOR: "+3+"n"); } } public interface Observer { void notificar(); } EXTENDER CON UN NUEVO OBSERVER A
  • 73. 73 ... public class Subject extends Frame { Checkbox checkbox1 = new Checkbox(); Checkbox checkbox2 = new Checkbox(); // ... y checkbox3 CheckboxGroup checkboxGroup1 = new CheckboxGroup(); public Subject() { checkbox1.setLabel("ROJO"); checkbox1.setCheckboxGroup(checkboxGroup1); checkbox1.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(ItemEvent e) { notificar(); } }); checkbox2.setLabel("VERDE"); // y checkbox3.setLabel("AZUL");... public void addObserver(Observer o) {susObservers.addElement(o);} public void notificar() { setChanged(); notifyObservers(); } } public String getColor() { return checkboxGroup1.getSelectedCheckbox().getLabel();} } CAMBIAR DE SUBJECT B
  • 74. 74
  • 75. 75 Intención: – Encapsular algoritmos relacionados en clases y hacerlos intercambiables. – Se permite que la selección del algoritmo se haga según el objeto que se trate. Ventajas – Se permite cambiar el algoritmo dinámicamente – Se eliminan sentencias condicionales para seleccionar el algoritmo deseado Patrón STRATEGY
  • 76. 76 MétodoResolución Resolver() SistemaLineal ... Resolver () ... MétodoResolución1 Resolver () MétodoResolución2 Resolver () MétodoResolución3 Resolver () instancia->Resolver(); Patrón STRATEGY La solución
  • 77. 77 Patrón STRATEGY Clase Cliente …. Clase StrConcr1 operac() …. Interfaz Strategy operac() …. usa …. 0..11 Clase StrConcr2 operac() …. La clase Cliente necesita ejecutar un método: operac(), que puede ser implementado siguiendo distintos algoritmos. Se pueden implementar todos ellos (en las clases StrConcrX) y ser trasparente a Cliente.
  • 78. 78 Patrón STRATEGY Implementación 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(); } Cliente c = new Cliente(new StrConcr1()); Se indica cuál es el algoritmo que se ejecutará
  • 79. 79 Patrón STRATEGY Implementación class Cliente { // EN VEZ DE: if (cond1) operac1(); else if (cond2) operac2(); else ... } • Sentencias condicionales para seleccionar el algoritmo • Si se quisiera añadir una nueva forma de ejecutar operac() entonces HABRÍA QUE CAMBIAR EL CÓDIGO DE LA CLASE Cliente
  • 80. 80 • Intención: – Proporcionar una forma de acceder a los elementos de una colección de objetos de manera secuencial sin revelar su representación interna. Define una interfaz que declara métodos para acceder secuencialmente a la colección. • Ventajas: – La clase que accede a la colección solamente a través de dicho interfaz permanece independiente de la clase que implementa la interfaz. Patrón ITERATOR
  • 81. 81 Cliente IteradorConcreto Interfaz Iterador hasNextItem() getNextItem() Interfaz Agregado CrearIterador() : Iterador AgregadoConcreto CrearIterador() : Iterador hasNextItem() getNextItem() ♦Participantes ♦Iterador: define una interfaz para acceder a los elementos del agregado y recorrerlos ♦IteradorConcreto: implementa la interfaz de Iterador y mantiene la posición actual del recorrido ♦Agregado: define una interfaz para crear un objeto iterador ♦AgregadoConcreto: implementa la interfaz de creación del iterador para devolver una instancia apropiada de IteradorConcreto return new IteradorConcreto(this); Patrón ITERATOR
  • 82. 82 • Ejemplos en Java: Patrón ITERATOR Vector listOfStudents = new Vector(); // PARA RECORRER EL VECTOR: Enumeration list = listOfStudents.elements(); while ( list.hasMoreElements() ) System.out.println( list.nextElement() ); Hashtable anIndex = new Hashtable(); // PARA RECORRER LA TABLA HASH: Enumeration list = anIndex.keys(); while ( list.hasMoreElements() ) System.out.println( list.nextElement() );