relaciones multiplicidad herencia ejemplos diagrama composicion clases asociacion agregacion java oop uml

java - multiplicidad - Asociación vs. Agregación



multiplicidad java (6)

Asociación es cualquier relación entre clases donde las instancias de una clase tienen una referencia de campo a una instancia de otra clase.

La composición es una relación "más fuerte", lo que significa que una instancia (padre) "posee" a otra (hijo).

Es Agregación que no tiene ninguna semántica adicional que no sea una asociación.

Vea más aquí: http://martinfowler.com/bliki/AggregationAndComposition.html

EDITAR: Puede agregar una semántica especial al símbolo de agregación, como "Puede ser propiedad de un padre como máximo a la vez, pero puede cambiar de padres o ser huérfano". Sin embargo, esas extensiones son suyas, y no están definidas en UML, hasta donde yo sé.

Esta pregunta ya tiene una respuesta aquí:

He revisado mucha información sobre estas cosas, pero no puedo entender cuál es la diferencia entre ellas. En UML Destilados de Fowler, dice que la agregación no tiene sentido, por lo que el autor recomienda no usarla en los diagramas. Explique, por favor, cuándo debería usar cada uno de ellos y cómo influirá en el código de Java.


Esta es una pregunta muy discutible. Como Martin explica en la respuesta , la Orden agrega el Producto. Y esto puede considerarse cierto. Grady Booch en su "Análisis y diseño orientado a objetos" presenta un ejemplo similar de asociación: una venta se asocia con productos en esa venta, y viceversa. Y una venta no agrega productos. Por lo tanto, todos los ejemplos deben ser específicos del dominio, ya que desde otro punto de vista, la asociación puede volverse más específica. Otro ejemplo es la composición de Documentos que usan Párrafos.

Entonces todo en este campo depende fuertemente del contexto. Este es el OOP.

Puede intentar aplicar su conocimiento a un proyecto en particular que va a diseñar. Te recomiendo que leas el libro de Grady Booch, si aún no lo has hecho. Se han escrito muchos libros desde entonces, pero sigue siendo la Biblia de OO *.


Hay cuatro tipos de relaciones de Clase

  1. Asociación: usa un
    Ej: un Hombre de Clase usa una Pluma de Clase
  2. Agregación: tiene un
    Ej: un Hombre de Clase tiene un Coche de Clase (El Coche todavía está allí cuando el Hombre muere)
  3. Composición: posee una
    Ej: un Hombre de Clase posee un Corazón de Clase (Cuando el Hombre muere, Muere el Corazón)
  4. Herencia: es un
    Ej: un Hombre de Clase es un Humano de Clase (El Hombre es un Humano)

Una relación entre clases de objetos

Herencia> Composición> Agregación> Asociación


La asociación significa que dos clases tienen algún tipo de relación, podría ser cualquier cosa realmente.

La composición y la agregación son dos tipos de asociaciones. La manera más fácil de distinguirlos es pensar en "qué tan difícil" es la relación. Piensa en lo que sucede cuando eliminas el objeto propietario.

Agregación, el objeto agregado continúa vivo. (Piensa en la orden <-> producto, el producto continúa vivo).

Composición, el objeto agregado muere con el propietario. (Pensar párrafos <-> documento, los párrafos mueren con el documento).

Se puede argumentar que una agregación no tiene sentido ya que no hay mucha diferencia entre dibujar una línea con una flecha no rellena (asociación) y una línea con un diamante no relleno (agregación). Las relaciones son muy similares. La línea con diamantes rellenos (composición) es, sin embargo, muy diferente.


La composición de UML, la agregación y la asociación simple son conceptos semánticos , no conceptos de programación . El significado de ellos se puede entender de la siguiente manera:

  • Composición : A consiste en B; B es una parte de A y, por lo tanto, no puede existir sin A
  • Agregación : A posee B, B pertenece a A
  • Asociación : A usa B, A está relacionado con B de una manera determinada

(La composición y la agregación son tipos especiales de asociaciones).

En Java, puede implementarlos todos de la misma manera. Es una diferencia conceptual.


Parece haber cierto debate sobre qué palabra es cuál.

Tiene que ver con las relaciones padre-hijo entre los objetos y lo que les sucede a los hijos cuando eliminas el padre.

Un escenario dice que los niños no tienen vida fuera de la de sus padres, por lo que deben eliminarse cuando se elimine el padre. Piense en "ELIMINAR CASCADA" en claves externas y bases de datos relacionales.

El otro escenario dice que los niños deberían persistir más allá de sus padres, por lo que no deberían eliminarse cuando se elimine a sus padres.

Dejaré que otros discutan qué palabra describe cada situación.