Patrones de Diseo con ejercicios en Java micael
- Slides: 103
Patrones de Diseño con ejercicios en Java micael. gallego@gmail. com
¿Qué es un patrón de diseño? l l Es una solución bien documentada que los expertos aplican para solucionar nuevos problemas porque han sido utilizadas con éxito en el pasado Los expertos identifican partes de un problema que son similares a otros problemas que han encontrado anteriormente Recuerdan la solución aplicada y la generalizan Adaptan la solución general al contexto del problema actual
¿Qué es un patrón de diseño? l l Son una forma estandarizada para representar soluciones generales de problemas que se encuentran comúnmente en el desarrollo de software orientado a objetos Beneficios l l l Catálogos de patrones Están documentados los pros y los contras de cada patrón. Se conocen las implicaciones de su aplicación Proporcionan un vocabulario común entre desarrolladores
Abstracción y Reutilización l l Los patrones suponen una evolución en la abstracción y reutilización en la programación Abstracción l l Resolución de problemas complejos dividiéndolos en otros más simples Capacidad de ocultar detalles superfluos y centrarse en lo relevante para reducir la complejidad
Abstracción y Reutilización l l Posibilidad de usar de nuevo código ya desarrollado anteriormente Formas de reutilización l l Copiar y Pegar !!PELIGRO¡¡ Reutilización de algoritmos (búsquedas, ordenaciones, …) Reutilización de funciones (métodos) Reutilización de librerías o APIs (métodos, clases, …)
Abstracción y Reutilización l Abstracción y Reutilización en Programación Orientada a Objetos l l l Abstracción funcional y de datos La encapsulación implica mejor reutilización La herencia permite formas de reutilización antes no posibles l Es posible desarrollar algoritmos de forma genérica y especializarlos creando clases hijas y redefiniendo o implementando ciertos métodos
Abstracción y Reutilización Tipo de Reutilización ¿Se puede aplicar de nuevo? ¿Qué se abstrae? Genericidad Fragmento de código Muy Pobre Nada Muy pobre Estructura de datos Buena Tipos de datos Moderada-Buena Funcional Buena Método Moderada-Buena Tipos Genéricos Buena Operación para tipo Buena Algoritmo Buena Fórmula Buena Clases (Interfaz, Polimorfismo, Clase abstracta) Buena Datos + Métodos Buena API (Librería) Buena Clases útiles Buena-Muy Buena Componente Buena Grupo de Clases Buena-Muy Buena Patrón de Diseño Excelente Solución a un problema Muy Buena
Tipos de Patrones l Existen cuatro grandes tipos de patrones de diseño l l Patrones de Creación Patrones de Comportamiento Patrones Estructurales Patrones de sistema
Tipos de Patrones l Patrones de Creación l l Facilitan y simplifican la creación de objetos Permiten crear objetos sin definir la clase concreta, sólo la interfaz que debe implementar Permiten reutilizar otros objetos en vez de crear nuevos debido a restricciones o eficiencia Patrones de Comportamiento l Guían el flujo de control del sistema (para facilitar la eficiencia y facilitar el mantenimiento)
Tipos de Patrones l Patrones Estructurales l l l Describen formas efectivas de partir y combinar los elementos de una aplicación Permiten la comunicación de sistemas incompatibles, la introducción de simplificaciones que mejoren la independencia entre partes, … Patrones de sistema l l Se aplican a la arquitectura de la aplicación Patrones más generales que los otros tipos
¿Cómo es un patrón? l Los patrones están especificados siguiendo un formulario o formato estándar: l l l Nombre También conocido como – Otros nombres usuales Propiedades l Tipo - Creación, Comportamiento, Estructural o De sistema l Nivel - Clase única, Componente (Grupo de clases), Arquitectónico (Coordina sistemas y subsistemas) Propósito - ¿Para qué sirve? Presentación – Problema que soluciona (con ejemplos) Aplicabilidad – Cuando y por qué debería usarse
¿Cómo es un patrón? l … l l l Descripción – Que hace y como se comporta de forma detallada Implementación - ¿Cómo implementarlo? Ventajas e Inconvenientes Variantes Patrones Relacionados Ejemplo
Patrones de Creación l l l Facilitan y simplifican la creación de objetos Permiten crear objetos sin definir la clase concreta, sólo el interfaz que debe implementar Permiten reutilizar otros objetos en vez de crear nuevos debido a restricciones o eficiencia
Patrones de Creación l Singleton (Único) l l Factory Method (Método Factoría) l l Restringe la creación de un único objeto de una clase en todo el sistema y permite acceder a él Define un método para la creación de objetos además del constructor Builder (Constructor) l Simplifica la construcción de objetos complejos definiendo una clase cuya responsabilidad es crear objetos de otras clases
Patrones de Creación l Abstract Factory (Fábrica Abstracta) l l Prototype (Prototipo) l l Permite crear objetos de un conjunto de clases relacionadas pero sin especificar la clase concreta, solo el interfaz Define clases cuyos objetos pueden clonarse Hay muchos mas…
Patrones de Creación Singleton (Único) l Propiedades l l Tipo: Creación, Nivel: Objeto Propósito l Permite tener una única instancia de esta clase en el sistema, y permite que todas las clases tengan acceso a esa instancia
Patrones de Creación Singleton (Único) l Introducción l l l Hay veces que se necesita esta funcionalidad Por ejemplo: Un histórico de todas las acciones que realiza el usuario en la aplicación. Desde todas las clases se necesita usar el mismo objeto History. List Se podría crear un único objeto y pasar ese objeto como parámetro a todos los demás objetos. Puede no saberse a priori quien va a necesitar el objeto y puede ser complejo estar pasándolo constantemente. Sólo con documentación se puede obligar a que nadie más cree un objeto History. List
Patrones de Creación Singleton (Único) l Introducción… l Se podría crear el objeto al inicio y colocarlo en un atributo estático. Pero no se podría proporcionar ninguna información de inicialización justo cuando vaya a usarse y no se puede controlar quien accede al objeto
Patrones de Creación Singleton (Único) l Aplicabilidad l l Cuando se requiera una instancia de una clase y accesible globalmente Descripción l l Asegura crear como máximo una instancia de un objeto. Ponga el constructor privado Ponga un método público estático get. Instance() que devuelva el objeto. Este método crea la instancia si no se ha creado todavía, la guarda como un atributo estático privado y la devuelve Se puede crear el objeto directamente sobre el atributo estático
Patrones de Creación Singleton (Único) l Implementación l l Clase que tiene privado el constructor, mantiene una referencia estática al único objeto de la clase y proporciona un método estático get. Instance() para que otras clases accedan al único objeto El resto de la implementación es completamente normal
Patrones de Creación Singleton (Único) import java. util. Array. List; import java. util. Collections; import java. util. List; public class History. List { private static History. List instance = new History. List(); private List history = new Array. List(); private History. List() { } public static History. List get. Instance() { return instance; } public void add. Command(String command) { history. add(command); } public Object undo. Command() { return history. remove(history. size() - 1); } } . . .
Patrones de Creación Singleton (Único) l Ventajas l l l La clase Singleton es la única que puede crear objetos de la clase, asegurando la unicidad No se necesita pasar la referencia a todos los objetos que la necesiten, simplificando el desarrollo y haciendo la aplicación más mantenible Inconvenientes l l Puede tener problemas en aplicaciones con muchos hilos de ejecución y con una única instancia Si en el sistema evoluciona y se necesitan más instancias de la clase, habría que cambiar todos los accesos a la clase Singleton
Patrones de Creación Singleton (Único) l Variaciones del patrón l Mantener varias instancias que pueden ser obtenidas con versiones con parámetros del método get. Instance(. . . ) l Cuando existen múltiples instancias, pueden ser de clases hijas diferentes dependiendo de los parámetros
Patrones de Creación Singleton (Único) l Patrones relacionados l l l Abstract Factory (Factoría Abstracta) Builder (Constructor) Prototype (Prototipo)
Patrones de Creación Singleton (Único) l Patrón Singleton en la API de Java l l l Clase java. awt. Toolkit l Variación del patrón porque Toolkit es abstracta y la instancia devuelta es de una clase hija l El método es get. Default. Toolkit() Clase java. lang. Runtime l El método es get. Runtime() Clase java. text. Date. Format l Variación del patrón porque Date. Format es abstracta l Tiene varios métodos con varias instancias get. Date. Instance(), get. Date. Instance(int style), get. Date. Time. Instance(), …
Ejercicio 1 l Aplica el patrón Singleton a la clase Gestor. IO en el juego de las Tres en Raya l De esta forma se conseguirá eficiencia, porque con un objeto Gestor. IO es suficiente en toda la aplicación
Patrones de Creación Prototype (Prototipo) l Propiedades l l Tipo: De creación, Nivel: Clase única Propósito l Facilita la creación de objetos copia de otros objetos
Patrones de Creación Prototype (Prototipo) l Introducción l l l En muchas ocasiones es necesario crear objetos que tengan el mismo estado que otros objetos ya creados Se podría crear un objeto en su estado inicial y copiar el valor de cada atributo. Pero eso obligaría a desencapsular la clase El patrón consiste en crear un método copy que cree un objeto con el mismo estado que el que recibe el mensaje de copy
Patrones de Creación Prototype (Prototipo) l Aplicabilidad l l Se utiliza el patrón Prototype para crear un objeto que sea copia de otro Descripción l l Permite copiar el estado de un objeto Se puede utilizar en las opciones de “copiar” y “pegar”
Patrones de Creación Prototype (Prototipo) l Implementación l l l Incluir un método de copia (copy) Este método devuelve un objeto de la misma clase cuyos atributos tienen los mismos valores que los atributos del objeto original Ventajas e Inconvenientes l l Crea copias sin necesidad de que el que necesita la copia conozca todos los atributos de lo copiado Hay que tener en cuenta la profundidad de la copia (copiar la referencia de un atributo o copiar el atributo en sí)
Patrones de Creación Prototype (Prototipo) l Variaciones del patrón l l Constructor de copia, que recibe como parámetro un objeto de la misma clase y obtiene de él sus valores Patrones relacionados l l Abstract Factory (Factoría Abstracta) Factory Method (Método de Fabricación)
Patrones de Creación Prototype (Prototipo) l Ejemplo
Ejercicio 2 l l l Aplica el patrón Prototype en la clase Lista del ejemplo de las estructuras de datos para copiar la lista Que se copie la lista, pero no los elementos que contiene Crea un programa ejemplo para comprobar el correcto funcionamiento del código
Patrones de Creación Factory Method (Método Factoría) l También conocido como l l Propiedades l l Virtual Builder (Constructor Virtual) Tipo: De creación, Nivel: Clase Propósito l Permite definir un método estándar en una clase para crear objetos. Las subclases deciden la clase concreta que crear
Patrones de Creación Factory Method (Método Factoría) l Introducción l Supongamos una aplicación de gestión de una lista, que permita borrar, editar y añadir valores l Esta aplicación tiene dos partes, la interfaz de usuario (un menú en modo texto) y la Lista. l La lista tiene un método para poner un valor (String) en una determinada posición (int) l public void set(int position, String value)
Patrones de Creación Factory Method (Método Factoría) l … l l Se quiere generalizar la aplicación incorporando una estructura de datos tipo mapa (clave, valor) Creamos la clase abstracta Estructura. Datos (de la que heredan Lista y Mapa). Creamos la clase abstracta Selector (de la que heredan SLista y SMapa) El menú usa objetos de Estructura. Datos y Selector. De esta forma se pueden incorporar nuevas estructuras de datos
Patrones de Creación Factory Method (Método Factoría) l … l El problema está en que el menú tiene que construir objetos de la clase Selector cuando le pregunta al usuario, pero no sabe que clase instanciar, si SLista o SMapa. l El patrón Método Factoría propone que exista un método en Estructura. Datos que permita crear el objeto Selector correspondiente l (Ver ejemplo)
Patrones de Creación Factory Method (Método Factoría) l Ejemplo (ver código)
Patrones de Creación Factory Method (Método Factoría) l Aplicabilidad l l l Cuando se quiera crear un framework extensible. Cuando una subclase decide que objeto crear Sabe cuando crear un objeto, pero su clase depende de la clase de otro objeto
Patrones de Creación Factory Method (Método Factoría) l Descripción l Existe un método de fabricación en una clase abstracta (Creator) que debe ser implementado por las clases hijas (Concrete. Creator). l Ese método devuelve objetos que heredan de una clase abstracta (Product) Son las Concrete. Creator las que deciden la clase que hereda de Product (Cocrete. Product) que deben instanciar l
Patrones de Creación Factory Method (Método Factoría) l Implementación
Patrones de Creación Factory Method (Método Factoría) l Ventajas e Inconvenientes l l Con el polimorfismo podemos hacer código genérico para una clase. Con este patrón podemos hacer código genérico para varias clases y el código genérico puede instanciar objetos cuando quiere El inconveniente es que para añadir un producto nuevo hay que cambiar varias clases
Patrones de Creación Factory Method (Método Factoría) l Variaciones del Patrón l l Creator puede tener factory. Method concreto y proporcionar una implementación por defecto El método de fabricación puede tomar parámetros y puede instanciar los Concrete. Product dependiendo del parámetro Creator y Product pueden ser interfaces Patrones relacionados l l l Abstract Factory (Fábrica Abstracta) Prototype (Prototipo) Template Method (Método Plantilla)
Ejercicio 3 l l Incorpora una nueva implementación del Tablero del juego de las Tres en Raya. Las columnas deben identificarse mediante letras (A, B, C…) Habrá que crear otra implementación de Coordenada con las columnas como letras Usar el patrón Factory Method al instanciar objetos de alguna clase concreta de coordenada
Patrones de Comportamiento l l Están relacionados con el flujo de control del sistema Ciertas formas de organizar el control en un sistema pueden derivar en grandes beneficios para la eficiencia y el mantenimiento del sistema
Patrones de Comportamiento l Chain of Responsability (Cadena de Responsabilidad) l l Command (Comando) l l Establece una cadena en un sistema, para que un mensaje pueda ser manejado en el nivel en el que se recibe en primer lugar o ser redirigido a otro objeto que pueda manejarlo Encapsula un comando en un objeto de tal forma que pueda ser almacenado, pasado a métodos y devuelto igual que otro objeto Interpreter (Intérprete) l Define un intérprete para un lenguaje
Patrones de Comportamiento l Iterator (Iterador) l l Proporciona una forma coherente de acceder secuencialmente a los elementos de una colección, independientemente del tipo de colección Mediator (Mediador) l Simplifica la comunicación entre los objetos de un sistema introduciendo un único objeto que gestiona la distribución de mensajes entre los otros
Patrones de Comportamiento l Observer (Observador) l l State (Estado) l l Proporciona a los componentes una forma flexible de enviar mensajes de difusión a los receptores interesados Permite modificar fácilmente el comportamiento de un objeto en tiempo de ejecución Strategy (Estrategia) l Define un grupo de clases que representa un conjunto de posibles comportamientos. Estos comportamientos pueden ser fácilmente intercambiados.
Patrones de Comportamiento l Visitor (Visitante) l Proporciona una forma fácil y sostenible de ejecutar acciones en una familia de clases. Este patrón centraliza los comportamientos y permite que sean modificados o ampliados sin cambiar las clases sobre las que actúan
Patrones de Comportamiento Command (Comando) l Propiedades l l l Tipo: De comportamiento Nivel: Objeto Propósito l Encapsular un comando en un objeto de tal forma que pueda ser almacenado, pasado a métodos y devuelto igual que cualquier otro objeto
Patrones de Comportamiento Command (Comando) l Introducción l l Cuando un usuario selecciona una acción para ejecutarla, la aplicación necesita saber desde dónde obtener los datos y el comportamiento relevantes Normalmente, la aplicación mantendrá la lógica en un lugar centralizado Los usuarios pueden necesitar deshacer las acciones realizadas Es lógico combinar la acción en un objeto: el objeto comando. Ese objeto tiene el comportamiento y los datos necesario para una acción específica
Patrones de Comportamiento Command (Comando) l Aplicabilidad l l l Dar soporte para deshacer comandos, procesos de identificación, etc. . . Poner en cola y ejecutar comandos en momentos distintos Desacoplar la fuente de una petición del objeto que la cumple
Patrones de Comportamiento Command (Comando) l Descripción l l l Una aplicación que no use el patrón Command tendrá que proporcionar una clase manejadora de código para controlar todos los eventos que puedan ocurrir El patrón Command encapsula los datos y funcionalidad necesarias para cumplir una acción o una petición específicas Proporciona una separación entre cuándo hay que ejecutar una acción y cómo tiene que ser ejecutada
Patrones de Comportamiento Command (Comando) l Implementación
Patrones de Comportamiento Command (Comando) l . . . l l Command: Interfaz de todos los comandos Invoker: El que decide cuando ejecutar el comando Receiver: El objeto sobre el que se ejecutará el comando Concrete. Command: Implementación de Command. Mantiene una referencia al Receiver para realizar las acciones cuando se le llama a execute
Patrones de Comportamiento Command (Comando) l Ventajas l l Desacopla la fuente o el disparador del evento del objeto que tiene conocimiento para ejecutar la tarea Permite reemplazar los objetos command y receiver en tiempo de ejecución Al ser los comando objetos normales, es más sencillo hacer log, deshacer, . . . Facilita la introducción de nuevos comandos, tan sólo creando una nueva implementación de command
Patrones de Comportamiento Command (Comando) l Variaciones l Deshacer: El patrón command puede ser extendido para incorporar la posibilidad de deshacer. Al realizar la acción se guarda lo necesario para deshacer la acción y se incorpora un método undo() l Macro. Command: Se puede crear un comando que esté compuesto por otros comandos y que pueda ser gestionado de manera uniforme (usando el patrón Composite)
Patrones de Comportamiento Command (Comando) l Patrones relacionados l l Composite (Compuesto): Para implementar el patrón compuesto Memento (Recuerdo): Guarda el estado del receptor, para crear el deshacer Prototype (Prototipo): Puede ser usado para copiar el comando antes de incluirlo en el historial Singletón (Único): En la mayoría de las aplicaciones, el historial se implementa como un singleton
Patrones de Comportamiento Command (Comando) l Ejemplo (ver código) l En la aplicación de citas se incorpora un comando con opciones de deshacer
Ejercicio 4 l Incorpora el patrón Command en el programa de gestión de estructuras de datos en el que se permita la acción de deshacer
Patrones de Comportamiento Iterator (Iterador) l También conocido como l l Propiedades del patrón l l l Cursor Tipo: De comportamiento Nivel: Componente Propósito l Proporcionar una forma coherente de acceder secuencialmente a los elementos de una colección, independientemente del tipo de colección subyacente
Patrones de Comportamiento Iterator (Iterador) l Introducción l l l Las estructuras de datos pueden estar implementadas de muchas formas Pueden usarse arrays, listas enlazadas o árboles (por si los elementos están ordenados) Lo habitual es recorrer secuencialmente los elementos de la colección
Patrones de Comportamiento Iterator (Iterador) l . . . l Usar un índice que se va incrementando podría ser muy ineficiente para implementaciones basadas en árboles o listas enlazadas for(int i=0; i<lista. size(); i++){ System. out. println(“Elemento: “+lista. get(i)); } l El patrón Iterator resuelve este problema definiendo una interfaz uniforme y eficiente para recorrer cualquier estructura de datos de forma secuencial, independientemente de su implementación
Patrones de Comportamiento Iterator (Iterador) l Aplicabilidad l l Proporcionar una forma uniforme, coherente e independiente de la implementación, con el fin de desplazarse por los elementos de una colección Permitir el recorrido de múltiples colecciones, permitiendo que distintos clientes naveguen simultáneamente por la misma colección
Patrones de Comportamiento Iterator (Iterador) l Descripción l El interfaz Iterator tiene las siguientes operaciones básicas l l Navegación: Desplazarse hacia delante (y quizás hacia atrás) Recuperación: Obtener el elemento en la posición actual Control de fin de colección: Determinar si hay un elemento siguiente Algunas versiones extendidas permiten eliminar el elemento referenciado
Patrones de Comportamiento Iterator (Iterador) l Implementación for(Iterator it = lista. iterator(); it. has. Next(); ){ Objeto o = it. next(); System. out. println(“Objeto: “+o); }
Patrones de Comportamiento Iterator (Iterador) l Ventajas l l Se simplifica el acceso secuencial a los elementos de cualquier estructura de datos Java 1. 5 incorpora un for mejorado para iterar por los elementos de cualquier colección que implemente Iterable for(Object objeto: lista){ System. out. println(“Objeto: “+objeto); } l Inconvenientes l En estructuras de datos no ordenadas (conjunto, mapa) el orden de los elementos al recorrerlos puede ser diferente en diferentes recorridos, lo cual puede generar problemas si no se tiene en cuenta
Patrones de Comportamiento Iterator (Iterador) l Ejemplo (Ver código)
Patrones de Comportamiento Iterator (Iterador) l Variaciones del Patrón l l Existen iteradores que crean una copia de la estructura de datos al ser creados, por si se modifica durante el recorrido Pueden existir diferentes formas de recorrer estructuras complejas (árboles, grafos) por tanto, se podrían implementar diferentes iteradores
Patrones de Comportamiento Iterator (Iterador) l Patrones relacionados l l Factory Method (Método Factoría): el método iterator() es un método factoría Visitor (Visitador)
Ejercicio 5 l Implementa los iteradores correspondientes en el ejercicio del Dispensador de Fracciones
Patrones de Comportamiento Observer (Observador) l También conocido como l l Propiedades del patrón l l l Publisher-Subscriptor (Editor-Suscriptor) Tipo: De comportamiento Nivel: Componente Propósito l Proporcionar a los componentes una forma flexible de enviar mensajes de difusión a los receptores interesados
Patrones de Comportamiento Observer (Observador) l Introducción l l l En muchas ocasiones ciertas partes de un sistema deben conocer un cambio en otras partes La solución típica es hacer que la parte que cambia invoque un método de la parte interesada Pero hay veces que la parte que cambia se desarrolla de forma independiente a la parte interesada l La parte que cambia es una librería y la parte interesada está en nuestro programa l La parte que cambia es genérica y la parte interesada no se puede determinar (un campo de texto en un interfaz de usuario)
Patrones de Comportamiento Observer (Observador) l . . . l l l Lo ideal es permitir que los interesados indiquen a la parte que cambia que están interesados en los cambios Las partes interesadas deben implementar un interfaz, que posee uno o varios métodos que serán invocados cuando algo cambie La parte que cambia guarda a los interesados en una lista y cuando algún cambio sucede, les invoca un método del interfaz
Patrones de Comportamiento Observer (Observador) l Aplicabilidad l l l Al menos un emisor de mensajes (una parte que cambia y que notifica el cambio a los demás) Uno o más receptores de mensajes El emisor no conoce como los receptores actúan ante el cambio, simplemente lo notifica Los receptores pueden no conocerse cuando se desarrolla el emisor Suelen ser muy usados en interfaces gráficas porque los componentes son observados por la lógica de la aplicación para actuar en consecuencia
Patrones de Comportamiento Observer (Observador) l Descripción l l Considera una factura con líneas de detalle El total de la factura depende del total de cada línea, que a su vez, depende de la cantidad y del precio por unidad Otro tipo de información puede depender del total de la factura El patrón observer es apropiado porque permite crear la factura completamente y posteriormente en el desarrollo, actuar ante cambios
Patrones de Comportamiento Observer (Observador) l . . . l l l Los productores de mensajes (componentes observables) generan eventos. Uno o más receptores de mensajes (los observadores) reciben esos eventos y actúan en consecuencia. La responsabilidad del componente observable es transmitir los eventos a los observadores interesados (aquellos registrados) Una interfaz oyente permite a los componentes observables indicar los eventos que han ocurrido y posiblemente proporcionar detalles a los observadores
Patrones de Comportamiento Observer (Observador) l Implementación
Patrones de Comportamiento Observer (Observador) l . . . l Observable l l La clase cuyos objetos son susceptibles de ser observados Proporciona métodos para registrar un observador o eliminarlo Tiene una lista con todos los observadores registrados Tiene un método protegido que es invocado dentro de la clase cuando haya que notificar un cambio a los observadores
Patrones de Comportamiento Observer (Observador) l . . . l Observer l l Concrete. Observer l l Interfaz que usan los Observable para comunicarse con los interesados Implementa la interfaz Observer y determina en la implementación de los métodos como responder a los mensajes recibidos de Observable Event l Mantiene información sobre el evento o cambio producido que puede ser útil para el Observer
Patrones de Comportamiento Observer (Observador) l Ventajas e Inconvenientes l l l El objeto observable puede ser relativamente simple porque las acciones que se desencadenan ante un cambio no están en la propia clase Facilita la realización de pruebas porque se puede codificar un observador de log Facilita el desarrollo incremental porque se pueden añadir observadores conforme los vayas codificando
Patrones de Comportamiento Observer (Observador) l Ventajas e Inconvenientes. . . l l El principal problema del patrón es como hacer los eventos que se envían Eventos genéricos l l Son más fáciles de codificar pero puede ser difícil para un observador saber lo que ha pasado Diferentes Eventos concretos l l Los observadores saben con detalle el cambio Se complica la codificación de los eventos porque hay que considerar muchas situaciones
Patrones de Comportamiento Observer (Observador) l Variaciones del patrón l l l En algunas ocasiones puede soportar únicamente un único observador Componentes observables multihilo, cada notificación se hace en el hilo del observer Envío de la referencia al observable en el propio evento para que los observers puedan invocar métodos en el observable con el fin de descubrir más información sobre el cambio
Patrones de Comportamiento Observer (Observador) l Patrones relacionados l l Proxy Remote. Proxy
Patrones de Comportamiento Observer (Observador) l Ejemplo (ver código)
Ejercicio 6 l l Independiza la gestión del socket del control del protocolo de comunicación en la aplicación de chat Utiliza el patrón observer para notificar la llegada de un mensaje a las partes del programa interesadas
Patrones Estructurales l l l Describen formas efectivas de particionar y combinar los elementos de una aplicación El patrón Adapter permite que dos sistemas se comuniquen El patrón Facade permite presentar una interfaz simplificada a un usuario sin eliminar todas las opciones disponibles en el sistema
Patrones Estructurales l Adapter (Adaptador) l l Sirve como un intermediario entre dos clases, convirtiendo las interfaces de una clase para que pueda ser utilizada por otra Bridge (Puente) l Divide un componente complejo en dos jerarquías relacionadas –la abstracción funcional y la implementación interna-. Esto hace que sea más fácil cambiar cualquier aspecto del componente
Patrones Estructurales l Composite (Compuesto) l l Desarrolla una forma flexible de crear jerarquías en estructura de árbol de una complejidad arbitraria, permitiendo a la vez que todos los elementos de la estructura funcionen con una interfaz uniforme Decorator (Decorador) l Proporciona una forma flexible de introducir o eliminar funcionalidad a un componente sin modificar su apariencia externa o su función
Patrones Estructurales l Facade (Fachada) l l Flyweight (Peso ligero) l l Proporciona una interfaz simplificada para un grupo de subsistemas o un sistema complejo Reduce el número de objetos detallados de muy bajo nivel en un sistema mediante la compartición de objetos Proxy (Representante) l Proporciona un representante de otro objeto, por distintas razones como pueden ser el acceso, la velocidad o la seguridad
Patrones Estructurales Composite (Compuesto) l Propiedades del Patrón l l l Tipo: Estructural Nivel: Componente Propósito l Desarrollar una forma flexible de crear jerarquías en estructura de árbol de una complejidad arbitraria, permitiendo a la vez que todos los elementos de la estructura funcionen con una interfaz uniforme
Patrones Estructurales Composite (Compuesto) l Introducción l l Se desea gestionar un sistema de ficheros Existen directorios que tienen ficheros y otros subdirectorios, que pueden tener ficheros Sin límite de profundidad Hay operaciones que se quieren realizar sobre un directorio o sobre un fichero (tamaño en disco, permisos…)
Patrones Estructurales Composite (Compuesto) l Introducción. . . l l Para realizar una acción que tenga en cuenta un subárbol completo, se puede realizar un iterador que recorra el árbol en un orden determinado y vaya realizando los cálculos El patrón composite propone utilizar el polimorfismo y la recursividad para realizar cálculos sobre un subárbol
Patrones Estructurales Composite (Compuesto) l Introducción. . .
Patrones Estructurales Composite (Compuesto) l Introducción. . . l l l File. System. Elem: Clase padre de Fichero y Directorio File: Devuelve el tamaño del fichero Directory: Devuelve la suma de los File. System. Elem y añade el tamaño de almacenar un directorio en disco (p. e 1 kbyte)
Patrones Estructurales Composite (Compuesto) l Ejemplo (ver código)
Patrones Estructurales Composite (Compuesto) l Aplicabilidad l l l Cuando exista un componente en estructura rama -hoja, parte-todo, contenedor-contenido La estructura pueda tener cualquier nivel de profundidad Se desea realizar operaciones con todos los elementos del árbol (o subárbol)
Patrones Estructurales Composite (Compuesto) l Descripción l Component l l Composite l l Clase o interface padre de todos los elementos del árbol. Especifica las operaciones Clase que representa a las ramas. Tienen una colección de Component Node l Clase hoja, contiene el comportamiento final. No pueden contener otros componentes
Patrones Estructurales Composite (Compuesto) l Implementación
Patrones Estructurales Composite (Compuesto) l Ventajas e Inconvenientes l l l Proporciona gran flexibilidad en la estructura y una interfaz muy manejable Sin importar la posición actual en la estructura, se puede llamar a cualquier método del componente Al tener tanta flexibilidad es más complicado de probar
Patrones Estructurales Composite (Compuesto) l Variaciones del patrón l l El nodo raíz: para mejorar la manejabilidad del sistema, algunas implementaciones del patrón Composite definen un objeto distinto que actúa como base para el árbol Ramificación con reglas: hay veces en estructuras complejas que es necesario imponer restricciones en las composiciones
Patrones Estructurales Composite (Compuesto) l Patrones relacionados l l Chain of Responsability Flyweight Iterator Visitor
Ejercicio 7 l Crea una estructura de datos orientada a objetos que permita almacenar expresiones y que permite calcular su valor l l 5 + (5 * (2 – 9)) 8 / ( (14 * 34) + (22 + 4) )
- Ejercicios de herencia java
- Diseo
- Portafolio de diseo
- Diseo grafico
- 05.html?title=
- Diseo de interiores
- Arreglo bidimensional
- Patrones textuales del texto expositivo
- Teoria biosocial de linehan
- Patrones que nos rodean
- Grasp patrones
- Patrones de velas japonesas
- Patrones de la ciencia
- Patron citolitico
- Patrones ab
- Respiracion cheyne stokes
- Espirometria patrones obstructivos y restrictivos
- Funcion de un topografo
- Verificacion de patrones oculares
- Prohibiciones de los patrones
- Patrones grasp
- Graduación de patrones
- Patrones de flujo de materiales
- Patrones grasp
- Patrones comerciales
- Patrones
- Son los patrones biográficos del comportamiento individual
- Patrones triangulos
- Patrones de consumo marketing
- Estilo de liderazgo club campestre
- Patrones de familia en cuidados paliativos
- Alocoria
- Derechos y obligaciones
- Chorro contra incendio
- Un patrón de comportamiento
- Patrones radiologicos
- Patron nutricional
- Patrones ventilatorios
- Ejemplos de habilidades motrices básicas
- Patrones grasp
- Khi tình yêu con còn mơ tin yêu con dệt thơ
- Operaciones con intervalos ejercicios
- Multiplicacion de numeros complejos
- Ejercicios de oraciones impersonales para imprimir
- Modal verbs ejercicios
- Ejercicios de sufijo
- Verboides
- Ejemplos de oraciones oracionales y no oracionales
- Ejercicios de vocabulario contextual
- Ejercicios r y rr
- Presente compuesto
- Numeros romanos ejercitacion
- Ejercicios de ecuacion de la elipse
- Ejercicios de conjuntos resueltos para universidad
- Ecuaciones con balanza ejemplos
- Infinitivo, participio y gerundio
- Exponentes racionales y radicales ejercicios resueltos
- Eoq con faltantes ejercicios resueltos
- Unidades de medida de longitud pequeñas
- Logaritmo partes
- Introducen ideas
- Resolver ecuaciones con valor absoluto
- Vertical
- Java import java.util.*
- Java import java.util.*
- Import java.awt.*
- Java import java.util.*
- Import java.io.file
- Gcd java
- Str2str 使い方
- What is readline in java
- Import java.util.*
- Java import java.io.*
- Perbedaan java swing dan awt
- Import java.awt.event
- Java interpreter
- Ejb remote vs local
- Xin giữ con để con phụng sự chúa
- Mejor es pobre con honor que rico con
- Lluvia de palabras relacionadas con la paz
- Problemi con percentuali e sconti con soluzioni
- Animales rr
- Talleres para padres con hijos discapacitados
- Chúng con cầu xin nhờ đức kito con chúa
- Silaba bu
- Si tu sales yo tambien salgo
- Con ca tụng chúa vì đã giải thoát con
- Palabras con am em im om um con dibujos
- Dettato ortografico classe terza primaria
- Que es una frase nominal ejemplos
- Vayas vallas bayas
- Ejercicios de molalidad resueltos yahoo
- Barreras de la comunicación ejercicios
- Objetivo de la racionalizacion
- Ejercicios de números racionales resueltos
- Tabla dunnett
- Tramas textuales ejercicios
- Tramas textuales ejercicios
- Teorema fundamental del algebra ejercicios
- Ejercicios teorema de euclides
- Colocar la coma donde corresponda
- Tipos de trinomios
- Secuencias textuales
- Ejercicios espirituales online