Diagramas Comportamentais da UML: Diagrama de Estados

A UML(Unified Modeling Language) prevê um diagrama específico para modelar os diversos estados de um objeto durante o seu ciclo de vida. Tal diagrama é chamado de diagrama de estados.

Muito utilizado na área de eletrônica digital e em engenharia de software, um diagrama de estado é a representação de um estado ou situação em que um objeto se encontra no decorrer da execução dos processos de um sistema. É uma maneira eficiente e clara de descrever todos os possíveis estados de um sistema, assim como quais eventos levam transição de um estado para outro.

Os diagramas de estado representam uma alternativa para o diagrama de casos de uso. Geralmente, os diagramas de caso de uso são utilizados durante a etapa de análise do sistema, e os diagramas de estados, durante a etapa de projeto do sistema. O foco principal dos diagramas de estados reside na identificação dos valores que os atributos de uma classe podem assumir, assim como os eventos ou mensagens enviadas para o objeto que efetivamente implicará na atribuição dos valores.

Diagramas de estados podem ser concebidos englobando diversos objetos, porém, o ideal é modelar diagramas de estados individuais para cada objeto e utilizar outros diagramas para ilustrar como diferentes objetos interagem durante a execução do sistema.

Elementos de um Diagrama de Estados

Estado Inicial – Ponto de entrada da utilização do objeto, pode ser sua instanciação ou sua reinicialização do mesmo para um estado estável inicial.

Estado Final – Ponto de saída da utilização do objeto, pode ser sua destruição ou o ato de deixar de ser utilizado.

Estado – Possível estado que o objeto pode se encontrar em cada momento. É definido como sendo a identificação dos atributos que o compõe. Um estado pode demonstrar a espera pela ocorrência de um evento, a reação a um estímulo, a execução de alguma atividade ou a satisfação de alguma condição.

Evento – Também chamado de transição, representa uma ação externa sobre o objeto.

Verificação de um Diagrama de Estados

Após a criação de um diagrama de estados, precisamos verificar se o mesmo é consistente, como cada verificação é específica para cada diagrama, pois depende diretamente da mecânica da classe e do problema se se propõe a resolver, podemos verificar de uma forma sistemática cada diagrama de estados respondendo às seguintes perguntas:
1 – Todos os estados podem ser atingidos?
2 – A partir de qualquer estado, existe um caminho que leve para o estado final?
3 – Todos os estados possíveis que o objeto pode assumir foram definidos?
4 – Cada estado reage adequadamente a todos os possíveis eventos?

Exemplos de Diagramas de Estados

Um exemplo simples seria um semáforo onde cada estado corresponde a uma situação que ocorrerá. Quando verde, os carros podem prosseguir na via. Passado um tempo, é acionada a tarefa de mudar para amarelo. Então o semáforo passa de verde para amarelo. Aqui os carros ficam em estado de atenção e já aguardam a próxima transição.
O próximo passo é passar para vermelho. Nesse estado, os carros estão parados na via. De vermelho, o próximo estado somente será verde, assim, os carros podem voltar a trafegar na via.

Outro exemplo simples seria a troca de estações do ano. Onde cada estação possui seu tempo de duração, após esse tempo ter se esgotado, uma transição de estados ocorre e a estação passa ao seu próximo estado, com sua determinada duração.

 

Diagrama de Atividade

Oriundo do Diagrama de Máquina de Estados, este diagrama enfatiza a sequência e condições para descrever um processo computacional completo de uma atividade. Como já observado, é um dos mais detalhistas diagramas da UML, muito semelhante aos fluxogramas utilizados para lógica de programação. Está sempre associado a um Caso de Uso, descrevendo as atividades executadas pelo Ator e pelo Sistema. Composto por estados que representam as atividades e ações que representam as transições, já foi considerado uma parte especial do Diagrama de Gráficos de Estados, porém a partir da versão 2.0 da UML, tornou-se totalmente independente.

