Java Programming

Composición vs. Agregación en Java: Una Inmersión Profunda

Spread the love

La programación orientada a objetos (POO) es una piedra angular de las aplicaciones Java robustas y mantenibles. Dos conceptos cruciales de la POO, composición y agregación, a menudo causan confusión. Ambos representan relaciones «tiene-un» entre objetos, pero difieren significativamente en sus implicaciones y uso. Este artículo aclara estas diferencias a través de ejemplos prácticos.

Tabla de contenido

  1. Composición en Java
  2. Agregación en Java
  3. Composición vs. Agregación
  4. Trabajando con Composición en Java
  5. Trabajando con Agregación en Java

Composición en Java

La composición, una relación «tiene-un» fuerte, significa una relación todo-parte donde el ciclo de vida de la parte depende completamente del todo. La destrucción del todo también destruye sus partes; las partes no pueden existir independientemente. Considere un automóvil: está compuesto por un motor, ruedas, puertas, etc. Desguazar el automóvil elimina estos componentes.

En Java, la composición se implementa típicamente instanciando directamente objetos parte dentro de la clase del objeto todo. El objeto todo crea y gestiona estas partes.

Agregación en Java

La agregación, una relación «tiene-un» más débil, indica que la parte puede existir independientemente del todo. El objeto todo contiene referencias a las partes, pero sus ciclos de vida no están directamente vinculados. Por ejemplo, una universidad «tiene-un» departamento, pero el departamento persiste incluso si la universidad cierra.

En Java, la agregación implica que el objeto todo contiene referencias a objetos parte. Estas referencias se pueden gestionar por separado. Las partes se pueden crear antes o después del objeto todo y sobrevivir a su destrucción.

Composición vs. Agregación

La siguiente tabla resume las diferencias clave:

Característica Composición Agregación
Relación «Tiene-un» fuerte (todo-parte) «Tiene-un» débil
Ciclo de vida El ciclo de vida de la parte depende del todo El ciclo de vida de la parte es independiente del todo
Propietario El objeto todo posee y gestiona las partes El objeto todo contiene referencias a las partes
Existencia de la parte La parte no puede existir independientemente La parte puede existir independientemente
Implementación Instanciación directa dentro del objeto todo Referencias a objetos parte independientes

Trabajando con Composición en Java

Ilustremos la composición con un Coche compuesto por un Motor:


class Motor {
    public void arrancar() { System.out.println("Motor arrancado"); }
}

class Coche {
    private Motor motor; 

    public Coche() {
        this.motor = new Motor(); 
    }

    public void conducir() {
        motor.arrancar();
        System.out.println("Coche conduciendo");
    }
}

public class Main {
    public static void main(String[] args) {
        Coche miCoche = new Coche();
        miCoche.conducir();
    }
}

El objeto Motor se crea dentro de la clase Coche. La existencia del Motor depende del Coche.

Trabajando con Agregación en Java

Ahora, ilustremos la agregación con una universidad y sus departamentos:


class Departamento {
    private String nombre;

    public Departamento(String nombre) { this.nombre = nombre; }
    public String getNombre() { return nombre; }
}

class Universidad {
    private Departamento[] departamentos; 

    public Universidad(Departamento[] departamentos) {
        this.departamentos = departamentos;
    }

    public void imprimirDepartamentos() {
        for (Departamento dept : departamentos) {
            System.out.println("Departamento: " + dept.getNombre());
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Departamento cs = new Departamento("Ciencias de la Computación");
        Departamento matematicas = new Departamento("Matemáticas");
        Departamento[] deps = {cs, matematicas};
        Universidad uni = new Universidad(deps);
        uni.imprimirDepartamentos();
    }
}

La Universidad contiene referencias a objetos Departamento. Los objetos Departamento existen independientemente y se pueden usar en otros lugares.

Comprender la composición y la agregación permite diseñar aplicaciones Java más robustas, mantenibles y bien estructuradas. La elección depende de los requisitos de diseño y la gestión del ciclo de vida deseada de los objetos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *