programación avanzada introducción tratan los problemas del diseño que se repiten y que se...
TRANSCRIPT
![Page 1: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/1.jpg)
Programación Avanzada
![Page 2: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/2.jpg)
Introducción Tratan los problemas del diseño que se
repiten y que se presentan en situaciones particulares del diseño, con el fin de proponer soluciones a ellas.
Soluciones exitosas a problemas comunes. Descripción a un problema que ocurre una
y otra vez en nuestro entorno, así como la solución a ese problema, de tal modo que se pueda aplicar esta solución un millón de veces, sin hacer lo mismo dos veces.
![Page 3: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/3.jpg)
Antecedentes
The timeless way of building
Using Pattern Languages for OO Programs.
Libro Design Patterns
![Page 4: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/4.jpg)
![Page 5: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/5.jpg)
Relación entre Patrónes
![Page 6: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/6.jpg)
![Page 7: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/7.jpg)
Patrón Singleton
![Page 8: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/8.jpg)
Patrón Singleton
Aplicabilidad
Instancia de una clase y accesible Instancia extensible: Herencia
![Page 9: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/9.jpg)
Patrón Singleton
Consecuencias
Única instancia controla el acceso. Refinamiento de operaciones y
representación. Permite mas de una instancia. Clientes no se preocupan si existe una
instancia.
![Page 10: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/10.jpg)
Patrón Singleton
Implementación
Método estático y privado. Método estático y publico (instancia) Constructor privado o protegido.
![Page 11: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/11.jpg)
Patrón Singleton
Ejemplo
![Page 12: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/12.jpg)
Patrón Singletonpublic class Singleton { private static Singleton INSTANCE = null; // constructor privado private Singleton() {} // creador sincronizado para protegerse de posibles //problemas multi-hilo private synchronized static void createInstance() { if (INSTANCE == null) { INSTANCE = new Singleton(); } }
public static Singleton getInstance() { if (INSTANCE == null) createInstance(); return INSTANCE; } }
![Page 13: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/13.jpg)
Patrón Abstract Fabric
Provee una interfaz para crear familias de objetos relacionados o dependientes, sin especificar sus clases concretas.
![Page 14: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/14.jpg)
Patrón Abstract Factory
![Page 15: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/15.jpg)
Patrón Abstract Factory El objeto "fábrica" tiene la responsabilidad de
proveer la funcionalidad y el protocolo para la creación de la familia completa.
Los clientes nunca deben crear objetos directamente.
Es fácil cambiar las familias de productos que se utilizan, porque el tipo específico de cada instancia aparece sólo una vez en la aplicación: en el método de creación donde se crea la instancia.
![Page 16: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/16.jpg)
Patrón Abstract FactoryAplicabilidad
Un sistema deba ser independiente de cómo sus productos son creados, representados o compuestos
Una clase no pueda anticipar la clase de objetos que debe crear
Un sistema deba usar sólo una de un conjunto de familias de productos
Una familia de objetos de productos relacionados es creada para ser utilizada en conjunto.
![Page 17: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/17.jpg)
Patrón Abstract Factory
![Page 18: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/18.jpg)
Patrón Abstract FactoryEjemplo
![Page 19: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/19.jpg)
Patrón Abstract Factory
Ejemplo2
Una aplicación para simulación de animales de diferentes zonas geográficas requiere representar animales herbívoros y carnívoros, del continente africano y del continente americano.
Rich Text Format
Solución en código java
![Page 20: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/20.jpg)
Patrón Prototype
![Page 21: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/21.jpg)
Patrón Prototype// Los productos deben implementar esta interfacepublic
interface Producto extends Cloneable { Object clone(); // Aqui van todas las operaciones comunes a los
productos que genera la factoria}
// Un ejemplo basico de productopublic class UnProducto implements Producto {
private int atributo;
UnProducto(int atributo) { this.atributo = atributo; } public Object clone() { return new UnProducto(this.atributo); }
public String toString() { return ((Integer)atributo).toString(); }}
// La clase encargada de generar objetos a partir de los prototipos
public class FactoriaPrototipo { private HashMap mapaObjetos; private String nombrePorDefecto;
public FactoriaPrototipo() { mapaObjetos = new HashMap(); // Se incluyen al mapa todos los productos prototipo
mapaObjetos.put("producto 1", new UnProducto(1));
}
public Object create() { return create(nombrePorDefecto); }
public Object create(String nombre) { nombrePorDefecto = nombre; UnProducto objeto = (UnProducto)mapaObjetos.get(nombre); return objeto != null ? objeto.clone() : null; }
}
public class PruebaFactoria { static public void main(String[] args)
{ FactoriaPrototipo factoria = new FactoriaPrototipo();
Producto producto = (Producto) factoria.create("producto 1"); System.out.println ("Este es el objeto creado: " + producto);
}}
![Page 22: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/22.jpg)
Patrones Estructurales
![Page 23: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/23.jpg)
Patrón Adapter
Convierte la interfaz de una clase en una interfaz que el cliente espera.
Permite que clases inicialmente incompatibles interactúen.
![Page 24: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/24.jpg)
![Page 25: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/25.jpg)
Patrón Adapter El cliente
("Client"), se comunica con la clase adaptadora que actúa de intermediaria, en lugar de con la clase que realmente proporciona la funcionalidad ("Adaptee").
![Page 26: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/26.jpg)
Participantes
Client
Adaptee
Adapter
![Page 27: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/27.jpg)
Patrón AdapterColaboraciones Client llama a las operaciones sobre una
instancia Adapter. De hecho, el adaptador llama a las operaciones de Adaptee que llevan a cabo el pedido.
La clase adaptadora se interpone entre el cliente y la
clase reutilizada. La clase adaptadora presenta la
interfaz que espera la aplicación, y se comunica con
la clase reutilizada, "traduciendo" los mensajes.
![Page 28: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/28.jpg)
Patrón BridgeAplicabilidad Se puede usar el patrón Bridge cuando: Se desea evitar un enlace permanente entre la
abstracción y su implementación. Esto puede ser debido a que la implementación debe ser seleccionada o cambiada en tiempo de ejecución.
Tanto las abstracciones y sus implementaciones deben ser extensibles por medio de subclases. En este caso, el patrón Bridge permite combinar abstracciones e implementciones diferentes y extenderlas independientemente.
![Page 29: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/29.jpg)
Patrón Bridge El puente permite separar dos aspectos
distintos de una jerarquía de clases. . Básicamente, mientras una jerarquía
implementa la funcionalidad real, la(s) otra(s)
representan diversos aspectos, como representación en
diferentes medios
![Page 30: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/30.jpg)
Participantes
Abstraction
RefinedAbstraction
Abstraction
RefinedAbstraction
ImplementorImplementor
ConcreteImplementor ConcreteImplementor
Patrón Bridge
![Page 31: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/31.jpg)
Patrón BridgeEstructura
![Page 32: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/32.jpg)
Patrón Decorador Componente
Define la interfaz para objetos a los que se puede añadir responsabilidades dinámicamente
Componente ConcretoDefine un objeto al que se le pueden agregar
responsabilidades adicionales Decorador
Mantiene una referencia a un objeto Componente y define una interfaz que se ajusta a la interfaz del Componente
Decorador ConcretoAñade responsabilidades al componente
![Page 33: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/33.jpg)
Patrón Decorador Ventajas
Más flexibilidad que la herencia estática. Brinda una manera más flexible de añadir responsabilidad que la que podría obtenerse mediante herencia. Las responsabilidades añadidas se pueden quitar.
Evita clases cargadas de funciones en la parte superior de la jerarquía○ Pagar sólo por lo que se necesita, añadiendo
responsabilidades mediante objetos decoradores
![Page 34: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/34.jpg)
Patrón Decorador Inconvenientes
Un decorador y su componente no son idénticos: un decorador es como un revestimiento de un objeto pero no es idéntico al componente en sí.
Muchos objetos pequeños: el patrón decorador genera muchos objetos pequeños muy parecidos, sólo se diferencian por la forma en que están interconectados
![Page 35: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/35.jpg)
Patrón DecoradorAplicabilidad
El decorador se debe usar cuando: Se requiera adicionar responsabilidades a
objetos individuales dinámicamente sin afectar otros objetos.
Se necesite agregar responsabilidades que pueden ser retiradas
No es práctico adicionar responsabilidades por medio de la herencia.
![Page 36: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/36.jpg)
Patrón DecoradorEjemplo
Se tiene la siguiente jerarquía de clases para una cafetería que vende varios tipos de café.
![Page 37: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/37.jpg)
Solución Sin Patrón Decorador
![Page 38: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/38.jpg)
Patrón DecoradorSolución del Ejemplo
Iniciar con un objeto Bebida y “decorarlo” en tiempo de ejecución con los sabores y agregados deseados.
Por ejemplo:1. Tomar un objeto TuesteOscuro
2. Decorarlo con un objeto Mocca
3. Decorarlo con un objeto CremaBatida
4. Llamar al método costo() y descansar en la delegación para añadir los costos de cada condimento (mocca y crema batida)
![Page 39: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/39.jpg)
Solución
costo()TuesteOscuro
costo() Mocca
costo()TuesteOscuro
costo() CremaBatida
costo() Mocca
costo()TuesteOscuro
1
2
3
Luego se calcula el costo:
CremaBatida llama a costo() en Mocca, éste a su vez llama a costo() en TuesteOscuro
TuesteOscuro retorna su costo y así sucesivamente hasta llegar a CremaBatida donde se obtiene el costo total final
![Page 40: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/40.jpg)
Sobre los decoradores: Tienen el mismo supertipo que los
objetos que decoran Un objeto puede ser decorado con N
decoradores El decorador agrega su propio
comportamiento antes o después de delegar al objeto que decora el resto del trabajo
![Page 41: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/41.jpg)
Patrón DecoradorEstructura
![Page 42: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/42.jpg)
public abstract class Bebida{
String descripcion = "Bebida desconocida";
public String getDescripcion(){
return descripcion;}
public abstract double costo();}
public abstract class DecoradorCondimento extends Bebida{
public abstract String getDescripcion();}
![Page 43: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/43.jpg)
public class Espresso extends Bebida{
public Espresso(){ descripcion = "Espresso"; }
public double costo(){ return 1.99; }
}
public class CombinacionDeLaCasa extends Bebida{
public CombinacionDeLaCasa(){ descripcion="Combinacion de la casa"; }
public double costo(){ return 0.89 }
}
![Page 44: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/44.jpg)
public class TuesteOscuro extends Bebida{
public TuesteOscuro(){ descripcion="Tueste Oscuro"; }
public double costo(){ return 0.99; }
}
public class Descafeinado extends Bebida{
public Descafeinado(){ descripcion="Sin cafeina"; }
public double costo(){ return 1.05; }
}
![Page 45: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/45.jpg)
public class Mocca extends DecoradorCondimento{
Bebida bebida;
public Mocca(Bebida bebida){
this.bebida = bebida;}
public String getDescripcion(){ return bebida.getDescripcion() + ", Mocca";}
public double costo(){
return 0.2 + bebida.costo();} }
![Page 46: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/46.jpg)
public class CremaBatida extends DecoradorCondimento{
Bebida bebida;
public CremaBatida(Bebida bebida){
this.bebida = bebida;}
public String getDescripcion(){
return bebida.getDescripcion() + ", Crema Batida";}
public double costo(){
return 0.1 + bebida.costo();}
}
![Page 47: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/47.jpg)
public class Amaretto extends DecoradorCondimento{
Bebida bebida;
public Amaretto(Bebida bebida){
this.bebida = bebida;}
public String getDescripcion(){
return bebida.getDescripcion() + ", amaretto";}
public double costo(){
return 0.2 + bebida.costo();}
}
![Page 48: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/48.jpg)
public class StarbuzzCafe{
public static void main(String args[]){
Bebida bebida = new Espresso();
System.out.println(bebida.getDescripcion() + " " + bebida.costo());
Bebida segundaTaza = new TuesteOscuro();
segundaTaza = new Mocca(segundaTaza);segundaTaza = new Mocca(segundaTaza);segundaTaza = new CremaBatida(segundaTaza);
System.out.println(segundaTaza.getDescripcion() + " " + segundaTaza.costo());
![Page 49: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/49.jpg)
Bebida tercera = new CombinacionDeLaCasa();
tercera = new Mocca(tercera);tercera = new CremaBatida(tercera);tercera = new Amaretto(tercera);
System.out.println(tercera.getDescripcion() + " " + tercera.costo());
}}
![Page 50: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/50.jpg)
Patrón Façade Estructura
Fuente: dofactory
![Page 51: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/51.jpg)
Patrón FaçadeAplicabilidad
Se utilizará Façade cuando: Se quiera proporcionar una interfaz
simple para un subsistema complejo Haya muchas dependencias entre los
clientes y las clases que implementan una abstracción.
Se quiera dividir en capas los subsistemas
![Page 52: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/52.jpg)
Patrón Façade Consecuencias
VentajasOculta a los clientes los componentes del subsistema
hace el subsistema más fácil de usar y reduce la cantidad de objetos con las que los clientes deben interactuar
Promueve un débil acoplamiento entre el subsistema y sus clientes.
No impide que las aplicaciones cliente usen las clases del subsistema en caso de que sea necesario
![Page 53: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/53.jpg)
Patrón Façade Ejemplo
El siguiente ejemplo muestra el patrón Fachada como un objeto AplicacionPréstamo, el cual provee una interfaz simplificada a un gran subsistema de clases que ayudan a medir y determinar la viabilidad de otorgarle un crédito a un solicitante.
![Page 54: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/54.jpg)
public class Cliente {
private String nombre;
// Constructor public Cliente(String nombre) { this.nombre = nombre; }
public String getNombre() { return nombre; } }
//SUBSISTEMA-CLASE A
public class Banco {
public boolean tieneSuficientesAhorros(Cliente c, int cantidad) { System.out.println("Revisar cuenta bancaria para " + c.getNombre()); return true; } }
![Page 55: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/55.jpg)
//SUBSISTEMA- CLASE Bpublic class Prestamo {
public boolean tienePrestamosPendientes(Cliente c) { System.out.println("Revisar prestamos para " + c.getNombre()); return true; } }
// SUBSISTEMA- CLASE C
public class Credito {
public boolean tieneBuenHistorialCrediticio(Cliente c) { System.out.println("Revisar historial crediticio para " + c.getNombre()); return true;} }
![Page 56: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/56.jpg)
//FACHADA PARA LOS SUBSISTEMAS
public class Hipoteca { private Banco banco = new Banco(); private Prestamo prestamo = new Prestamo(); private Credito credito = new Credito();
public boolean esElegible(Cliente clie, int cantidad) { System.out.println(" aplica para prestamo" + clie.getNombre() + " de " +
cantidad); boolean elegible = true;
// revisa ahorros del aplicante if (!banco.tieneSuficientesAhorros(clie, cantidad)) { elegible = false; } else if (!prestamo.tienePrestamosPendientes(clie)) { elegible = false; } else if (!credito.tieneBuenHistorialCrediticio(clie)) { elegible = false; }
return elegible; } }
![Page 57: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/57.jpg)
public class DemoFacade {
public static void main(String args[]) { // Facade Hipoteca hipoteca = new Hipoteca();
// Evalua la eligibilidad del cliente Cliente c = new Cliente("Ana Mora"); boolean elegible = hipoteca.esElegible(c,125000); String mensaje = elegible? " aprobado(a) " : " rechazado(a)"; System.out.println(c.getNombre() + mensaje);
} }
![Page 58: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/58.jpg)
![Page 59: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/59.jpg)
Patrón Interpreter Es usualmente descrito en términos de
interpretar la gramática del programa. Útil para agregarle funcionalidad estructuras
del patrón Composite. Requiere un método abstracto al nivel más
alto de la estructura compuesta abstracta que es usada por el cliente de los componentes para procesar la estructura completa.
Los métodos concretos son implementados en los componentes, tanto de la terminal y de la no_terminal para hacer el procesamiento actual.
![Page 60: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/60.jpg)
Patrón Interpreter
![Page 61: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/61.jpg)
Patrón Interpreter
Ejemplo: Supongamos que tenemos la siguiente
estructura de árbol binario que contiene valores enteros.
AIntTree representa la un árbol abstracto. Leaf es un nodo hoja que contiene un entero. InternalNode es un nodo interno con dos ramas, las cuales son AIntTree.
![Page 62: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/62.jpg)
Patrón Interpreter Solución:
Para agregarle la posibilidad de sumar los contenidos de todo el árbol, un método abstracto sum() es agregado a la superclase AIntTree. Un cliente que contiene la referencia a un objeto AIntTree va a llamar a sum() en ese objeto. Los métodos sum() concretos son agregados a las subclases Leaf e InternalNode. Leaf.sum() simplemente necesita hacer un return al valor de data. InternalNode.sum() simplemente retorna la suma de left y right.
![Page 63: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/63.jpg)
Patrón Método Plantilla
También conocido como Template Method.
Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos.
Permite que las subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura.
![Page 64: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/64.jpg)
Patrón Template Method Se utiliza para implementar las partes de
un algoritmo que no cambian y que sean las subclases quienes implementen el comportamiento que puede variar y para cuando el comportamiento repetido de varias subclases debería factorizarse y ser ubicado en una clase común evitando duplicidad de código.
Se puede definir un método plantilla que llame a operaciones que proporcionan el comportamiento predeterminado que puede ser modificado por las subclases.
![Page 65: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/65.jpg)
Template Method
Tiene la siguiente estructura:
![Page 66: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/66.jpg)
Template Method
Ejemplo:public abstract class Triangle{ Point p1, p2, p3; public Triangle(Point a, Point b, Point c) { p1 = a; p2 = b; p3 = c;} public void draw(Graphics g) { //este método dibuja un triángulo normal drawLine(g, p1, p2); Point current = draw2ndLine(g, p2, p3); closeTriangle(g, current); } public void drawLine(Graphics g, Point a, Point b) {g.drawLine(a.x, a.y, b.x, b.y); } abstract public Point draw2ndLine(Graphics g, Point a, Point b); public void closeTriangle(Graphics g, Point c) { g.drawLine(c.x, c.y, p1.x, p1.y);}}
![Page 67: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/67.jpg)
Patrón Command
Tiene la intención de Tener una interfaz abstracta de manejo de operaciones sobre cierto receptor, permitiendo a un cliente desarrollar las operaciones sin tener que conocer exactamente el tipo y realizar tareas de undo.
Por lo general es utilizado para la asignación de botones y menús.
![Page 68: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/68.jpg)
Patrón Command
Surge porque a veces se quiere poder enviar solicitudes a objetos sin conocer exactamente la operación solicitada ni del receptor de la solicitud. En general un objeto botón o menú ejecuta solicitudes pero la solicitud no está implementada dentro del mismo.
![Page 69: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/69.jpg)
Patrón Command
![Page 70: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/70.jpg)
Patrón Command
Estructura:
![Page 71: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/71.jpg)
Patrón CommandParticipantes
Command
![Page 72: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/72.jpg)
Patrón Command
Ejemplo Patrón Command con Decorador:
![Page 73: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/73.jpg)
Patrón Observer
Define una interfaz para actualizar los objetos que deben ser notificados ante cambios en un sujeto.
Define una dependencia de 1 a muchos, entre objetos, de tal forma que cuando un objeto cambia su estado, todos sus dependientes son notificados y actualizados de forma automática.
![Page 74: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/74.jpg)
Patrón Observer
![Page 75: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/75.jpg)
Patrón ObserverEstructura
![Page 76: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/76.jpg)
Patrón Observer
Sujeto: Proporciona una interfaz para quitar y asignar objetos
Observador: Define una interfaz para actualizar los objetos que deben ser notificados ante cambios en un sujeto
SujetoConcreto: Almacena el estado de interés para los objetos ObservadorConcreto y envía una notificación a sus observadores cuando cambia su estado.
ObservadorConcreto: Mantiene una referencia a un objeto SujetoConcreto.
![Page 77: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/77.jpg)
Patrón ObservadorProceso
setEstado()
notificar()
actualizar()
getEstado()
actualizar()
getEstado()
unSujetoConcreto unObservadorConcreto otroObservadorConcreto
Observador A Observador B
sujeto
actualizar() actualizar()getEstado()
setEstado()
![Page 78: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/78.jpg)
Patrón ObservadorConsecuencias
![Page 79: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/79.jpg)
Patrón Estrategia
Define una familia de algoritmos, encapsula cada uno de ellos y los hace intercambiables.
Permite que un algoritmo cambie independientemente del cliente que lo utiliza.
![Page 80: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/80.jpg)
Patrón EstrategiaAplicabilidad
![Page 81: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/81.jpg)
Patrón EstrategiaEstructura
![Page 82: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/82.jpg)
Patrón EstrategiaParticipantes
![Page 83: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/83.jpg)
Patrón EstrategiaConsecuencias
![Page 84: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/84.jpg)
Frameworks vs Patrónes de Diseño
Patrónes de Diseño Frameworks
Reutilización de diseño Independiente del
lenguaje Indica como hacer un
buen diseño
Reutilización de diseño y código
Dependiente del lenguaje
Son un diseño en sí mismos
![Page 85: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/85.jpg)
AntiPatronesAntiPatrónes vs Patrónes de diseño
![Page 86: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/86.jpg)
AntiPatrones
![Page 87: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/87.jpg)
AntiPatrones
![Page 88: Programación Avanzada Introducción Tratan los problemas del diseño que se repiten y que se presentan en situaciones particulares del diseño, con el](https://reader035.vdocumento.com/reader035/viewer/2022062404/551cf3e15503463a7a8b54ed/html5/thumbnails/88.jpg)