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