Sobes.tech
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