Patrones de Dise - PowerPoint PPT Presentation

About This Presentation
Title:

Patrones de Dise

Description:

Title: PowerPoint Presentation Author: lolamarta Last modified by: lolamarta Created Date: 1/1/1601 12:00:00 AM Document presentation format: Presentaci n en ... – PowerPoint PPT presentation

Number of Views:95
Avg rating:3.0/5.0
Slides: 104
Provided by: lol53
Category:

less

Transcript and Presenter's Notes

Title: Patrones de Dise


1
Patrones de Diseño
  • con ejercicios en Java

micael.gallego_at_gmail.com
2
Qué es un patrón de diseño?
  • 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

3
Qué es un patrón de diseño?
  • Son una forma estandarizada para representar
    soluciones generales de problemas que se
    encuentran comúnmente en el desarrollo de
    software orientado a objetos
  • Beneficios
  • 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

4
Abstracción y Reutilización
  • Los patrones suponen una evolución en la
    abstracción y reutilización en la programación
  • Abstracción
  • 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

5
Abstracción y Reutilización
  • Reutilización
  • Posibilidad de usar de nuevo código ya
    desarrollado anteriormente
  • Formas de reutilización
  • 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, )

6
Abstracción y Reutilización
  • Abstracción y Reutilización en Programación
    Orientada a Objetos
  • Abstracción funcional y de datos
  • La encapsulación implica mejor reutilización
  • La herencia permite formas de reutilización antes
    no posibles
  • Es posible desarrollar algoritmos de forma
    genérica y especializarlos creando clases hijas y
    redefiniendo o implementando ciertos métodos

7
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
8
Tipos de Patrones
  • Existen cuatro grandes tipos de patrones de
    diseño
  • Patrones de Creación
  • Patrones de Comportamiento
  • Patrones Estructurales
  • Patrones de sistema

9
Tipos de Patrones
  • Patrones de Creación
  • 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
  • Guían el flujo de control del sistema (para
    facilitar la eficiencia y facilitar el
    mantenimiento)

10
Tipos de Patrones
  • Patrones Estructurales
  • 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
  • Se aplican a la arquitectura de la aplicación
  • Patrones más generales que los otros tipos

11
Cómo es un patrón?
  • Los patrones están especificados siguiendo un
    formulario o formato estándar
  • Nombre
  • También conocido como Otros nombres usuales
  • Propiedades
  • Tipo - Creación, Comportamiento, Estructural o De
    sistema
  • 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

12
Cómo es un patrón?
  • Descripción Que hace y como se comporta de
    forma detallada
  • Implementación - Cómo implementarlo?
  • Ventajas e Inconvenientes
  • Variantes
  • Patrones Relacionados
  • Ejemplo

13
Patrones de Creación
  • 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

14
Patrones de Creación
  • Singleton (Único)
  • Restringe la creación de un único objeto de una
    clase en todo el sistema y permite acceder a él
  • Factory Method (Método Factoría)
  • Define un método para la creación de objetos
    además del constructor
  • Builder (Constructor)
  • Simplifica la construcción de objetos complejos
    definiendo una clase cuya responsabilidad es
    crear objetos de otras clases

15
Patrones de Creación
  • Abstract Factory (Fábrica Abstracta)
  • Permite crear objetos de un conjunto de clases
    relacionadas pero sin especificar la clase
    concreta, solo el interfaz
  • Prototype (Prototipo)
  • Define clases cuyos objetos pueden clonarse
  • Hay muchos mas

16
Patrones de CreaciónSingleton (Único)
  • Propiedades
  • Tipo Creación, Nivel Objeto
  • Propósito
  • Permite tener una única instancia de esta clase
    en el sistema, y permite que todas las clases
    tengan acceso a esa instancia

17
Patrones de CreaciónSingleton (Único)
  • Introducción
  • 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
    HistoryList
  • 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 HistoryList

18
Patrones de CreaciónSingleton (Único)
  • Introducción
  • 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

