Pular para conteúdo

Aula 11 - Diagrama de Estados 🔄

Módulo

MÓDULO 3 – DIAGRAMAS COMPORTAMENTAIS UML


1. Fundamentos do Diagrama de Estados 📚

Nesta aula, estudaremos o Diagrama de Estados (State Machine), que modela o comportamento dinâmico de objetos em resposta a eventos.

🧠 Conceitos Fundamentais

Estado

Condição ou situação na vida de um objeto durante a qual ele satisfaz alguma condição, executa atividade ou aguarda evento.

**Notação**: Retângulo com cantos arredondados

Transição

Mudança de estado causada por evento, podendo ter condição de guarda e ação associada.

**Notação**: Seta rotulada com `evento[guarda]/ação`

Evento

Ocorrência que pode disparar uma transição de estado.

**Tipos**: Chamada, sinal, mudança, tempo

2. Anatomia do Diagrama de Estados 📊

stateDiagram-v2
    [*] --> Criado : criar()
    Criado --> Ativo : ativar() [condiçõesOK]
    Criado --> Cancelado : cancelar()

    Ativo --> Suspenso : suspender()
    Ativo --> Bloqueado : bloquear() [violacao]
    Ativo --> Inativo : desativar()

    Suspenso --> Ativo : reativar()
    Suspenso --> Cancelado : cancelar()

    Bloqueado --> Ativo : desbloquear() [administrador]
    Bloqueado --> Cancelado : cancelar()

    Inativo --> Ativo : ativar()
    Inativo --> Cancelado : cancelar()

    Cancelado --> [*]

    state Ativo {
        [*] --> Normal
        Normal --> Premium : upgrade()
        Premium --> Normal : downgrade()
    }

3. Estados Especiais e Atividades 🔀

Estados Inicial e Final

Estado Inicial

Notação: Círculo preenchido [•]

**Comportamento**: Ponto de entrada da máquina de estados

**Regra**: Apenas uma transição de saída

Estado Final

Notação: Círculo com borda [◎]

**Comportamento**: Terminação da máquina de estados

**Característica**: Nenhuma transição de saída

Atividades em Estados

Entry, Do e Exit

Estado ___________ entry / açãoEntrada do / atividadeContínua exit / açãoSaída

**Entry**: Executada ao **entrar** no estado

**Do**: Executada **durante** a permanência no estado

**Exit**: Executada ao **sair** do estado

4. Transições Complexas 💻

mkdir estados-umlcd estados-umltouch pedido-estados.mdecho "# Estados do Pedido - E-commerce" >> pedido-estados.mdecho "" >> pedido-estados.mdecho "## Eventos possíveis:" >> pedido-estados.mdecho "- criarPedido()" >> pedido-estados.mdecho "- confirmarPagamento()" >> pedido-estados.mdecho "- cancelarPedido()" >> pedido-estados.mdecho "- enviarProduto()" >> pedido-estados.mdecho "- confirmarRecebimento()" >> pedido-estados.mdecho "" >> pedido-estados.mdecho "## Guardas (condições):" >> pedido-estados.mdecho "- [pagamentoAprovado]" >> pedido-estados.mdecho "- [estoqueDisponível]" >> pedido-estados.mdecho "- [dentroP prazo]" >> pedido-estados.md

5. Estados Compostos (Aninhados) 🎨

Hierarquia de Estados

Estado Composto

Definição: Estado que contém outros estados (sub-estados)

**Vantagem**: Reduz complexidade e permite reutilização

**Exemplo**:
```
Estado "Ativo"
├── Sub-estado "Funcionando"
└── Sub-estado "Manutenção"
```

Estados Paralelos (Concorrentes)

Regiões Paralelas

Uso: Quando objeto pode estar em múltiplos estados simultaneamente

**Notação**: Estados separados por linha tracejada

**Exemplo**: Telefone pode estar "Ligado" E "Conectado" ao mesmo tempo

6. Eventos e Triggers ⚙️

Tipos de Eventos

Evento de Chamada (Call Event)

Formato: nomeOperacao(parametros)

**Disparo**: Invocação de método ou operação

**Exemplo**: `sacar(valor)`, `login(usuario, senha)`

Evento de Sinal (Signal Event)

Formato: nomeDoSinal

**Disparo**: Recebimento de sinal assíncrono

**Exemplo**: `sistemaInicializado`, `falhaDetectada`

Evento de Tempo (Time Event)

Formatos: after(tempo), when(condição)

**Disparo**: Passagem de tempo ou condição temporal

**Exemplo**: `after(30 seg)`, `when(dataVencimento < hoje)`

Evento de Mudança (Change Event)

Formato: when(condição)

**Disparo**: Quando condição se torna verdadeira

**Exemplo**: `when(temperatura > 80)`, `when(saldo < 0)`

7. Aplicacões Práticas 🏢

Quando Usar Diagramas de Estados

!!! success "Ideal Para" - Objetos reativos: Respondem a eventos externos - Protocolos: Sequências de interação bem definidas - Interfaces de usuário: Botões, janelas, formulários - Dispositivos: Equipamentos com estados óbvios

**Exemplos**: Conta bancária, processamento de pedidos, elevador

!!! warning "Evitar Para" - Objetos passivos: Apenas armazenam dados - Operações simples: Cálculos diretos sem transições - Fluxos de controle: Use diagrama de atividades

**Exemplos**: Endereço, produto (sem ciclo de vida), relatórios

Integração com Outros Diagramas

!!! tip "Relação com Classes" - Estados correspondem a valores de atributos - Transições correspondem a métodos que alteram estado - Validação: Métodos devem respeitar transições válidas


5. Mini-Projeto Prático 🚀

Cenário: Ciclo de vida de um Ar-Condicionado Inteligente.

Desafio: 1. Identifique 3 estados básicos: Desligado, Resfriando, Ventilando. 2. Adicione um estado de "Manutenção" que só pode ser acessado via código técnico. 3. Defina o evento que faz o aparelho passar de "Resfriando" para "Ventilando" (ex: Temperatura Atingida).


🎯 Materiais e Prática

  • Slides Interativos --- Acesse a apresentação visual da aula. Ver Slides

  • Testar Conhecimento --- Responda ao Quiz da aula para fixar os conceitos. Responder Quiz

  • Exercícios Progressivos --- Pratique com 5 exercícios de fixação e desafio. Praticar

  • Mini-Projeto --- Aplique a análise no seu projeto de referência. Ver Projeto


Próxima Aula: Diagrama de Componentes ➡️