Junior
Qual é a diferença entre composição e agregação?
sobes.tech IA
Resposta da IA
A composição e a agregação são relações de "parte-todo" entre objetos.
-
Composição: Relação estrita onde a parte não pode existir sem o todo. A eliminação do todo também elimina as partes. O ciclo de vida da parte dependente é totalmente determinado pelo todo. Exemplo: Quartos (partes) numa Casa (todo). Sem a Casa, os quartos não existem.
// Exemplo de composição: 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 criadas e geridas pelo todo public House() { rooms.add(new Room("Living Room")); // Criação de parte dentro do todo rooms.add(new Room("Bedroom")); } // ... métodos de House } -
Agregação: Relação mais fraca onde a parte pode existir independentemente do todo. A eliminação do todo não necessariamente elimina as partes. As partes podem estar relacionadas com vários objetos diferentes. Exemplo: Carro (todo) e Rodas (partes). As rodas podem existir separadamente do carro e serem usadas noutro.
// Exemplo de agregação: class Wheel { private int size; public Wheel(int size) { this.size = size; } // ... métodos de Wheel } class Car { private List<Wheel> wheels = new ArrayList<>(); // O todo contém referências às partes public Car(List<Wheel> wheels) { this.wheels = wheels; // Recepção de partes de fora } // ... métodos de Car } // Exemplo de criação e uso: List<Wheel> myWheels = new ArrayList<>(); myWheels.add(new Wheel(16)); myWheels.add(new Wheel(16)); // ... Car myCar = new Car(myWheels); // Agregação: as rodas podem existir antes e depois do carro
As principais diferenças na tabela:
| Critério | Composição | Agregação |
|---|---|---|
| Dependência | Estrita: A parte depende do todo | Fraca: A parte pode existir independentemente |
| Ciclo de vida | A parte é gerida pelo todo | A parte não é necessariamente gerida pelo todo |
| Eliminação do todo | Conduz à eliminação das partes | Não necessariamente conduz à eliminação das partes |
| Relações múltiplas | A parte pertence a apenas um todo | A parte pode estar relacionada com vários todos |
| Diagrama UML | Rombos preenchidos do lado do todo | Rombos vazios do lado do todo |