19
Patrones de CreaciónSingleton (Único)
  • Aplicabilidad
  • Cuando se requiera una instancia de una clase y
    accesible globalmente
  • Descripción
  • Asegura crear como máximo una instancia de un
    objeto.
  • Ponga el constructor privado
  • Ponga un método público estático getInstance()
    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

20
Patrones de CreaciónSingleton (Único)
  • Implementación
  • Clase que tiene privado el constructor, mantiene
    una referencia estática al único objeto de la
    clase y proporciona un método estático
    getInstance() para que otras clases accedan al
    único objeto
  • El resto de la implementación es completamente
    normal

21
Patrones de CreaciónSingleton (Único)
import java.util.ArrayList import
java.util.Collections import java.util.List pub
lic 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) ...
22
Patrones de CreaciónSingleton (Único)
  • Ventajas
  • 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
  • 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

23
Patrones de CreaciónSingleton (Único)
  • Variaciones del patrón
  • Mantener varias instancias que pueden ser
    obtenidas con versiones con parámetros del método
    getInstance(...)
  • Cuando existen múltiples instancias, pueden ser
    de clases hijas diferentes dependiendo de los
    parámetros

24
Patrones de CreaciónSingleton (Único)
  • Patrones relacionados
  • Abstract Factory (Factoría Abstracta)
  • Builder (Constructor)
  • Prototype (Prototipo)

25
Patrones de CreaciónSingleton (Único)
  • Patrón Singleton en la API de Java
  • Clase java.awt.Toolkit
  • Variación del patrón porque Toolkit es abstracta
    y la instancia devuelta es de una clase hija
  • El método es getDefaultToolkit()
  • Clase java.lang.Runtime
  • El método es getRuntime()
  • Clase java.text.DateFormat
  • Variación del patrón porque DateFormat es
    abstracta
  • Tiene varios métodos con varias instancias
    getDateInstance(), getDateInstance(int style),
    getDateTimeInstance(),

26
Ejercicio 1
  • Aplica el patrón Singleton a la clase GestorIO en
    el juego de las Tres en Raya
  • De esta forma se conseguirá eficiencia, porque
    con un objeto GestorIO es suficiente en toda la
    aplicación

27
Patrones de CreaciónPrototype (Prototipo)
  • Propiedades
  • Tipo De creación, Nivel Clase única
  • Propósito
  • Facilita la creación de objetos copia de otros
    objetos

28
Patrones de CreaciónPrototype (Prototipo)
  • Introducción
  • 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

29
Patrones de CreaciónPrototype (Prototipo)
  • Aplicabilidad
  • Se utiliza el patrón Prototype para crear un
    objeto que sea copia de otro
  • Descripción
  • Permite copiar el estado de un objeto
  • Se puede utilizar en las opciones de copiar y
    pegar

30
Patrones de CreaciónPrototype (Prototipo)
  • Implementación
  • 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
  • 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í)

31
Patrones de CreaciónPrototype (Prototipo)
  • Variaciones del patrón
  • Constructor de copia, que recibe como parámetro
    un objeto de la misma clase y obtiene de él sus
    valores
  • Patrones relacionados
  • Abstract Factory (Factoría Abstracta)
  • Factory Method (Método de Fabricación)

32
Patrones de CreaciónPrototype (Prototipo)
  • Ejemplo

33
Ejercicio 2
  • 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

34
Patrones de CreaciónFactory Method (Método
Factoría)
  • También conocido como
  • Virtual Builder (Constructor Virtual)
  • Propiedades
  • Tipo De creación, Nivel Clase
  • Propósito
  • Permite definir un método estándar en una clase
    para crear objetos. Las subclases deciden la
    clase concreta que crear

35
Patrones de CreaciónFactory Method (Método
Factoría)
  • Introducción
  • Supongamos una aplicación de gestión de una
    lista, que permita borrar, editar y añadir
    valores
  • Esta aplicación tiene dos partes, la interfaz de
    usuario (un menú en modo texto) y la Lista.
  • La lista tiene un método para poner un valor
    (String) en una determinada posición (int)
  • public void set(int position, String value)

36
Patrones de CreaciónFactory Method (Método
Factoría)
  • Se quiere generalizar la aplicación 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

37
Patrones de CreaciónFactory Method (Método
Factoría)
  • 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 patrón Método Factoría propone que exista un
    método en EstructuraDatos que permita crear el
    objeto Selector correspondiente
  • (Ver ejemplo)

38
Patrones de CreaciónFactory Method (Método
Factoría)
  • Ejemplo (ver código)

39
Patrones de CreaciónFactory Method (Método
Factoría)
  • Aplicabilidad
  • 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

40
Patrones de CreaciónFactory Method (Método
Factoría)
  • Descripción
  • Existe un método de fabricación en una clase
    abstracta (Creator) que debe ser implementado por
    las clases hijas (ConcreteCreator).
  • Ese método 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

41
Patrones de CreaciónFactory Method (Método
Factoría)
  • Implementación

42
Patrones de CreaciónFactory Method (Método
Factoría)
  • Ventajas e Inconvenientes
  • 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

43
Patrones de CreaciónFactory Method (Método
Factoría)
  • Variaciones del Patrón
  • Creator puede tener factoryMethod concreto y
    proporcionar una implementación por defecto
  • El método de fabricación puede tomar parámetros y
    puede instanciar los ConcreteProduct dependiendo
    del parámetro
  • Creator y Product pueden ser interfaces
  • Patrones relacionados
  • Abstract Factory (Fábrica Abstracta)
  • Prototype (Prototipo)
  • Template Method (Método Plantilla)

44
Ejercicio 3
  • 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

45
Patrones de Comportamiento
  • 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

46
Patrones de Comportamiento
  • Chain 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 manejarlo
  • Command (Comando)
  • 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)
  • Define un intérprete para un lenguaje

47
Patrones de Comportamiento
  • Iterator (Iterador)
  • Proporciona una forma coherente de acceder
    secuencialmente a los elementos de una colección,
    independientemente del tipo de colección
  • Mediator (Mediador)
  • Simplifica la comunicación entre los objetos de
    un sistema introduciendo un único objeto que
    gestiona la distribución de mensajes entre los
    otros

48
Patrones de Comportamiento
  • Observer (Observador)
  • Proporciona a los componentes una forma flexible
    de enviar mensajes de difusión a los receptores
    interesados
  • State (Estado)
  • Permite modificar fácilmente el comportamiento de
    un objeto en tiempo de ejecución
  • Strategy (Estrategia)
  • Define un grupo de clases que representa un
    conjunto de posibles comportamientos. Estos
    comportamientos pueden ser fácilmente
    intercambiados.

49
Patrones de Comportamiento
  • Visitor (Visitante)
  • 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

50
Patrones de ComportamientoCommand (Comando)
  • Propiedades
  • Tipo De comportamiento
  • Nivel Objeto
  • Propósito
  • Encapsular un comando en un objeto de tal forma
    que pueda ser almacenado, pasado a métodos y
    devuelto igual que cualquier otro objeto

51
Patrones de ComportamientoCommand (Comando)
  • Introducción
  • 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

52
Patrones de ComportamientoCommand (Comando)
  • Aplicabilidad
  • 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

53
Patrones de ComportamientoCommand (Comando)
  • Descripción
  • 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

54
Patrones de ComportamientoCommand (Comando)
  • Implementación

55
Patrones de ComportamientoCommand (Comando)
  • ...
  • Command Interfaz de todos los comandos
  • Invoker El que decide cuando ejecutar el comando
  • Receiver El objeto sobre el que se ejecutará el
    comando
  • ConcreteCommand Implementación de Command.
    Mantiene una referencia al Receiver para realizar
    las acciones cuando se le llama a execute

56
Patrones de ComportamientoCommand (Comando)
  • Ventajas
  • 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

