Diretriz: Relacionamento de Extensão
O relacionamento de extensão estabelece a conexão entre um caso de uso de extensão e um caso de uso base. Esta diretriz demonstra como utilizar esse relacionamento.
Relacionamentos
Descrição Principal

Explicação

O relacionamento de extensão estabelece a conexão entre um caso de uso de extensão e um caso de uso base. Defina em que parte da base a extensão deve ser inserida, referindo-se a pontos de extensão no caso de uso da base (consulte Diretriz de Produto de Trabalho: Caso de Uso, a discussão sobre pontos de extensão). É comum o caso de uso de extensão ser abstrato, mas não é necessário que seja.

As extensões podem ser usadas para diversas finalidades:

  • Mostrar que uma parte de um caso de uso é um comportamento opcional (ou possivelmente opcional) do sistema. Isso faz a diferenciação entre comportamento opcional e comportamento obrigatório em um modelo.
  • Mostrar que um subfluxo só é executado em determinadas condições (algumas vezes excepcionais), como o disparo de um alarme.
  • Mostrar que pode haver um conjunto de segmentos de comportamento dentre os quais um ou vários podem ser inseridos em um ponto de extensão de um caso de uso base. Os segmentos de comportamento que são inseridos (e a ordem na qual são inseridos) dependerão da interação com os atores durante a execução do caso de uso base.

A extensão é condicional, o que significa que sua execução depende do que tiver acontecido durante a execução do caso de uso base. O caso de uso base não controla as condições da execução da extensão. Essas condições são descritas no relacionamento de extensão. O caso de uso de extensão pode acessar e modificar atributos do caso de uso base. O caso de uso base, porém, não pode ver as extensões nem acessar seus atributos.

O caso de uso base é modificado implicitamente pelas extensões. Também se pode dizer que o caso de uso base define um framework modular ao qual podem ser adicionadas extensões, mas essas extensões específicas não ficam visíveis no caso de uso base.

O caso de uso base deve ser completo em si mesmo, o que significa que deve ser compreensível e fazer sentido sem nenhuma referência a extensões. No entanto, ele não é independente das extensões, já que não pode ser executado sem que as extensões também sejam executadas.

Exemplo:

Diagrama descrito no texto associado.

Os casos de uso Fazer Chamada de Conferência e Mostrar Identificação do Chamador são extensões do caso de uso Fazer Chamada.

Em um sistema telefônico, o principal serviço fornecido aos usuários é representado pelo caso de uso Fazer Chamada. São exemplos de serviços opcionais:

  • Ter a possibilidade de adicionar uma terceira pessoa à chamada (Fazer Chamada de Conferência).

  • Permitir que o receptor veja a identificação do chamador (Mostrar Identificação do Chamador).

Podemos representar os comportamentos necessários para esses serviços opcionais como casos de uso de extensão em relação ao caso de uso base Fazer Chamada. Este é um uso correto do relacionamento de extensão: como Fazer Chamada faz sentido por si só, não é necessário ler as descrições dos casos de uso de extensão para compreender a finalidade principal do caso de uso base e os casos de uso de extensões possuem caractere opcional.

Se tanto o caso de uso da base como o caso de uso da "base mais extensão" precisarem ser explicitamente instanciáveis, ou se você desejar que a inclusão modifique o comportamento no caso de uso da base, utilize a generalização caso-de-uso (consulte Diretriz de Produto de Trabalho: Generalização Caso-de-Uso).

O caso de uso de extensão pode consistir em um ou mais segmentos de inserção, sendo que cada um deles pode ter caminhos alternativos internos. Esses segmentos de inserção modificam gradativamente o comportamento do caso de uso base. Cada segmento de inserção é um caso de uso de extensão que pode ser inserido em um local separado do caso de uso base. Isso significa que o relacionamento de extensão tem uma lista de referências a pontos de extensão, igual em termos de quantidade ao número de segmentos de inserção do caso de uso de extensão. Cada ponto de extensão deve ser definido no caso de uso base.

