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

Associação

Uma associação modela uma conexão semântica bidirecional entre instâncias.
Tópicos

Associações Início da página

As associações representam relacionamentos estruturais entre objetos de diferentes classes. Elas representam conexões entre instâncias de duas ou mais classes que existem durante algum tempo. Compare isso com links transientes que, por exemplo, existem somente durante uma operação. Essas situações podem também podem ser modeladas através de colaborações, nas quais os links existem somente em determinados contextos limitados.

É possível usar associações para mostrar que os objetos têm conhecimento de outros objetos. Algumas vezes, os objetos precisam manter referências entre si para conseguir interagir; por exemplo, para enviar mensagens para outros objetos. Portanto, em alguns casos, as associações podem seguir padrões de interação em diagramas de seqüência ou de colaboração.

Nomes de Associações Início da página

A maioria das associações é binária (existe entre exatamente duas classes) e é desenhada como linhas cheias que conectam pares de símbolos de classe. Uma associação pode ter um nome ou os papéis da associação podem ter nomes. Nomes de papéis são preferíveis, pois transmitem mais informações. Nos casos em que somente um dos papéis possa ser nomeado, os papéis ainda são preferíveis a nomes de associações, desde que a associação seja unidirecional, começando a partir do objeto ao qual o nome do papel está associado.

As associações costumam ser nomeadas durante a análise, antes que existam informações suficientes para nomear os papéis corretamente. Quando usados, os nomes de associações devem refletir a finalidade do relacionamento e ser uma expressão verbal. O nome da associação é colocado no caminho da associação ou adjacente a ele.

Exemplo

Em um Caixa Eletrônico, a Gaveta de Dinheiro fornece o dinheiro que o Dispensador de dinheiro distribui. Para que o Dispensador de dinheiro consiga distribuir dinheiro, ele precisa manter uma referência para o objeto Gaveta de Dinheiro. Do mesmo modo, se a Gaveta de Dinheiro ficar sem dinheiro, o objeto Dispensador de dinheiro deve ser notificado; por isso, a Gaveta de Dinheiro deve manter uma referência para o Dispensador de dinheiro. Uma associação modela essa referência.

um exemplo de nome de associação

Uma associação entre o Dispensador de dinheiro e a Gaveta de Dinheiro, denominada fornece o Valor.

Se mal escolhidos, os nomes de associações podem ser confusos e enganosos. Este exemplo ilustra nomeações satisfatórias e insatisfatórias. No primeiro diagrama, embora os nomes de associações estejam sintaticamente corretos (usando expressões verbais), não transmitem muitas informações sobre o relacionamento. No segundo diagrama, os nomes de papéis usados transmitem muito mais em termos da natureza da participação na associação.

Exemplos de uso satisfatório e insatisfatório de nomes de associações e de papéis

Papéis Início da página

Cada extremidade de uma associação é um papel que especifica a função que uma classe desempenha na associação. Cada papel precisa ter um nome, e os nomes de papéis opostos a uma classe precisam ser únicos. O nome do papel deve ser um substantivo que indique o papel do objeto associado em relação ao objeto associativo. Um nome de papel adequado para um Professor em uma associação com uma Matéria do Curso seria palestrante, por exemplo. Evite nomes como "tem" e "contém", já que eles não acrescentam nenhuma informação sobre quais são os relacionamentos entre as classes.

Observe que o uso de nomes de associações e nomes de papéis é mutuamente exclusivo: não se usa um nome de associação e um nome de papel. Nomes de papéis são preferíveis a nomes de associações, exceto nos casos em que existam informações insuficientes para nomear o papel corretamente (como costuma ser o caso na análise; no design, deve-se sempre usar nomes de papéis). A ausência de um nome de papel satisfatório sugere um modelo incompleto ou malformado.

O nome de papel é colocado próximo à extremidade da linha de associação.

Exemplo

Considere os relacionamentos entre classes em um sistema de entrada de pedidos. Um Cliente pode ter dois tipos diferentes de Endereços: um para onde as cobranças são enviadas e outros para os quais os pedidos podem ser enviados. Como resultado, temos duas associações entre Cliente e Endereço, conforme mostrado a seguir. As associações são rotuladas com o papel que o endereço associado desempenha para o Cliente.

exemplos de associações

Associações entre Cliente, Endereço e Pedido mostrando nomes de papéis e multiplicidades

Multiplicidade Início da página

Para cada papel, é possível especificar a multiplicidade de sua classe e quantos objetos da classe podem ser associados a um objeto da outra classe. A multiplicidade é indicada por uma expressão de texto no papel. A expressão é uma lista com intervalos de números inteiros separados por vírgula. Um intervalo é indicado por um número inteiro (o valor menor), dois pontos e um número inteiro (o valor maior). Um único número inteiro é um intervalo válido e o símbolo '*' significa "muitos", ou seja, um número ilimitado de objetos. O símbolo '*' equivale a '0..*', ou seja, qualquer número, incluindo zero. Esse é o valor padrão. Um papel escalar opcional tem a multiplicidade 0..1.

Exemplo

No exemplo anterior, as multiplicidades foram mostradas para as associações entre Pedido e Cliente e entre Cliente e Endereço. Interpretando o diagrama, vemos que um Pedido precisa ter um Cliente associado (a multiplicidade é 1..1 na extremidade Cliente), mas um Cliente pode não ter nenhum Pedido (a multiplicidade é 0..* na extremidade Pedido). Além disso, um Cliente tem apenas um endereço de cobrança, mas um ou mais endereços para envio. Para reduzir a confusão notacional, se as multiplicidades forem omitidas, pressupõe-se que elas são 1..1.

Navegabilidade Início da página

A propriedade de navegabilidade em um papel indica se é possível navegar de uma classe de associação para a classe de destino usando a associação. Isso pode ser implementado de várias maneiras: por referências diretas a objetos, por matrizes associativas, por tabelas hash ou por qualquer outra técnica de implementação que permita que um objeto faça referência a um outro. A navegabilidade é indicada por uma seta aberta, colocada na extremidade de destino da linha de associação, próximo à classe de destino (para a qual está sendo feita a navegação). O valor padrão da propriedade de navegabilidade é verdadeiro.

Exemplo

No exemplo de entrada de pedidos, a associação entre o Pedido e o Cliente é navegável nas duas direções: um Pedido precisa saber qual Cliente fez o Pedido e o Cliente precisa saber que Pedidos fez. Quando nenhuma seta for exibida, pressupõe-se que a associação é navegável nas duas direções.

No caso das associações entre Cliente e Endereço , o Cliente precisa saber seus Endereços, mas os Endereços não têm nenhum conhecimento de quais Clientes (ou outras classes, já que muitas possuem endereços) estão associados a cada um deles. Como resultado, a propriedade de navegabilidade da extremidade Cliente da associação é desativada, resultando no diagrama a seguir:

exemplos de navegabilidade em associações

As classes Sistema de Entrada de Pedidos Atualizado, que mostram a navegabilidade de associações.

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

Algumas vezes, uma classe possui uma associação com ela mesma. Isso não significa necessariamente que uma instância dessa classe possua uma associação com ela mesma. O mais comum é que isso signifique que uma instância da classe tem associações com outras instâncias da mesma classe. No caso de auto-associações, os nomes de papéis são essenciais para distinguir a finalidade da associação.

Exemplo

Considere a seguinte auto-associação envolvendo a classe Funcionário:

exemplo de uma auto-associação

Nesse caso, um funcionário pode ter uma associação com outros. Se tiver, ele é um gerente e os outros funcionários são membros de sua equipe. A associação é navegável nas duas direções, já que os funcionários conhecem seu gerente e um gerente conhece sua equipe.

Associações Múltiplas Início da página

O desenho de duas associações entre classes significa que os objetos estão relacionados duas vezes; um determinado objeto pode estar vinculado a objetos diferentes por meio de cada associação. Cada associação é independente e pode ser diferenciada pelo nome do papel. Como mostrado acima, um Cliente pode ter associações com diferentes instâncias da mesma classe, cada uma com diferentes nomes de papéis.

Ordenação de Papéis Início da página

Quando a multiplicidade de uma associação é maior que um, as instâncias associadas podem ser ordenadas. A propriedade ordenada em um papel indica se as instâncias que participam da associação estão ordenadas. Por padrão, elas são um conjunto não ordenado. O modelo não especifica como a ordenação é mantida. As operações que atualizam uma associação ordenada precisam especificar onde os elementos atualizados serão inseridos.

