Aggregation vs Composition

195

Comprendo quale sia la composizione in OOP, ma non sono in grado di avere una chiara idea di cosa sia l'aggregazione. Qualcuno può spiegare?

    
posta Vinoth Kumar C M 24.03.2011 - 05:25
fonte

9 risposte

291

Regole semplici:

  1. A "possiede" B = Composizione: B non ha significato o scopo nel sistema senza A
  2. A "usa" B = Aggregazione: B esiste indipendentemente (concettualmente) da A

Esempio 1:

Una società è un'aggregazione di persone. Una società è una composizione di conti. Quando una società cessa di fare affari, i suoi account cessano di esistere ma il suo personale continua ad esistere.

Esempio 2: (molto semplificato)

Un editor di testi possiede un buffer (composizione). Un editor di testo utilizza un file (aggregazione). Quando l'editor di testo è chiuso, il buffer viene distrutto ma il file stesso non viene distrutto.

    
risposta data 24.03.2011 - 15:57
fonte
35

Da link

Aggregation differs from ordinary composition in that it does not imply ownership. In composition, when the owning object is destroyed, so are the contained objects. In aggregation, this is not necessarily true. For example, a university owns various departments (e.g., chemistry), and each department has a number of professors. If the university closes, the departments will no longer exist, but the professors in those departments will continue to exist. Therefore, a University can be seen as a composition of departments, whereas departments have an aggregation of professors. In addition, a Professor could work in more than one department, but a department could not be part of more than one university.

Quindi, mentre si ha una relazione di proprietà con la composizione, anche l'oggetto di proprietà viene distrutto quando il proprietario è - un'aggregazione (e gli oggetti contenuti) possono esistere indipendentemente.

-

Aggiornamento: Ci scusiamo - questa risposta è fin troppo semplicistica col senno di poi.

c.batt fornisce una definizione eccellente nella sua risposta: Aggregation vs Composition

    
risposta data 12.04.2017 - 09:31
fonte
20

Non c'è una singola spiegazione. Autori diversi significano cose diverse per aggregazione. La maggior parte in realtà non significa nulla di specifico.

    
risposta data 24.03.2011 - 10:58
fonte
15
  • La composizione è un'associazione

  • L'aggregazione è un'associazione

  • Composition è un'associazione strong (se la vita dell'oggetto contenuto dipende totalmente dall'oggetto contenitore, viene chiamata strong association)

  • L'aggregazione è un'associazione debole (se la vita dell'oggetto contenuto non dipende dall'oggetto contenitore, viene chiamata associazione debole)

Esempio:

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);
    } 
}
    
risposta data 09.07.2013 - 09:24
fonte
11

Composition (miscela) è un modo per combinare oggetti semplici o tipi di dati in tipi più complessi. Le composizioni sono un elemento fondamentale di molte strutture di dati di base

Aggregation (raccolta) si differenzia dalla composizione ordinaria in quanto non implica la proprietà. In composizione, quando l'oggetto proprietario viene distrutto, lo sono anche gli oggetti contenuti. In aggregazione, questo non è necessariamente vero

╔═══════════╦═════════════════════════╦═══════════════════════╗
║           ║       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 ║
╚═══════════╩═════════════════════════╩═══════════════════════╝

Entrambi denotano la relazione tra oggetto e differiscono solo nella loro forza.

NotazioniUMLperdiversitipididipendenzatradueclassi

Composition:poichéEngineèpartediCar,larelazionetraloroèComposizione.EccocomevengonoimplementatitraleclassiJava.

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

Aggregation:poichél'organizzazionehaPersoncomedipendenti,larelazionetraloroèAggregation.EccocomeappaionointerminidiclassiJava

publicclassOrganization{privateListemployees;}publicclassPerson{privateStringname;}

Source

    
risposta data 01.07.2015 - 07:28
fonte
6

l'aggregazione è una raccolta semplice, come un sacco di biglie

La composizione

implica dipendenze interne / funzionali, come le cerniere su una scatola

le auto aggregano i passeggeri; entrano ed escono senza rompere la funzionalità dell'automobile

le gomme sono componenti; rimuovi uno e l'auto non funziona più correttamente

[nota: la ruota di scorta è un aggregato!]

    
risposta data 24.03.2011 - 15:09
fonte
1

Guardo sempre la composizione come "ha bisogno di un", cioè una macchina ha bisogno di un motore , e considero l'aggregazione come "cose correlate per uno scopo". Quindi, rimanendo con l'analogia dell'auto, la mia aggregazione potrebbe essere quella di rappresentare un viaggio che potrebbe comportare il portare auto e passeggeri insieme. Il viaggio non è di proprietà dell'auto o dei passeggeri, sto aggregando i dati relativi a uno scenario specifico. Quando il viaggio è completato, la macchina e i passeggeri vanno avanti. Quando una macchina è finita, la macchina e il suo motore sono normalmente distrutti insieme.

    
risposta data 24.03.2011 - 10:52
fonte
0

Semanticamente, tutti gli insiemi sono fatti di sottoinsiemi, giusto? Pertanto:

  • L'aggregazione è quando questi sottoinsiemi esistono indipendentemente dal set padre. Come un monitor può essere scollegato dal computer per essere collegato a un altro.

  • La composizione è quando questi sottoinsiemi dipendono dall'esistenza del padre set. Come una foglia è una parte di un albero o il fegato è una parte di un corpo.

Questi concetti parlano del tipo di dipendenza tra due oggetti o classi, concettualmente. Direttamente in un programma, in un'aggregazione, quando l'oggetto padre dispone, anche gli oggetti aggregati devono essere disposti. Nello stesso scenario per una composizione, gli oggetti figlio compositi continueranno quindi a dispensare l'oggetto padre.

    
risposta data 08.08.2014 - 20:55
fonte
-2

Che ne dici di questo semplice esempio:

Una matrice di oggetti è una composizione. Una serie di puntatori agli oggetti è un'aggregazione.

Se cancello il primo, il suo contenuto svanisce con esso. Il secondo, invece, può svanire senza influire sulla sua esistenza dei membri a meno che non esista un metodo specifico che cancella ogni oggetto man mano che il suo puntatore viene eliminato.

    
risposta data 05.09.2014 - 16:03
fonte

Leggi altre domande sui tag