Uma associação representa que duas classes
possuem uma ligação (link) entre elas, significando por exemplo que elas
"conhecem uma a outra", "estão conectadas com", "para
cada X existe um Y" e assim por diante. Classes e associações são muito
poderosas quando modeladas em sistemas complexos.
Associações Normais
O tipo mais comum de associação é apenas
uma conexão entre classes. É representada por uma linha sólida entre duas
classes. A associação possui um nome (junto à linha que representa a associação),
normalmente um verbo, mas substantivos também são permitidos.
Pode-se também colocar uma seta no final da
associação indicando que esta só pode ser usada para o lado onde a seta
aponta. Mas associações também podem possuir dois nomes, significando um nome
para cada sentido da associação.
Para expressar a multiplicidade entre os
relacionamentos, um intervalo indica quantos objetos estão relacionados no
link. O intervalo pode ser de zero para um (0..1), zero para vários (0..* ou
apenas *), um para vários (1..*), dois (2), cinco para 11 (5..11) e assim por
diante. É também possível expressar uma série de números como (1, 4,
6..12). Se não for descrito nenhuma multiplicidade, então é considerado o
padrão de um para um (1..1 ou apenas 1).
Figura
7 – Duas classes se relacionando por associação normal
No exemplo acima vemos um relacionamento
entre as classes Cliente e Conta Corrente se relacionam por associação.
Associação Recursiva
É possível conectar uma classe a ela mesma
através de uma associação e que ainda representa semanticamente a conexão
entre dois objetos, mas os objetos conectados são da mesma classe. Uma associação
deste tipo é chamada de associação recursiva.
Figura
8 – Exemplo de uma associação recursiva
Associação Qualificada
Associações qualificadas são usadas com
associações de um para vários (1..*) ou vários para vários (*). O
"qualificador" (identificador da associação qualificada) especifica
como um determinado objeto no final da associação "n" é
identificado, e pode ser visto como um tipo de chave para separar todos os
objetos na associação. O identificador é desenhado como uma pequena caixa no
final da associação junto à classe de onde a navegação deve ser feita.
Figura
9 – Representação de componentes
Associação Exclusiva
Em alguns modelos nem todas as combinações
são válidas, e isto pode causar problemas que devem ser tratados. Uma associação
exclusiva é uma restrição em duas ou mais associações. Ela especifica que
objetos de uma classe podem participar de no máximo uma das associações em um
dado momento. Uma associação exclusiva é representada por uma linha tracejada
entre as associações que são parte da associação exclusiva, com a
especificação "{ou}" sobre a linha tracejada.
Figura
10 – Exemplo de uma associação exclusiva
No diagrama acima um contrato não pode se
referir a uma pessoa e a uma empresa ao mesmo tempo, significando que o
relacionamento é exclusivo a somente uma das duas classes.
Associação Ordenada
As associações entre objetos podem ter uma
ordem implícita. O padrão para uma associação é desordenada (ou sem nenhuma
ordem específica). Mas uma ordem pode ser especificada através da associação
ordenada. Este tipo de associação pode ser muito útil em casos como este:
janelas de um sistema têm que ser ordenadas na tela (uma está no topo, uma está
no fundo e assim por diante). A associação ordenada pode ser escrita apenas
colocando "{ordenada}" junto a linha de associação entre as duas
classes.
Associação de Classe
Uma classe pode ser associada a uma outra
associação. Este tipo de associação não é conectada a nenhuma das
extremidades da associação já existente, mas na própria linha da associação.
Esta associação serve para se adicionar informações extra a associação já
existente.
Figura
11 – Exemplo de uma associação de classes
A associação da classe Fila com a associação
das classes Cliente e Processo pode ser estendida com operações de adicionar
processos na fila, para ler e remover da fila e de ler o seu tamanho. Se operações
ou atributos são adicionados a associação, ela deve ser mostrada como uma
classe.
Associação Ternária
Mais de duas classes podem ser associadas
entre si, a associação ternária associa três classes. Ela é mostrada como
um grade losango (diamante) e ainda suporta uma associação de classe ligada a
ela, traçaria-se, então, uma linha tracejada a partir do losango para a classe
onde seria feita a associação ternária.
Figura
12 – Exemplo de uma associação ternária
No exemplo acima a associação ternária
especifica que um cliente poderá possuir 1 ou mais contratos e cada contrato
será composto de 1 ou várias regras contratuais.
Agregação
A agregação é um caso particular da
associação. A agregação indica que uma das classes do relacionamento é uma
parte, ou está contida em outra classe. As palavras chaves usadas para
identificar uma agregação são: "consiste em", "contém",
"é parte de".
Figura
13 – Exemplo de uma agregação entre duas classes
Existem tipos especiais de agregação que são
as agregações compartilhadas e as compostas.
·
Agregação Compartilhada: É dita
compartilhada quando uma das classes é uma parte, ou está contida na outra,
mas esta parte pode fazer estar contida na outra várias vezes em um mesmo
momento.
Figura
14 – Exemplo de uma agregação compartilhada
No exemplo acima
uma pessoa pode ser membro de um time ou vários times e em determinado momento.
·
Agregação de Composição: É
uma agregação onde uma classe que está contida na outra "vive" e
constitui a outra. Se o objeto da classe que contém for destruído, as classes
da agregação de composição serão destruídas juntamente já que as mesmas
fazem parte da outra.