Patrón State Patrón Bridge

Anuncio
APOO 2007/2008
Patrón State
Patrón Bridge
Biel Massot Puigserver
Edu Herraiz Aparicio
APOO 2007/2008
Patrón State
Comportamiento de objetos
(A.K.A. Estados como objetos)
Patrón State
Motivación
●
●
Cambiar el comportamiento dependiendo del estado
Cuando queremos que un objeto cambie su comportamiento, según cambia su estado, se presenta el problema de la complejidad de código.
Patrón State
Motivación
●
●
En código estructurado
–
Variable para cada estado
–
Discriminación por switch
Problemas:
–
Demasiado código
–
Difícil mantenimiento
–
Posibles incongruencias
switch ($estado) {
case 'a':
$result = a();
break;
case 'b':
$result = b();
break;
case 'c':
$result = c();
break;
}
Patrón State
Solución
Patrón State
Aplicabilidad
●
Se utiliza cuando el objeto tiene diferentes estados y cambia su comportamiento para cada estado.
●
Como máquina de estados
Patrón State
Aplicabilidad
●
●
Si el comportamiento de un objeto depende de un estado, y debe cambiar en tiempo de ejecución dependiendo del estado.
Si las operaciones tienen largas sentencias con múltiples ramas que depende del estado del objeto.
Patrón State
Participantes
●
●
Contexto (Context)
–
Define interfaz
–
Mantiene una instancia con el estado actual
Estado (State)
–
●
Define interfaz para el comportamiento asociado a un determinado estado del Contexto.
Subclases de EstadoConcreto (ConcreteState)
–
Cada subclase implementa el comportamiento asociado con un estado del contexto.
Patrón State
Consecuencias
●
Localiza el comportamiento dependiente del estado y divide dicho comportamiento en diferentes estados.
–
●
Hace explícitas las transiciones entre estados.
–
●
Las transiciones entre estados no reside en sentencias if o swtich monolíticas, sino que se reparte entre las subclases.
Introducir objetos separados para los diferentes estados hace que las transiciones sean más explícitas.
Los objetos Estado pueden compartirse.
Patrón State
Usos Conocidos
●
Conexión TCP
–
●
Clase abstracta “Estado TCP” y derivan los diferentes estados de la conexión.
Herramientas de dibujo
–
Clase abstracta “herramienta” y derivan los diferentes tipos de herramientas.
Patrón State
Usos conocidos
Patrón State
“Nuestra” implementación
APOO 2007/2008
Patrón Bridge
Estructural Para objetos
(A.K.A. Manejador/Cuerpo)
Patrón Bridge
Motivación
●
●
Desacoplar una abstracción de su implementación.
La Herencia liga una implementación a una abstracción dificultando la modificación, extensión y reutilización. Esto implica dos inconvenientes.
Patrón Bridge
Motivación
Primer Inconveniente:
Problema!
Patrón Bridge
Motivación
Segundo Inconveniente:
Hace que el código sea dependiente de la plataforma.
new VentanaX
Ventana
(Abstracion)
+
VentanaX
(implementacion)
Patrón Bridge
Motivación
Solución:
<-- BRIDGE -->
Patrón Bridge
Aplicabilidad
●
Si se quiere evitar un enlace permanente entre abstracción y implementador (Permite cambiar la implementación en tiempo de ejecución)
●
Si se quiere evitar la proliferación de clases heredadas como se ha visto en la motivación, es indicativo de la necesidad de separar abstracción/implementación.
●
Si se quiere compartir una misma implementacion entre varios clienes.
Patrón Bridge
Estructura y Participantes
Abstracción
Abstracción Redefinida
Implementador
Implementador Concreto
Patrón Bridge
Consecuencias
●
Desacopla la interfaz y la implementación
●
Mejora la extensibilidad
●
Oculta detalles de implementación a los clientes
Patrón Bridge
Usos Conocidos
ET++ framework para aplicaciones (Ejemplo anterior):
- VentanaImp es un “WindowsPort”
- Ventana es “Window”
- De “WindowPort” derivan subclases concretas para cada
plataforma: “XWindowPort” “SunWindowPort” ...
El AppKit de NeXT usa un Bridge en la visualización de
diferentes tipos de imágenes.
El DOM de KDE3 esta basado en un bridge(Junto con
otros patrones). Permite crear diferentes tipos de
documentos usando la misma abstracción.
Patrón Bridge
“Nuestra” Implementación
Patrón Bridge
Fin...
Descargar