Engenharia De Software III - Diagramas De Atividades
Diagrama de Atividades na UML
O Diagrama de Atividades é um dos diagramas mais detalhistas da UML (Unified Modeling Language), baseado em redes de Petri com ênfase no nível algorítmico. Possui grande semelhança com fluxogramas de lógica e programação, sendo frequentemente representado com pseudocódigos ou mesmo linguagem de programação.
Caracterização e Aplicações
Diferentemente do Diagrama de Sequência que representa um processo completo, o Diagrama de Atividades concentra-se na representação do fluxo de controle de uma atividade específica, descrevendo os passos necessários para a conclusão de um método ou algoritmo específico.
O diagrama de atividades preocupa-se em descrever os passos a serem percorridos para a conclusão de um método ou algoritmo específico, não de um processo completo.
Principais Aplicações
- Descrever atividades e fluxos de dados ou decisões entre atividades
- Fornecer uma visualização ampla dos processos comerciais
- Detalhar as atividades que ocorrem em um caso de uso
- Mostrar diversas atividades usando símbolos específicos
- Representar segmentos de execução paralela
Componentes Fundamentais
Estado de Ação
Representa a realização de uma ação dentro de um fluxo de controle. Possui características específicas:
- É atômico (não pode ser decomposto em sub-estados)
- Não possui ações internas
- Sua execução é considerada rápida e não pode ser interrompida
- Representado graficamente por um retângulo com bordas arredondadas
Ponto de Decisão
Representa um ponto do fluxo onde ocorre um teste ou tomada de decisão, determinando qual caminho o fluxo seguirá:
- Representado por um losango
- As transições que saem do ponto de decisão necessitam de condições de guarda (textos entre colchetes)
- De um ponto de decisão partem pelo menos duas transições
Estado de Sub-Atividade
Representa a execução de uma sequência não atômica de etapas com alguma duração:
- Comparável a uma sub-rotina que será ou foi explorada em outro diagrama
- Evita a duplicação de diagramas já representados
Concorrência Dinâmica
Informa a ocorrência de um laço onde um mesmo estado de ação pode se repetir diversas vezes:
- Identificada pelo símbolo de multiplicidade (*) ao fim da descrição do estado de ação
- Evita a repetição do mesmo estado múltiplas vezes no diagrama
Fluxo de Objetos
Representa o estado dos objetos envolvidos na atividade:
- Representado por uma linha tracejada com seta (semelhante ao símbolo de dependência)
- Aponta para um retângulo com o nome do objeto e a classe à qual pertence
Envio e Recebimento de Sinal
Representa a transmissão e o recebimento de um sinal de um dispositivo externo:
- Normalmente utilizado para representar interações com hardware
- Identifica pontos de comunicação externa
Raias de Natação (Swimlanes)
As raias de natação são uma extensão importante do diagrama de atividades:
- Identificam os diversos setores, departamentos ou atores que interagem com um processo
- Representadas por retângulos com divisões por zonas de influência
- Facilitam a compreensão da responsabilidade de cada entidade no processo
- Permitem visualizar claramente as interações entre diferentes departamentos ou atores
Notas de Implementação
Para a criação de diagramas de atividades com a ferramenta Astah, deve-se seguir alguns passos fundamentais:
- Criar um novo arquivo e uma pasta específica para o diagrama
- Criar as raias verticais para representar cada ator ou setor envolvido
- Definir o estado inicial com seu respectivo símbolo
- Criar os estados de ação necessários, conectando-os com setas de transição
- Adicionar pontos de decisão e suas respectivas condições de guarda
- Incluir estados finais para representar o término do fluxo
- Revisar o diagrama para garantir a correta representação do processo
Exemplo
Matrícula de aluno
- Nota: a foto do exemplo acima foi criada por PlantUML de acordo com este código:
plantuml code snippet start
@startuml
title Processo de Matrícula - Diagrama de Atividades
|Aluno|
start
:Solicitar matrícula;
:Preencher formulário;
:Selecionar disciplinas;
|#AntiqueWhite|Secretaria Acadêmica|
:Receber solicitação;
:Verificar documentação;
if (Documentação completa?) then (sim)
:Validar requisitos;
if (Requisitos atendidos?) then (sim)
#LightBlue:Verificar disponibilidade de vagas;
note right: Ponto de referência
if (Vagas disponíveis?) then (sim)
:Processar matrícula;
:Emitir comprovante;
|Aluno|
:Receber comprovante;
stop
else (não)
:Notificar indisponibilidade;
|Aluno|
:Receber notificação;
:Selecionar disciplinas alternativas;
|Secretaria Acadêmica|
-> Retorna para verificar;
#LightBlue:Verificar disponibilidade de vagas;
endif
else (não)
:Emitir aviso de requisitos pendentes;
|Aluno|
:Receber aviso;
stop
endif
else (não)
:Solicitar documentação adicional;
|Aluno|
:Providenciar documentação;
|Secretaria Acadêmica|
-> Retorna para verificação;
:Verificar documentação;
endif
@enduml
plantuml code snippet end
Exercícios Sugeridos
Para praticar a criação de diagramas de atividades, são propostos dois exercícios:
- Modelar o fluxo de atendimento em um posto de gasolina, considerando as interações entre Cliente, Frentista e Posto
- Representar o processo de cadastro de clientes em uma loja
Respostas:
plantuml code snippet start
@startuml
title Fluxo de Atendimento em Posto de Gasolina
|Cliente|
start
:Chegar ao posto;
:Posicionar veículo na bomba;
:Informar tipo de combustível\ne valor/quantidade;
|#LightYellow|Frentista|
:Recepcionar cliente;
:Verificar tipo de combustível solicitado;
:Solicitar confirmação do pedido;
|Cliente|
:Confirmar pedido;
|Frentista|
:Abastecer veículo;
:Informar valor final;
:Perguntar sobre serviços adicionais;
|Cliente|
if (Deseja serviços adicionais?) then (sim)
:Especificar serviços adicionais;
|Frentista|
:Verificar disponibilidade;
if (Serviço disponível?) then (sim)
:Realizar serviço adicional;
else (não)
:Informar indisponibilidade;
endif
:Atualizar valor total;
else (não)
|Frentista|
endif
:Perguntar forma de pagamento;
|Cliente|
:Escolher forma de pagamento;
|Frentista|
if (Forma de pagamento) then (dinheiro)
:Receber dinheiro;
:Verificar valor;
:Calcular troco;
:Entregar troco;
else if (cartão) then
:Solicitar cartão;
:Processar pagamento;
|#LightBlue|Posto/Sistema|
:Autenticar transação;
:Processar pagamento;
|Frentista|
:Confirmar aprovação;
else (aplicativo/outros)
:Direcionar para pagamento alternativo;
|Posto/Sistema|
:Processar pagamento alternativo;
|Frentista|
:Confirmar pagamento;
endif
:Emitir comprovante;
:Entregar comprovante;
|Cliente|
:Receber comprovante;
:Verificar comprovante;
if (Solicitar nota fiscal?) then (sim)
:Fornecer CPF/CNPJ;
|Frentista|
:Solicitar emissão de NF;
|Posto/Sistema|
:Gerar nota fiscal;
|Frentista|
:Entregar nota fiscal;
|Cliente|
:Receber nota fiscal;
else (não)
endif
:Sair do posto;
stop
@enduml
plantuml code snippet end
plantuml code snippet start
@startuml
title Processo de Cadastro de Clientes em Loja
|Cliente|
start
:Solicitar cadastro;
:Informar interesse nos benefícios;
|#PaleGreen|Atendente|
:Recepcionar solicitação;
:Explicar benefícios e política de privacidade;
:Solicitar documentos de identificação;
|Cliente|
:Apresentar documentos;
:Decidir sobre cadastro;
if (Deseja prosseguir?) then (sim)
|Atendente|
:Verificar documentação;
if (Documentação válida?) then (sim)
:Iniciar preenchimento do formulário;
:Solicitar dados pessoais;
|Cliente|
:Fornecer dados pessoais;
|Atendente|
:Registrar dados pessoais;
:Solicitar dados de contato;
|Cliente|
:Fornecer endereço e telefone;
:Fornecer e-mail;
|Atendente|
:Registrar dados de contato;
:Solicitar preferências;
|Cliente|
:Informar preferências de produto;
:Informar canal de comunicação preferido;
|Atendente|
:Registrar preferências;
if (Cliente deseja cartão?) then (sim)
:Solicitar dados financeiros;
|Cliente|
:Fornecer dados financeiros;
|Atendente|
:Registrar dados financeiros;
:Analisar perfil de crédito;
|#LightBlue|Sistema|
:Consultar bureaus de crédito;
:Aplicar algoritmos de análise;
:Determinar limite de crédito;
|Atendente|
if (Crédito aprovado?) then (sim)
:Informar aprovação e limite;
:Emitir cartão provisório;
|Cliente|
:Receber cartão provisório;
else (não)
:Informar reprovação;
:Sugerir nova análise futura;
endif
else (não)
endif
|Atendente|
:Confirmar dados cadastrais;
|Cliente|
:Verificar dados;
if (Dados corretos?) then (sim)
:Autorizar uso dos dados;
|Atendente|
:Registrar consentimento;
:Finalizar cadastro no sistema;
|Sistema|
:Processar cadastro;
:Gerar número de cliente;
:Enviar e-mail de confirmação;
|Atendente|
:Informar número de cliente;
:Entregar kit de boas-vindas;
|Cliente|
:Receber número e kit;
else (não)
|Cliente|
:Solicitar correções;
|Atendente|
:Realizar correções;
-> Retorna para confirmação;
:Confirmar dados cadastrais;
endif
else (não)
:Solicitar documentação adicional;
:Agendar retorno;
|Cliente|
:Receber informações sobre pendências;
stop
endif
else (não)
|Cliente|
:Agradecer informações;
|Atendente|
:Entregar material informativo;
|Cliente|
:Receber material;
stop
endif
|Cliente|
:Realizar primeira compra;
stop
@enduml
plantuml code snippet end
O Diagrama de Atividades constitui uma ferramenta essencial para a representação detalhada de processos e algoritmos, permitindo uma visão clara e estruturada do fluxo de atividades em um sistema ou método específico.