Descargar

Patrones de Diseño de Software (ppt) (página 2)

Enviado por Pablo Turmero


Partes: 1, 2, 3
edu.red

17 ¿A qué ayudan los patrones? Utilizan bastante la delegación Forma de hacer que la composición sea tan potente como la herencia. Un objeto receptor delega operaciones en su delegado Presente en muchos patrones: State, Strategy, Visitor,.. Caso extremo de composición, muestra que siempre puede sustituirse la herencia por composición.

edu.red

18 Delegación

edu.red

19 Delegación ()

edu.red

20 ¿A qué ayudan los patrones? La clave para la reutilización es anticiparse a los nuevos requisitos y cambios, de modo que los sistemas evolucionen de forma adecuada. Cada patrón permite que algunos aspectos de la estructura del sistema puedan cambiar de forma independiente a otros aspectos. Facilitan reuso interno, extensibilidad y mantenimiento.

edu.red

21 Causas comunes de rediseño i) Crear un objeto indicando la clase. ii) Dependencia de operaciones específicas iii) Dependencia de plataformas hardware o software iv) Dependencia sobre representación de objetos. v) Dependencias de algoritmos vi) Acoplamiento fuerte entre clases vii) Extender funcionalidad mediante subclases viii) Incapacidad de cambiar clases convenientemente

edu.red

22 Patrones frente a esos peligros i) Abstract factory, Method factory, Prototype ii) Chain of Responsability, Command iii) Abstract factory, Bridge iv) Abstract factory, Bridge, Memento, Proxy, v) Builder, Iterator, Strategy, Template Method, Visitor vi) Abstract factory, Bridge, Chain of Responsability, Command, Facade, Mediator, Observer vii) Bridge, Chain of Responsability, Composite, Decorator, Observer, Strategy viii) Adapter, Decorator, Visitor

edu.red

23 ¿Cómo seleccionar un patrón? Considera de que forma los patrones resuelven problemas de diseño Lee la sección que describe el propósito de cada patrón Estudia las interrelaciones entre patrones Analiza patrones con el mismo propósito Examina las causas de rediseñar Considera que debería ser variable en tu diseño

edu.red

24 ¿Cómo usar un patrón? Lee el patrón, todos sus apartados, para coger una visión global. Estudia la Estructura, Participantes y Colaboraciones Mira el ejemplo de código Asocia a cada participante del patrón un elemento software de tu aplicación. Implementa las clases y métodos relacionados con el patrón.

edu.red

25 Contenidos Introducción a los patrones de diseño GoF Patrones de creación Factoría Abstracta, Builder, Método Factoría, Prototipo, Singleton Patrones estructurales Adapter, Bridge, Composite, Decorador, Fachada, Flyweight, Proxy Patrones de comportamiento Cadena de Responsabilidad, Command, Iterator, Intérprete, Memento, Mediador, Observer, Estado, Estrategia, Método Plantilla, Visitor

edu.red

26 Patrones de Creación Abstraen el proceso de creación de objetos. Ayudan a crear sistemas independientes de cómo los objetos son creados, compuestos y representados. El sistema conoce las clases abstractas Flexibilidad en qué se crea, quién lo crea, cómo se crea y cuándo se crea.

edu.red

27 Ejemplo: Laberinto

edu.red

public class JuegoLaberinto { public Laberinto makeLaberinto () { Laberinto unLab = new Laberinto(); Habitacion h1 = new Habitacion(1); Habitacion h2 = new Habitacion(2); Puerta unaPuerta = new Puerta(1,2)

unLab .addHabitacion (h1); unLab .addHabitacion (h2);

h1.setLado(Norte, new Pared() ); h1.setLado(Sur, new Pared() ); h1.setLado(Este, new Pared() ); h1.setLado(Oeste,unaPuerta);

h2.setLado(Norte, new Pared); … return unLab;} }

edu.red

29 Ejemplo: Laberinto Poco flexible ¿Cómo crear laberintos con otros tipos de elementos como habitacionesEncantadas o puertasQueEscuchan?

Patrones de creación permiten eliminar referencias explícitas a clases concretas desde el código que necesita crear instancias de esas clases.

edu.red

30 Abstract Factory (Factoría Abstracta) Propósito Proporcionar una interfaz para crear familias de objetos relacionados o dependientes sin especificar la clase concreta Motivación Un toolkit interfaz de usuario que soporta diferentes formatos: Windows, Motif, X-Windows,..

edu.red

