Você está na página 1de 2

Escolha o que usar, Agregao ou Composio A associao tem duas formas particulares: a agregao e a composio.

As duas so muito parecidas, pois ambas relacionam um objeto composto com suas partes. Por exemplo, a associao entre um pedido e seus itens uma composio, a associao entre um carro e suas rodas uma agregao. Aposto que voc est se perguntando "Mas parece a mesma coisa!". Pois , parece mesmo. Mas no . Tecnicamente as definies para esses 2 tipos de associaes so:

Agregao
Os objetos contidos podem existir sem serem parte do objeto que os contm.

Composio
Os objetos contidos no fazem sentido fora do contexto do objeto que os contm. Ento, seguindo o exemplo dado no incio, se voc destruir o pedido, os itens so destrudos juntos, afinal eles no tem sentido fora do pedido. J no carro, voc pode tirar as rodas antes de destru-lo e elas podem ser colocadas em outro carro. At hoje, eu mesmo fico na dvida algumas vezes. Sempre que isso acontece eu opto por usar a agregao que menos restrita, ou at mesmo uma associao simples.

Na prtica como fica?


Para mostrar como fica isso durante o desenvolvimento, vamos usar o bom e velho objeto Pessoa. Este objeto possui um atributo chamado corao, que por sua vez tem os atributos: arterias, vasos, etc... Como uma pessoa no vive sem um corao, ento temos para a relao pessoa-corao uma composio. O objeto pessoa tambm tem um atributo chamado trabalho, que por sua vez os atributos: localizao, cnpj, etc.. Voc no vive sem o seu trabalho (a no ser que seja milionrio), mas ele no deixa de existir se voc pedir demisso. Dessa forma temos para a relao pessoa-trabalho temos uma agregacao. Agora vamos para o cdigo.

public class Pessoa private String nome; private Double salario; private Coracao coracao; private Trabalho trabalho; //.. get's e set's public class Coracao private Integer vasos; private Integer arterias;

public class Trabalho private Integer cnpj; private String localizacao; private ArrayList pessoa //Contm varios objetos do tipo pessoa
Podemos ver que no cdigo no muda nada, mas precisamos ter sempre especificado no diagrama de classes qual o tipo da associao utilizada. Assim teremos a viso conceitual da modelagem das funcionalidades. Espero ter ajudado a todos que tenham dvidas sobre o assunto!

Você também pode gostar