Sunteți pe pagina 1din 51

PATRONES DE DISEO

Patrones
En las distintas actividades de la vida diaria se reconocen patrones:
Trabajo Vida familiar Hobbies

Hardware

habitualmente
Hardware Software

Poder rehusar componentes y lograr un mantenimiento fcil. Lograr un software flexible

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

Paquetes, componentes, clases


9

Evidencias de diseo errneo


Rigidez: problemas para insertar algn cambio. Fragilidad: el software falla en muchos lugares al insertar un cambio. Inmovilidad: no se pueden rehusar partes del proyecto. Viscosidad:
De diseo: cuando se deben hacer cambios, es ms fcil hacer cosas mal, que bien. De entorno: entorno de desarrollo ineficiente

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.

Que resuelve un patrn de diseo?


Patrn de diseo: proporciona un esquema para refinar los subsistemas o componentes de un sistema de software, o las relaciones entre ellos. Describe estructuras repetitivas de comunicacin de componentes que resuelven un problema de diseo en un contexto particular

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

Encapsule cada algoritmo en una clase

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

Clasificacin de patrones (GoF)


Patrones de creacin: Tratan configuracin de clases y objetos. de la inicializacin y

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

Otros tipos de patrones


Patrones de programacin concurrente Patrones de interfaz grfica Patrones de organizacin de cdigo Patrones de optimizacin de cdigo Patrones de robustez de cdigo Patrones de fases de prueba

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.

Aplicabilidad En qu situaciones puede/debe aplicarse el patrn? Participantes


patrn?
Cules son los compromisos de diseo que implica su uso? Qu aspectos de la estructura del sistema pueden variar de forma independiente?

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

de programacin? Qu dificultades implica? Hay aspectos dependientes del lenguaje de programacin?

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

Beneficios de los patrones


Los patrones favorecen la reutilizacin de diseos y arquitecturas a gran escala. Capturan el conocimiento de los expertos y lo hacen accesible a toda la comunidad software. Proporcionan un cuerpo de conocimiento utilizable por toda la comunidad software. Favorecen la transmisin de conocimiento entre profesionales y entre clientes y desarrolladores Proporcionan un lenguaje comn. Los nombres de los patrones forman parte del vocabulario tcnico del ingeniero software.

Problema de los patrones


Los patrones, no llevan de forma directa a la reutilizacin del cdigo, aunque dicha reutilizacin se facilita mediante su uso. La integracin de los patrones en el proceso de desarrollo se hace todava de forma manual. El nmero de patrones identificados es cada vez ms grande. Las clasificaciones actuales no siempre sirven de gua para decidir cual usar.

Problema de los patrones


El nmero de combinaciones patrones estilos y atributos que se dan en la prctica son incontables. Los patrones se validan por la experiencia y el debate, no mediante la aplicacin de tcnicas formales

Cmo seleccionar un patrn de diseo


Considerar cmo los patrones de diseo solucionan problemas de diseo. Buscar las intenciones de cada patrn. Estudiar cmo se interrelacionan los patrones. Estudiar patrones de propsito similar. Examinar la causa de un rediseo. Considerar que debera ser variable en un diseo.

Cmo usar un patrn de diseo


1. Leer el patrn una vez para tener una visin general 2. Volver y estudiar la estructura, los participantes y las colaboraciones 3. Ver un ejemplo concreto codificado del patrn 4. Elegir nombres para los participantes del patrn que sean significativos en el contexto de la aplicacin

Cmo usar un patrn de diseo


5. Definir las clases 6. Definir nombres especficos de la aplicacin para las operaciones en el patrn. 7. Implementar las operaciones que realizarn las responsabilidades y colaboraciones del patrn.

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

S-ar putea să vă placă și