Java Programming

Composição vs. Agregação em Java: Um Mergulho Profundo

Spread the love

A programação orientada a objetos (POO) é a pedra angular de aplicações Java robustas e fáceis de manter. Dois conceitos cruciais da POO, composição e agregação, frequentemente causam confusão. Ambos representam relações “tem-um” entre objetos, mas diferem significativamente em suas implicações e uso. Este artigo esclarece essas diferenças por meio de exemplos práticos.

Sumário

  1. Composição em Java
  2. Agregação em Java
  3. Composição vs. Agregação
  4. Trabalhando com Composição em Java
  5. Trabalhando com Agregação em Java

Composição em Java

Composição, uma relação “tem-um” forte, significa uma relação todo-parte em que o ciclo de vida da parte depende totalmente do todo. A destruição do todo também destrói suas partes; as partes não podem existir independentemente. Considere um carro: ele é composto por um motor, rodas, portas, etc. Descartar o carro descarta esses componentes.

Em Java, a composição é tipicamente implementada instanciando diretamente objetos parte dentro da classe do objeto todo. O objeto todo cria e gerencia essas partes.

Agregação em Java

Agregação, uma relação “tem-um” mais fraca, indica que a parte pode existir independentemente do todo. O objeto todo contém referências às partes, mas seus ciclos de vida não estão diretamente vinculados. Por exemplo, uma universidade “tem-um” departamento, mas o departamento persiste mesmo que a universidade feche.

Em Java, a agregação envolve o objeto todo mantendo referências a objetos parte. Essas referências podem ser gerenciadas separadamente. As partes podem ser criadas antes ou depois do objeto todo e sobreviver à sua destruição.

Composição vs. Agregação

A tabela abaixo resume as principais diferenças:

Característica Composição Agregação
Relacionamento “Tem-um” forte (todo-parte) “Tem-um” fraco
Ciclo de Vida O ciclo de vida da parte depende do todo O ciclo de vida da parte é independente do todo
Propriedade O objeto todo possui e gerencia as partes O objeto todo contém referências às partes
Existência da Parte A parte não pode existir independentemente A parte pode existir independentemente
Implementação Instanciação direta dentro do objeto todo Referências a objetos parte independentes

Trabalhando com Composição em Java

Vamos ilustrar a composição com um Car composto por um Engine:


class Engine {
    public void start() { System.out.println("Engine started"); }
}

class Car {
    private Engine engine; 

    public Car() {
        this.engine = new Engine(); 
    }

    public void drive() {
        engine.start();
        System.out.println("Car driving");
    }
}

public class Main {
    public static void main(String[] args) {
        Car myCar = new Car();
        myCar.drive();
    }
}

O objeto Engine é criado dentro da classe Car. A existência do Engine depende do Car.

Trabalhando com Agregação em Java

Agora, vamos ilustrar a agregação com uma universidade e seus departamentos:


class Department {
    private String name;

    public Department(String name) { this.name = name; }
    public String getName() { return name; }
}

class University {
    private Department[] departments; 

    public University(Department[] departments) {
        this.departments = departments;
    }

    public void printDepartments() {
        for (Department dept : departments) {
            System.out.println("Department: " + dept.getName());
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Department cs = new Department("Computer Science");
        Department math = new Department("Mathematics");
        Department[] deps = {cs, math};
        University uni = new University(deps);
        uni.printDepartments();
    }
}

A University mantém referências a objetos Department. Os objetos Department existem independentemente e podem ser usados em outros lugares.

A compreensão da composição e da agregação permite o design de aplicações Java mais robustas, fáceis de manter e bem estruturadas. A escolha depende dos requisitos de design e do gerenciamento do ciclo de vida desejado dos objetos.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *