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:
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:
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.
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.
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.
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.
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.
Considere o seguinte sistema telefônico simples:
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:
-
O Chamador tira o telefone do gancho.
-
O sistema apresenta tom de discagem.
-
O Chamador disca um dígito.
-
O Sistema desliga o tom de discagem.
-
O Chamador disca o restante do número.
-
O sistema analisa os dígitos e determina o endereço de rede do Receptor.
-
O sistema analisa os dígitos, determinando em que local da rede está o Receptor.
-
Em seguida, o sistema determina se um circuito virtual pode ser estabelecido com o Receptor.
-
Em caso positivo, o Sistema toca o telefone do Receptor e apresenta o tom de chamada no telefone do Responsável
pela Chamada.
-
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.
-
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.
-
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).
|