O uso do relacionamento include e extend neste diagrama de caso de uso é mesmo o mesmo?

5

Estou tentando desenhar um diagrama de casos de uso UML para modelar requisitos para um projeto de software.

Os dois requisitos que tenho em questão para modelar são:

  1. TravelAgent cria uma reserva para um cliente [antigo] que está solicitando uma casa.

  2. Quando um novo cliente desejar fazer uma reserva, o TravelAgent o registrará no sistema antes de fazer a reserva.

Eu tenho duas abordagens para modelar esses requisitos:

  1. Modelando o primeiro caso de uso como um subprocedimento do segundo caso de uso (Figura 1).
  2. Estendendo o primeiro caso de uso (Figura 2).

Ambas as abordagens implicam que o primeiro caso de uso poderia ser executado independentemente, mas quando o segundo caso de uso é executado, o primeiro DEVE ser executado também.

Eles são realmente iguais e corretos?

P.S. Como outra pergunta, já que o NewClient converte em Client após o registro, devo mostrar a NewClient como subclasse de Client ou algo assim?

Figura 1

Figura2

    
por Isaac 23.04.2012 / 14:44
fonte

2 respostas

1

Tenha em atenção que a extensão é utilizada na UML de forma bastante diferente do que em, e. Java.

Seus diagramas provavelmente não estão expressando o que você gostaria que eles fizessem. Você usou o relacionamento de generalização (a seta com um triângulo oco). Isso implica um relacionamento "é um". Mas claramente também não é "Registrar um cliente" um caso de "Criar uma reserva" nem o contrário.

A maneira correta de indicar um relacionamento "incluir" ou "estender" é com uma linha tracejada, e. - - - > . Agora a diferença entre os dois é o seguinte. Suponha que A inclua B. Isso significa que sempre que alguém faz A ela também fará B. Por outro lado, se A estende B, então sempre que alguém faz A, B não tem nada a ver com isso. Mas se você fizer B, você pode fazer A adicionalmente durante o curso de B. Você deve especificar uma condição sob a qual A realmente se estende B.

No seu caso, você pode usar os dois, desde que você indique na condição da versão de extensão que isso depende do cliente ser novo.

Sobre sua modelagem do novo cliente. Eu não acredito que haja muito valor em expressar a diferença entre os dois aqui. BTW "subclassing" não é o termo correto, é (novamente) generalização. Adicionar tal generalização implica que cada novo cliente é um cliente e pode fazer o que um cliente regular pode fazer. Não consigo decidir se é isso que você quer.

    
por 23.04.2012 / 19:58
fonte
0

Tudo o que aprendi sobre INCLUDE e EXTENDS em diagramas UML é que include é algo que é necessário e estendido é opcional. No seu caso, supõe-se que o cliente já esteja cadastrado e logado no sistema. Então, ele não precisa fazer um registro novamente. Mas o novo cliente deve ser registrado para criar uma reserva. Eu acho que poderia ser assim:

Mas eu não tenho certeza, uma vez que eu também estou aprendendo ... Espero que ajude.. Boa sorte!

    
por 01.07.2015 / 23:19
fonte