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?
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?
Regole semplici:
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.
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
Non c'è una singola spiegazione. Autori diversi significano cose diverse per aggregazione. La maggior parte in realtà non significa nulla di specifico.
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);
}
}
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;}
l'aggregazione è una raccolta semplice, come un sacco di biglie
La composizioneimplica 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!]
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.
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.
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.
Leggi altre domande sui tag object-oriented