Um caso de uso base consiste em vários relacionamentos de extensão, o que significa que uma instância de caso de uso pode executar mais de uma extensão durante sua vida útil. Um caso de uso de extensão pode se desdobrar em vários casos de uso base, mas isso não implica que exista qualquer dependência entre os casos de uso base. Pode haver até vários relacionamentos de extensão entre o mesmo caso de uso de extensão e o caso de uso base, contanto que a extensão seja inserida em diferentes locais do caso de uso base. Isso significa que é necessário que os diferentes relacionamentos de extensão façam referência a diferentes pontos de extensão no caso de uso base. Um caso de uso de extensão pode ser, por si só, a base de um relacionamento de extensão, de inclusão ou de generalização. Por exemplo, isso significa que os casos de uso de extensão podem se desdobrar em outros casos de uso de extensão de maneira aninhada.

Executando a Extensão

Quando uma instância de caso de uso que esteja executando o caso de uso base atingir um local nesse caso de uso em que tenha sido definido um ponto de extensão, a condição do relacionamento de extensão correspondente será avaliada. Se a condição for verdadeira ou se estiver ausente, a instância de caso de uso executará a extensão (ou o segmento de inserção nela contido que corresponde ao ponto de extensão). Se a condição do relacionamento de extensão for falsa, a extensão não será executada.

O caso de uso de extensão, assim como qualquer caso de uso, pode ter um fluxo básico de eventos e fluxos alternativos de eventos (consulte Diretriz de Produto de Trabalho: Caso de Uso, a discussão sobre a estrutura de fluxo de eventos). O caminho exato que a instância de caso de uso percorrerá na extensão dependerá não só do que tiver acontecido antes da execução (o estado da instância de caso de uso), mas também do que acontecerá na interação com os atores à medida que a extensão for executada. Depois que a instância de caso de uso tiver executado a extensão, ela volta a executar o caso de uso base no ponto em que o havia deixado.

Diagrama descrito no texto associado.

Uma instância de caso de uso executando um caso de uso base e sua extensão.

Um caso de uso de extensão pode ter mais de um segmento de inserção, cada um deles relacionado ao seu próprio ponto de extensão no caso de uso base. Se for este o caso, a instância de caso de uso retoma o caso de uso base e continua a executá-lo até o próximo ponto de extensão especificado no relacionamento de extensão. Nesse ponto, ela executará o próximo segmento de inserção do caso de uso de extensão. Esse processo se repete até que o último segmento de inserção tenha sido executado. Observe que a condição do relacionamento de extensão é verificada apenas no primeiro ponto de extensão. Se ela for verdadeira, a instância de caso de uso deverá executar todos os segmentos de inserção.

Diagrama descrito no texto associado.

Uma instância de caso de uso executando um caso de uso base e um caso de uso de extensão, o último com dois segmentos de inserção.

A multiplicidade do relacionamento de extensão restringirá o número de repetições possíveis de toda a extensão. Observe que é a extensão inteira é repetida (e limitada pela multiplicidade), não apenas um segmento de inserção.

Documentando a Relação de Extensão Para o início da página

Descreva a condição da extensão em termos de atributos do caso de uso base. Você também pode optar por omitir a condição. Nesse caso, a extensão será executada sempre.

Cada relacionamento de extensão tem uma lista de referências a pontos de extensão (um ou mais) do caso de uso base. Esses pontos de extensão são referenciados pelo nome. Se o caso de uso de extensão tiver vários segmentos de inserção, é necessário especificar quais segmentos correspondem a cada ponto de extensão. É necessário também especificar os passos ou subfluxos do caso de uso de extensão que constituem cada segmento de inserção.

Exemplo:

Em um sistema telefônico, o caso de uso Fazer Chamada pode ser estendido pelo caso de uso abstrato Mostrar Identificação do Chamador. Este é um serviço opcional, referido muitas vezes como "ID do Responsável pela Chamada", que pode ou não ter sido solicitado pelo receptor. A descrição do relacionamento de extensão entre Mostrar Identificação do Chamador e Fazer Chamada pode ter a seguinte configuração:

