Agregación Java vs Composición

Musfirah Waseem 12 octubre 2023
  1. Composición en Java
  2. Agregación en Java
  3. Composición frente a agregación
  4. Trabajar con Composición en Java
  5. Trabajar con agregación en Java
Agregación Java vs Composición

En Java, la agregación y la composición son dos conceptos íntimamente ligados. Composición es una estrecha asociación entre clases, mientras que la agregación es una asociación débil.

Composición en Java

La composición es cuando un objeto de clase base posee otro objeto de clase derivado y el objeto de clase derivado no puede existir sin la clase base.

Por ejemplo, construir un Humano tendrá varias subclases: la mano, la pierna y el corazón. Cuando un objeto humano muere, todas sus subpartes dejan de existir significativamente.

Agregación en Java

La agregación es cuando un objeto de clase base y su objeto de clase derivado pueden existir de forma independiente. Por ejemplo, si construimos una clase base Jugador y de ella derivamos una clase Equipo, el equipo seguirá existiendo si se destruye el objeto Jugador.

Del mismo modo, si el Equipo se disuelve, el Jugador seguirá existiendo y podrá unirse a otro equipo.

Composición frente a agregación

Composición Agregación
Relación PART-OF o relación especial HAS A Relación TIENE A
Dependencia unidireccional Dependencia bidireccional
Fuerte tipo de asociación Tipo débil de asociación
El niño depende de la clase principal El niño es independiente de la clase de padres.
La representación del diagrama UML es un diamante negro La representación del diagrama UML es un diamante blanco

Trabajar con Composición en Java

import java.io.*;
import java.util.*;
class Job {
  private int pay;
  private int id;

  public int getWage() {
    return pay;
  }
  public void setWage(int pay) {
    this.pay = pay;
  }
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
}
class Person {
  private Job job;

  public Person() {
    this.job = new Job();
    job.setWage(650);
  }
  public int getWage() {
    return job.getWage();
  }
}
class Main {
  public static void main(String[] args) {
    Person person = new Person();
    int salary = person.getWage();
    System.out.println("The wage of the person for a job: " + salary);
  }
}

Producción :

The wage of the person for a job: 650

El código anterior muestra la relación de composición entre dos clases. La composición se clasifica como un tipo de relación parte de; en el caso anterior, salario es parte de un trabajo.

Hemos definido constructores parametrizados, funciones setter y getter para ambas clases.

Trabajar con agregación en Java

import java.io.*;
import java.util.*;

class Bank {
  private String BankName;

  Bank(String name) {
    BankName = name;
  }
  public String getBankName() {
    return BankName;
  }
}

class Employee {
  private String EmployeeName;

  Employee(String name) {
    EmployeeName = name;
  }

  public String getEmployeeName() {
    return EmployeeName;
  }
}
class Main {
  public static void main(String[] args) {
    Bank bank = new Bank("IMF");
    Employee emp = new Employee("Rob");

    System.out.println(emp.getEmployeeName() + " is an employee of the " + bank.getBankName());
  }
}

Producción :

Rob is an employee of the IMF

El código anterior muestra la relación de agregación entre dos clases. La agregación se clasifica como una relación del tipo has-a; en el caso anterior, el banco tiene un empleado llamado Rob.

Hemos definido constructores parametrizados, funciones setter y getter para ambas clases.

Musfirah Waseem avatar Musfirah Waseem avatar

Musfirah is a student of computer science from the best university in Pakistan. She has a knack for programming and everything related. She is a tech geek who loves to help people as much as possible.

LinkedIn