Patrones de diseño DECORATOR Mario Rodríguez Martín

Slides:



Advertisements
Presentaciones similares
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Advertisements

Adapter, Bridge, Decorator.
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
POLIMORFISMO UNIDAD 4.
Herencia en C#.
Fundamentos de la programación orientada a objetos
POLIMORFISMO "una interfaz, múltiples métodos".
Lenguaje de programación Java
UML 1.4 Peter Emerson Pinchao Solis.
Arquitectura CLARO-TECNOTREE
Patrones de Diseño GEYFFER ALEXANDER ACOSTA CRISTHIAN DOUGLAS CASTRO
Introducción 1 Puntos Clave –La orientación a objetos representa un cambio radical en los métodos tradicionales de creación de software –Los métodos tradicionales.
Lección 1 Introducción a la POO
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
Aplicación del paradigma orientado a objetos
Diseño y programación de
HERENCIA.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
SISTEMAS DE LA INFORMACIÓN
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Lic. Rosemary Torrico Bascopé
El patrón de diseño Proxy Raúl Heras Alberto Blasco José Manuel Arévalo.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Conceptos Objeto Clase Atributo / Método Encapsulamiento Mensaje
Tema 10: Interfaces Antonio J. Sierra.
Diseño de Sistemas. Patrones de Diseño. Geronimo Manso.
FACTORY METHOD Edmundo Álvarez Jiménez Antonio Fernández Alonso
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
Diagramas de Clase Angela Carrillo R..
Programación Orientada a Aspectos (POA)
Patrones Creacionales
ANDRES FELIPE BORRERO SALAZAR COD ALEXANDRA CARREÑO SALAS COD LUCIO ANIBAL CRIOLLO COD ALEJANDRO RUIZ IDROBO COD
Programación orientada a objetos
Patrón Decorador Por: Robin Ochoa Falla.
Realizado por: Manuel González Joaquín Windmuller José Lorenzo Rodríguez
Luis Pereda Calvo1 Comportamiento de Objetos Estrategia (Strategy) *Política (Policy)
Son la base para la búsqueda de soluciones o problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
MEMENTO Patrón de Comportamiento Ana María Mateo Jorge P. Andrés
Patrones de Diseño Carolina Perozo Julio Padrón Anthony Accardi.
PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
César Estéban Castañeda Luis Andrés Almanza
PATRONES DE DISEÑO.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
PATRÓN ADAPTER (Adaptador) Elena Moreno Ramírez Laura Sánchez Romero Aroa Solana Ruiz.
Patrón Iterator Santiago García Sánchez Rebeca Marcos Salcedo Mª Cristina Zapatero Gironda.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
PROGRAMACION ORIENTADA A OBJETOS POR OVER YESID BARRERA FERNANDEZ.
Introducción a UML DIAGRAMA DE CLASES Departamento de Informática
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Presentado por: PABLO ANDRES DIAZ SAIN HASSAM CAICEDO
Detalles Generales sobre Java
Patrones de diseño equipo n.1
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
UML Casos de Uso (repaso) y Diagramas de Clase
Universidad Tecnológica de Izúcar de Matamoros Programa Educativo: Tecnologías de la Información Asignatura: Base de datos para aplicaciones Tema: Base.
Análisis y Diseño de Aplicaciones 3º Educación Media Tecnológica
Patrón de Diseño Brigde ( Handle/Body) Calderón Márquez Jorge Alberto Posgrado de Ciencia e Ingeniería en Computación. Tecnología Orientada a Objetos.
Programación Orientada a Objetos: CLASES Y OBJETOS
Clases “ Es una Abstracción de un elemento del mundo real ”
Un paseo por las nuevas funciones. Patrones de Diseño Por si no ha quedado claro, los Patrones de Diseño, son el esqueleto de las soluciones a problemas.
Herencias Conceptos básicos i
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Modelado UML Diagrama de Clases
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Tema 1: Concurrencia con Java
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

Patrones de diseño DECORATOR Mario Rodríguez Martín David Sánchez Fernández Roberto Santa Escolástica Villoria

Introducción También conocido como Wrapper. Propósito Estructural. Ámbito Objeto. Motivación A veces se desea adicionar responsabilidades a un objeto, pero no a toda la clase. Las responsabilidades se pueden adicionar por medio de los mecanismos de Herencia, pero este mecanismo no es flexible porque la responsabilidad es adicionada estáticamente. La solución flexible es la de rodear el objeto con otro objeto que es el que adiciona la nueva responsabilidad. Este nuevo objeto es el Decorator. Aplicabilidad El Decorator se debe usar para:    Adicionar responsabilidades a objetos individuales dinámicamente sin afectar otros objetos. Para agregar responsabilidades que pueden ser retiradas. Cuando no es práctico adicionar responsabilidades por medio de la herencia.

Participantes y estructura Componente: Interfaz común a todas las clases susceptibles de ser ampliadas con el Decorador. ComponenteConcreto: Son las clases cuya funcionalidad se puede extender y en las que se delega en última instancia para realizar las operaciones propias de la clase.

Participantes y estructura Decorador: Clase abstracta que declara la estructura común a todos los Decoradores y declara (o implementa, según sea el caso) la responsabilidad de mantener una referencia al objeto que se extiende. Es posible que sobrecargue todos los métodos de la clase Componente con llamadas al componente concreto, de forma que aquellos métodos cuya funcionalidad no se extiende simplemente llaman a los originales. DecoradorConcreto1 y DecoradorConcreto2: Son clases concretas que heredan de Decorador e implementan las extensiones de funcionalidad de la clase original ComponenteConcreto.

Colaboraciones

Problema que soluciona (Ejemplo) Supongamos que tenemos una clase existente Ventana y queremos añadirle funcionalidad para que muestre un borde alrededor. Podemos crear una subclase VentanaConBorde que herede de Ventana. Hasta aquí todo bien, pero supongamos que surge la necesidad de crear una ventana que muestre un pequeño botón de ayuda con un signo de interrogación (?) en su parte superior. Entonces tenemos las siguientes opciones: Crear otra subclase de Ventana: VentanaConBotónDeAyuda. Problema: No cubre la necesidad de tener ventanas con bordes y botón de ayuda a la vez. Crear una subclase de VentanaConBorde: VentanaConBordeYBotonDeAyuda. Problema: No tenemos una ventana con botón de ayuda y sin borde. Crear clases para todas las combinaciones posibles de funcionalidades. Problema: Con este ejemplo tendríamos cuatro clases: Ventana, VentanaConBorde, VentanaConBotonDeAyuda y VentanaConBordeYBotonDeAyuda; con tres funcionalidades tendríamos ocho clases y con cuatro, ¡dieciséis!. Para n funcionalidades se necesitan 2n clases.

Implementación (Ejemplo) El patrón Decorator soluciona este problema de una manera mucho más sencilla y extensible. Se crea a partir de Ventana la subclase abstracta VentanaDecorador y, heredando de ella, BordeDecorador y BotonDeAyudaDecorador. VentanaDecorador encapsula el comportamiento de Ventana y utiliza composición recursiva para que sea posible añadir tantas "capas" de Decorators como se desee. Podemos crear tantos Decoradores como queramos heredando de VentanaDecorador.

Codificación: Ejemplo (I) // Interfaz Ventana public interface Ventana { public void dibujar(); // dibuja la ventana public String getDescripcion(); // devuelve la descripción de la ventana } // Implementacion de una ventana concreta public class VentanaConcreta implements Ventana { public void dibujar() { // dibujamos la ventana public String getDescripcion() { return “ventana simple”;

Codificación: Ejemplo (II) // Clase abstracta VentanaDecorador – implementa a la clase Ventana public abstract class VentanaDecorador implements Ventana { protected Ventana decoradorVentana; public VentanaDecorador (Ventana decVentana) { this.decoradorVentana = decVentana; } // Añadimos funcionalidades a la ventana public class BordeDecorador extends VentanaDecorador { public BordeDecorador (Ventana decoradorVentana) { super(decoradorVentana); public void dibujar() { dibujarBorde(); decoradorVentana.dibujar();

Codificación: Ejemplo (III) private void dibujarBorde() { // dibujamos el borde de la ventana } public String getDescripcion() { return decoradorVentana.getDescripcion() + ", con borde"; public class BotonAyudaDecorador extends VentanaDecorador { public BotonAyudaDecorador (Ventana decoradorVentana) { super(decoradorVentana); public void dibujar() { dibujarBotonAyuda(); decoradorVentana.dibujar();

Codificación: Ejemplo (y IV) private void dibujarBotonAyuda() { // dibujamos el botón de ayuda } public String getDescripcion() { return decoradorVentana.getDescripcion() + ", con botón de ayuda"; public class VentanaDecoradorTest { public static void main(String[] args) { Ventana decoradorVentana = new BotonAyudaDecorador ( new BordeDecorador(new VentanaConcreta())); System.out.println(decoradorVentana.getDescripcion());

Reglas Implica utilizarlo si… una jerarquía de clases tiene muchos niveles. No se cumple si… entre una interfaz y su implementación no hay una abstracción.

Patrones relacionados Adapter Composite Strategy

Ventajas del patrón Decorator Más flexible que la herencia: responsabilidades pueden añadirse y eliminarse en tiempo de ejecución. Diferentes decoradores pueden ser conectados a un mismo objeto. Reduce el número de propiedades en las clases de la parte alta de la jerarquía. Es simple añadir nuevos decoradores de forma independiente a las clases que extienden. Un objeto decorador tiene diferente OID (identificador único que proporciona el sistema) que el objeto que decora. Sistemas con muchos y pequeños objetos.