Vejo muitas situações onde alguns confundem muito o uso de relacionamentos em casos de uso, principalmente com include e extend.
Diagramas de casos de uso servem para descrever cenários de uma solução a ser desenvolvida, e interações dos usuários (atores) com funcionalidades (casos de uso, conhecidos também como UC) no sistema. Pode-se relacionar o conceito de casos de uso com o conceito de estórias de usuários em scrum/XP.
O ator, na minha opinião é uma definição incorreta, pois o termo ator representa um indivíduo, e em UC o ator seria mais uma função, um papel, ou uma responsabilidade, que pode ser exercida por mais de uma pessoa (Ex. Cliente ao invés de Zezinho). Bom, mas isso é uma outra conversa.
Os UC, geralmente se relacionam com os atores, mas podem se relacionar também com outros UC. Até o UML 1.2, existia 2 relacionamentos entre UC: <<uses>> e <<extends>>. A partir do UML 1.3, existe 3 formas de relacionamento: inclusão (esteriótipo <<include>>), extenção (esteriótipo <<extend>>) e generalização.
O uso de <<include>> veio para substituir o <<uses>> da versão 1.1, e é usado quando casos compartilham comportamento comum com outros UC. Por isso até pode, mas não faz muito sentido um UC incluir somente um UC, pois não haverá compartilhamento e o conceito de “reutilização”, pois o UC incluído terá obrigatoriamente tal comportamento incluído.
O uso de <<extend>> é a utilização inversa da inclusão, e pode (não necessariamente) alterar o comportamento do UC que foi estendido. E nesse caso não tem problema conceitual em um UC estender somente um UC.
Segue um exemplo de extend e include. No caso seria um cenário onde o Vendedor tira um pedido para um cliente e ao tirar o pedido, ele pode ou não, dependendo do valor do pedido ou forma de pagamento, consultar o SPC e ao tirar o pedido, será feito a verificação de pagamentos em atrasos do cliente. No caso o Entregador fará a entrega do pedido, mas também será feito a verificação de pagamentos em atrasos, reutilizando a especificação dessa funcionalidade.
Quanto a generalização, foi introduzida a partir do UML 1.3, que é representada pela setinha fechada, é semelhante e muito facilmente confundido com o <<extend>>, acredito eu que pelo conceito de herança das linguagens de programação. Mas a generalização indica uma variação de outro UC. Uma alternativa ao uso de generalização é descrever um outro diagrama com o novo cenário. No exemplo de generalização abaixo, retrata dois cenários de pagamentos, em um só diagrama.
É muito importante lembrar que o grande valor dos casos de usos não estão no diagrama, e sim, na especificação (conteúdo/descrição) de cada UC, e existe uma metodologia para descrever os casos de uso, mas isso é assunto para um outro artigo.
21/09/2011 às 20:40
Parabén pela ótima explicação
13/11/2012 às 10:26
Ótima explicação e bons exemplos. Não só tirei uma dúvida como consolidei o conhecimento. Parabéns.
18/04/2013 às 13:19
excelente
18/04/2013 às 13:19
excelente
tem de diagramas de atividades
19/04/2013 às 01:16
Muito bom…Fiz umas pequenas correções no diagrama do meu TCC com suas dicas. Parabéns.
13/09/2013 às 09:22
valeu cara sensacional vc eh quase um principe ❤
24/05/2014 às 20:42
Gostei da sua explicação, consegui entender a diferença.
10/06/2014 às 15:40
Olá, Fábio Boa tarde!
olha, foi excelente a sua explicação.
Obrigado…
07/10/2014 às 04:50
otimo exemplo tirou totalmente a minha duvida muito obrigado
05/02/2015 às 15:06
Ótimos exemplos. Agregaram muito valor à explicação e tiraram minhas dúvidas.
23/04/2015 às 20:53
Esse seu post me ajudou de forma épica!
09/06/2015 às 19:19
minha duvida são os diagramas /caso de uso e quando usar include ou extend, mas com a sua explicação clareou um pouco. obrigada Antonia
30/10/2015 às 14:02
Muito bom. Simples e direto.
04/03/2017 às 10:14
Muito obrigado por compartilhar seu conhecimento. Ajudou-me muito…Continue assim!