Está en la página 1de 22

Patrones de diseño

Reutilización del Software

Patrones de Diseño
Conocimientos previos

 Conocimientos de POO.
 UML (básico)
 Java - C#
Introducción
• Diseñar software orientado a objetos es
difícil, y diseñar software orientado a objetos
reutilizable es todavía más difícil
• Los diseñadores expertos no resuelven los
problemas desde sus principios; reutilizan
soluciones que han funcionado en el pasado.

Chapter 1: Introduction. Design Patterns, The Gang of Four

...y un software capaz de evolucionar tiene


que ser reutilizable (al menos para las
versiones futuras)
Patrones 5

 En las distintas actividades de la vida diaria se reconocen patrones:


 Trabajo
 Estudio
 Vida familiar
 Hobbies
Patrones
 Cómo llegar a ser un maestro de ajedrez
• Primero aprender las reglas del juego
• nombres de las piezas, movimientos legales, geometría y
orientación del tablero, etc.
• A continuación aprender los principios
• relativo valor de las piezas, valor estratégico de las
casillas centrales, jaque cruzado, etc.
• Sin embargo, para llegar a ser un maestro, hay que estudiar
las partidas de otros maestros
• Estas partidas contienen patrones que deben ser
entendidos, memorizados y aplicados repetidamente
• Hay cientos de estos patrones
Patrones
 Cómo llegar a ser un maestro del software
• Primero aprender las reglas
• algoritmos, estructuras de datos, lenguajes de programación,
etc.
• A continuación aprender los principios
• programación estructurada, programación modular,
programación OO, programación genérica, etc.
• Sin embargo, para llegar a ser un maestro, hay que estudiar los
diseños de otros maestros
• Estos diseños contienen patrones que deben ser
entendidos, memorizados y aplicados repetidamente
• Hay cientos de estos patrones
Problema Solución

Patrones de diseño
Patrones de diseño

Ingeniero Resuelve problemas


Aplicando estándares

Las buenas soluciones permanecen, las malas se rechazan.


. ingenieros deben conocer y saber aplicar los estándares conocidos
Los
Patrones de diseño

 Se definen con un alto nivel de abstracción.


 Son independientes de los lenguajes de programación y de los
detalles de implementación.
 Los patrones promueven y facilitan la reutilización de
arquitecturas y diseños de software que han demostrado su validez
en muchas aplicaciones.
¿Qué es un patrón de diseño?

 Ante un problema reiterado ofrece una solución contrastada que


lo resuelve.
 Describe el problema en forma sencilla.
 Describe el contexto en que ocurre.
 Describe los pasos a seguir.
 Describe los puntos fuertes y débiles de la solución.
 Describe otros patrones asociados.
¿Por qué usarlos?
 Mejora en la comunicación y
documentación
 “Hay que hacer un Factory Method”
 Facilita la documentación interna del proyecto.
 Mejora la ingeniería de software.
 Eleva el nivel del grupo de desarrollo.
 Previene “reinventar la rueda” en diseño
 Son soluciones ya probadas.
 Mejora la calidad y estructura
 “¿Cuan grande debe ser una clase?”
Definición de un patrón
Alexander(arquitecto/urbanista)

Cada patrón describe un problema que ocurre


una y otra vez en nuestro entorno y describe
también el núcleo de la solución al problema,
de forma que puede utilizarse un millón de veces
sin tener que hacer dos veces lo mismo.
Definición de un patrón de diseño

[Gamma]
Un patrón de diseño es una descripción de
clases y objetos comunicándose entre sí
adaptada para resolver un problema de
diseño general en un contexto particular.
Elementos de un patrón
• Nombre: describe el problema de diseño.
• El problema: describe cuándo aplicar el patrón.
• La solución: describe los elementos que
componen el diseño, sus relaciones,
responsabilidades y colaboración.
Clasificación de los patrones

• Según su propósito:
– De creación: conciernen al proceso de creación de
objetos.
– De estructura: tratan la composición de clases
y/o objetos.
– De comportamiento: caracterizan las formas en
las que interactúan y reparten responsabilidades las
distintas clases u objetos.
Clasificación de los patrones

• Según su alcance:
– Clases: tratan de relaciones entre clases y sus
subclases. Estas relaciones se establecen a través
de la relación de herencia, por consiguiente son
estáticas y definidas en tiempo de compilación .
– Objetos: tratan de relaciones entre objetos que
pueden ser cambiadas en tiempo de ejecución y
son más dinámicas.
Clasificación de los patrones
GoF (gang of Four) [Gamma]

Propósito Creación Estructural Comportamiento

Ámbito
Clase ❖Factory Method ❖Adapter Interpreter
Template Method

Objeto Abstract Factory ❖Adapter Chain of Responsability


Command
Builder Bridge
❖Iterator
Prototype ❖Composite Mediator
❖Singleton Decorator Memento

❖Facade ❖Observer
State
Flyweight ❖Strategy
Proxy Visitor

9
Como seleccionar un patrón de
diseño
 Tipo de problema a resolver
 Que tipos de problemas resuelve un patrón determinado
 Buscar las intenciones de cada patrón
 Estudiar cómo se interrelacionan los patrones
 Estudiar patrones de propósito similar
 Examinar la causa de un rediseño
 Considerar qué debería ser variable en un diseño
Cómo usar un patrón de diseño
1. Leer el patrón una vez para tener una visión general
2. Volver y estudiar la estructura, los participantes y las
colaboraciones
3. Ver un ejemplo concreto codificado del patrón
4. Elegir nombres para los participantes del patrón que sean
significativos en el contexto de la aplicación
5. Definir las clases
6. Definir nombres específicos d e la aplicación para las
operaciones en el patrón
7. Implementar las operaciones que realizarán las
responsabilidades y colaboraciones del patrón
Conclusión
 Los patrones de diseño describen soluciones simples y
elegantes a problemas específicos de diseño de software
orientado a objetos.
 Los mismos representan soluciones que han sido
desarrolladas y han ido evolucionando a lo largo del
tiempo.
Más información en...

• Desing Patterns. E. Gamma, R. Helm, R.


Johnson, and J. Vlissides. Design Patterns.
Addison Wesley, 1995.

• Patterns Home Page: http://hillside.net/patterns/

• Thinking in patterns with java


http://www.cs.huji.ac.il/~noam/intro2cs2001/www/TIPatt
erns.pdf

También podría gustarte