Este diagrama preocupa-se em descrever os passos a serem percorridos para a conclusão de um método ou algoritmo específico, ou seja, tem como objetivo principal a especificação do comportamento do software do ponto de vista funcional e das suas funcionalidades e não um processo completo como é o diagrama de sequência, e possui três estados obrigatórios:

  • Estado Inicial;
  • Estado de Ação;
  • Estado Final.

É também utilizado para modelar dois tipos específicos de fluxos, o Fluxo de Controle e o Fluxo de Objetos.

Figura 1 – Esquema exemplificando o Diagrama de Atividade

Principais Elementos de Utilização

Estados Iniciais e Finais: Todos os diagramas de atividades possuem pelo menos um estado inicial e pelo menos um estado final. O Estado inicial indica o início do processo enquanto o estado final indica o fim do processo:

Figura 2 – Exemplo de Estado inicial e final

Atividades: Representados por um retângulo com as bordas arredondadas, equivalem as atividades ou ações que devem ser feitas. Quando a referida ação é finalizada, transfere a execução para a próxima atividade:

Figura 3 – Exemplo de Atividade

Transições: Setas contínuas que representam o fluxo de trabalho de uma atividade para outra, ou seja, o “caminho” a ser seguido para a conclusão do processo:

Figura 4 – Exemplo de Transição entre Atividades

Ponto de Decisão / Desvio: Representa uma escolha entre dois ou mais fluxos em que um dos fluxos será escolhido em detrimento dos outros. É representado pela figura de um losango:

Figura 5 – Exemplo de nó de decisão

Condição de Guarda: Condiciona a ocorrência de uma transição para a execução de uma atividade, geralmente é utilizada após um ponto de decisão:

Figura 6 – Exemplo de Condição de Guarda

Barras de Sincronização – Bifurcação/ União: Representam a execução de atividades concorrentes e independentes. Na condição de Bifurcação ou Fork, as atividades associadas continuam seu processamento paralelo. Já na condição de União ou Join, as atividades concorrentes são novamente sincronizadas em um único processo:

Figura 7 – Exemplo de Fork e Join

Raias: Representam uma forma de organização lógica das atividades. Podem estar associadas a objetos, componentes ou atores do sistema:

Figura 8 – Exemplo da utilização de Raias

Eventos: Eventos são mudanças de estado instantâneas que propiciam o início de uma outra ação. Existem basicamente três representações para eventos: únicos, periódicos e deliberados:

Figura 9 – Exemplo de utilização de Eventos

Nós de Objetos: Representam a instância de uma classe, que pode estar disponível em um determinado momento da atividade. É útil para mostrar o fluxo de dados acontecendo em um processo, e foi inserido a partir da versão 2.0 da UML:

Figura 10 – Exemplo de utilização de objetos

Exemplo Ilustrativo de Utilização do Diagrama de Atividade

Basicamente, temos referências a dois módulos nas duas Raias (Cadastro de Cliente e E-mail Marketing), e trata-se de um fluxo do sistema, onde um cliente após ser cadastrado sofre uma avaliação, e dependendo do resultado da avaliação (feita através do software) o fluxo pode tomar caminhos diferentes. Se todo o fluxo se completar, antes de encerrar-se, o cliente vai para uma situação de “espera”, onde outro fluxo, por exemplo, tratará o envio de uma nova oferta ao cliente que passou em todas as etapas:

Figura 11 – Exemplo completo de Diagrama de Atividade

Podemos identificar que o uso do Diagrama de Atividade é uma excelente opção para a especificação funcional de um software, desde que sua utilização seja empregada ao fim a que se destina. Mapear processos de forma que o desenvolvedor possa visualizar a funcionalidade isolada propicia um nível de controle e de abstração perfeitos de cada ponto do sistema e o deixa bem próximo do negócio. Também, dentro de suas limitações, pode ser utilizado por pessoas menos técnicas e até mesmo usuários para o entendimento dos processos de funcionamento gerais.

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *