Sobes.tech
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