Qual è la differenza tra composizione e aggregazione?
sobes.tech AI
Risposta dell'AI
La composizione e l'aggregazione sono relazioni "parte-tutto" tra oggetti.
-
Composizione: Relazione rigorosa in cui la parte non può esistere senza il tutto. La rimozione del tutto elimina anche le parti. Il ciclo di vita della parte dipendente è completamente determinato dal tutto. Esempio: Stanze (parti) in una Casa (tutto). Senza la Casa, le stanze non esistono.
// Esempio di composizione: class Room { private String name; public Room(String name) { this.name = name; } // ... metodi di Room } class House { private List<Room> rooms = new ArrayList<>(); // Parti create e gestite dal tutto public House() { rooms.add(new Room("Living Room")); // Creazione di parte all'interno del tutto rooms.add(new Room("Bedroom")); } // ... metodi di House } -
Aggregazione: Relazione più debole in cui la parte può esistere indipendentemente dal tutto. La rimozione del tutto non necessariamente elimina le parti. Le parti possono essere collegate a più oggetti diversi. Esempio: Auto (tutto) e Ruote (parti). Le ruote possono esistere separatamente dall'auto e essere usate su un'altra.
// Esempio di aggregazione: class Wheel { private int size; public Wheel(int size) { this.size = size; } // ... metodi di Wheel } class Car { private List<Wheel> wheels = new ArrayList<>(); // Il tutto contiene riferimenti alle parti public Car(List<Wheel> wheels) { this.wheels = wheels; // Ricezione di parti dall'esterno } // ... metodi di Car } // Esempio di creazione e utilizzo: List<Wheel> myWheels = new ArrayList<>(); myWheels.add(new Wheel(16)); myWheels.add(new Wheel(16)); // ... Car myCar = new Car(myWheels); // Aggregazione: le ruote possono esistere prima e dopo l'auto
Le principali differenze nella tabella:
| Criterio | Composizione | Aggregazione |
|---|---|---|
| Dipendenza | Rigorosa: la parte dipende dal tutto | Debole: la parte può esistere indipendentemente |
| Ciclo di vita | La parte è gestita dal tutto | La parte non è necessariamente gestita dal tutto |
| Eliminazione del tutto | Conduce alla eliminazione delle parti | Non necessariamente conduce alla eliminazione delle parti |
| Relazioni multiple | La parte appartiene a un solo tutto | La parte può essere collegata a più tutto |
| Diagramma UML | Rombo pieno sul lato del tutto | Rombo vuoto sul lato del tutto |