La differenza tra Composizione e Aggregazione in UML (e talvolta anche nella programmazione) è che con Composition, la durata degli oggetti che compongono il composito (ad esempio un motore e un volante in un'auto) dipende dall'oggetto composito. Mentre con Aggregation, la durata degli oggetti che compongono il composito è indipendente dal composito.
Tuttavia non sono sicuro di qualcosa relativo alla composizione in UML.
Dire che ClassA è composto da un oggetto di ClassB:
class ClassA{
ClassB bInstance;
public ClassA(){
bInstance = new ClassB();
}
}
Questo è un esempio di composizione, perché bInstance
dipende dalla durata del suo oggetto che lo racchiude.
Tuttavia, per quanto riguarda la notazione UML - non sono sicuro di voler annotare la relazione tra ClassA e ClassB con un diamante pieno (composizione) o un diamante bianco (aggregazione).
Questo perché mentre la vita di alcune % istanze diClassB
dipende da% istanze diClassA
- potrebbero esserci% istanze diClassB
in qualsiasi altro punto del programma - non solo all'interno di% istanze diClassA
.
La domanda è: se alcuni oggetti ClassB sono composti con oggetti ClassA (e quindi dipendono dalla durata degli oggetti ClassA) , ma alcuni non sono - la relazione tra le due classi in UML potrebbe essere un'aggregazione o una relazione di composizione ??