Condição: O receptor deve ter solicitado o serviço "ID do Responsável pela Chamada".

Ponto(s) de Extensão: Mostrar Identidade - inserir todo o caso de uso Mostrar Identidade do Responsável pela Chamada.

É possível atribuir uma multiplicidade ao relacionamento de extensão. Se ela for omitida, pressupõe-se que a multiplicidade é um.

Exemplo de Uso

Considere o seguinte sistema telefônico simples:

Diagrama descrito no texto associado.

O caso de uso abstrato Fazer Chamada de Conferência é uma extensão do caso de uso Fazer Chamada.

Neste modelo, uma representação simples do serviço de chamada básico de nosso conhecido sistema telefônico está descrita no caso de uso Fazer Chamada. Um resumo passo a passo do fluxo básico de eventos pode ter a seguinte configuração:

  1. O Chamador tira o telefone do gancho.
  2. O sistema apresenta tom de discagem.
  3. O Chamador disca um dígito.
  4. O Sistema desliga o tom de discagem.
  5. O Chamador disca o restante do número.
  6. O sistema analisa os dígitos e determina o endereço de rede do Receptor.
  7. O sistema analisa os dígitos, determinando em que local da rede está o Receptor.
  8. Em seguida, o sistema determina se um circuito virtual pode ser estabelecido com o Receptor.
  9. Em caso positivo, o Sistema toca o telefone do Receptor e apresenta o tom de chamada no telefone do Responsável pela Chamada.
  10. Quando o Receptor atender ao telefone, o sistema desativará o tom de chamada no telefone do Responsável pela Chamada, irá parar de tocar telefone do Receptor e concluirá o circuito virtual.
  11. O sistema inicia um registro de faturamento, registrando a hora de início da chamada, os pontos de extremidade da chamada e as informações do cliente referentes ao Responsável pela Chamada.
  12. A chamada prossegue durante um determinado tempo. Quando o Chamador ou o Receptor encerra a chamada, o sistema registra a hora de término da chamada e libera todos os recursos necessários para suportar o circuito virtual. O caso de uso está concluído.

Para incluir funcionalidade nesse sistema que permita que o responsável pela chamada ou o receptor conecte uma terceira parte à chamada (geralmente é denominado "chamada de conferência", é necessário incluir comportamento no fluxo de eventos. Uma alternativa - a primeira a ser considerada - é colocar as diferenças diretamente no caso de uso Fazer Chamada. Poderíamos modelar essas diferenças utilizando fluxos alternativos de eventos, conforme descrito em Diretriz de Produto de Trabalho: Caso de Uso. Essa solução funciona na maior parte das adições simples, nas quais a funcionalidade adicionada não confundirá nem tornará obscuro o significado original do caso de uso. A outra alternativa é separar as diferenças em um caso de uso de extensão abstrato denominado Fazer Chamada de Conferência, que é uma extensão do caso de uso base.

O caso de uso Fazer Chamada teria a seguinte adição:

Pontos de extensão:
A
chamada de conferência
ocorre após a etapa 11.

O caso de uso de extensão - Fazer Chamada de Conferência - poderia ser descrito como:

Caso de Uso Fazer Chamada de Conferência
Este caso de uso estende Fazer Chamada.  Ele é inserido no ponto de extensão Chamada de Conferência.
Fluxo Básico:
1. O responsável pela chamada pressiona o botão de desligamento, de link ou de flash.
2. O sistema gera 3 sinais sonoros curtos para reconhecimento.
3..12.<estas etapas são idênticas às etapas 3..12 do caso de uso da base>
13. O responsável pela chamada é reconectado ao receptor do caso de uso Fazer Chamada.

Não é desejável que as etapas 3..12 sejam idênticas às do caso de uso base.  Uma maneira de resolver isso é separar a parte comum e tratá-la como um caso de uso de inclusão (consulte Diretriz de Produto de Trabalho: Relação de Inclusão).