Sobes.tech
Junior

Quelle est la différence entre composition et agrégation?

sobes.tech IA

Réponse de l'IA

La composition et l'agrégation sont des relations "partie-tout" entre objets.

  • Composition : Relation stricte où la partie ne peut pas exister sans le tout. La suppression du tout entraîne également la suppression des parties. Le cycle de vie de la partie dépend entièrement du tout. Exemple : Chambres (parties) dans une Maison (tout). Sans la Maison, les chambres n'existent pas.

    // Exemple de composition :
    class Room {
        private String name;
    
        public Room(String name) {
            this.name = name;
        }
    
        // ... méthodes de Room
    }
    
    class House {
        private List<Room> rooms = new ArrayList<>(); // Parties créées et gérées par le tout
    
        public House() {
            rooms.add(new Room("Living Room")); // Création de la partie dans le tout
            rooms.add(new Room("Bedroom"));
        }
    
        // ... méthodes de House
    }
    
  • Agrégation : Relation plus faible où la partie peut exister indépendamment du tout. La suppression du tout ne supprime pas nécessairement les parties. Les parties peuvent être liées à plusieurs objets différents. Exemple : Voiture (tout) et Roues (parties). Les roues peuvent exister séparément de la voiture et être utilisées sur une autre.

    // Exemple d'agrégation :
    class Wheel {
        private int size;
    
        public Wheel(int size) {
            this.size = size;
        }
    
        // ... méthodes de Wheel
    }
    
    class Car {
        private List<Wheel> wheels = new ArrayList<>(); // Le tout contient des références aux parties
    
        public Car(List<Wheel> wheels) {
            this.wheels = wheels; // Réception des parties de l'extérieur
        }
    
        // ... méthodes de Car
    }
    
    // Exemple de création et d'utilisation :
    List<Wheel> myWheels = new ArrayList<>();
    myWheels.add(new Wheel(16));
    myWheels.add(new Wheel(16));
    // ...
    Car myCar = new Car(myWheels); // Agrégation : les roues peuvent exister avant et après la voiture
    

Les principales différences dans le tableau :

Critère Composition Agrégation
Dépendance Stricte : la partie dépend du tout Faible : la partie peut exister indépendamment
Cycle de vie La partie est gérée par le tout La partie n'est pas nécessairement gérée par le tout
Suppression du tout Conduit à la suppression des parties Ne conduit pas nécessairement à la suppression des parties
Relations multiples La partie appartient à un seul tout La partie peut être liée à plusieurs touts
Diagramme UML Rombus rempli du côté du tout Rombus vide du côté du tout