Diretriz: Generalização de Casos de Uso
A generalização é utilizada quando você encontra dois ou mais casos de uso que têm comportamento, estrutura e finalidade comuns. Esta diretriz demonstra como utilizar esse relacionamento.
Relacionamentos
Descrição Principal

Explicação

Um caso de uso pai pode ser especializado em um ou mais casos de uso filho que representam formas mais específicas do pai. Nem o pai, nem o filho são necessariamente abstratos, embora o pai seja abstrato na maioria dos casos. Um filho herda a estrutura, o comportamento e os relacionamentos do pai. Todos os filhos do mesmo pai são especializações do pai. Essa é a maneira como a generalização se aplica aos casos de uso (para obter informações adicionais sobre como o conceito de generalização se aplica às classes, consulte a Diretriz: Generalização).

A generalização é utilizada quando você encontra dois ou mais casos de uso que têm comportamento, estrutura e finalidade comuns. Quando isso ocorre, você pode descrever as partes compartilhadas em um caso de uso novo, geralmente abstrato, que é especializado pelos casos de uso filho.

Exemplo:

Diagrama descrito na legenda.

Os casos de uso Ordem por Telefone e Ordem pela Internet são especializações do caso de uso abstrato Inserir Ordem.

Em um sistema de Gerenciamento de Ordens, os casos de uso Ordem por Telefone e Ordem pela Internet compartilham muito na estrutura e no comportamento. Um caso de uso geral Inserir Ordem é definido onde essa estrutura e esse comportamento comum são definidos. O caso de uso abstrato Inserir Ordem não precisa ser completo por si mesmo, mas fornece uma estrutura comportamental geral que os casos de uso filho podem completar.

O caso de uso pai não é sempre abstrato.

Exemplo:

Considere o sistema de Gerenciamento de Ordens no exemplo anterior. Informe que deseja adicionar um agente Responsável pelo Registro da Ordem, que pode inserir ordens no sistema em nome de um cliente. Esse agente inicia o caso de uso Inserir Ordem, que agora deve ter um fluxo completo de eventos descrito para ele. Os casos de uso filho podem adicionar comportamento à estrutura que o caso de uso pai fornece e também modificar o comportamento do pai.

Diagrama descrito na legenda.

O agente Responsável pelo Registro da Ordem pode instanciar o caso de uso geral Inserir Ordem. Esse caso de uso também pode ser especializado pelos casos de uso Ordem por Telefone ou Ordem pela Internet.

O caso de uso filho depende da estrutura (consulte a Diretriz: Caso de Uso, a discussão sobre a estrutura do fluxo de eventos) do caso de uso pai. O caso de uso filho pode adicionar um comportamento adicional ao pai inserindo os segmentos de comportamento no comportamento herdado ou declarando relacionamentos de inclusão estendidos para o caso de uso filho. O filho pode modificar os segmentos de comportamento herdado do pai, mas isso precisa ser feito com cuidado para que o propósito do pai seja preservado. A estrutura do caso de uso pai é preservada pelo filho. Isso significa que todos os segmentos de comportamento, descritos como etapas ou subfluxos do fluxo de eventos do pai, ainda devem existir, mas o conteúdo desses segmentos de comportamento pode ser modificado pelo filho.

Se o pai é um caso de uso abstrato, ele pode ter segmentos de comportamento incompletos. O filho deve completar esses segmentos de comportamento e torná-los significativos para o agente.

Um caso de uso pai não precisa ter um relacionamento com um agente, se for um caso de uso abstrato.

Se dois casos de uso filho adotam o mesmo pai (ou base), as especializações são independentes uma da outra, o que significa que são executadas em instâncias de casos de uso separadas. Isso é diferente dos relacionamentos de extensão ou de inclusão, em que várias adições modificam implícita ou explicitamente uma instância de casos de uso que executa o mesmo caso de uso base.

Tanto a generalização de casos de uso quanto a de inclusão podem ser utilizadas para reutilizar o comportamento entre os casos de uso no modelo. A diferença é que com a generalização de casos de uso, a execução dos filhos depende da estrutura e do comportamento do pai (a parte reutilizada), enquanto em um relacionamento de inclusão, a execução do caso de uso base depende apenas do resultado da função que o caso de uso de inclusão (a parte reutilizada) executa. Outra diferença é que, em uma generalização, os filhos compartilham similaridades em finalidade e em estrutura, enquanto no relacionamento de inclusão, os casos de uso base que estão reutilizando a mesma inclusão podem ter finalidades completamente diferentes, mas precisam que a mesma função seja executada.

Executando a Generalização de Casos de Uso

Uma instância de caso de uso que executa um caso de uso filho seguirá o fluxo de eventos descritos para o caso de uso pai, inserindo um comportamento adicional e modificando o comportamento da maneira definida no fluxo de eventos do caso de uso filho.

Diagrama descrito na legenda.

A instância de casos de uso segue o caso de uso pai, com o comportamento inserido ou modificado da maneira descrita no caso de uso filho.

Descrevendo a Generalização de Casos de Uso

Em geral, você não descreve o próprio relacionamento de generalização. Em vez disso, no fluxo de eventos do caso de uso filho, você especificará como os novos passos são inseridos no comportamento herdado e como o comportamento herdado é modificado.

Se o filho estiver adotando mais de um pai (várias heranças), você deve estabelecer explicitamente na especificação do filho como as seqüências de comportamento dos pais são intercaladas no filho.

Exemplo de Uso

Considere os seguintes esquemas passo a passo para os casos de uso de um simples sistema de telefone:

Fazer Chamada Local

  1. O chamador tira o fone do gancho.
  2. O sistema apresenta o tom de discagem.
  3. O chamador disca um dígito.
  4. O sistema desativa o tom de discagem.
  5. O chamador insere o restante do número.
  6. O sistema analisa o número.
  7. O sistema localiza a parte correspondente.
  8. O sistema estabelece a conexão das partes.
  9. Desconexão das partes.

Fazer Chamada a Longa Distância

  1. O chamador tira o fone do gancho.
  2. O sistema apresenta o tom de discagem.
  3. O chamador disca um dígito.
  4. O sistema desativa o tom de discagem.
  5. O chamador insere o restante do número.
  6. O sistema analisa o número.
  7. O sistema envia o número para outro sistema.
  8. O sistema estabelece a conexão das linhas.
  9. Desconexão das partes.

O texto em azul é muito semelhante nos dois casos de uso. Se os dois casos são tão semelhantes, é necessário considerar a mesclagem dos dois em um, onde os subfluxos alternativos mostram a diferença entre as chamadas locais e as chamadas interurbanas.

Se, entretanto, a diferença entre eles tiver algum significado e houver um valor que exiba claramente o relacionamento entre chamada local e chamada interurbana no modelo de casos de uso, será possível extrair o comportamento comum em um novo caso de uso mais geral, denominado Fazer Chamada.

Em um diagrama de casos de uso, o relacionamento da generalização criado será ilustrado da seguinte maneira:

Diagrama descrito na legenda.

Os casos de uso Fazer Chamada Local e Fazer Chamada Interurbana são herdados do caso de uso abstrato Fazer Chamada.