Motivación (Gp:) WidgetFactory (Gp:) createScroolBar() (Gp:) CreateWindow() (Gp:) MotifWidgetFactory (Gp:) createScroolBar() (Gp:) createWindow() (Gp:) PMWidgetFactory (Gp:) createScroolBar() (Gp:) createWindow() (Gp:) PMWindow (Gp:) ScrollBar (Gp:) PMScroolBar (Gp:) MotifScroolBar (Gp:) Window (Gp:) MotifWindow (Gp:) Cliente

Factoría Abstracta

edu.red

32 Estructura (Gp:) AbstractFactory (Gp:) CreateProductA() (Gp:) CreateProductB() (Gp:) ConcreteFactory1 (Gp:) createProductA() (Gp:) createProductB() (Gp:) ConcreteFactory2 (Gp:) createProductA() (Gp:) createProductB() (Gp:) ProdA2 (Gp:) AbstrProdB (Gp:) ProdB2 (Gp:) ProdB1 (Gp:) AbstrProdA (Gp:) ProdA1 (Gp:) Cliente

Factoría Abstracta

edu.red

33 Factoría Abstracta Aplicabilidad Un sistema debería ser independiente de cómo sus productos son creados, compuestos y representados Un sistema debería ser configurado para una familia de productos. Una familia de objetos “productos” relacionados es diseñada para ser utilizado juntos y se necesita forzar la restricción.

edu.red

34 Factoría Abstracta Consecuencias Aísla a los clientes de las clases concretas de implementación. Facilita el intercambio de familias de productos. Favorece la consistencia entre productos Es difícil soportar nuevos productos.

edu.red

35 Factoría Abstracta Implementación Factorías como singleton. Se necesita una subclase de AbstractFactory por cada familia de productos que redefine un conjunto de métodos factoría. Posibilidad de usar el patrón Prototype. Definir factorías extensibles: AbstractFactory sólo necesita un método de creación.

edu.red

36 Ejemplo 1: Laberinto public class FactoriaLaberinto { public Laberinto makeLaberinto { return new Laberinto();} public Pared makePared {return new Pared();}; public Habitacion makeHabitacion(int n) { return new Habitacion(n); }; public Puerta makePuerta (Habitacion h1, Habitacion h2) {return new Puerta(h1,h2);} }

edu.red

37 public class JuegoLaberinto { public Laberinto makeLaberinto (FactoriaLaberinto factoria) { Laberinto unLab = factoria.makeLaberinto(); Habitacion h1 = factoria.makeHabitacion(1); Habitacion h2 = factoria.makeHabitacion(2); Puerta unaPuerta = factoria.makePuerta(h1,h2); unLab.addHabitacion(h1); unLab.addHabitacion(h2); h1.setLado(Norte, factoria.makePared() ); h1.setLado(Este, unaPuerta) … h2.setLado(Oeste, unaPuerta); h2.setLado(Sur, factoria.makePared() ) return unLab; } } Ejemplo 1: Laberinto

edu.red

38 Builder (Constructor) Propósito Separa la construcción de un objeto complejo de su representación, así que el mismo proceso de construcción puede crear diferentes representaciones. Motivación Un traductor de documentos RTF a otros formatos. ¿Es posible añadir una nueva conversión sin modificar el traductor?

edu.red

39 Motivación (Gp:) ASCIIConversor (Gp:) convertirCaracter() (Gp:) getTextoASCII() (Gp:) ConversorTeX (Gp:) convertirCaracter() (Gp:) convertirCambioFont() (Gp:) convertirParrafo() (Gp:) getTextoTeX() (Gp:) ConversorTexto (Gp:) convertirCaracter() (Gp:) convertirCambioFont() (Gp:) ConvertirParrafo() (Gp:) <> (Gp:) RTFTraductor (Gp:) parseRTF() (Gp:) TextoASCII (Gp:) TextoTeX

Builder

edu.red

40 parseRTF { while (t = “obtener siguiente token”) { switch(t.tipo) { case Car: conversor.convertirCaracter(t.char);break; case Font: conversor.convertirCambioFont(t.font);break; case Par: conversor.convertirParrafo(); break } } }

ConversorTeX ctex = new ConversorTeX() RTFTraductor trad = new RTFTraductor (ctex, doc) trad.parseRTF(doc) TextoTex texto = conversorTex.getTextoTeX():

Builder

Partes: 1, 2, 3
 Página anterior Volver al principio del trabajoPágina siguiente