Vous êtes sur la page 1sur 19

Tecnologa de la programacin I

Patrn Composite
UNIVERSIDAD NACIONAL
DE TRUJILLLO

FACULTAD DE INGENIERA
ESCUELA DE INGENIERA DE SISTEMAS

DOCENTE:
MG. ZORAIDA YANET VIDAL MELGAREJO

INTEGRANTES:
ASUNCIN SEVILLA, ALEXANDER
CASTRO RUIZ, DANIEL
QUEZADA RIVERA, MARIA MERCEDES
RIOS ZAVALETA, ROY
RUIZ VIDAURRE, CAROLINE

CICLO:

IV

TEMA:

PATRN COMPOSITE

2016
TRUJILLO - PER
INDICE

PATRN COMPOSITE

Introduccin....1

Definicin2
Objetivo..2
Participantes del Composite.3
Colaboradores...........................................................................................................4
Utilidad o aplicacin.....5

Implementacin...6
Ventajas....8
Desventajas....8
Patrones Relacionados......8
Consecuencias.................9

Diseo del patrn Composite..9


Ejemplos prcticos....11
Ejemplos del patrn composite UML...12
Ejemplos del patrn composite en Java....14
Bibliografa16
INTRODUCCIN

Motivados por la reutilizacin de cdigo, la facilidad de uso y la


complejidad al formar objetos de conceptos amplios; realizamos
un parntesis en este patrn de diseo para resolver esta
dificultad de formacin o abstraccin de objetos muy complejos.
Es as que, mediante el presente informe, se detallar la
implementacin, objetivos e importancia y facilidad de uso del ya
mencionado patrn; el cual esta basado en una "funcin" de
recursividad, adems adecuaremos, definiremos e
implementaremos nuevos conceptos (cliente, componente, hoja,
compuesto).

1
PATRN COMPOSITE

I. Definicin:

Un patrn describe un problema que ocurre una y otra vez en nuestro


entorno y describe tambin el ncleo de la solucin al problema, de forma
que puede utilizarse muchas de veces sin tener que hacer dos veces lo
mismo.
El patrn Composite:
Permite construir objetos complejos partiendo de otros ms sencillos
utilizando una estrategia de composicin recursiva.
Permite componer objetos en estructuras arbreas para representar
jerarquas de todo-parte, de modo que los clientes puedan tratar a los
objetos individuales y a los compuestos de manera uniforme.
Permite manipular todos los objetos contenidos en el rbol de forma
uniforme, ya que todos ellos poseen una interfaz comn definida en la
clase raz.
Hace parte de la familia de los patrones estructurales de J2SE.
La clave del patrn composite es una clase abstracta que representa
tanto a primitivas como a sus contenedores.
Lo podemos ver tambin como un libro cada hoja (objeto sencillo) se
puede relacionar con otras hojas y forman un libro (objeto compuesto).

II. Objetivo:

El objetivo del patrn Composite es ofrecer un marco de diseo de


una composicin de objetos de profundidad variable, diseo que
estar basado en un rbol.
Permite construir objetos complejos mediante composicin
recursiva de objetos similares. El patrn Composite tambin
permite que los objetos del rbol sean manipulados por un
manejador consistente, para requerir todos los objetos hay una
superclase o un interfaz comn. Permite a los clientes tratar de la
misma manera tanto a objetos individuales como a compuestos.

2
III. Participantes del Composite:

1. Componente: Clase abstracta de la que heredan todas las dems,


contiene la interfaz de los objetos de la composicin, implementa los
mtodos comunes e introduce la firma de los mtodos que gestionan la
composicin agregando o suprimiendo componentes.

Caractersticas:

Declara la interfaz de todos los objetos de la composicin.


Implementa el comportamiento predeterminado de la interfaz que
es comn a todas las clases.
Declara una interfaz de acceso y manipulacin de los componentes
hijo e implementa algunos comportamientos por defecto.
Opcionalmente, Declara una interfaz para acceder al padre de un
componente en la estructura recursiva y, si es necesario, la
implementa.

2. Hoja: clase concreta que describe las hojas de la composicin (una hoja
no posee componentes).

Caractersticas:

Representa objetos hoja en la composicin.


