patrones de diseño

103
Patrones de Diseño con ejercicios en Java [email protected]

Upload: henry-torres

Post on 14-Sep-2015

11 views

Category:

Documents


1 download

DESCRIPTION

Patrones de diseño, para ingenieria del software.Patrones aplicados en JAVA (SINGLETON, FACTORY, STATE)

TRANSCRIPT

  • Patrones de Diseocon ejercicios en [email protected]

  • Qu es un patrn de diseo?Es una solucin bien documentada que los expertos aplican para solucionar nuevos problemas porque han sido utilizadas con xito en el pasadoLos expertos identifican partes de un problema que son similares a otros problemas que han encontrado anteriormenteRecuerdan la solucin aplicada y la generalizanAdaptan la solucin general al contexto del problema actual

  • Qu es un patrn de diseo?Son una forma estandarizada para representar soluciones generales de problemas que se encuentran comnmente en el desarrollo de software orientado a objetosBeneficiosCatlogos de patronesEstn documentados los pros y los contras de cada patrn. Se conocen las implicaciones de su aplicacinProporcionan un vocabulario comn entre desarrolladores

  • Abstraccin y ReutilizacinLos patrones suponen una evolucin en la abstraccin y reutilizacin en la programacinAbstraccinResolucin de problemas complejos dividindolos en otros ms simplesCapacidad de ocultar detalles superfluos y centrarse en lo relevante para reducir la complejidad

  • Abstraccin y ReutilizacinReutilizacinPosibilidad de usar de nuevo cdigo ya desarrollado anteriormenteFormas de reutilizacinCopiar y Pegar !!PELIGROReutilizacin de algoritmos (bsquedas, ordenaciones, )Reutilizacin de funciones (mtodos)Reutilizacin de libreras o APIs (mtodos, clases, )

  • Abstraccin y ReutilizacinAbstraccin y Reutilizacin en Programacin Orientada a ObjetosAbstraccin funcional y de datosLa encapsulacin implica mejor reutilizacinLa herencia permite formas de reutilizacin antes no posiblesEs posible desarrollar algoritmos de forma genrica y especializarlos creando clases hijas y redefiniendo o implementando ciertos mtodos

  • Abstraccin y Reutilizacin

    Tipo de ReutilizacinSe puede aplicar de nuevo?Qu se abstrae?GenericidadFragmento de cdigoMuy PobreNadaMuy pobreEstructura de datosBuenaTipos de datosModerada-BuenaFuncionalBuenaMtodoModerada-BuenaTipos GenricosBuenaOperacin para tipoBuenaAlgoritmoBuenaFrmulaBuenaClases (Interfaz, Polimorfismo, Clase abstracta)BuenaDatos + MtodosBuenaAPI (Librera)BuenaClases tilesBuena-Muy BuenaComponenteBuenaGrupo de ClasesBuena-Muy BuenaPatrn de DiseoExcelenteSolucin a un problemaMuy Buena

  • Tipos de PatronesExisten cuatro grandes tipos de patrones de diseoPatrones de CreacinPatrones de ComportamientoPatrones EstructuralesPatrones de sistema

  • Tipos de PatronesPatrones de Creacin Facilitan y simplifican la creacin de objetosPermiten crear objetos sin definir la clase concreta, slo la interfaz que debe implementarPermiten reutilizar otros objetos en vez de crear nuevos debido a restricciones o eficienciaPatrones de ComportamientoGuan el flujo de control del sistema (para facilitar la eficiencia y facilitar el mantenimiento)

  • Tipos de PatronesPatrones EstructuralesDescriben formas efectivas de partir y combinar los elementos de una aplicacinPermiten la comunicacin de sistemas incompatibles, la introduccin de simplificaciones que mejoren la independencia entre partes,Patrones de sistemaSe aplican a la arquitectura de la aplicacinPatrones ms generales que los otros tipos

  • Cmo es un patrn?Los patrones estn especificados siguiendo un formulario o formato estndar:NombreTambin conocido como Otros nombres usualesPropiedadesTipo - Creacin, Comportamiento, Estructural o De sistemaNivel - Clase nica, Componente (Grupo de clases), Arquitectnico (Coordina sistemas y subsistemas)Propsito - Para qu sirve? Presentacin Problema que soluciona (con ejemplos)Aplicabilidad Cuando y por qu debera usarse

  • Cmo es un patrn?Descripcin Que hace y como se comporta de forma detalladaImplementacin - Cmo implementarlo?Ventajas e Inconvenientes VariantesPatrones RelacionadosEjemplo

  • Patrones de CreacinFacilitan y simplifican la creacin de objetosPermiten crear objetos sin definir la clase concreta, slo el interfaz que debe implementarPermiten reutilizar otros objetos en vez de crear nuevos debido a restricciones o eficiencia

  • Patrones de CreacinSingleton (nico)Restringe la creacin de un nico objeto de una clase en todo el sistema y permite acceder a l Factory Method (Mtodo Factora)Define un mtodo para la creacin de objetos adems del constructorBuilder (Constructor)Simplifica la construccin de objetos complejos definiendo una clase cuya responsabilidad es crear objetos de otras clases

  • Patrones de CreacinAbstract Factory (Fbrica Abstracta)Permite crear objetos de un conjunto de clases relacionadas pero sin especificar la clase concreta, solo el interfazPrototype (Prototipo)Define clases cuyos objetos pueden clonarseHay muchos mas

  • Patrones de CreacinSingleton (nico)PropiedadesTipo: Creacin, Nivel: ObjetoPropsitoPermite tener una nica instancia de esta clase en el sistema, y permite que todas las clases tengan acceso a esa instancia

  • Patrones de CreacinSingleton (nico)IntroduccinHay veces que se necesita esta funcionalidadPor ejemplo: Un histrico de todas las acciones que realiza el usuario en la aplicacin. Desde todas las clases se necesita usar el mismo objeto HistoryListSe podra crear un nico objeto y pasar ese objeto como parmetro a todos los dems objetos. Puede no saberse a priori quien va a necesitar el objeto y puede ser complejo estar pasndolo constantemente. Slo con documentacin se puede obligar a que nadie ms cree un objeto HistoryList

  • Patrones de CreacinSingleton (nico)IntroduccinSe podra crear el objeto al inicio y colocarlo en un atributo esttico. Pero no se podra proporcionar ninguna informacin de inicializacin justo cuando vaya a usarse y no se puede controlar quien accede al objeto

  • Patrones de CreacinSingleton (nico)AplicabilidadCuando se requiera una instancia de una clase y accesible globalmenteDescripcinAsegura crear como mximo una instancia de un objeto. Ponga el constructor privadoPonga un mtodo pblico esttico getInstance() que devuelva el objeto. Este mtodo crea la instancia si no se ha creado todava, la guarda como un atributo esttico privado y la devuelveSe puede crear el objeto directamente sobre el atributo esttico

  • Patrones de CreacinSingleton (nico)ImplementacinClase que tiene privado el constructor, mantiene una referencia esttica al nico objeto de la clase y proporciona un mtodo esttico getInstance() para que otras clases accedan al nico objetoEl resto de la implementacin es completamente normal

  • Patrones de CreacinSingleton (nico)import java.util.ArrayList;import java.util.Collections;import java.util.List;

    public class HistoryList { private static HistoryList instance = new HistoryList();

    private List history = new ArrayList();

    private HistoryList() { }

    public static HistoryList getInstance() { return instance; }

    public void addCommand(String command) { history.add(command); }

    public Object undoCommand() { return history.remove(history.size() - 1); }

    ...}

  • Patrones de CreacinSingleton (nico)VentajasLa clase Singleton es la nica que puede crear objetos de la clase, asegurando la unicidadNo se necesita pasar la referencia a todos los objetos que la necesiten, simplificando el desarrollo y haciendo la aplicacin ms mantenibleInconvenientesPuede tener problemas en aplicaciones con muchos hilos de ejecucin y con una nica instanciaSi en el sistema evoluciona y se necesitan ms instancias de la clase, habra que cambiar todos los accesos a la clase Singleton

  • Patrones de CreacinSingleton (nico)Variaciones del patrnMantener varias instancias que pueden ser obtenidas con versiones con parmetros del mtodo getInstance(...)Cuando existen mltiples instancias, pueden ser de clases hijas diferentes dependiendo de los parmetros

  • Patrones de CreacinSingleton (nico)Patrones relacionadosAbstract Factory (Factora Abstracta)Builder (Constructor)Prototype (Prototipo)

  • Patrones de CreacinSingleton (nico)Patrn Singleton en la API de JavaClase java.awt.ToolkitVariacin del patrn porque Toolkit es abstracta y la instancia devuelta es de una clase hijaEl mtodo es getDefaultToolkit()Clase java.lang.RuntimeEl mtodo es getRuntime()Clase java.text.DateFormatVariacin del patrn porque DateFormat es abstractaTiene varios mtodos con varias instancias getDateInstance(), getDateInstance(int style), getDateTimeInstance(),

  • Ejercicio 1Aplica el patrn Singleton a la clase GestorIO en el juego de las Tres en RayaDe esta forma se conseguir eficiencia, porque con un objeto GestorIO es suficiente en toda la aplicacin

  • Patrones de CreacinPrototype (Prototipo)PropiedadesTipo: De creacin, Nivel: Clase nicaPropsitoFacilita la creacin de objetos copia de otros objetos

  • Patrones de CreacinPrototype (Prototipo)IntroduccinEn muchas ocasiones es necesario crear objetos que tengan el mismo estado que otros objetos ya creadosSe podra crear un objeto en su estado inicial y copiar el valor de cada atributo. Pero eso obligara a desencapsular la claseEl patrn consiste en crear un mtodo copy que cree un objeto con el mismo estado que el que recibe el mensaje de copy

  • Patrones de CreacinPrototype (Prototipo)AplicabilidadSe utiliza el patrn Prototype para crear un objeto que sea copia de otroDescripcinPermite copiar el estado de un objetoSe puede utilizar en las opciones de copiar y pegar

  • Patrones de CreacinPrototype (Prototipo)ImplementacinIncluir un mtodo de copia (copy)Este mtodo devuelve un objeto de la misma clase cuyos atributos tienen los mismos valores que los atributos del objeto originalVentajas e InconvenientesCrea copias sin necesidad de que el que necesita la copia conozca todos los atributos de lo copiadoHay que tener en cuenta la profundidad de la copia (copiar la referencia de un atributo o copiar el atributo en s)

  • Patrones de CreacinPrototype (Prototipo)Variaciones del patrnConstructor de copia, que recibe como parmetro un objeto de la misma clase y obtiene de l sus valoresPatrones relacionadosAbstract Factory (Factora Abstracta)Factory Method (Mtodo de Fabricacin)

  • Patrones de CreacinPrototype (Prototipo)Ejemplo

  • Ejercicio 2 Aplica el patrn Prototype en la clase Lista del ejemplo de las estructuras de datos para copiar la listaQue se copie la lista, pero no los elementos que contieneCrea un programa ejemplo para comprobar el correcto funcionamiento del cdigo

  • Patrones de CreacinFactory Method (Mtodo Factora)Tambin conocido comoVirtual Builder (Constructor Virtual)PropiedadesTipo: De creacin, Nivel: ClasePropsitoPermite definir un mtodo estndar en una clase para crear objetos. Las subclases deciden la clase concreta que crear

  • Patrones de CreacinFactory Method (Mtodo Factora)IntroduccinSupongamos una aplicacin de gestin de una lista, que permita borrar, editar y aadir valores

    Esta aplicacin tiene dos partes, la interfaz de usuario (un men en modo texto) y la Lista.

    La lista tiene un mtodo para poner un valor (String) en una determinada posicin (int) public void set(int position, String value)

  • Patrones de CreacinFactory Method (Mtodo Factora)Se quiere generalizar la aplicacin incorporando una estructura de datos tipo mapa (clave,valor) Creamos la clase abstracta EstructuraDatos (de la que heredan Lista y Mapa). Creamos la clase abstracta Selector (de la que heredan SLista y SMapa) El men usa objetos de EstructuraDatos y Selector. De esta forma se pueden incorporar nuevas estructuras de datos

  • Patrones de CreacinFactory Method (Mtodo Factora)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.El patrn Mtodo Factora propone que exista un mtodo en EstructuraDatos que permita crear el objeto Selector correspondiente(Ver ejemplo)

  • Patrones de CreacinFactory Method (Mtodo Factora)Ejemplo (ver cdigo)

  • Patrones de CreacinFactory Method (Mtodo Factora)AplicabilidadCuando se quiera crear un framework extensible. Cuando una subclase decide que objeto crearSabe cuando crear un objeto, pero su clase depende de la clase de otro objeto

  • Patrones de CreacinFactory Method (Mtodo Factora)DescripcinExiste un mtodo de fabricacin en una clase abstracta (Creator) que debe ser implementado por las clases hijas (ConcreteCreator). Ese mtodo devuelve objetos que heredan de una clase abstracta (Product)Son las ConcreteCreator las que deciden la clase que hereda de Product (CocreteProduct) que deben instanciar

  • Patrones de CreacinFactory Method (Mtodo Factora)Implementacin

  • Patrones de CreacinFactory Method (Mtodo Factora)Ventajas e InconvenientesCon el polimorfismo podemos hacer cdigo genrico para una clase. Con este patrn podemos hacer cdigo genrico para varias clases y el cdigo genrico puede instanciar objetos cuando quiereEl inconveniente es que para aadir un producto nuevo hay que cambiar varias clases

  • Patrones de CreacinFactory Method (Mtodo Factora)Variaciones del PatrnCreator puede tener factoryMethod concreto y proporcionar una implementacin por defectoEl mtodo de fabricacin puede tomar parmetros y puede instanciar los ConcreteProduct dependiendo del parmetroCreator y Product pueden ser interfacesPatrones relacionadosAbstract Factory (Fbrica Abstracta)Prototype (Prototipo)Template Method (Mtodo Plantilla)

  • Ejercicio 3Incorpora una nueva implementacin del Tablero del juego de las Tres en Raya. Las columnas deben identificarse mediante letras (A,B,C)Habr que crear otra implementacin de Coordenada con las columnas como letrasUsar el patrn Factory Method al instanciar objetos de alguna clase concreta de coordenada

  • Patrones de ComportamientoEstn relacionados con el flujo de control del sistemaCiertas formas de organizar el control en un sistema pueden derivar en grandes beneficios para la eficiencia y el mantenimiento del sistema

  • Patrones de ComportamientoChain of Responsability (Cadena de Responsabilidad)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 manejarloCommand (Comando)Encapsula un comando en un objeto de tal forma que pueda ser almacenado, pasado a mtodos y devuelto igual que otro objetoInterpreter (Intrprete)Define un intrprete para un lenguaje

  • Patrones de ComportamientoIterator (Iterador)Proporciona una forma coherente de acceder secuencialmente a los elementos de una coleccin, independientemente del tipo de coleccinMediator (Mediador)Simplifica la comunicacin entre los objetos de un sistema introduciendo un nico objeto que gestiona la distribucin de mensajes entre los otros

  • Patrones de ComportamientoObserver (Observador)Proporciona a los componentes una forma flexible de enviar mensajes de difusin a los receptores interesadosState (Estado)Permite modificar fcilmente el comportamiento de un objeto en tiempo de ejecucinStrategy (Estrategia)Define un grupo de clases que representa un conjunto de posibles comportamientos. Estos comportamientos pueden ser fcilmente intercambiados.

  • Patrones de ComportamientoVisitor (Visitante)Proporciona una forma fcil y sostenible de ejecutar acciones en una familia de clases. Este patrn centraliza los comportamientos y permite que sean modificados o ampliados sin cambiar las clases sobre las que actan

  • Patrones de ComportamientoCommand (Comando)PropiedadesTipo: De comportamientoNivel: ObjetoPropsitoEncapsular un comando en un objeto de tal forma que pueda ser almacenado, pasado a mtodos y devuelto igual que cualquier otro objeto

  • Patrones de ComportamientoCommand (Comando)IntroduccinCuando un usuario selecciona una accin para ejecutarla, la aplicacin necesita saber desde dnde obtener los datos y el comportamiento relevantesNormalmente, la aplicacin mantendr la lgica en un lugar centralizadoLos usuarios pueden necesitar deshacer las acciones realizadasEs lgico combinar la accin en un objeto: el objeto comando. Ese objeto tiene el comportamiento y los datos necesario para una accin especfica

  • Patrones de ComportamientoCommand (Comando)AplicabilidadDar soporte para deshacer comandos, procesos de identificacin, etc...Poner en cola y ejecutar comandos en momentos distintosDesacoplar la fuente de una peticin del objeto que la cumple

  • Patrones de ComportamientoCommand (Comando)DescripcinUna aplicacin que no use el patrn Command tendr que proporcionar una clase manejadora de cdigo para controlar todos los eventos que puedan ocurrirEl patrn Command encapsula los datos y funcionalidad necesarias para cumplir una accin o una peticin especficasProporciona una separacin entre cundo hay que ejecutar una accin y cmo tiene que ser ejecutada

  • Patrones de ComportamientoCommand (Comando)Implementacin

  • Patrones de ComportamientoCommand (Comando)...Command: Interfaz de todos los comandosInvoker: El que decide cuando ejecutar el comandoReceiver: El objeto sobre el que se ejecutar el comandoConcreteCommand: Implementacin de Command. Mantiene una referencia al Receiver para realizar las acciones cuando se le llama a execute

  • Patrones de ComportamientoCommand (Comando)VentajasDesacopla la fuente o el disparador del evento del objeto que tiene conocimiento para ejecutar la tareaPermite reemplazar los objetos command y receiver en tiempo de ejecucinAl ser los comando objetos normales, es ms sencillo hacer log, deshacer, ...Facilita la introduccin de nuevos comandos, tan slo creando una nueva implementacin de command

  • Patrones de ComportamientoCommand (Comando)VariacionesDeshacer: El patrn command puede ser extendido para incorporar la posibilidad de deshacer. Al realizar la accin se guarda lo necesario para deshacer la accin y se incorpora un mtodo undo() MacroCommand: Se puede crear un comando que est compuesto por otros comandos y que pueda ser gestionado de manera uniforme (usando el patrn Composite)

  • Patrones de ComportamientoCommand (Comando)Patrones relacionadosComposite (Compuesto): Para implementar el patrn compuestoMemento (Recuerdo): Guarda el estado del receptor, para crear el deshacerPrototype (Prototipo): Puede ser usado para copiar el comando antes de incluirlo en el historialSingletn (nico): En la mayora de las aplicaciones, el historial se implementa como un singleton

  • Patrones de ComportamientoCommand (Comando)Ejemplo (ver cdigo)En la aplicacin de citas se incorpora un comando con opciones de deshacer

  • Ejercicio 4Incorpora el patrn Command en el programa de gestin de estructuras de datos en el que se permita la accin de deshacer

  • Patrones de ComportamientoIterator (Iterador)Tambin conocido comoCursorPropiedades del patrnTipo: De comportamientoNivel: ComponentePropsitoProporcionar una forma coherente de acceder secuencialmente a los elementos de una coleccin, independientemente del tipo de coleccin subyacente

  • Patrones de ComportamientoIterator (Iterador)IntroduccinLas estructuras de datos pueden estar implementadas de muchas formasPueden usarse arrays, listas enlazadas o rboles (por si los elementos estn ordenados)Lo habitual es recorrer secuencialmente los elementos de la coleccin

  • Patrones de ComportamientoIterator (Iterador)...Usar un ndice que se va incrementando podra ser muy ineficiente para implementaciones basadas en rboles o listas enlazadas

    El patrn Iterator resuelve este problema definiendo una interfaz uniforme y eficiente para recorrer cualquier estructura de datos de forma secuencial, independientemente de su implementacin

    for(int i=0; i

  • Patrones de ComportamientoIterator (Iterador)AplicabilidadProporcionar una forma uniforme, coherente e independiente de la implementacin, con el fin de desplazarse por los elementos de una coleccinPermitir el recorrido de mltiples colecciones, permitiendo que distintos clientes naveguen simultneamente por la misma coleccin

  • Patrones de ComportamientoIterator (Iterador)DescripcinEl interfaz Iterator tiene las siguientes operaciones bsicasNavegacin: Desplazarse hacia delante (y quizs hacia atrs)Recuperacin: Obtener el elemento en la posicin actualControl de fin de coleccin: Determinar si hay un elemento siguienteAlgunas versiones extendidas permiten eliminar el elemento referenciado

  • Patrones de ComportamientoIterator (Iterador)Implementacin

    for(Iterator it = lista.iterator(); it.hasNext();){Objeto o = it.next();System.out.println(Objeto: +o);}

  • Patrones de ComportamientoIterator (Iterador)VentajasSe simplifica el acceso secuencial a los elementos de cualquier estructura de datosJava 1.5 incorpora un for mejorado para iterar por los elementos de cualquier coleccin que implemente Iterable

    InconvenientesEn 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 cuentafor(Object objeto: lista){ System.out.println(Objeto: +objeto);}

  • Patrones de ComportamientoIterator (Iterador)Ejemplo (Ver cdigo)

  • Patrones de ComportamientoIterator (Iterador)Variaciones del PatrnExisten iteradores que crean una copia de la estructura de datos al ser creados, por si se modifica durante el recorridoPueden existir diferentes formas de recorrer estructuras complejas (rboles, grafos) por tanto, se podran implementar diferentes iteradores

  • Patrones de ComportamientoIterator (Iterador)Patrones relacionadosFactory Method (Mtodo Factora): el mtodo iterator() es un mtodo factoraVisitor (Visitador)

  • Ejercicio 5Implementa los iteradores correspondientes en el ejercicio del Dispensador de Fracciones

  • Patrones de ComportamientoObserver (Observador)Tambin conocido comoPublisher-Subscriptor (Editor-Suscriptor)Propiedades del patrnTipo: De comportamientoNivel: ComponentePropsitoProporcionar a los componentes una forma flexible de enviar mensajes de difusin a los receptores interesados

  • Patrones de ComportamientoObserver (Observador)IntroduccinEn muchas ocasiones ciertas partes de un sistema deben conocer un cambio en otras partesLa solucin tpica es hacer que la parte que cambia invoque un mtodo de la parte interesadaPero hay veces que la parte que cambia se desarrolla de forma independiente a la parte interesadaLa parte que cambia es una librera y la parte interesada est en nuestro programaLa parte que cambia es genrica y la parte interesada no se puede determinar (un campo de texto en un interfaz de usuario)

  • Patrones de ComportamientoObserver (Observador)...Lo ideal es permitir que los interesados indiquen a la parte que cambia que estn interesados en los cambiosLas partes interesadas deben implementar un interfaz, que posee uno o varios mtodos que sern invocados cuando algo cambieLa parte que cambia guarda a los interesados en una lista y cuando algn cambio sucede, les invoca un mtodo del interfaz

  • Patrones de ComportamientoObserver (Observador)AplicabilidadAl menos un emisor de mensajes (una parte que cambia y que notifica el cambio a los dems)Uno o ms receptores de mensajes El emisor no conoce como los receptores actan ante el cambio, simplemente lo notificaLos receptores pueden no conocerse cuando se desarrolla el emisorSuelen ser muy usados en interfaces grficas porque los componentes son observados por la lgica de la aplicacin para actuar en consecuencia

  • Patrones de ComportamientoObserver (Observador)DescripcinConsidera una factura con lneas de detalleEl total de la factura depende del total de cada lnea, que a su vez, depende de la cantidad y del precio por unidadOtro tipo de informacin puede depender del total de la facturaEl patrn observer es apropiado porque permite crear la factura completamente y posteriormente en el desarrollo, actuar ante cambios

  • Patrones de ComportamientoObserver (Observador)...Los productores de mensajes (componentes observables) generan eventos. Uno o ms receptores de mensajes (los observadores) reciben esos eventos y actan 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 ComportamientoObserver (Observador)Implementacin

  • Patrones de ComportamientoObserver (Observador)...ObservableLa clase cuyos objetos son susceptibles de ser observadosProporciona mtodos para registrar un observador o eliminarloTiene una lista con todos los observadores registradosTiene un mtodo protegido que es invocado dentro de la clase cuando haya que notificar un cambio a los observadores

  • Patrones de ComportamientoObserver (Observador)...ObserverInterfaz que usan los Observable para comunicarse con los interesadosConcreteObserverImplementa la interfaz Observer y determina en la implementacin de los mtodos como responder a los mensajes recibidos de ObservableEventMantiene informacin sobre el evento o cambio producido que puede ser til para el Observer

  • Patrones de ComportamientoObserver (Observador)Ventajas e InconvenientesEl objeto observable puede ser relativamente simple porque las acciones que se desencadenan ante un cambio no estn en la propia claseFacilita la realizacin de pruebas porque se puede codificar un observador de logFacilita el desarrollo incremental porque se pueden aadir observadores conforme los vayas codificando

  • Patrones de ComportamientoObserver (Observador)Ventajas e Inconvenientes...El principal problema del patrn es como hacer los eventos que se envanEventos genricosSon ms fciles de codificar pero puede ser difcil para un observador saber lo que ha pasadoDiferentes Eventos concretosLos observadores saben con detalle el cambioSe complica la codificacin de los eventos porque hay que considerar muchas situaciones

  • Patrones de ComportamientoObserver (Observador)Variaciones del patrnEn algunas ocasiones puede soportar nicamente un nico observadorComponentes observables multihilo, cada notificacin se hace en el hilo del observerEnvo de la referencia al observable en el propio evento para que los observers puedan invocar mtodos en el observable con el fin de descubrir ms informacin sobre el cambio

  • Patrones de ComportamientoObserver (Observador)Patrones relacionadosProxyRemoteProxy

  • Patrones de ComportamientoObserver (Observador)Ejemplo (ver cdigo)

  • Ejercicio 6Independiza la gestin del socket del control del protocolo de comunicacin en la aplicacin de chatUtiliza el patrn observer para notificar la llegada de un mensaje a las partes del programa interesadas

  • Patrones EstructuralesDescriben formas efectivas de particionar y combinar los elementos de una aplicacinEl patrn Adapter permite que dos sistemas se comuniquenEl patrn Facade permite presentar una interfaz simplificada a un usuario sin eliminar todas las opciones disponibles en el sistema

  • Patrones EstructuralesAdapter (Adaptador)Sirve como un intermediario entre dos clases, convirtiendo las interfaces de una clase para que pueda ser utilizada por otraBridge (Puente)Divide un componente complejo en dos jerarquas relacionadas la abstraccin funcional y la implementacin interna-. Esto hace que sea ms fcil cambiar cualquier aspecto del componente

  • Patrones EstructuralesComposite (Compuesto)Desarrolla una forma flexible de crear jerarquas en estructura de rbol de una complejidad arbitraria, permitiendo a la vez que todos los elementos de la estructura funcionen con una interfaz uniformeDecorator (Decorador)Proporciona una forma flexible de introducir o eliminar funcionalidad a un componente sin modificar su apariencia externa o su funcin

  • Patrones EstructuralesFacade (Fachada)Proporciona una interfaz simplificada para un grupo de subsistemas o un sistema complejoFlyweight (Peso ligero)Reduce el nmero de objetos detallados de muy bajo nivel en un sistema mediante la comparticin de objetosProxy (Representante)Proporciona un representante de otro objeto, por distintas razones como pueden ser el acceso, la velocidad o la seguridad

  • Patrones EstructuralesComposite (Compuesto)Propiedades del PatrnTipo: EstructuralNivel: ComponentePropsitoDesarrollar una forma flexible de crear jerarquas 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 EstructuralesComposite (Compuesto)IntroduccinSe desea gestionar un sistema de ficheros Existen directorios que tienen ficheros y otros subdirectorios, que pueden tener ficherosSin lmite de profundidadHay operaciones que se quieren realizar sobre un directorio o sobre un fichero (tamao en disco, permisos)

  • Patrones EstructuralesComposite (Compuesto)Introduccin...Para realizar una accin que tenga en cuenta un subrbol completo, se puede realizar un iterador que recorra el rbol en un orden determinado y vaya realizando los clculosEl patrn composite propone utilizar el polimorfismo y la recursividad para realizar clculos sobre un subrbol

  • Patrones EstructuralesComposite (Compuesto)Introduccin...

  • Patrones EstructuralesComposite (Compuesto)Introduccin...FileSystemElem: Clase padre de Fichero y DirectorioFile: Devuelve el tamao del ficheroDirectory: Devuelve la suma de los FileSystemElem y aade el tamao de almacenar un directorio en disco (p.e 1kbyte)

  • Patrones EstructuralesComposite (Compuesto)Ejemplo (ver cdigo)

  • Patrones EstructuralesComposite (Compuesto)AplicabilidadCuando exista un componente en estructura rama-hoja, parte-todo, contenedor-contenidoLa estructura pueda tener cualquier nivel de profundidadSe desea realizar operaciones con todos los elementos del rbol (o subrbol)

  • Patrones EstructuralesComposite (Compuesto)DescripcinComponentClase o interface padre de todos los elementos del rbol. Especifica las operacionesCompositeClase que representa a las ramas. Tienen una coleccin de ComponentNodeClase hoja, contiene el comportamiento final. No pueden contener otros componentes

  • Patrones EstructuralesComposite (Compuesto)Implementacin

  • Patrones EstructuralesComposite (Compuesto)Ventajas e InconvenientesProporciona gran flexibilidad en la estructura y una interfaz muy manejableSin importar la posicin actual en la estructura, se puede llamar a cualquier mtodo del componenteAl tener tanta flexibilidad es ms complicado de probar

  • Patrones EstructuralesComposite (Compuesto)Variaciones del patrnEl nodo raz: para mejorar la manejabilidad del sistema, algunas implementaciones del patrn Composite definen un objeto distinto que acta como base para el rbolRamificacin con reglas: hay veces en estructuras complejas que es necesario imponer restricciones en las composiciones

  • Patrones EstructuralesComposite (Compuesto)Patrones relacionadosChain of ResponsabilityFlyweightIteratorVisitor

  • Ejercicio 7Crea una estructura de datos orientada a objetos que permita almacenar expresiones y que permite calcular su valor5 + (5 * (2 9))8 / ( (14 * 34) + (22 + 4) )

    ***********************************************************************************