57
Patrones de ComportamientoCommand (Comando)
  • Variaciones
  • 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()
  • MacroCommand Se puede crear un comando que esté
    compuesto por otros comandos y que pueda ser
    gestionado de manera uniforme (usando el patrón
    Composite)

58
Patrones de ComportamientoCommand (Comando)
  • Patrones relacionados
  • 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

59
Patrones de ComportamientoCommand (Comando)
  • Ejemplo (ver código)
  • En la aplicación de citas se incorpora un comando
    con opciones de deshacer

60
Ejercicio 4
  • 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

61
Patrones de ComportamientoIterator (Iterador)
  • También conocido como
  • Cursor
  • Propiedades del patrón
  • Tipo De comportamiento
  • Nivel Componente
  • Propósito
  • Proporcionar una forma coherente de acceder
    secuencialmente a los elementos de una colección,
    independientemente del tipo de colección
    subyacente

62
Patrones de ComportamientoIterator (Iterador)
  • Introducción
  • 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

63
Patrones de ComportamientoIterator (Iterador)
  • ...
  • Usar un índice que se va incrementando podría ser
    muy ineficiente para implementaciones basadas en
    árboles o listas enlazadas
  • 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

for(int i0 iltlista.size() i)
System.out.println(Elementolista.get(i))
64
Patrones de ComportamientoIterator (Iterador)
  • Aplicabilidad
  • 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

65
Patrones de ComportamientoIterator (Iterador)
  • Descripción
  • El interfaz Iterator tiene las siguientes
    operaciones básicas
  • 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

66
Patrones de ComportamientoIterator (Iterador)
  • Implementación

for(Iterator it lista.iterator()
it.hasNext()) Objeto o it.next() System.out
.println(Objeto o)
67
Patrones de ComportamientoIterator (Iterador)
  • Ventajas
  • 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
  • Inconvenientes
  • 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

for(Object objeto lista)
System.out.println(Objeto objeto)
68
Patrones de ComportamientoIterator (Iterador)
  • Ejemplo (Ver código)

69
Patrones de ComportamientoIterator (Iterador)
  • Variaciones del Patrón
  • 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

70
Patrones de ComportamientoIterator (Iterador)
  • Patrones relacionados
  • Factory Method (Método Factoría) el método
    iterator() es un método factoría
  • Visitor (Visitador)

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

72
Patrones de ComportamientoObserver (Observador)
  • También conocido como
  • Publisher-Subscriptor (Editor-Suscriptor)
  • Propiedades del patrón
  • Tipo De comportamiento
  • Nivel Componente
  • Propósito
  • Proporcionar a los componentes una forma flexible
    de enviar mensajes de difusión a los receptores
    interesados

73
Patrones de ComportamientoObserver (Observador)
  • Introducción
  • 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
  • La parte que cambia es una librería y la parte
    interesada está en nuestro programa
  • La parte que cambia es genérica y la parte
    interesada no se puede determinar (un campo de
    texto en un interfaz de usuario)

74
Patrones de ComportamientoObserver (Observador)
  • ...
  • 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

75
Patrones de ComportamientoObserver (Observador)
  • Aplicabilidad
  • 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

76
Patrones de ComportamientoObserver (Observador)
  • Descripción
  • 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

77
Patrones de ComportamientoObserver (Observador)
  • ...
  • 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

78
Patrones de ComportamientoObserver (Observador)
  • Implementación

79
Patrones de ComportamientoObserver (Observador)
  • ...
  • Observable
  • 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

80
Patrones de ComportamientoObserver (Observador)
  • ...
  • Observer
  • Interfaz que usan los Observable para comunicarse
    con los interesados
  • ConcreteObserver
  • Implementa la interfaz Observer y determina en la
    implementación de los métodos como responder a
    los mensajes recibidos de Observable
  • Event
  • Mantiene información sobre el evento o cambio
    producido que puede ser útil para el Observer

