relaciones poo objetos herencia generalizacion entre diferencias diagrama composicion clases asociaciones asociacion agregacion oop uml aggregation composition model-associations

oop - poo - Agregación vs Composición vs Asociación vs Asociación Directa



herencia uml (4)

Estoy revisando mi conocimiento en programación orientada a objetos. Bajo el tema de la relación entre clases, he encontrado algunas relaciones que son un poco ambiguas para mí.

Sé que la dependencia "usa-a" y la herencia "es-a", pero no estoy familiarizado con Agregación, Composición, Asociación y Asociación directa; también, cuál de ellos es la relación "tiene una". Algunos usan la Agregación de manera intercambiable con la Asociación.

¿Qué es la Asociación Directa? Además, ¿qué es Composición? En los diagramas UML, las flechas que los representan son diferentes. Estaría muy agradecido si pudieras aclarar estas cosas por mí.


La asociación directa no tiene nada en común con las otras tres. No pertenece a UML en absoluto, es el término de modelado de requisitos de IBM .

En cuanto a otros,

La Asociación A-> B es hija de Dependencia. Asociación significa que A (o su instancia) tiene alguna manera fácil de llegar a la instancia de B. Por ejemplo, axyb O por función, o por alguna variable local. O mediante una referencia directa o un puntero, o alguna otra cosa (hay muchos idiomas en el mundo). Como puede ver, no existe un límite estricto entre la dependencia y la asociación.

Uno de los atributos de la Asociación es la Agregación, puede tener valores: ninguno, compartido (a menudo incorrectamente llamado agregación) y composición.

Si A (o instancia) tiene algunos (o uno) ejemplos de B entonces, esa destrucción de asociación significa la destrucción de instancias B, es la composición.

Si usted o un autor de la herramienta han decidido que algunos tienen una relación, que es más débil que la composición, debe mostrarse especialmente, puede usar la agregación shared . Usualmente son algunas colecciones de referencias a B en A.

Hay algunos atributos más interesantes de asociaciones. Mire here si está interesado.


Por ejemplo, el objetivo de OOP es que su código replique objetos del mundo real, lo que hace que su código sea legible y mantenible.

  1. Asociación

La asociación básicamente es Clase A utiliza Clase B. Como ejemplo

  • El empleado usa los servicios de autobús / tren para el transporte.
  • La computadora usa el teclado como dispositivo de entrada

Y en el diagrama En UML, la asociación se denota por la punta de flecha normal.

  1. La agregación Clase A contiene la Clase B, O la Clase A tiene la instancia de la Clase B. Se usa una agregación cuando la vida del objeto es independiente del objeto contenedor. Sin embargo, el objeto contenedor posee el objeto agregado.

Por lo tanto, si eliminamos la clase A, eso no significa que la clase B también se eliminará, como ejemplo (no muchos profesores pueden pertenecer a uno o varios departamentos) la relación entre docentes y departamentos es agregación.

  1. La clase de composición A posee la clase B. Como ejemplo, el cuerpo consiste en brazo, cabeza, piernas, cuenta bancaria consiste en balance y historia de transacción. Entonces, si se borra la clase, también se borrará la clase B.

Tenga en cuenta que hay diferentes interpretaciones de las definiciones de "asociación". Mis puntos de vista a continuación se basan en gran medida en lo que leería en los libros de certificación de Oracle y en las guías de estudio.

Asociación temporal

Un uso dentro de un método , su firma o como un valor de retorno. No es realmente una referencia a un objeto específico.

Ejemplo: estaciono mi auto en un garaje.

Asociación de composición

Una llamada " relación FUERTE ": la creación de instancias del objeto vinculado a menudo está codificada de forma rígida dentro del constructor del objeto. No se puede configurar desde fuera del objeto. (La composición no puede ser una relación de muchos a muchos).

Ejemplo: una casa está compuesta de piedras.

Asociación directa

Esta es una " relación DÉBIL ". Los objetos pueden vivir de forma independiente y generalmente hay instaladores u otras formas de inyectar los objetos dependientes.

Ejemplo: un automóvil puede tener pasajeros.

Asociación de agregación

Muy similar a una asociación directa. También es una " relación DÉBIL " con objetos independientes. Sin embargo, aquí los objetos asociados son una parte crucial del objeto contenedor.

Ejemplo: un automóvil debería tener neumáticos.

Nota: Ambas asociaciones directas y asociaciones de agregación a menudo se generalizan como "Asociaciones". La diferencia es bastante sutil.


Una asociación entre tipos de objetos clasifica las relaciones entre los objetos de esos tipos. Por ejemplo, la asociación Person isEmployedBy- Enterprise puede clasificar las relaciones PeterMiller-isEmployedBy-IBM, SusanSmith-isEmployedBy-IBM y SarahAnderson-isEmployedBy-Google entre los objetos PeterMiller, SusanSmith y SarahAnderson de tipo Person , así como Google e IBM de tipo Enterprise . En otras palabras, las asociaciones son tipos de relación con dos o más tipos de objetos que participan en ellos. Una asociación entre dos tipos de objetos se llama binaria. Si bien las asociaciones binarias son más comunes, también podemos tener que tratar con asociaciones n-arias, donde n es un número natural mayor que 2. Por ejemplo, Person -isTreatedIn- Hospital -for- Disease es un 3-ario ("ternario") ) asociación entre los tipos de objeto Person , Hospital y Disease .

Supongo que con "asociación directa" te refieres a una asociación direccional (o dirigida), que es una asociación (con una clase de dominio y una clase de rango) que representa una propiedad de referencia en su clase de dominio. Dicha asociación direccional tiene un "punto de propiedad" en su objetivo final.

Consulte este capítulo del libro para obtener más información sobre asociaciones.

Y vea mi respuesta a esta pregunta SO para una explicación de agregaciones y composiciones.