SlideShare una empresa de Scribd logo
1 de 12
INGENIERIA INFORMATICA

UNIVERSIDAD NACIONAL DE TRUJILLO
FACULTAD DE CIENCIAS FISICAS Y MATEMATICAS
ESCUELA ACADEMICO PROFESIONAL DE INFORMÁTICA

PROYECTO DEL CURSO DE: Tópicos Especiales en Ciencia de la Computación III

“DECORATOR”
MIEMBROS DEL EQUIPO:
Aguilar Bernave Roberto Jesus
Ruiz Espil Martín

TRUJILLO
INGENIERIA INFORMATICA

Índice de Contenido
DEDICATORIAS………………………………………………………………………4
INTRODUCCION ........................................................................................................ 5
MARCO TEORICO: ........................................................Error! Bookmark not defined.
Decotator……………………………………………………………………………………..7
Herencia……………………………………………………………………………………...8
Abstraccion…………………………………………………………………………………..9

CAPITULO I ................................................................................................................ 10
CONCLUSION .............................................................................................................. 11
BIBLIOGRAFIA ........................................................................................................... 12
INGENIERIA INFORMATICA

A Dios todo poderoso, por haber llegado hasta este momento
tan importante de mi formación profesional.

A mis padres, por ser los pilares más importantes y por
demostrarme siempre su cariño y apoyo incondicional.

A mis hermanos por estar siempre presentes, acompañándome
en los momentos más difíciles. A mi bebe Carlos Daniel quien ha
sido y es una mi motivación, inspiración y felicidad.

A mis profesores, gracias por su tiempo, por su apoyo así
como por la sabiduría que me transmitieron en el
desarrollo universitario.

AGUILAR BERNABE, ROBERTO JESUS
INGENIERIA INFORMATICA

A Dios por mostrarme día a día que con humildad,
paciencia y sabiduría todo es posible.

A mis padres y hermanos quienes con su amor,
apoyo y comprensión incondicional estuvieron siempre a
lo largo de mi vida estudiantil.

A mis amigos que siempre tuvieron una palabra
de aliento en los momentos difíciles y que han
sido incentivos de mi vida.

MARTIN FRANCISO RUIZ ESPIl
INGENIERIA INFORMATICA

INTRODUCCION

El patrón decorator permite añadir responsabilidades a objetos concretos de
forma dinámica. Los decoradores ofrecen una alternativa más flexible que la
herencia para extender las funcionalidades.
Dado que este patrón decora un objeto y le agrega funcionalidad, a veces
tenemos la necesidad de crear una clase base, que hace ciertas cosas, y
queremos extender la funcionalidad de esa clase base, pues fácil, usamos la
herencia. Pero después queremos agregarle otra funcionalidad distinta. La
solución seria heredar de nuevo. Y podemos seguir así una y otra vez. Al final
tendremos una clase monstruo que hace muchas cosas de las cuales la mayoría
de las veces solo ocuparemos una pocas.
Una forma de resolverlo es con herencia múltiple, es decir creando una clase
que herede de varias clases, solo las que tengan la funcionalidad que nos
interesa. Pero la herencia múltiple tiene sus desventajas, el principal es el
problema del diamante en el cual no vamos a ahondar. Es por ello que muchos
lenguajes modernos han descartado la herencia múltiple, por ejemplo C# y
Java.
El Patrón Decorador es una forma de resolver este problema. Como su nombre
lo indica este Patrón está hecho para decorar una clase base, es como una
envoltura que podemos colocar sobre una clase y que le agrega funcionalidad
a esta, estas envolturas las podemos poner en el orden que queramos,
combinarlas, ponerlas más de una vez e inclusive quitarlas.
INGENIERIA INFORMATICA

