Sobes.tech
Junior

¿En qué consiste la diferencia entre composición y agregación?

sobes.tech AI

Respuesta de la IA

La composición y la agregación son relaciones de "parte-todo" entre objetos.

  • Composición: Relación estricta donde la parte no puede existir sin el todo. La eliminación del todo también elimina las partes. El ciclo de vida de la parte dependiente está completamente determinado por el todo. Ejemplo: Habitaciones (partes) en una Casa (todo). Sin la Casa, las habitaciones no existen.

    // Ejemplo de composición:
    class Room {
        private String name;
    
        public Room(String name) {
            this.name = name;
        }
    
        // ... métodos de Room
    }
    
    class House {
        private List<Room> rooms = new ArrayList<>(); // Partes creadas y gestionadas por el todo
    
        public House() {
            rooms.add(new Room("Living Room")); // Creación de parte dentro del todo
            rooms.add(new Room("Bedroom"));
        }
    
        // ... métodos de House
    }
    
  • Agregación: Relación más débil donde la parte puede existir independientemente del todo. La eliminación del todo no necesariamente elimina las partes. Las partes pueden estar relacionadas con varios objetos diferentes. Ejemplo: Automóvil (todo) y Ruedas (partes). Las ruedas pueden existir por separado del automóvil y usarse en otro.

    // Ejemplo de agregación:
    class Wheel {
        private int size;
    
        public Wheel(int size) {
            this.size = size;
        }
    
        // ... métodos de Wheel
    }
    
    class Car {
        private List<Wheel> wheels = new ArrayList<>(); // El todo contiene referencias a las partes
    
        public Car(List<Wheel> wheels) {
            this.wheels = wheels; // Recepción de partes desde fuera
        }
    
        // ... métodos de Car
    }
    
    // Ejemplo de creación y uso:
    List<Wheel> myWheels = new ArrayList<>();
    myWheels.add(new Wheel(16));
    myWheels.add(new Wheel(16));
    // ...
    Car myCar = new Car(myWheels); // Agregación: las ruedas pueden existir antes y después del coche
    

Las principales diferencias en la tabla:

Criterio Composición Agregación
Dependencia Estricta: La parte depende del todo Débil: La parte puede existir independientemente
Ciclo de vida La parte es gestionada por el todo La parte no necesariamente es gestionada por el todo
Eliminación del todo Conduce a la eliminación de las partes No necesariamente conduce a la eliminación de las partes
Múltiples relaciones La parte pertenece solo a un todo La parte puede estar relacionada con varios todos
Diagrama UML Rombos rellenos en el lado del todo Rombos vacíos en el lado del todo