¿Cuál es la diferencia entre asociación, agregación y composición?

Resuelto asked hace 15 años • 0 respuestas

¿Cuál es la diferencia entre asociación, agregación y composición? Por favor explique en términos de implementación.

 avatar May 20 '09 09:05
Aceptado

Para dos objetos, Fooy Barlas relaciones se pueden definir.

Asociación : tengo una relación con un objeto. FoousosBar

public class Foo {         
    private Bar bar;
};

NB: consulte la definición de Fowler : la clave es que Barestá semánticamente relacionada Fooy no solo con una dependencia (como intor string).

Composición : soy dueño de un objeto y soy responsable de su vida útil. Cuando Foomuere, también lo hace.Bar

public class Foo {
    private Bar bar = new Bar(); 
}

Agregación : tengo un objeto que tomé prestado de otra persona. Cuando Foomuera, Barpodrá seguir viviendo.

public class Foo { 
    private Bar bar; 
    Foo(Bar bar) { 
       this.bar = bar; 
    }
}
Jeff Foster avatar May 01 '2012 07:05 Jeff Foster

Sé que esta pregunta está etiquetada como C#, pero los conceptos son preguntas bastante genéricas como esta redirección aquí. Así que voy a brindar mi punto de vista aquí (un poco parcial desde el punto de vista de Java, donde me siento más cómodo).

Cuando pensamos en la naturaleza orientada a objetos, siempre pensamos en objetos, clases (modelos de objetos) y la relación entre ellos. Los objetos están relacionados e interactúan entre sí mediante métodos. En otras palabras, el objeto de una clase puede utilizar servicios/métodos proporcionados por el objeto de otra clase. Este tipo de relación se denomina asociación. .

La agregación y la composición son subconjuntos de asociación, lo que significa que son casos específicos de asociación.

ingrese la descripción de la imagen aquí

  • Tanto en agregación como en composición, el objeto de una clase "posee" el objeto de otra clase .
  • Pero hay una sutil diferencia. En Composición, el objeto de la clase que es propiedad del objeto de su clase propietaria no puede vivir por sí solo (también llamada "relación de muerte"). Siempre vivirá como parte de su objeto propietario, mientras que en Agregación el objeto dependiente es independiente y puede existir incluso si el objeto de la clase propietaria está muerto.
  • Entonces, en la composición, si el objeto propietario se recolecta como basura, el objeto propio también lo será, lo que no es el caso en la agregación.

¿Confundido?

Ejemplo de composición : considere el ejemplo de un automóvil y un motor que es muy específico para ese automóvil (lo que significa que no se puede usar en ningún otro automóvil). Este tipo de relación entre la clase Car y SpecificEngine se llama Composición. Un objeto de la clase Car no puede existir sin un objeto de la clase SpecificEngine y el objeto de SpecificEngine no tiene significado sin la clase Car. Para decirlo en palabras simples, la clase Car únicamente "posee" la clase SpecificEngine.

Ejemplo de agregación : considere ahora la clase Auto y la clase Rueda . El coche necesita un objeto Rueda para funcionar. Lo que significa que el objeto Car posee el objeto Wheel, pero no podemos decir que el objeto Wheel no tiene significado sin el objeto Car. Se puede utilizar muy bien en una bicicleta, un camión u otro objeto de automóvil.

Resumiendo -

En resumen, asociación es un término muy genérico que se utiliza para representar cuando una clase utiliza las funcionalidades proporcionadas por otra clase. Decimos que es composición si un objeto de clase padre posee otro objeto de clase hijo y ese objeto de clase hijo no puede existir de manera significativa sin el objeto de clase padre. Si es posible, se llama Agregación.

Más detalles aquí. Soy el autor de http://opensourceforgeeks.blogspot.in y agregué un enlace arriba a la publicación correspondiente para obtener más contexto.

Aniket Thakur avatar Nov 09 '2014 12:11 Aniket Thakur