Está en la página 1de 28

Patrones de Diseo

Daniel Romero dromero@pol.una.py

1/28

Introduccin

Disear software orientado a objetos es difcil, y disear software orientado a objetos reutilizable es todava ms difcil. Disear para el cambio. Anticiparse a los cambios en los requisitos o variantes, diseando de forma tal, que nuestro software se adapte a distintas situaciones.
2/28

Introduccin

El objetivo del diseo de software es llegar a un producto de calidad. El diseo debe ser adecuado para la aplicacin en particular, pero dicha solucin tambin debe ser general para poder enfrentar distintos escenarios y evitar el rediseo. No es necesario partir desde cero.
3/28

Introduccin
Evidencia de diseo errneo (bad smells)

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.
4/28

http://www.javiergarzas.com/2011/02/malos-olores.html

Introduccin

Patrones de Diseo !!

5/28

Historia

El origen est en la arquitectura clsica. En 1977 se public A Pattern language: Towns/Building/Construction de Christopher Alexander y otros. Segn Alexander, cada patrn describe un problema que ocurre una y otra vez en nuestro entorno, para describir despus el ncleo de la solucin a ese problema, de tal manera que esa solucin pueda ser usada ms de un milln de veces sin hacerlo siquiera dos veces de la misma forma.
6/28

Historia

Los patrones de diseo de software nacen en los 80s con Kent Beck y Ward Cunningham, que discutan patrones para Smalltalk.

La contribucin ms clebre es el libro Patrones de Diseo (1994) de E. Gamma, R. Helm, R. Johnson y J. Vlissides La famosa Gof (Gang of Four).
7/28

Que es un Patrn de Diseo?


Es una definicin 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.

8/28

Por qu usar patrones?

Beneficiarse de la experiencia (los novatos de los expertos). Vocabulario comn (mejora la comunicacin). Conocer de ante mano los pro y contra (mejor diseo). Diseos flexibles, elegantes y reutilizables (orientados al cambio). Ayuda a entender mejor el diseo.
9/28

Consejo

Aceptarlos Reconocerlos Internalizarlos


10/28

Clasificacin de patrones GoF

Patrones de creacin: Tratan de la inicializacin y configuracin de clases y objetos. 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
11/28

Patrones de creacin (GoF)

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.
12/28

Patrones estructurales (GoF)


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.
13/28

Patrones de comportamiento (GoF)

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.

14/28

Otros catlogos 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

15/28

Cmo seleccionar un patrn?

Considerar los problemas de diseo Observar la intencin del patrn Estudiar como se interrelacionan los patrones Estudiar los patrones de propsito similar Estudiar posibles causas de rediseo Considerar variabilidad en el diseo
16/28

Cmo seleccionar un patrn?

Leer todo el patrn ms de una vez: obtener una visin global, especialmente de la aplicabilidad y consecuencias del uso. Definir las clases de los patrones escogidos: Escoger los nombres, que deben ser representativos en el contexto de la aplicacin. Definir nombres de las operaciones: ser consistente. No Intentar aplicar un patrn a la fuerza: Esto es de suma relevancia, ya que la utilizacin de un patrn debe ser el resultado de un anlisis a conciencia, y su aplicabilidad un proceso natural, considerando matices, pero no forzando su uso.
17/28

Elementos de un patrn

Nombre: resume la esencia del patrn. Clasificacin: segn el propsito - Qu hace - el alcance - donde se aplican Propsito: responde a que hace el patrn. Motivo: ejemplo que ilustra el problema y cmo se estructuran clases y objetos para solucionarlo. Aplicabilidad: situaciones en las que puede aplicarse el patrn. Estructura: representacin grfica de las clases que intervienen y sus relaciones. Participantes: clases, objetos y responsabilidades. Consecuencias: resultados y cambios al usar el patrn. Diagrama de Ejemplo: diagrama del modelo del usuario que usa el/los estereotipo/s que forma/n el patrn. Usos conocidos y patrones relacionados.
18/28

Patrones de Diseo
Ejemplos

Singleton (libro pgina 110) Factory Method Composite (p140) Iterator (p220) Observer (p250)
19/28

Factory Method
Utilidad Separar la clase que crea los objetos, de la jerarqua de objetos a instanciar Ventajas Centralizacin de la creacin de objetos Facilita la escalabilidad del sistema El usuario se abstrae de la instancia a crear
20/28

Factory Method
El problema
Programa1

Clase A oper1() oper2() ...

If(tipo==1) createA else createA


Programa2

Clase A oper1() oper2() ...

Clase A oper1() oper2() ...

If(tipo==1) createA else createA

Problema: Qu sucede si queremos aadir A?

21/28

Factory Method
Una primera solucin Clase A oper1() oper2()
Programa1

A.create(1);

staticA create(tipo)
Programa2

A.create(2)

Clase A oper1() oper2() ...

Clase A oper1() oper2() ...

Solucin: Hay que recompilar todas las clases que heredan de A Problema: Puede que no tengamos acceso al cdigo de A
22/28

Factory Method
Solucin final

23/28

Composite (p140)
Aplicacin Se quiere representar jerarquas de objetos parte-todo Se quiere que los clientes obvien diferencias entre objetos compuestos e individuales

24/28

Composite

25/28

Composite
Consecuencias Objetos primitivos y compuestos se tratan de igual forma Simplifica el cliente Facilita aadir nuevos tipos de componentes Puede hacer que un diseo sea demasiado general

26/28

Ejercicio

27/28

Composite + Iterator

28/28

También podría gustarte