81
Patrones de ComportamientoObserver (Observador)
  • Ventajas e Inconvenientes
  • 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

82
Patrones de ComportamientoObserver (Observador)
  • Ventajas e Inconvenientes...
  • El principal problema del patrón es como hacer
    los eventos que se envían
  • Eventos genéricos
  • Son más fáciles de codificar pero puede ser
    difícil para un observador saber lo que ha pasado
  • Diferentes Eventos concretos
  • Los observadores saben con detalle el cambio
  • Se complica la codificación de los eventos porque
    hay que considerar muchas situaciones

83
Patrones de ComportamientoObserver (Observador)
  • Variaciones del patrón
  • 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

84
Patrones de ComportamientoObserver (Observador)
  • Patrones relacionados
  • Proxy
  • RemoteProxy

85
Patrones de ComportamientoObserver (Observador)
  • Ejemplo (ver código)

86
Ejercicio 6
  • 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

87
Patrones Estructurales
  • 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

88
Patrones Estructurales
  • Adapter (Adaptador)
  • Sirve como un intermediario entre dos clases,
    convirtiendo las interfaces de una clase para que
    pueda ser utilizada por otra
  • Bridge (Puente)
  • 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

89
Patrones Estructurales
  • Composite (Compuesto)
  • 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)
  • Proporciona una forma flexible de introducir o
    eliminar funcionalidad a un componente sin
    modificar su apariencia externa o su función

90
Patrones Estructurales
  • Facade (Fachada)
  • Proporciona una interfaz simplificada para un
    grupo de subsistemas o un sistema complejo
  • Flyweight (Peso ligero)
  • Reduce el número de objetos detallados de muy
    bajo nivel en un sistema mediante la compartición
    de objetos
  • Proxy (Representante)
  • Proporciona un representante de otro objeto, por
    distintas razones como pueden ser el acceso, la
    velocidad o la seguridad

91
Patrones EstructuralesComposite (Compuesto)
  • Propiedades del Patrón
  • Tipo Estructural
  • Nivel Componente
  • Propósito
  • 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

92
Patrones EstructuralesComposite (Compuesto)
  • Introducción
  • 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)

93
Patrones EstructuralesComposite (Compuesto)
  • Introducción...
  • 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

94
Patrones EstructuralesComposite (Compuesto)
  • Introducción...

95
Patrones EstructuralesComposite (Compuesto)
  • Introducción...
  • FileSystemElem Clase padre de Fichero y
    Directorio
  • File Devuelve el tamaño del fichero
  • Directory Devuelve la suma de los FileSystemElem
    y añade el tamaño de almacenar un directorio en
    disco (p.e 1kbyte)

96
Patrones EstructuralesComposite (Compuesto)
  • Ejemplo (ver código)

97
Patrones EstructuralesComposite (Compuesto)
  • Aplicabilidad
  • 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)

98
Patrones EstructuralesComposite (Compuesto)
  • Descripción
  • Component
  • Clase o interface padre de todos los elementos
    del árbol. Especifica las operaciones
  • Composite
  • Clase que representa a las ramas. Tienen una
    colección de Component
  • Node
  • Clase hoja, contiene el comportamiento final. No
    pueden contener otros componentes

99
Patrones EstructuralesComposite (Compuesto)
  • Implementación

100
Patrones EstructuralesComposite (Compuesto)
  • Ventajas e Inconvenientes
  • 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

101
Patrones EstructuralesComposite (Compuesto)
  • Variaciones del patrón
  • 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

102
Patrones EstructuralesComposite (Compuesto)
  • Patrones relacionados
  • Chain of Responsability
  • Flyweight
  • Iterator
  • Visitor

103
Ejercicio 7
  • Crea una estructura de datos orientada a objetos
    que permita almacenar expresiones y que permite
    calcular su valor
  • 5 (5 (2 9))
  • 8 / ( (14 34) (22 4) )
Write a Comment
User Comments (0)
About PowerShow.com