Associação de Composição entre Classes

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