MARCO TEORICO
1.DECORATOR
El Patrón Decorator Permite agregar funcionalidades y
responsabilidades a objetos de forma dinámica y transparente para el
usuario, esto se realiza por medio de relaciones con otras clases
extendiendo su funcionalidad al incorporar las de las clases asociadas,
de esta forma el patrón no es dependiente de la Herencia ya que aunque
esta puede jugar un papel importante, prevalece el uso de conceptos
como la composición al momento de definir comportamientos.
Este patrón de diseño nos permite modificar, retirar o agregar
responsabilidades a un objeto dinámicamente, las funcionalidades se
modifican/agregan/retiran durante la ejecución del script o aplicación.
La gran ventaja es que nos permite extender objetos incluso en
situaciones cuando la extensión vía herencia no es viable o no es
necesaria. Adicionalmente nos ayuda a conservar el principio de
Abierto/Cerrado, en donde se dicta que cada entidad debe estar abierta
a extensión pero cerrada a modificación.
Otra ventaja es que las decoraciones nos evitan la labor de crear clases
complejas con mucho código, que en la mayoría de los casos no será
evaluado. Nosotros podemos usar distintas combinaciones (o
secuencias) de decoraciones para generar distintos comportamientos o
resultados.
2.HERENCIA
La herencia es específica de la programación orientada a objetos, donde
una clase nueva se crea a partir de una clase existente. La herencia (a la
que habitualmente se denomina subclases) proviene del hecho de que la
subclase (la nueva clase creada) contiene las atributos y métodos de la
clase primaria. La principal ventaja de la herencia es la capacidad para
definir atributos y métodos nuevos para la subclase, que luego se
aplican
a
los
atributos
y
métodos
heredados.
INGENIERIA INFORMATICA

Esta particularidad permite crear una estructura jerárquica de clases
cada vez más especializada. La gran ventaja es que uno ya no debe
comenzar desde cero cuando desea especializar una clase existente.
Como resultado, se pueden adquirir bibliotecas de clases que ofrecen
una base que puede especializarse a voluntad (la compañía que vende
estas clases tiende a proteger las datos miembro usando la
encapsulación).

HERENCIA

3.ABSTRACCION
La abstracción encarada desde el punto de vista de la programación
orientada a objetos expresa las características esenciales de un objeto,
las cuales distinguen al objeto de los demás. Además de distinguir entre
los objetos provee límites conceptuales. Entonces se puede decir que la
encapsulación separa las características esenciales de las no esenciales,
dentro de un objeto. Si un objeto tiene más características de las
necesarias estos resultarán difíciles de usar, modificar, construir y
comprender.
La misma genera una ilusión de simplicidad debido a que minimiza la
cantidad de características que definen a un objeto.
INGENIERIA INFORMATICA

Durante años, los programadores se han dedicado a construir
aplicaciones muy parecidas que resolvían una y otra vez los mismos
problemas. Para conseguir que sus esfuerzos pudiesen ser utilizados por
otras personas se creó la POO que consiste en una serie de normas para
garantizar la interoperabilidad entre usuarios de manera que el código se
pueda reutilizar.

CAPITULO I: COMO ACTUA
El Problema.
Un restaurante de comidas rápidas ofrece 3 tipos de combos (Combo
Básico, Combo Familiar, Combo Especial) cada combo tiene
características diferentes en cuanto a cantidad, porciones, salsas entre
otros, el restaurante también ofrece la posiblidad de aumentar el pedido
mendiante diferentes porciones adicionales (Tomate, Papas, Carne,
Queso), se desea crear un sistema de pedidos que permita al usuario
seleccionar el combo deseado, así como armar su propio pedido con las
porciones adicionales, el sistema deberá informar sobre el pedido del
usuario y el valor total del mismo.
La Solución.
En el problema nos están solicitando algopuntual, fácilmente deducimos
que tenemos una familia de Combos en la que podemos usar la
herencia, pero si atacáramos nuestro problema solo con este concepto,
entonces tendríamos que crear clases concretas por cada posible
combinación de porciones adicionales, tal vez esto no sería problema y
el sistema funcione, pero si queremos realizar varias combinaciones
para crear nuevos pedidos tendríamos que entrar a modificar el código
fuente y luego ejecutar nuevamente la aplicación para que los cambios
puedan ser visualizados.... por esta razón anteriormente dijimos que
usando la herencia el comportamiento solo se definiría estáticamente
basados en lo heredado por las clases Padre.
INGENIERIA INFORMATICA

La solución que nos da el patrón Decorator es solo utilizar la herencia
para que las clases Decorator tengan el mismo tipo de los objetos a
decorar y utilizaremos la composición para determinar el
comportamiento de forma dinámica y en tiempo de ejecución basados
en concepto de "Usa" relacionando los decoradores con los
componentes concretos, así no modificaríamos la lógica de las clases
existentes cada vez.

