Conheça também: Onmasters . Ofertas . Divulgue! . Vai.la . Geraboleto . Baixa.la . Assista.la . Joga.la
» Início » Programação » UML » Escolha o que usar, Agregação ou Composição -->
 
Avaliação: | Publicado em: 22/02/2008
Escolha o que usar, Agregação ou Composição
Bruno Roque Bacharel em Ciências da Computação pelo SENAC, atualmente trabalha na EDS do Brasil, no time do Solution Center em São Paulo como analista de sistemas. Suas especialidades são Análise de Sistemas, Engenharia e Qualidade de Desenvolvimento de Software.


A associação tem duas formas particulares: a agregação e a composição. As duas são muito parecidas, pois ambas relacionam um objeto composto com suas partes.

Por exemplo, a associação entre um pedido e seus itens é uma composição, a associação entre um carro e suas rodas é uma agregação.

Aposto que você está se perguntando "Mas parece a mesma coisa!". Pois é, parece mesmo. Mas não é.

Tecnicamente as definições para esses 2 tipos de associações são:

Agregação

Os objetos contidos podem existir sem serem parte do objeto que os contém.

Composição

Os objetos contidos não fazem sentido fora do contexto do objeto que os contém.

Então, seguindo o exemplo dado no início, se você destruir o pedido, os itens são destruí­dos juntos, afinal eles não 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 dúvida algumas vezes. Sempre que isso acontece eu opto por usar a agregação que é menos restrita, ou até mesmo uma associação simples.

Na prática como fica?

Para mostrar como fica isso durante o desenvolvimento, vamos usar o bom e velho objeto Pessoa.

Este objeto possui um atributo chamado coração, que por sua vez tem os atributos: arterias, vasos, etc...

Como uma pessoa não vive sem um coração, então temos para a relação pessoa-coração uma composição.

O objeto pessoa também tem um atributo chamado trabalho, que por sua vez os atributos: localização, cnpj, etc..

Você não vive sem o seu trabalho (a não ser que seja milionário), mas ele não deixa de existir se você pedir demissão. Dessa forma temos para a relação pessoa-trabalho temos uma agregacao.

Agora vamos para o código.

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 //Contém varios objetos do tipo pessoa

Podemos ver que no código não muda nada, mas precisamos ter sempre especificado no diagrama de classes qual o tipo da associação utilizada. Assim teremos a visão conceitual da modelagem das funcionalidades.

Espero ter ajudado a todos que tenham dúvidas sobre o assunto!

Artigos relacionados
Links relacionados

Exelente matéria! Parabens! Eu acho apenas que você inverteu o comentário de que pedidos-itenspedidos é uma composiçao pois os itens depende do pedido para existir. Já o carro-rodas seria uma agrecacao, pois a roda pode existir independentemente do carro... Estou certo?
Aguardo uma resposta, e novamente, parabens pelo artigo!
Marcio Muzzi <marcio.muzzi@gmail.com>
Olá Bruno. Acho também que você confundiu os conceito na hora de exemplificar. Claro que isso acontece, afinal você mesmo disse "Até hoje, eu mesmo fico na dúvida algumas vezes".
Monica Galo
É Bruno, artigo interessante, só que houve realmente uma inversão no exemplo, no caso dos carros para as rodas, sao agregação, as rodas existem independente do carro, já os itens para o pedido, eles não podem exitstir por si só, sendo desta forma, uma composição.
regina
eu queria saber sobre a composição de um carro;e ñ foi isto q encontrei!!!!!!!!o artigo fala de outra coisa que eu ñ queria saber,mas ate que ta bom.......
Priscila Pereira <priscila-pcs@hotmail.com>
Olá,gostei muito da sua matéria,me esclareceu realmente.Gostaria de saber sua opnião,com relação ao seguinte caso:
Um banco possui várias agências,isso quer dizer que:uma agência só "vive" se existir um banco? Estou numa dúvida enorme,quanto a isso.Seria uma composição ou agregação?

Grata pela atenção,
Abraços