Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

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




Enviado por Pablo Turmero



Partes: 1, 2, 3

Monografias.com

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.

Monografias.com

18
Delegación

Monografias.com

19
Delegación
()

Monografias.com

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.

Monografias.com

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

Monografias.com

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

Monografias.com

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

Monografias.com

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.

Monografias.com

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

Monografias.com

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.

Monografias.com

27
Ejemplo: Laberinto

Monografias.com

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;}
}

Monografias.com

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.

Monografias.com

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,..

Monografias.com

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

Monografias.com

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

Monografias.com

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.

Monografias.com

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.

Monografias.com

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.

Monografias.com

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);}
}

Monografias.com

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

Monografias.com

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?

Monografias.com

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

Monografias.com

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 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter