Sobes.tech
Junior

Care este diferența dintre compoziție și agregare?

sobes.tech AI

Răspuns de la AI

Compoziția și agregarea sunt relații de tip "parte-întreg" între obiecte.

  • Compoziție: Relație strictă în care partea nu poate exista fără întreg. Ștergerea întregului duce și la ștergerea părților. Ciclul de viață al părții dependente este complet determinat de întreg. Exemplu: Camerele (părți) dintr-o Casă (întreg). Fără Casă, camerele nu există.

    // Exemplu de compoziție:
    class Room {
        private String name;
    
        public Room(String name) {
            this.name = name;
        }
    
        // ... metode ale Room
    }
    
    class House {
        private List<Room> rooms = new ArrayList<>(); // Părțile create și gestionate de întreg
    
        public House() {
            rooms.add(new Room("Living Room")); // Crearea părții în interiorul întregului
            rooms.add(new Room("Bedroom"));
        }
    
        // ... metode ale House
    }
    
  • Agregare: Relație mai slabă în care partea poate exista independent de întreg. Ștergerea întregului nu duce neapărat la ștergerea părților. Părțile pot fi legate de mai multe obiecte diferite. Exemplu: Mașina (întreg) și Roțile (părți). Roțile pot exista separat de mașină și pot fi folosite pe altă.

    // Exemplu de agregare:
    class Wheel {
        private int size;
    
        public Wheel(int size) {
            this.size = size;
        }
    
        // ... metode ale Wheel
    }
    
    class Car {
        private List<Wheel> wheels = new ArrayList<>(); // Întregul conține referințe la părți
    
        public Car(List<Wheel> wheels) {
            this.wheels = wheels; // Recepționarea părților din exterior
        }
    
        // ... metode ale Car
    }
    
    // Exemplu de creare și utilizare:
    List<Wheel> myWheels = new ArrayList<>();
    myWheels.add(new Wheel(16));
    myWheels.add(new Wheel(16));
    // ...
    Car myCar = new Car(myWheels); // Agregare: Roțile pot exista înainte și după mașină
    

Principalele diferențe din tabel:

Criteriu Compoziție Agregare
Dependență Strictă: Partea depinde de întreg Slabă: Partea poate exista independent
Ciclu de viață Partea este gestionată de întreg Partea nu este neapărat gestionată de întreg
Ștergerea întregului Conduce la ștergerea părților Nu conduce neapărat la ștergerea părților
Relații multiple Partea aparține doar unui întreg Partea poate fi legată de mai multe întregi
Diagrama UML Romb plin pe partea întregului Romb gol pe partea întregului