DIAGRAMA DE CLASES DEL PROBLEMA PLANTEADO

Crearemos nuestro sistema ajustándonos al diagrama de clases del
patrón, tenemos una SuperClase Combo que representa los combos de
comidas rápidas disponibles de la cual heredan los tipos ComboBasico,
ComboFamiliar y ComboEspecial, también hereda de él las clases
Decorator, en este caso tenemos la clase de Adicionales como el
INGENIERIA INFORMATICA

decorador y a su vez las hijas que corresponden a cada porción, siendo
estas las clases decoradoras concretas....

Decoradores
Los Decoradores en este caso serán las porciones adicionales, tenemos
una clase AdicionalesDecorator que es el decorador principal del cual
implementaran los decoradores concretos, esta clase es hija de la clase
Combo y proporciona un método abstracto descripcion() para anexar a
la descripción del combo, la porción seleccionada por el usuario...
public abstract class AdicionalesDecorator extends Combo{
public abstract String getDescripcion();
}
Cada Decorador concreto implementa el método getDescripcion(),
agregando a la descripción la porción seleccionada por el usuario,
también implementa el método valor() de la clase Combo, en el cual se
agrega al valor del combo, el precio de la porción....... como vemos en
estos decoradores concretos se aplica la composición en el momento
que creamos el objeto combo (la clase Combo es abstracta por lo tanto
no puede ser instanciada directamente, por lo tanto el objeto que llega
como parámetro al constructor se creó previamente por medio de
polimorfismo).
INGENIERIA INFORMATICA

CONCLUSION
Como vemos el patrón nos facilita enormemente el trabajo en este tipo
de problemáticas imaginen tener que usar solo la herencia para crear un
Menú que cumpla con las necesidades de cada cliente, cuantas
combinaciones se tendrían que realizar por cada posible combinación,
en cambio con el patrón tan solo necesitamos las clases Bases y los
decoradores, gracias a la lógica aplicada, las combinaciones se realizan
solas.
La lógica del patrón actúa como envoltorios dependiendo de los
posibles tipos de combos y adicionales seleccionadas, si queremos un
combo familiar con papas extra entonces se crea esta agrupación, si
además escogemos una porción de queso entonces dicha porción es
agregada
a
la
anterior...
Cuando usamos este patrón reducimos las posibilidades de generar
errores o defectos secundarios no deseados, ya que si queremos añadir
nuevas funcionalidades, agregamos nuevo código sin modificar el
existente.
Con el Patrón los diseños son resistentes al cambio y lo suficientemente
flexibles
como
para
satisfacer
necesidades
cambiantes.
El patrón además de utilizar la herencia y la composición también aplica
conceptos de polimorfismo que pueden ser evidenciados en el código
fuente..
Como en todo la práctica es fundamental, por eso los invito a repasar el
Patrón y descargarlo para un mayor entendimiento.
INGENIERIA INFORMATICA

BIBLIOGRAFIA
 http://codejavu.blogspot.com/2013/07/ejemplo-patron-de-disenodecorator.html
 http://migranitodejava.blogspot.com/2011/06/decorator.html
 http://es.wikipedia.org/wiki/Decorator_%28patr%C3%B3n_de_di
se%C3%B1o%29
 http://patronesdediseno.blogspot.com/2009/05/patrondecorator.html
 http://webdocs.cs.ualberta.ca/~pfiguero/soo/PatronesDiseno/Deco
rator.html

Más contenido relacionado

Similar a DECORATOR: Patrón de diseño

Similar a DECORATOR: Patrón de diseño (20)

Historia java ruben rodriguez
Historia java ruben rodriguezHistoria java ruben rodriguez
Historia java ruben rodriguez
 
Historia java ruben
Historia java rubenHistoria java ruben
Historia java ruben
 
Tarea 05 OP.docx
Tarea 05 OP.docxTarea 05 OP.docx
Tarea 05 OP.docx
 
Programaciom avanzada orientada a objetos
Programaciom avanzada orientada a objetosProgramaciom avanzada orientada a objetos
Programaciom avanzada orientada a objetos
 
Unidad II_1.pptx
Unidad II_1.pptxUnidad II_1.pptx
Unidad II_1.pptx
 
