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 |