Skip to main content dev:Coelho

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:

  1. Criar um novo arquivo e uma pasta específica para o diagrama
  2. Criar as raias verticais para representar cada ator ou setor envolvido
  3. Definir o estado inicial com seu respectivo símbolo
  4. Criar os estados de ação necessários, conectando-os com setas de transição
  5. Adicionar pontos de decisão e suas respectivas condições de guarda
  6. Incluir estados finais para representar o término do fluxo
  7. Revisar o diagrama para garantir a correta representação do processo

Exemplo

Matrícula de aluno

Foto de exemplo de um diagrama de atividade

  • 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:

  1. Modelar o fluxo de atendimento em um posto de gasolina, considerando as interações entre Cliente, Frentista e Posto
  2. 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

Posto de Gasolina

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

Exercício 2 - Cliente x Loja


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.