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:
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.
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.
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.
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.
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.
Considere os seguintes esquemas passo a passo para os casos de uso de um simples sistema de telefone:
Fazer Chamada Local
-
O chamador tira o fone do gancho.
-
O sistema apresenta o tom de discagem.
-
O chamador disca um dígito.
-
O sistema desativa o tom de discagem.
-
O chamador insere o restante do número.
-
O sistema analisa o número.
-
O sistema localiza a parte correspondente.
-
O sistema estabelece a conexão das partes.
-
Desconexão das partes.
Fazer Chamada a Longa Distância
-
O chamador tira o fone do gancho.
-
O sistema apresenta o tom de discagem.
-
O chamador disca um dígito.
-
O sistema desativa o tom de discagem.
-
O chamador insere o restante do número.
-
O sistema analisa o número.
-
O sistema envia o número para outro sistema.
-
O sistema estabelece a conexão das linhas.
-
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:
Os casos de uso Fazer Chamada Local e Fazer Chamada Interurbana são herdados do caso de uso abstrato Fazer Chamada.
|