Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Patronesdiseño
Patronesdiseño
Patrones
En las distintas actividades de la vida diaria se reconocen patrones:
Trabajo Vida familiar Hobbies
Hardware
habitualmente
Hardware Software
Problema
Solucin
Patrones de diseo
Patrones de diseo
Son descripciones de clases y objetos relacionados que estn adaptados para resolver un problema de diseo general en un contexto determinado. Erich Gamma, Richard Helm, John Vlissides y Ralph Johnson
Patrones de diseo
Ingeniero Resuelve problemas Aplicando estndares
Las buenas soluciones permanecen, las malas se rechazan. . ingenieros deben conocer y saber aplicar los estndares conocidos Los
Patrones de diseo
Se definen con un alto nivel de abstraccin. Son independientes de los lenguajes de programacin y de los detalles de implementacin. Los patrones promueven y facilitan la reutilizacin de arquitecturas y diseos de software que han demostrado su validez en muchas aplicaciones.
Arquitectura
1. Define la forma y la estructura de la aplicacin de software. 2. Relacionada al propsito de la aplicacin. 3. Arquitectura de mdulos y sus interconexiones
Patrones de diseo
10
Cambios de requerimientos
Los cambios en un diseo de software, si no fueron cambios previstos en el diseo original, degradan el mismo. Incluyen dependencias. Generalmente lo hacen ingenieros que no estaban relacionados con la filosofa de diseo original.
11
Patrones de diseo
Erich Gamma, Richard Vlissides y Ralph Johnson Design Patterns. 1994 Helm, John
Patrones de diseo
Describe una estructura dentro de la cual catalogar y describir patrones Cataloga 23 patrones Destaca estrategias y aproximaciones basadas en el diseo de patrones
Patrones de diseo
No crearon los patrones descriptos en el libro. Los descubrieron como existentes dentro de la comunidad del software
Patrones de diseo
Porque estudiar patrones de diseo Reuso de soluciones de diseo. Establecer terminologa comn. Dan una perspectiva de alto nivel sobre el anlisis y diseo.
Patrones de diseo
Programe para implementacin. una interfaz, no para una
Comience cualquier jerarqua que necesite para solucionar su problema con una clase abstracta, sin implementacin de mtodos. Que solo describa los mtodos que debe soportar.
Patrones de diseo
Favorecer la composicin frente a la herencia de clases.
Construir objetos que contengan otros objetos. No cargue con todo el peso de heredar mtodos que no necesita
18
Patrones de diseo
Encuentre lo que vara y encapslelo. Lo que puede ser cambiado en su diseo encapslelo en una clase , para no tener necesidad de redisear.
19
Patrones de diseo
Herencia de clases Ventajas Se define estticamente Fcil modificacin de la implementacin Desventajas No se cambian implementaciones en tiempo de ejecucin Rompe encapsulamiento
Patrones de diseo
Composicin de objetos Ventajas Se define dinmicamente No se rompe encapsulamiento
Patrones de diseo
Que debera ser variable en su diseo
Que puede ser cambiado en su diseo, sin necesidad de redisear. Encapsule lo que puede variar. Distintos algoritmos de ordenacin de arreglos
Patrones de diseo
Manipular objetos en funcin de la interfaz definida por la clase abstracta, de la cual extiende, tiene dos ventajas:
Patrones de diseo
Los clientes no tienen que conocer los tipos especficos de los objetos que usan, basta con que estos cumplan con la interfaz que esperan los clientes. Los clientes desconocen las clases que implementan dichos objetos; slo conocen la clase abstracta que define la interfaz.
Patrones de diseo
1. Aceptarlos 2. Reconocerlos 3. Internalizarlos
25
Patrones estructurales: Tratan de desacoplar interfaz e implementacin de clases y objetos. Patrones de comportamiento: Tratan de las interacciones dinmicas entre sociedades de clases y objetos
Patrones de creacin
The Factory Method retorna una de las posibles subclases de una clase abstracta dependiendo de los datos que se le provee. The Abstract Factory Method retorna una de las varias familias de objetos. The Builder Pattern separa la construccin de un objeto complejo de su representacin. Varias representaciones se pueden crear dependiendo de las necesidades del programa. The Prototype Pattern inicializa e instancia una clase y luego copia o clona si necesita otras instancias, mas que crear nuevas instancias. The Singleton Pattern es una clase de la cual no puede existir mas de una instancia.
Patrones estructurales
Adapter: cambia la interfaz de una clase a la de otra. Bridge: permite mantener constante la interfaz que se presenta al cliente, cambiando la clase que se usa Composite: una coleccin de objetos Decorator: una clase que envuelve a una clase dndole nuevas capacidades. Facade: rene una jerarqua compleja de objetos y provee una clase nueva permitiendo acceder a cualquiera de las clases de la jerarqua. Flyweight: permite limitar la proliferacin de pequeas clases similares.
28
Patrones de comportamiento
Cadena de responsabilidad: permite que un conjunto de clases intenten manejar un requerimiento. Interpreter: define una gramtica de un lenguaje y usa esa gramtica para interpretar sentencias del lenguaje. Iterator: permite recorrer una estructura de datos sin conocer detalles de cmo estn implementados los datos Observer: algunos objetos reflejan un cambio a raz del cambio de otro, por lo tanto se le debe comunicar el cambio de este ltimo. Strategy: cantidad de algoritmos relacionados encerrados en un contexto a travs del cual se selecciona uno de los algoritmos.
29
Plantilla GoF
Nombre
diseo
Un buen nombre es vital porque ser parte del vocabulario de
Nombres Alternativos Otros nombres de uso comn para el patrn. Propsito Qu problema pretende solucionar. Motivacin Descripcin del problema y su contexto
Puede consistir en un ejemplo (un escenario) que ilustre la clase de problemas que el patrn intenta resolver. En general se entienden mejor los problemas concretos que los abstractos.
Plantilla GoF
Estructura
Representacin grfica de las clases de los objetos que participan en el patrn y de sus relaciones estructurales (estticas) Actualmente, lo ms comn es usar UML.
Las clases y objetos que participan en el patrn y sus responsabilidades o roles Qu efectos positivos y negativos implica el uso del
Consecuencias Colaboracin
Cmo colaboran los participantes para llevar a cabo sus responsabilidades y proporcionar el comportamiento deseado
Plantilla GoF
Usos conocidos
reales. Al menos dos ejemplos de uso del patrn en aplicaciones Cmo puede implementarse el patrn en un lenguaje
Implementacin
Cdigo de ejemplo
Fragmentos de cdigo que ilustren cmo se implementa el patrn en uno o varios lenguajes de programacin Cules son los patrones ms estrechamente relacionados con el dado? Se usa en conjuncin con otros patrones? De qu manera?
Patrones relacionados
Singleton
34
public final class Singleton { private final static Singleton singleton = new Singleton();
private Singleton(){ System.err.println( "Objeto Singleton creado." ); } public static Singleton obtenerInstanciaSingleton() {return singleton; }
35
public class PruebaSingleton { // ejecutar ejemplo Singleton public static void main( String args[] ) Singleton primerSingleton; Singleton segundoSingleton; primerSingleton = Singleton.obtenerInstanciaSingleton() segundoSingleton = Singleton.obtenerInstanciaSingleton(); if ( primerSingleton == segundoSingleton ) System.err.println( "primerSingleton y segundoSingleton " + "se refieren al mismo objeto Singleton" ); }}
36
Estrategia
37
Estrategia
public class Context { Strategy strategy=null; public Context(Strategy strategy) { this.strategy = strategy;} public int realizarOperacion(){ return this.strategy.calcular();}} public interface Strategy { int calcular();}
38
Estrategia
public class ConcreteStrategyOne implements Strategy{ public int calcular() {return 1; }} public class ConcreteStrategyTwo implements Strategy {public int calcular() {return 2;}} public class ConcreteStrategyThree implements Strategy {public int calcular() {return 3;}}
39
Observer
40
Observer
abstract public class Sujeto { protected Observador []observan; public Sujeto (){observan = new Observador[10];} abstract public Observador adscribir (Observador e); abstract public Observador quitar (Observador e); abstract public void registra(Observador e);
}
41
Observer
public class Sensor extends Sujeto { private double valor; int pos; public Sensor (){} public double getValor(){return valor;} public Observador adscribir (Observador e){ observan[pos]=e; pos++; return e;}
42
Observer
public Observador quitar (Observador e){ int indice=0; for(int j=0; j<=observan.length;j++) while(j<=observan.length) { if(observan[j].equals(e)) observan[j]=null; else System.out.println("No encontre el elemento"); } return e; } public void registra(Observador o) { observan[pos]=o; }}
43
Problema a resolver
Existe un archivo de texto, el que se debe leer en distintos momentos y bajo condiciones variables.
Como lo resuelvo?
Problema a resolver
Varia la estrategia de lectura
Leer solo las palabras que comiencen con t Leer las palabras de ms de 5 caracteres Leer los palndromos
Encapsular