Guía Herencia PO_O
Guía Herencia PO_OGuía Herencia PO_O
Guía Herencia PO_O
 
Tema nº 1
Tema nº 1Tema nº 1
Tema nº 1
 
Tema nº 1
Tema nº 1Tema nº 1
Tema nº 1
 
1 Paradigma Objetos
1 Paradigma Objetos1 Paradigma Objetos
1 Paradigma Objetos
 
Conceptos básicos de programación orientada a objetos (poo)
Conceptos básicos de programación orientada a objetos (poo)Conceptos básicos de programación orientada a objetos (poo)
Conceptos básicos de programación orientada a objetos (poo)
 
Trabajo de informática
Trabajo de informáticaTrabajo de informática
Trabajo de informática
 
Modelado por descomposición
Modelado por descomposiciónModelado por descomposición
Modelado por descomposición
 
Modelo por descomposicion
Modelo por descomposicionModelo por descomposicion
Modelo por descomposicion
 
Sistemas multiusuarios
Sistemas multiusuariosSistemas multiusuarios
Sistemas multiusuarios
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad ii
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad ii
 
Herencia
HerenciaHerencia
Herencia
 
Propuesta final CULTURA MAKER
Propuesta final CULTURA MAKERPropuesta final CULTURA MAKER
Propuesta final CULTURA MAKER
 
Clase numero 6
Clase numero 6Clase numero 6
Clase numero 6
 
Practica retro java 28102013
Practica retro java 28102013Practica retro java 28102013
Practica retro java 28102013
 

