Sobes.tech
Junior

Qual è la differenza tra composizione e aggregazione?

sobes.tech AI

Risposta dell'AI

La composizione e l'aggregazione sono relazioni "parte-tutto" tra oggetti.

  • Composizione: Relazione rigorosa in cui la parte non può esistere senza il tutto. La rimozione del tutto elimina anche le parti. Il ciclo di vita della parte dipendente è completamente determinato dal tutto. Esempio: Stanze (parti) in una Casa (tutto). Senza la Casa, le stanze non esistono.

    // Esempio di composizione:
    class Room {
        private String name;
    
        public Room(String name) {
            this.name = name;
        }
    
        // ... metodi di Room
    }
    
    class House {
        private List<Room> rooms = new ArrayList<>(); // Parti create e gestite dal tutto
    
        public House() {
            rooms.add(new Room("Living Room")); // Creazione di parte all'interno del tutto
            rooms.add(new Room("Bedroom"));
        }
    
        // ... metodi di House
    }
    
  • Aggregazione: Relazione più debole in cui la parte può esistere indipendentemente dal tutto. La rimozione del tutto non necessariamente elimina le parti. Le parti possono essere collegate a più oggetti diversi. Esempio: Auto (tutto) e Ruote (parti). Le ruote possono esistere separatamente dall'auto e essere usate su un'altra.

    // Esempio di aggregazione:
    class Wheel {
        private int size;
    
        public Wheel(int size) {
            this.size = size;
        }
    
        // ... metodi di Wheel
    }
    
    class Car {
        private List<Wheel> wheels = new ArrayList<>(); // Il tutto contiene riferimenti alle parti
    
        public Car(List<Wheel> wheels) {
            this.wheels = wheels; // Ricezione di parti dall'esterno
        }
    
        // ... metodi di Car
    }
    
    // Esempio di creazione e utilizzo:
    List<Wheel> myWheels = new ArrayList<>();
    myWheels.add(new Wheel(16));
    myWheels.add(new Wheel(16));
    // ...
    Car myCar = new Car(myWheels); // Aggregazione: le ruote possono esistere prima e dopo l'auto
    

Le principali differenze nella tabella:

Criterio Composizione Aggregazione
Dipendenza Rigorosa: la parte dipende dal tutto Debole: la parte può esistere indipendentemente
Ciclo di vita La parte è gestita dal tutto La parte non è necessariamente gestita dal tutto
Eliminazione del tutto Conduce alla eliminazione delle parti Non necessariamente conduce alla eliminazione delle parti
Relazioni multiple La parte appartiene a un solo tutto La parte può essere collegata a più tutto
Diagramma UML Rombo pieno sul lato del tutto Rombo vuoto sul lato del tutto