Em modelagem orientada a objetos existem dois termos que geralmente me confundem: Agregação e Composição. Decidi escrever esse post para quando eu mesmo estiver em dúvida vir até aqui e consultar. Prático, não? :)

Ambos descrevem relações entre objetos, porém com uma diferença simples.

Agregação

  • Um objeto contém uma lista de outros objetos.
  • Os objetos contidos podem existir sem serem parte do objeto que os contém.
  • Exemplo: Carro -> Rodas. Você pode tirar as rodas do carro antes de destruí-lo e elas podem ser colocadas em outro carro.

Composição

  • Um objeto contém uma lista de outros objetos.
  • Os objetos contidos não fazem sentido fora do contexto do objeto que os contém.
  • Exemplo: Pedido -> Itens. Se você destruir o pedido, os itens são destruidos junto, eles não tem sentido fora do pedido.