Junior
V čem spočívá rozdíl mezi kompozicí a agregací?
sobes.tech AI
Odpověď od AI
Složení a agregace jsou vztahy "část-celek" mezi objekty.
-
Složení: Přísný vztah, kde část nemůže existovat bez celku. Odstranění celku také odstraní části. Životní cyklus závislé části je plně určen celkem. Příklad: Místnosti (části) v Domě (celek). Bez domu místnosti neexistují.
// Příklad složení: class Room { private String name; public Room(String name) { this.name = name; } // ... metody místnosti } class House { private List<Room> rooms = new ArrayList<>(); // Části jsou vytvářeny a spravovány celkem public House() { rooms.add(new Room("Obývací pokoj")); // Vytvoření části uvnitř celku rooms.add(new Room("Ložnice")); } // ... metody domu } -
Agregace: Slabší vztah, kde část může existovat nezávisle na celku. Odstranění celku nevede nutně k odstranění částí. Části mohou být spojeny s více různými objekty. Příklad: Auto (celek) a Kola (části). Kola mohou existovat samostatně od auta a být použita na jiném.
// Příklad agregace: class Wheel { private int size; public Wheel(int size) { this.size = size; } // ... metody kola } class Car { private List<Wheel> wheels = new ArrayList<>(); // Celo obsahuje odkazy na části public Car(List<Wheel> wheels) { this.wheels = wheels; // Přijetí částí zvenčí } // ... metody auta } // Příklad tvorby a použití: List<Wheel> myWheels = new ArrayList<>(); myWheels.add(new Wheel(16)); myWheels.add(new Wheel(16)); // ... Car myCar = new Car(myWheels); // Agregace: kola mohou existovat před a po autě
Hlavní rozdíly v tabulce:
| Kritérium | Složení | Agregace |
|---|---|---|
| Závislost | Přísná: část závisí na celku | Slabá: část může existovat nezávisle |
| Životní cyklus | Část je řízena celkem | Část nemusí být nutně řízena celkem |
| Odstranění celku | Vede k odstranění částí | Ne nutně vede k odstranění částí |
| Více vztahů | Část patří pouze jednomu celku | Část může být spojena s více celky |
| UML diagram | Vyplněný čtverec na straně celku | Prázdný čtverec na straně celku |