Agregación vs Composición

195

Entiendo qué es la composición en OOP, pero no puedo tener una idea clara de lo que es la Agregación. ¿Alguien puede explicar?

    
pregunta Vinoth Kumar C M 24.03.2011 - 05:25

9 respuestas

291

Reglas simples:

  1. A "posee" B = Composición: B no tiene ningún significado o propósito en el sistema sin A
  2. A "usa" B = Agregación: B existe independientemente (conceptualmente) de A

Ejemplo 1:

Una empresa es una agregación de personas. Una empresa es una composición de cuentas. Cuando una empresa deja de hacer negocios, sus cuentas dejan de existir pero su gente sigue existiendo.

Ejemplo 2: (muy simplificado)

Un editor de texto posee un búfer (composición). Un editor de texto utiliza un archivo (agregación). Cuando se cierra el editor de texto, el búfer se destruye pero el archivo en sí no se destruye.

    
respondido por el Curtis Batt 24.03.2011 - 15:57
35

De enlace

  

La agregación se diferencia de la composición ordinaria en que no implica propiedad. En composición, cuando el objeto propietario se destruye, también lo son los objetos contenidos. En la agregación, esto no es necesariamente cierto. Por ejemplo, una universidad posee varios departamentos (por ejemplo, química), y cada departamento tiene varios profesores. Si la universidad cierra, los departamentos ya no existirán, pero los profesores en esos departamentos continuarán existiendo. Por lo tanto, una universidad puede verse como una composición de departamentos, mientras que los departamentos tienen una agregación de profesores. Además, un profesor puede trabajar en más de un departamento, pero un departamento no puede formar parte de más de una universidad.

Entonces, si bien tiene una relación de propiedad con la composición, el objeto de propiedad también se destruye cuando el propietario lo es, una agregación (y los objetos contenidos) pueden existir independientemente.

-

Actualizar: Disculpas: esta respuesta es demasiado simplista en retrospectiva.

c.batt proporciona una excelente definición en su respuesta: Agregación vs Composición

    
respondido por el HorusKol 12.04.2017 - 09:31
20

No hay una explicación única. Diferentes autores significan diferentes cosas por agregación. La mayoría realmente no significa nada específico por ello.

    
respondido por el reinierpost 24.03.2011 - 10:58
15
  • La composición es una asociación

  • La agregación es una asociación

  • La composición es una asociación strong (si la vida del objeto contenido depende totalmente del objeto contenedor, se denomina asociación fuerte)

  • La agregación es una asociación débil (si la vida del objeto contenido no depende del objeto contenedor, se llama asociación débil)

Ejemplo:

class Contained {
    public void disp() {
        System.out.println("disp() of Contained A");
    }
}

public class Container {
    private Contained c;

    //Composition
    Container() {
        c = new Contained(); 
    }

    //Association 
    public Contained getC() {
        return c;
    }

    public void setC(Contained c) {
        this.c = c;
    }     

    public static void main(String[] args) {
        Container container = new Container();
        Contained contained = new Contained();
        container.setC(contained);
    } 
}
    
respondido por el Pawan 09.07.2013 - 09:24
11

Composición (mezcla) es una forma de combinar objetos simples o tipos de datos en objetos más complejos. Las composiciones son un bloque de construcción crítico de muchas estructuras de datos básicas

Agregación (colección) difiere de la composición ordinaria en que no implica propiedad. En composición, cuando el objeto propietario se destruye, también lo son los objetos contenidos. En conjunto, esto no es necesariamente cierto

╔═══════════╦═════════════════════════╦═══════════════════════╗
║           ║       Aggregation       ║      Composition      ║
╠═══════════╬═════════════════════════╬═══════════════════════╣
║ Life time ║ Have their own lifetime ║ Owner's life time     ║
║ Relation  ║ Has                     ║ part-of               ║
║ Example   ║ Car has driver          ║ Engine is part of Car ║
╚═══════════╩═════════════════════════╩═══════════════════════╝

Ambos denotan relación entre el objeto y solo difieren en su fuerza.

NotacionesUMLparadiferentestiposdedependenciaentredosclases

Composición:comoEngineespartedeCar,larelaciónentreellosesComposición.AquíescómoseimplementanentrelasclasesdeJava.

publicclassCar{//finalwillmakesureengineisinitializedprivatefinalEngineengine;publicCar(){engine=newEngine();}}classEngine{privateStringtype;}

Agregación:comolaOrganizacióntienePersonacomoempleados,larelaciónentreelloseslaAgregación.AquíescómosevenentérminosdeclasesdeJava

publicclassOrganization{privateListemployees;}publicclassPerson{privateStringname;}

Fuente

    
respondido por el Premraj 01.07.2015 - 07:28
6

la agregación es una colección simple, como una bolsa de canicas

la composición implica dependencias internas / funcionales, como las bisagras de una caja

coches agregados pasajeros; entran y salen sin romper la funcionalidad del auto

los neumáticos son componentes; retira uno y el auto ya no funciona correctamente

[nota: el neumático de repuesto es un agregado!]

    
respondido por el Steven A. Lowe 24.03.2011 - 15:09
1

Siempre veo la composición como 'necesita un', es decir, un coche necesita un motor , y veo la agregación como 'cosas relacionadas con un propósito'. Por lo tanto, manteniéndome en la analogía del automóvil, mi agregación puede ser representar un viaje que puede implicar reunir un automóvil y pasajeros juntos. El viaje no es propietario del automóvil ni de los pasajeros, estoy agregando datos relacionados con un escenario específico. Cuando el viaje se completa, el coche y los pasajeros continúan. Cuando se termina un automóvil, el automóvil y su motor normalmente se destruyen juntos.

    
respondido por el Lazarus 24.03.2011 - 10:52
0

Semánticamente, todos los conjuntos están hechos de subconjuntos, ¿verdad? Por lo tanto:

  • La agregación es cuando esos subconjuntos existen independientemente del conjunto padre. Como un monitor puede desconectarse de la computadora para conectarse a otro.

  • La composición es cuando esos subconjuntos dependen de la existencia del conjunto padre. Como una hoja es una parte de un árbol o el hígado es una parte de un cuerpo.

Estos conceptos se refieren al tipo de dependencia entre dos objetos o clases, conceptualmente. Directamente en un programa, en una agregación, cuando el objeto padre se desecha, los objetos agregados también deben eliminarse. En el mismo escenario para una composición, los objetos hijo compuestos persistirán y el objeto padre se dispensa.

    
respondido por el Negarrak 08.08.2014 - 20:55
-2

¿Qué te parece este sencillo ejemplo?

Una matriz de objetos es una composición. Una matriz de punteros a objetos es una agregación.

Si elimino el primero, su contenido desaparecerá con él. El segundo, por otro lado, puede desaparecer sin afectar la existencia de sus miembros, a menos que exista un método específico que elimine cada objeto a medida que se elimina su puntero.

    
respondido por el user2831074 05.09.2014 - 16:03

Lea otras preguntas en las etiquetas