As composições são um caso especial das associações
de agregação. Elas representam a noção de composição e apenas têm
sentido em associações “um para muitos” e, mais raramente, em associações “muitos para muitos”.
Enquanto que nas associações anteriormente referidas não existem
classes mais importantes, nas agregações existem uma classe (supra
classe) que representa a agregação
dos objetos da outra classe (sub classe). A título de exemplo,
considere-se os itens (linhas) de uma fatura. Usualmente uma fatura é (ou
pode ser) composta por vários itens, cada um deles diz respeito a um
produto faturado. Os itens têm atributos próprios (quantidade, preço unitário,
descrição do produto, etc.) e entidade própria (é possível
distinguir um item de outro na mesma fatura). Uma possível representação
deste domínio é o diagrama abaixo. Uma fatura possui vários itens,
mas um item apenas diz respeito a uma fatura.
Uma agregação tem um losango fechado apontando para a parte
contendo o todo.
É importante observar que os itens apenas existem enquanto existir a fatura da qual fazem parte. Dito de outra forma, uma fatura é uma agregação, ou seja uma composição de itens. Se removermos uma fatura, os itens dessa fatura também serão removidos. Neste caso temos um tipo de agregação conhecido como Composição. Uma composição representa uma relação mais forte entre o objeto agregador e os objetos componentes |