¿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 |