domingo, 9 de diciembre de 2012

Agregación y asociación

Estas son dos formas de relacionar objetos que muchas veces se confunden pero que son bien diferentes.
  • Agregación 
Este tipo de relación entre objetos implica que un objeto posee a otro o que es responsable de él. Normalmente decimos que un objeto tiene a otro o que un objeto es parte de otro.

Las relaciones de agregación tienden a ser menos y más permanentes que las de asociación.

En este tipo de relación podemos distinguir dos modalidades:
  1. Agregación simple
  2. Composición
En el caso de la agregación simple aunque hay una relación de pertenencia, del todo y la parte, la existencia de los distintos elementos que forman parte o componen el todo no está ligada a la existencia de éste. Es decir, los elementos agregados pueden existir sin el objeto del que forman parte.

La forma de representar está relación con UML es por medio de una línea que une el todo con la parte, añadiendo al extremo del todo un rombo vacío.

Sin embargo en el caso de la composición la existencia de las partes dependen directamente de la existencia del todo que las contiene. De forma que si el todo deja de existir también lo hacen sus partes.

La forma de modelar este tipo de agregación con UML es de la misma forma que la agregación simple, pero con el rombo oscuro.

En el siguiente diagrama podemos ver un ejemplo de ambas relaciones:


En este caso podemos ver como un 'Alumno' forma parte tanto de una 'Universidad' como de una 'Asignatura'. Siendo la primera una relación de composición y la segunda de agregación simple. La diferencia conceptual esta en la relación de dependencia existencial que existe entre ellas. Si la 'Universidad' deja de existir también dejarían de existir las entidades de tipo 'Alumno', porque los alumnos necesariamente tienen que forma parte de una 'Universidad', mientras que si deja de existir una 'Asignatura' no tienen porque dejar de existir los elementos 'Alumno' vinculados a ella, porque aunque dejen de forma parte de esa 'Asignatura' formarán parte de otras, o incluso en el peor de los casos de ninguna pero sí seguirán formando parte de la 'Universidad'.
  • Asociación
En este tipo de relación un objeto simplemente conoce a otro, es decir, es una relación de uso. Los objetos relacionados de esta manera pueden pedirse operaciones entre sí, pero no son responsables unos de otros. Es una relación más débil que la agregación y representa mucho menor acoplamiento entre objetos.

Las relaciones de asociación se hacen y deshacen con mucha más frecuencia que las relaciones de agregación, y algunas veces sólo existen mientras dura una operación.

En el caso de la asociación la forma de modelar este tipo de relación con UML es simplemente con una línea uniendo los objetos asociados, aunque a veces esta linea es una flecha dirigida desde la clase que usa a la clase usada por éste.


En este ejemplo vemos como el 'Pizzero' usa la 'Pizza', pero es sólo una relación de uso no de composición. La existencia de uno no está ligada a la existencia del otro. Si el 'Pizzero' desaparece la 'Pizza' sigue existiendo, y viceversa.

No hay comentarios:

Publicar un comentario