Links Início da página

As instâncias individuais de uma associação são denominadas links. Um link, portanto, é um relacionamento entre instâncias. As mensagens podem ser enviadas em links, e os links podem indicar referências e agregações entre objetos. Consulte Diretrizes: Diagrama de Colaboração para obter mais informações.

Classes de Associação Início da página

Uma classe de associação é uma associação que também tem propriedades de classe (como atributos, operações e associações). Ela é mostrada por uma linha pontilhada traçada do caminho de associação para um símbolo de classe que contém atributos, operações e associações para a associação. Os atributos, as operações e as associações se aplicam à própria associação original. Cada link na associação tem as propriedades indicadas. O mais comum é as classes de associação serem usadas na reconciliação de relacionamentos muitos-para-muitos (consulte o exemplo a seguir). Em princípio, os nomes da associação e da classe devem ser iguais, mas nomes separados são permitidos, se necessário. Uma classe de associação corrompida contém somente atributos para a associação. Nesse caso, o nome da classe de associação pode ser omitido, deixando de enfatizar sua separação.

Exemplo

Expandindo o exemplo anterior do Funcionário, considere o caso em que um Funcionário (uma pessoa da equipe) trabalha para um outro Funcionário (um gerente). O gerente executa uma avaliação periódica dos membros da equipe, refletindo seu desempenho durante um determinado período de tempo.

A avaliação não pode ser um atributo apenas do gerente ou do membro da equipe, mas podemos associar as informações com a própria associação, conforme mostrado a seguir:

exemplo de uma classe de associação

A classe de associação Avaliação captura informações relacionadas com a própria associação

Associações Qualificadas Início da página

Qualificadores são usados para restringir e definir ainda mais o conjunto de instâncias associadas a uma outra instância. Um objeto e um valor de qualificador identificam um conjunto único de objetos na associação, formando uma chave composta. Normalmente, a qualificação reduz a multiplicidade do papel oposto. A multiplicidade líquida mostra o número de instâncias da classe relacionada associadas à primeira classe e um determinado valor qualificador. Os qualificadores são desenhados como pequenas caixas na extremidade da associação, anexados à classe qualificadora. Eles fazem parte da associação, não da classe. Uma caixa qualificadora pode conter vários valores de qualificador. A qualificação se baseia na lista inteira de valores. Uma associação qualificada é uma variante do atributo de associação.

Exemplo

Considere o seguinte refinamento da associação entre Item de Linha e Produto: um Item de Linha tem uma associação com o Produto que é pedido. Cada Item de Linha se refere a somente um Produto, embora um Produto possa ser pedido em muitos Itens de Linha. Ao qualificar a associação com o qualificador ProductCode, indicamos também que cada produto possui um código de produto único e que Itens de Linha estão associados a Produtos que usam esse código de produto.

uma associação qualificada

A associação entre Item de Linha e Produto possui o qualificador ProductCode.

Associações Enárias Início da página

Uma associação enária é uma associação entre três ou mais classes, na qual uma única classe pode aparecer mais de uma vez. As associações enárias são representadas por grandes losangos com um caminho de associação para cada classe participante. Esse é o símbolo tradicional do modelo relacionamento-entidade para uma associação. A forma binária é representada sem o losango para ficar mais compacta, já que são a parte maior das associações em um modelo real. As associações enárias são relativamente raras e também podem ser modeladas, promovendo-as a classes. Elas também podem ter uma classe de associação. Isso é mostrado através de uma linha pontilhada traçada do losango até o símbolo da classe. Os papéis podem ter nomes de papéis, mas a multiplicidade é mais complicada e pode ser melhor especificada listando sugestões de chaves. Se fornecida, a multiplicidade representa o número de instâncias que correspondem a uma determinada tupla de outros N-1 objetos. A maioria dos usos das associações enárias pode ser eliminada usando associações qualificadas ou classes de associação. Elas também podem ser substituídas por classes comuns, embora assim se perca a restrição de que somente um link possa ocorrer para uma determinada tupla de objetos participantes.

Copyright  © 1987 - 2001 Rational Software Corporation


Exibir o Rational Unified Process usando quadros

Rational Unified Process