Una hoja no tiene hijos.
Define el comportamiento de los objetos primitivos del
compuesto.

3. Compuesto: Es la clase concreta que describe los objetos compuestos


de la jerarqua. Esta clase posee una asociacin de agregacin con la
clase componente.

Caractersticas:

Representa objetos hoja en la composicin.


Define el comportamiento de los componentes compuestos.
Almacena a los hijos.
Implementa las operaciones de la interfaz componente
relacionadas con los hijos.
Los objetos compuestos normalmente tratan a los objetos que
contienen como instancias de Componente.

4. Cliente: clase de los objetos de la composicin y que los manipulan.


.
Manipula objetos en la composicin a travs de la interfaz
Componente.

3
IV. Colaboradores:

Los clientes envan sus peticiones a los componentes a travs de la


interfaz de la clase Componente.
Cuando un componente recibe una peticin, reacciona en funcin de su
clase. Si el componente es una hoja, procesa la peticin.

4
Si el componente es una instancia de la clase Compuesto, realiza
procesado previo, generalmente enva un mensaje a cada uno de sus
componentes y realiza un procesamiento posterior. La figura ilustra este
comportamiento de llamada recursiva a otros componentes que van a
procesar, en su turno, esta peticin bien como hoja o bien como
compuesto.

Ejemplo:

V. Utilidad o aplicacin:

Para cuando se desee representar jerarquas de objetos todo-parte.


Cuando puedes ignorar la diferencia entre los objetos compuestos y los
objetos individuales.
Los clientes tratarn a todos los objetos de la estructura compuesta de
forma uniforme.

5
VI. Implementacin:

Referencias explcitas a los padres:

Simplifica algunas operaciones de la estructura compuesta.


Definirlas en la clase Component.
Gestionarlas al aadir/eliminar elementos de un Composite.

6
Compartir componentes:

til para ahorrar memoria.


La gestin de un componente con varios padres se complica.

Maximizar la interfaz del componente:

Uno de los objetivos del Composite: que los clientes no


tengan que saber si estn tratando con clases
compuestas o con hojas.
Dar comportamiento por defecto que sobrescribirn las
subclases.
Ejemplo: por defecto getChildren no devuelve hijos, lo
cual es vlido para las hojas, pero los compuestos
deben sobrescribir la operacin.

Declaracin de las operaciones de gestin de hijos:

Definirlas en la raz Component y dar implementacin por


defecto.

Se obtiene transparencia, se pierde seguridad


(cmo evitar que un cliente aada/elimine objetos a
una hoja?).

Definirlas en Composite:

Se obtiene seguridad, se pierde transparencia


(interfaz no uniforme).
Si se pierde el tipo hay que hacer downcasting, lo
cual es inseguro.

7
VII. Ventajas:

Permite jerarquas de objetos tan complejas como se quiera. All donde


el cliente espere un objeto primitivo, podr recibir un compuesto y no se
dar cuenta.
Simplifica el cliente. Al eliminar el cdigo para distinguir entre unos y
otros
Se pueden aadir nuevos componentes fcilmente.

VIII. Desventajas:
Diseo demasiado general, especialmente cuando queremos restringir
los componentes que pueden formar parte de un compuesto
determinado.

Con el patrn Composite, no podemos confiar en el sistema de tipos


para que haga cumplir estas restricciones por nosotros. En vez de eso
tendremos que usar comprobaciones en tiempo de ejecucin.

IX. Patrones Relacionados:

El patrn FlyWeigh, este patrn proporciona la capacidad de


compartir componentes, en caso estos no pueden referirse a sus
padres.
El patrn Iterator, sirve para recorrer las estructuras definidas por el
patrn Composite.
El patrn Decorator suele usarse junto con el Composite. Cuando se
usan junto decoradores y compuestos, normalmente ambos tendrn
una clase padre comn. Por tanto, los decoradores tendrn que
admitir la interfaz Componente con operaciones Aadir, Eliminar y
Obtener Hijo.
El patrn Visitor, localiza operaciones y comportamiento que de otro
modo estara distribuido en varias clases Compuesto y Hoja.
El patrn Chain of Responsibility, es til para hacer enlaces al
componente padre, para crear enlaces entre la clase componente y
su padre.

