Artefatos > Conjunto de Artefatos de Análise e Design > Modelo de Design... > Modelo de Design > Diretrizes > Agregação

associação de agregação

Agregação

Uma agregação é uma forma especial de associação que modela um relacionamento de inclusão entre um agregado (o todo) e suas partes.
Tópicos

Agregação Início da página

A agregação é usada para modelar um relacionamento de composição entre elementos do modelo. Podem haver muitos exemplos de relacionamento de composição: uma Biblioteca contém Livros; dentro de uma empresa, Departamentos são constituídos de Funcionários; um Computador é formado por vários Dispositivos. Para modelar isso, o (Departamento) agregado possui uma associação de agregação com suas partes integrantes (Funcionário).

Um losango vazado é anexado à extremidade de um caminho de associação ao lado do agregado (o todo) para indicar agregação.

Exemplo

Nesse exemplo, um Cliente possui um Endereço. Usamos agregação, pois as duas classes representam parte de um todo maior. Também escolhemos modelar Endereço como uma classe separada, já que muitos outros elementos possuem endereços também.

exemplo de agregação

Um objeto agregado pode manter outros objetos juntos.

Agregação Compartilhada Início da página

Um relacionamento de agregação que possua uma multiplicidade maior que a estabelecida para o agregado é denominado compartilhado. A destruição do agregado não destrói necessariamente as partes. Por dedução, uma agregação compartilhada forma um gráfico ou uma árvore com várias raízes. As agregações compartilhadas são usadas em casos em que haja um forte relacionamento entre duas classes, para que a mesma instância possa participar de duas agregações diferentes.

Exemplo

Considere o caso em que uma pessoa possui uma empresa em casa. Tanto a Pessoa como a Empresa possuem um endereço. Na realidade, é o mesmo endereço. O Endereço é parte integrante tanto da Pessoa como da Empresa. Mesmo que a Empresa deixe de existir, espera-se que a Pessoa continue no mesmo endereço.

Observe também que, nesse caso, a agregação compartilhada pode ser iniciada e convertida mais tarde em agregação não-compartilhada. A empresa sediada em casa pode crescer e prosperar, podendo até mesmo acabar ocupando uma sede separada. Nesse instante, a Pessoa e a Empresa não compartilham mais o mesmo endereço. Conseqüentemente, a agregação não é mais compartilhada.

exemplo de agregação

Um exemplo de agregação compartilhada.

Composição Início da página

Composição é uma forma de agregação com propriedade total e vida útil coincidente como parte do agregado. A multiplicidade da extremidade do agregado (no exemplo, o Pedido) pode não exceder um (ou seja, não pode ser compartilhada). A agregação também é inalterável, ou seja, depois de estabelecida, seus links não podem ser alterados. Por dedução, uma agregação composta forma uma "árvore" de partes, com a raiz sendo o agregado e os "galhos" formando as partes.

Use uma agregação de composição em vez de uma agregação "simples" quando existir relacionamento de interdependência total entre o agregado e as partes, no qual a definição do agregado ficaria incompleta sem as partes. No exemplo apresentado abaixo, faz sentido ter um Pedido mesmo que houver nada esteja sendo pedido (ou seja, Itens de Linha). Em alguns casos, a interdependência pode ser identificada desde a análise (como no caso desse exemplo), mas o mais comum é que tais decisões só possam ser tomadas com segurança após o design.

Um losango totalmente preenchido é anexado à extremidade de um caminho de associação para indicar composição, como mostrado a seguir:

agregação de composição

Um exemplo de agregação de composição.

Exemplo

Nesse exemplo, a Interface do Cliente é composta por várias outras classes. As multiplicidades das agregações ainda não estão especificadas.

um exemplo de agregação de composição

O objeto Interface do Cliente sabe quais objetos Vídeo, Impressora de Recibo, Teclado Numérico e Alto-falante pertencem a ele.

Uso da Composição para Modelar Propriedades de Classe Início da página

A propriedade de uma classe é algo que a classe conhece. Como no caso da classe Cliente mostrada acima, é possível modelar o Endereço do Cliente como uma classe (como já mostramos) ou como um conjunto de atributos da classe. A decisão sobre usar um conjunto de atributos ou uma classe e a relação de agregação depende dos seguintes itens:

  • As 'propriedades' precisam ter identidade independente, fazendo com que vários objetos as usem como referência? Nesse caso, use uma classe e agregação.
  • Várias classes precisam ter as mesmas 'propriedades'? Nesse caso, use uma classe e agregação.
  • As 'propriedades' possuem uma estrutura complexa e propriedades próprias? Nesse caso, use uma classe (ou classes) e agregação.
  • Caso contrário, use atributos.

Exemplo

Em um Caixa Eletrônico, o sistema precisa se manter informado sobre os clientes atuais e seus números de identificação pessoal. Vamos supor que a Interface do Cliente seja responsável por isso. Essas informações podem ser vistas como "propriedades" da classe. Isso pode ser feito usando uma classe separada, como mostrado abaixo:

propriedades modeladas usando agregação

Propriedades de objeto modeladas através de Agregação

A alternativa - fazer com que a Interface do Cliente se mantenha informada sobre os Clientes atuais e seus números de identificação pessoal através de atributos - é modelada da seguinte forma:

propriedades modeladas usando atributos

Propriedades de Objeto modeladas usando Atributos

A decisão de usar atributos ou uma associação de agregação para uma classe separada é determinada com base no grau de acoplamento entre os conceitos que estão sendo representados. Quando os conceitos que estão sendo modelados estiverem intrinsecamente conectados, use atributos. Quando houver alguma possibilidade de que os conceitos sejam alterados de forma independente, use agregação.

Agregação ou Associação? Início da página

A agregação deve ser usada somente nos casos em que haja um relacionamento de composição entre classes, em que uma classe seja composta de outras classes, em que as "partes" fiquem incompletas fora do contexto do todo. Considere o caso de um Pedido. Não faz sentido ter um pedido que esteja "vazio" e que não consista em "nada". O mesmo vale para todos os agregados: Departamentos devem ter Funcionários, Famílias devem ter Membros da Família, e assim por diante.

Se as classes puderem ter identidade independente fora do contexto fornecido por outras classes e se elas não forem partes de algum todo maior, o relacionamento de associação deve ser usado. Quando estiver em dúvida, lembre-se de que uma associação é sempre mais adequada. As agregações geralmente são óbvias e a escolha da agregação é feita somente para ajudar a esclarecer. Não é algo vital para o sucesso do esforço de modelagem.

Auto-Agregações Início da página

Algumas vezes, uma classe pode ser agregada a ela mesma. Isso não significa que uma instância dessa classe seja formada por si própria (isso seria tolice), mas sim que uma instância da classe é um agregado composto de outras instâncias da mesma classe. No caso de auto-agregações, nomes de papéis são essenciais para distinguir a finalidade da associação.

Exemplo

Considere a auto-agregação a seguir que envolve a classe Produto:

exemplo de auto-agregação

Nesse caso, um produto pode ser formado por outros produtos. Quando isso acontece, os produtos agregados são denominados subprodutos. A associação é navegável somente do agregado para o subproduto, ou seja, os subprodutos não sabem de quais produtos eles fazem parte (já que podem fazer parte de muitos produtos).

Copyright  © 1987 - 2001 Rational Software Corporation


Exibir o Rational Unified Process usando quadros

Rational Unified Process