Junior
Na czym polega różnica między kompozycją a agregacją?
sobes.tech AI
Odpowiedź od AI
Kompozycja i agregacja to relacje "część-całość" między obiektami.
-
Kompozycja: Ścisły związek, w którym część nie może istnieć bez całości. Usunięcie całości powoduje również usunięcie części. Cykl życia zależnej części jest całkowicie określony przez całość. Przykład: Pokoje (części) w Domu (całości). Bez Domu pokoje nie istnieją.
// Przykład kompozycji: class Room { private String name; public Room(String name) { this.name = name; } // ... metody Room } class House { private List<Room> rooms = new ArrayList<>(); // Części tworzone i zarządzane przez całość public House() { rooms.add(new Room("Living Room")); // Tworzenie części w całości rooms.add(new Room("Bedroom")); } // ... metody House } -
Agregacja: Słabszy związek, w którym część może istnieć niezależnie od całości. Usunięcie całości nie musi powodować usunięcia części. Części mogą być powiązane z wieloma różnymi obiektami. Przykład: Samochód (całość) i Koła (części). Koła mogą istnieć niezależnie od samochodu i być używane w innym.
// Przykład agregacji: class Wheel { private int size; public Wheel(int size) { this.size = size; } // ... metody Wheel } class Car { private List<Wheel> wheels = new ArrayList<>(); // Całość zawiera odwołania do części public Car(List<Wheel> wheels) { this.wheels = wheels; // Odbiór części z zewnątrz } // ... metody Car } // Przykład tworzenia i użycia: List<Wheel> myWheels = new ArrayList<>(); myWheels.add(new Wheel(16)); myWheels.add(new Wheel(16)); // ... Car myCar = new Car(myWheels); // Agregacja: koła mogą istnieć przed i po samochodzie
Główne różnice w tabeli:
| Kryterium | Kompozycja | Agregacja |
|---|---|---|
| Zależność | Ścisła: część zależy od całości | Słaba: część może istnieć niezależnie |
| Cykl życia | Część jest zarządzana przez całość | Część nie musi być zarządzana przez całość |
| Usunięcie całości | Prowadzi do usunięcia części | Nie musi prowadzić do usunięcia części |
| Wielość relacji | Część należy tylko do jednej całości | Część może być powiązana z wieloma całościami |
| Diagram UML | Wypełniony romb po stronie całości | Pusty romb po stronie całości |