8
X. Consecuencias:
Define jerarquas de clases formadas por objetos primitivos y
compuestos. Los objetos primitivos pueden componerse en otros
objetos ms complejos, que a su vez pueden ser compuestos, y as
de manera recurrente. All donde el cdigo espere un objeto
primitivo, tambin podr recibir un objeto compuesto.
Esto simplifica el cdigo del cliente, puesto que evita tener que
escribir funciones con instrucciones if anidadas en las clases que
definen composicin.
La inclusin de nuevas clases hoja o clases compuestas no modifica
la estructura anterior ni el cdigo del cliente.

XI. Diseo del patrn Composite

9
Ahora mostramos las descripciones de las clases que participan en este
patrn:

ComponenteAbstracto:

Es una clase abstracta y la superclase comn de todos los


objetos que estn en el rbol de objetos para formar un objeto
composite.
Los objetos composite normalmente tratan a los objetos que
ellos contienen como instancias del ComponenteAbstracto.
Los clientes de los objetos compositen los tratan normalmente
como instancias del ComponenteAbstracto.

ComponenteConcreto1, ComponenteConcreto2:

Las instancias de estas clases son utilizadas como hojas en la


organizacin del rbol.
Definen el comportamiento de los objetos primitivos.

CompositeAbstracto:

Es la superclase abstracta de todos los objetos composite que


participan en el patrn Composite.
Define el comportamiento de los objetos que tienen hijos y al
mismo tiempo tambin almacena los hijos.
Se encarga de definir y proporcionar las implementaciones por
defecto para los mtodos hacindose posible manejar los
componentes de los objetos composite.
El mtodo add aade un componente a un objeto composite.
El mtodo remove borra un componente del Gua de
construccin de software en Java con patrones de diseo
Francisco Javier Martnez Juan Pgina 61 objeto composite.
El mtodo getChild retorna una referencia a un objeto
componente de un objeto composite.

CompositeConcreto1, CompositeConcreto2:

Las instancias de estas clases son objetos composite que utilizan


otras instancias del ComponenteAbstracto.
Implementan las operaciones con los hijos en la interfaz.

10
Cliente

El cliente manipula los objetos en la composicin a travs de la


interfaz de la clase ComponenteAbstracto.

La clase abstracta composite CompositeAbstracto no es necesaria cuando


slo hay una clase concreta composite CompositeConcreto.

Ejemplos prcticos

11
XII. Ejemplos del patrn composite UML

Ejemplo 1:

Ejemplo 2:

12
Ejemplo 3:

Composite permite componer objetos en estructuras arbreas para representar


jerarquas de todo-parte, de modo que los clientes puedan tratar a los objetos
individuales y a los compuestos de manera uniforme.

13
XIII. Ejemplo del patrn Composite en Java

Se quiere implementar un nuevo sistema de aulas virtuales en la


universidad distrital, pero por motivos de corte de presupuesto para
poder acceder a este servicio cada alumno deber pagar cierta
cantidad de dinero por cada aula, cabe aclarar que el precio del aula
es fijo, pero si se quiere aadir parciales se deber pagar un precio
extra por ellos.
Se quiere calcular el precio del aula con dos parciales uno terico y
uno prctico, cada uno con un precio diferente, pero tambin ser
conveniente conocer el valor completo del aula virtual.
Interfaz(Componente)

Clase Curso(Compuesto)

14
Clase Parcial(Hoja)

Clase Main

Salida

15
XIV. Bibliografa

http://arantxa.ii.uam.es/~eguerra/docencia/0809/05%20Composite.pdf

http://slideplayer.es/slide/5440106/

http://www.seas.es/blog/informatica/patrones-de-diseno-en-java-patron-composite/

http://slideplayer.es/slide/5440106/

https://danielggarcia.wordpress.com/2014/03/31/patrones-estructurales-vi-patron-
composite/

http://java-white-box.blogspot.pe/2014/10/patrones-de-diseno-composite.html

http://rootear.com/desarrollo/patron-composite

http://informaticapc.com/patrones-de-diseno/composite.php

16

Vous aimerez peut-être aussi