DECORATOR: Patrón de diseño

  • 1. INGENIERIA INFORMATICA UNIVERSIDAD NACIONAL DE TRUJILLO FACULTAD DE CIENCIAS FISICAS Y MATEMATICAS ESCUELA ACADEMICO PROFESIONAL DE INFORMÁTICA PROYECTO DEL CURSO DE: Tópicos Especiales en Ciencia de la Computación III “DECORATOR” MIEMBROS DEL EQUIPO: Aguilar Bernave Roberto Jesus Ruiz Espil Martín TRUJILLO
  • 2. INGENIERIA INFORMATICA Índice de Contenido DEDICATORIAS………………………………………………………………………4 INTRODUCCION ........................................................................................................ 5 MARCO TEORICO: ........................................................Error! Bookmark not defined. Decotator……………………………………………………………………………………..7 Herencia……………………………………………………………………………………...8 Abstraccion…………………………………………………………………………………..9 CAPITULO I ................................................................................................................ 10 CONCLUSION .............................................................................................................. 11 BIBLIOGRAFIA ........................................................................................................... 12
  • 3. INGENIERIA INFORMATICA A Dios todo poderoso, por haber llegado hasta este momento tan importante de mi formación profesional. A mis padres, por ser los pilares más importantes y por demostrarme siempre su cariño y apoyo incondicional. A mis hermanos por estar siempre presentes, acompañándome en los momentos más difíciles. A mi bebe Carlos Daniel quien ha sido y es una mi motivación, inspiración y felicidad. A mis profesores, gracias por su tiempo, por su apoyo así como por la sabiduría que me transmitieron en el desarrollo universitario. AGUILAR BERNABE, ROBERTO JESUS
  • 4. INGENIERIA INFORMATICA A Dios por mostrarme día a día que con humildad, paciencia y sabiduría todo es posible. A mis padres y hermanos quienes con su amor, apoyo y comprensión incondicional estuvieron siempre a lo largo de mi vida estudiantil. A mis amigos que siempre tuvieron una palabra de aliento en los momentos difíciles y que han sido incentivos de mi vida. MARTIN FRANCISO RUIZ ESPIl
  • 5. INGENIERIA INFORMATICA INTRODUCCION El patrón decorator permite añadir responsabilidades a objetos concretos de forma dinámica. Los decoradores ofrecen una alternativa más flexible que la herencia para extender las funcionalidades. Dado que este patrón decora un objeto y le agrega funcionalidad, a veces tenemos la necesidad de crear una clase base, que hace ciertas cosas, y queremos extender la funcionalidad de esa clase base, pues fácil, usamos la herencia. Pero después queremos agregarle otra funcionalidad distinta. La solución seria heredar de nuevo. Y podemos seguir así una y otra vez. Al final tendremos una clase monstruo que hace muchas cosas de las cuales la mayoría de las veces solo ocuparemos una pocas. Una forma de resolverlo es con herencia múltiple, es decir creando una clase que herede de varias clases, solo las que tengan la funcionalidad que nos interesa. Pero la herencia múltiple tiene sus desventajas, el principal es el problema del diamante en el cual no vamos a ahondar. Es por ello que muchos lenguajes modernos han descartado la herencia múltiple, por ejemplo C# y Java. El Patrón Decorador es una forma de resolver este problema. Como su nombre lo indica este Patrón está hecho para decorar una clase base, es como una envoltura que podemos colocar sobre una clase y que le agrega funcionalidad a esta, estas envolturas las podemos poner en el orden que queramos, combinarlas, ponerlas más de una vez e inclusive quitarlas.
  • 6. INGENIERIA INFORMATICA MARCO TEORICO 1.DECORATOR El Patrón Decorator Permite agregar funcionalidades y responsabilidades a objetos de forma dinámica y transparente para el usuario, esto se realiza por medio de relaciones con otras clases extendiendo su funcionalidad al incorporar las de las clases asociadas, de esta forma el patrón no es dependiente de la Herencia ya que aunque esta puede jugar un papel importante, prevalece el uso de conceptos como la composición al momento de definir comportamientos. Este patrón de diseño nos permite modificar, retirar o agregar responsabilidades a un objeto dinámicamente, las funcionalidades se modifican/agregan/retiran durante la ejecución del script o aplicación. La gran ventaja es que nos permite extender objetos incluso en situaciones cuando la extensión vía herencia no es viable o no es necesaria. Adicionalmente nos ayuda a conservar el principio de Abierto/Cerrado, en donde se dicta que cada entidad debe estar abierta a extensión pero cerrada a modificación. Otra ventaja es que las decoraciones nos evitan la labor de crear clases complejas con mucho código, que en la mayoría de los casos no será evaluado. Nosotros podemos usar distintas combinaciones (o secuencias) de decoraciones para generar distintos comportamientos o resultados. 2.HERENCIA La herencia es específica de la programación orientada a objetos, donde una clase nueva se crea a partir de una clase existente. La herencia (a la que habitualmente se denomina subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene las atributos y métodos de la clase primaria. La principal ventaja de la herencia es la capacidad para definir atributos y métodos nuevos para la subclase, que luego se aplican a los atributos y métodos heredados.
  • 7. INGENIERIA INFORMATICA Esta particularidad permite crear una estructura jerárquica de clases cada vez más especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente. Como resultado, se pueden adquirir bibliotecas de clases que ofrecen una base que puede especializarse a voluntad (la compañía que vende estas clases tiende a proteger las datos miembro usando la encapsulación). HERENCIA 3.ABSTRACCION La abstracción encarada desde el punto de vista de la programación orientada a objetos expresa las características esenciales de un objeto, las cuales distinguen al objeto de los demás. Además de distinguir entre los objetos provee límites conceptuales. Entonces se puede decir que la encapsulación separa las características esenciales de las no esenciales, dentro de un objeto. Si un objeto tiene más características de las necesarias estos resultarán difíciles de usar, modificar, construir y comprender. La misma genera una ilusión de simplicidad debido a que minimiza la cantidad de características que definen a un objeto.
  • 8. INGENIERIA INFORMATICA Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos problemas. Para conseguir que sus esfuerzos pudiesen ser utilizados por otras personas se creó la POO que consiste en una serie de normas para garantizar la interoperabilidad entre usuarios de manera que el código se pueda reutilizar. CAPITULO I: COMO ACTUA El Problema. Un restaurante de comidas rápidas ofrece 3 tipos de combos (Combo Básico, Combo Familiar, Combo Especial) cada combo tiene características diferentes en cuanto a cantidad, porciones, salsas entre otros, el restaurante también ofrece la posiblidad de aumentar el pedido mendiante diferentes porciones adicionales (Tomate, Papas, Carne, Queso), se desea crear un sistema de pedidos que permita al usuario seleccionar el combo deseado, así como armar su propio pedido con las porciones adicionales, el sistema deberá informar sobre el pedido del usuario y el valor total del mismo. La Solución. En el problema nos están solicitando algopuntual, fácilmente deducimos que tenemos una familia de Combos en la que podemos usar la herencia, pero si atacáramos nuestro problema solo con este concepto, entonces tendríamos que crear clases concretas por cada posible combinación de porciones adicionales, tal vez esto no sería problema y el sistema funcione, pero si queremos realizar varias combinaciones para crear nuevos pedidos tendríamos que entrar a modificar el código fuente y luego ejecutar nuevamente la aplicación para que los cambios puedan ser visualizados.... por esta razón anteriormente dijimos que usando la herencia el comportamiento solo se definiría estáticamente basados en lo heredado por las clases Padre.
  • 9. INGENIERIA INFORMATICA La solución que nos da el patrón Decorator es solo utilizar la herencia para que las clases Decorator tengan el mismo tipo de los objetos a decorar y utilizaremos la composición para determinar el comportamiento de forma dinámica y en tiempo de ejecución basados en concepto de "Usa" relacionando los decoradores con los componentes concretos, así no modificaríamos la lógica de las clases existentes cada vez. DIAGRAMA DE CLASES DEL PROBLEMA PLANTEADO Crearemos nuestro sistema ajustándonos al diagrama de clases del patrón, tenemos una SuperClase Combo que representa los combos de comidas rápidas disponibles de la cual heredan los tipos ComboBasico, ComboFamiliar y ComboEspecial, también hereda de él las clases Decorator, en este caso tenemos la clase de Adicionales como el
  • 10. INGENIERIA INFORMATICA decorador y a su vez las hijas que corresponden a cada porción, siendo estas las clases decoradoras concretas.... Decoradores Los Decoradores en este caso serán las porciones adicionales, tenemos una clase AdicionalesDecorator que es el decorador principal del cual implementaran los decoradores concretos, esta clase es hija de la clase Combo y proporciona un método abstracto descripcion() para anexar a la descripción del combo, la porción seleccionada por el usuario... public abstract class AdicionalesDecorator extends Combo{ public abstract String getDescripcion(); } Cada Decorador concreto implementa el método getDescripcion(), agregando a la descripción la porción seleccionada por el usuario, también implementa el método valor() de la clase Combo, en el cual se agrega al valor del combo, el precio de la porción....... como vemos en estos decoradores concretos se aplica la composición en el momento que creamos el objeto combo (la clase Combo es abstracta por lo tanto no puede ser instanciada directamente, por lo tanto el objeto que llega como parámetro al constructor se creó previamente por medio de polimorfismo).
  • 11. INGENIERIA INFORMATICA CONCLUSION Como vemos el patrón nos facilita enormemente el trabajo en este tipo de problemáticas imaginen tener que usar solo la herencia para crear un Menú que cumpla con las necesidades de cada cliente, cuantas combinaciones se tendrían que realizar por cada posible combinación, en cambio con el patrón tan solo necesitamos las clases Bases y los decoradores, gracias a la lógica aplicada, las combinaciones se realizan solas. La lógica del patrón actúa como envoltorios dependiendo de los posibles tipos de combos y adicionales seleccionadas, si queremos un combo familiar con papas extra entonces se crea esta agrupación, si además escogemos una porción de queso entonces dicha porción es agregada a la anterior... Cuando usamos este patrón reducimos las posibilidades de generar errores o defectos secundarios no deseados, ya que si queremos añadir nuevas funcionalidades, agregamos nuevo código sin modificar el existente. Con el Patrón los diseños son resistentes al cambio y lo suficientemente flexibles como para satisfacer necesidades cambiantes. El patrón además de utilizar la herencia y la composición también aplica conceptos de polimorfismo que pueden ser evidenciados en el código fuente.. Como en todo la práctica es fundamental, por eso los invito a repasar el Patrón y descargarlo para un mayor entendimiento.
  • 12. INGENIERIA INFORMATICA BIBLIOGRAFIA  http://codejavu.blogspot.com/2013/07/ejemplo-patron-de-disenodecorator.html  http://migranitodejava.blogspot.com/2011/06/decorator.html  http://es.wikipedia.org/wiki/Decorator_%28patr%C3%B3n_de_di se%C3%B1o%29  http://patronesdediseno.blogspot.com/2009/05/patrondecorator.html  http://webdocs.cs.ualberta.ca/~pfiguero/soo/PatronesDiseno/Deco rator.html