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