Patrones de Diseño
Patrones de Diseño
Patrones de Diseño
Patrones
Diseño de Sistemas
2
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.
3
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.
4
Introducción
5
Elementos de un patrón
6
Ventajas de los patrones de diseño
Son soluciones concretas:
– Un catálogo de patrones es un conjunto de recetas de diseño.
– Aunque se pueden clasificar, cada patrón es independiente del resto.
Son soluciones técnicas:
– Dada una determinada situación, los patrones indican cómo
resolverla mediante un D.O.O.
– Existen patrones específicos para un lenguaje determinado, y otros
de carácter más general.
Se aplican en situaciones muy comunes:
– Proceden de la experiencia.
– Han demostrado su utilidad para resolver problemas que aparecen
frecuentemente en el D.O.O.
7
Ventajas de los patrones de diseño
Son soluciones simples:
– Indican cómo resolver un problema particular utilizando un
pequeño número de clases relacionadas de forma
determinada.
– No indican cómo diseñar un sistema completo, sino sólo
aspectos puntuales del mismo.
Facilitan la reutilización de las clases y del propio
diseño:
– Los patrones favorecen la reutilización de clases ya
existentes y la programación de clases reutilizables.
– La propia estructura del patrón es reutilizada cada vez que
se aplica.
8
Inconvenientes
El uso de un patrón no se refleja claramente en el código:
– A partir de la implementación es difícil determinar qué patrón de diseño se
ha utilizado.
– No es posible hacer ingeniería inversa.
Referencias a “self”:
– Muchos patrones utilizan la delegación de operaciones y esto provoca el
conocido problema del ámbito local de los objetos (self).
Es difícil reutilizar la implementación de un patrón:
– Las clases del patrón son roles genéricos, pero en la implementación
aparecen clases concretas.
Los patrones suponen cierta sobrecarga de trabajo a la hora de
implementar:
– Se usan más clases de las estrictamente necesarias.
– A menudo un mensaje se resuelve mediante delegación de varios
mensajes a otros objetos.
9
Clasificación de los patrones
Según su ámbito:
– Patrones de clases . Tratan con relaciones de
herencia (estática) entre clases.
– Patrones de objetos . Se refieren a relaciones
de composición entre objetos, que pueden
cambiar en tiempo de ejecución y son más
dinámicas.
10
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.
11
Clasificación de los patrones
GoF (gang of Four) [Gamma]
12
Patrones de diseño fundamentales
13
Patrón DELEGATION
Utilidad:
Cuando se quiere extender y reutilizar la
funcionalidad de una clase SIN UTILIZAR LA
HERENCIA
Ventajas:
– En vez de herencia múltiple
– Cuando una clase que hereda de otra quiere ocultar
algunos de los métodos heredados
– Compartir código que NO se puede heredar
14
Patrón DELEGATION
El problema
15
Patrón DELEGATION
La solución
16
Patrón DELEGATION
Implementación
17
Patrón INTERFACE
Utilidad y Ventajas
Utilidad
– Definir un comportamiento independiente de
donde vaya a ser utilizado
Ventajas
– Desacople entre comportamiento y clase.
– Realización de clases “Utilities”
18
Patrón INTERFACE
El problema
19
Patrón INTERFACE
La Solución
20
Patrón INTERFACE
Implementación
21
Patrón INTERFACE
Ejemplo
22
Patrón MARKER INTERFACE
Utilidad y Ventajas
Utilidad
– Sirve para indicar atributos semánticos de una clase.
Ventajas:
– Se puede preguntar si un objeto pertenece a una clase de
un determinado tipo o no.
– Habitualmente se utiliza en clases de utilidades que tienen
que determinar algo sobre objetos sin asumir que son
instancias de una determinada clase o no.
23
Patrón MARKER INTERFACE
24
Patrón MARKER INTERFACE
Ejemplo
25