Ponto de Extensão

O ponto de extensão (PE) é o relacionamento de comunicação que é estabelecida entre um caso de uso de extensão com um caso de uso base. Definimos qual será a parte do caso de uso base que deverá ser tratado com uma extensão e no caso de uso base inserimos a referencia deste ponto para um novo caso de uso que será tratado como ponto de extensão. É comum o caso de uso de extensão ser abstrato, mas não é necessário que seja, diferente do caso de uso base que normalmente é concreto.

Podemos utilizar o(s) PE’s para diversas finalidades:
1.   Podemos demostrar 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.
Exemplo: Tenho um caso de uso muito grande onde existem vários fluxos alternativos, alguns destes fluxos alternativas que existir contém uma grande quantidade de subfluxo (fluxo alternativo do fluxo alternativo) neste caso podemos aplica-lo com um ponto de extensão, criando a partir dele outro caso de uso, com isso facilitaremos na construção e nas manutenções futuras.

2.   Podemos demostrar que um subfluxo só é executado em determinadas condições (algumas vezes excepcionais), como o disparo de um alarme.
Exemplo: Tenho uma regra de negócio, dependendo da ação definida na regra deverá executar uma ou varias funcionalidades em caso de alguma condição deverá realizar um procedimento que pode acabar gerando vários fluxo, neste caso podemos criar pontos de extensão (PE) conforme cada condição da regra.

3.   Podemos demostrar 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.
Exemplo: Tenho uma funcionalidade onde não são todos os atores que terão permissão a todas as ações, definimos neste nosso exemplo a existência de uma funcionalidade base MANTER USUÁRIO que contém as funcionalidades 1-pesquisar, 2-cadastrar, 3-visualizar, 4-alterar, 5-excluir e 6-definir acessos, podemos colocar no nosso caso de uso base todos os atores que poderão realizar os 6 fluxos e no ponto de extensão (PE) com algumas exceções.
Tenho os atores Administrador, Logístico e Financeiro, colocaremos os 3 com acesso ao caso de uso Manter Usuário, assim todos terão acesso nas 6 funcionalidades, porém na funcionalidade “6-definir acessos” executo o ponto de extensão (PE), assim ao iniciar o caso de uso poderei informar que aquela funcionalidade especifica só o ator Administrador terá acesso, evitando a criação de um regra de negócio genérica para atender o fluxo. Neste caso como boa prática, podemos no ícone e/ou link que aciona este ponto de extensão aplicar uma regra de apresentação para desabilitar/ocultar o mesmo para os outros atores.

4.   Podemos demostrar que um subfluxo é utilizado em vários casos de uso.
Exemplo: Tenho uma funcionalidade que irei precisar utiliza-la em vários lugares no sistema, definimos neste nosso exemplo a existência de uma funcionalidade MANTER COMUNICAÇÃO, que contém as funcionalidades 1-pesquisar pessoa (pesquisar as pessoas que preciso enviar um comunicado, presumindo que ela já esteja cadastrada no sistema), 2-cadastrar comunicação (escrever o comunicado que desejo enviar), 3-visualizar comunicação (visualizar os comunicados que já enviei, para quem e de que forme foi enviado), 4-enviar e-mail (envia e-mail para uma pessoa) e 5-enviar SMS (envia SMS para uma pessoa), para este exemplo as funcionalidades 4-enviar e-mail e 5-enviar SMS, poderia criar um ponto de extensão, gerando um caso de uso para ambos, sabendo que poderia futuramente precisar, assim não precisaria reescrever algo que já existe.
Utilizando o item 3 que estar a cima, onde temos o manter usuário poderia depois criar no caso de uso base dele uma fluxo alternativo enviar e-mail para o usuário assim que ele for cadastrado e/ou quando ele tiver acesso, executaria o ponto de extensão para a funcionalidade 4-enviar que é um caso de uso abstrato, não precisaria escrever novamente a funcionalidade enviar e-mail.

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, portanto é necessário haver rastreabilidade dos mesmos. 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 deve ser completo em si mesmo, significa que deve ser compreendido e ter sentido sem nenhuma dependência das referências a extensões.

Atenção: Na utilização de pontos de extensão é extremamente importante realizar a rastreabilidade dos casos de uso de alguma forma.

Subir