UML – Diagramas de Estados ( Statechart Diagrams ) - Download Now PowerPoint

Document Sample
UML – Diagramas de Estados ( Statechart Diagrams ) - Download Now PowerPoint Powered By Docstoc
					UML – Diagramas de Estados
(Statechart Diagrams)

                  versão 1.1
           João Pascoal Faria
             Novembro 2001




           UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Introdução




             UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Objectivo
   Um diagrama de estados especifica uma máquina de estados,
    com estados (duradoiros e em número finito) e transições entre
    estados (instantâneas) causadas por eventos (instantâneos)
   Pode também especificar as acções (instantâneas) e actividades
    (duradoiras) realizadas em resposta a eventos ou durante a
    permanência em estados, respectivamente
   Usado normalmente para modelar o ciclo de vida dos objectos de
    uma classe (objecto visto como máquina de estados)
   Em geral, serve para modelar a dinâmica de um sistema ou
    objecto cujo estado evolui por saltos (transições instantâneas) em
    resposta a eventos, com um número finito de estados
                 estado          evento
               (de sistema,
              objecto, etc.)


                                                                                      tempo
                               UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Comportamento e ciclo de vida de
objectos ou sistemas reactivos (1)
   Um diagrama de estados é útil para modelar o comportamento e
    o ciclo de vida de um objecto ou sistema reactivo
   Objecto/sistema reactivo: funciona por resposta (reacção) a
    estímulos (eventos)
     • Comportamento reactivo  comportamento invocável (operações)
     • Sistema reactivo  sistema transformacional (tipo filtro Unix)
     • Sistemas de interacção com o utilizador (com formulários, botões,
       etc.) são tipicamente reactivos
     • Sistemas de tempo real (ex: semáforo) podem ser vistos como
       sistemas reactivos que reagem a eventos temporais (timeout, ...)
     • Sistemas reactivos geralmente têm memória - um estado interno que
       acumula o efeito dos estímulos recebidos no passado e afecta a
       resposta a estímulos futuros



                           UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Comportamento e ciclo de vida de
objectos ou sistemas reactivos (2)
   Ciclo de vida de um objecto/sistema: as sequências de estados
    por que pode passar durante a sua vida em resposta a eventos,
    em conjunto com as respostas a esses eventos, ou seja:
     • os estados possíveis (exemplo - estado civil: solteiro, casado, ...)
     • as transições de estado possíveis (exemplo: pode passar de solteiro
       para casado, mas não o contrário)
     • os eventos que causam essas transições (exemplo: o casamento
       implica a passagem ao estado de casado)
     • as acções do objecto em resposta a esses eventos (ex: despedida de
       solteiro)
   Objecto como máquina de estados
   Objectos da mesma classe têm o mesmo ciclo de vida, pelo que
    basta construir um diagrama de estados por classe relevante
     • Interacções entre objectos aparecem pouco explícitas, como trocas de
       mensagens


                             UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Relação com outros diagramas
dinâmicos
   Diagramas de estados focam o fluxo (passagem) de controlo de
    estado para estado num objecto, mostrando todas as sequências
    possíveis de funcionamento de um único objecto
     • Bom para especificação
     • Comunicação entre objectos do mesmo sistema aparece de forma pouco
       explícita, através de eventos gerados (como acções) na máquina de estados
       de um objecto que são testados (como eventos) na máquina de estados
       doutro objecto

   Diagramas de interacção (sequência ou colaboração) focam o
    fluxo (passagem) de controlo de objecto para objecto numa
    sequência particular de funcionamento de um sistema
     • Comunicação entre objectos aparece de forma explícita
     • Bom para ilustração mas mau para especificação

   Diagramas de actividades focam o fluxo de controlo de actividade
    para actividade numa actividade de mais alto nível (operação,
    caso de utilização, etc.) de um objecto ou sistema

                             UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Notação e conceitos básicos




            UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
  Notação básica
      Estado 1
 do / actividade          evento(parâmetros) [condição] / acção
 entry / acção                                                                                 Estado 2
 exit / acção
 evento / acção                            transição


• Sequência de mudança de estado:
- Ocorre o evento associado à transição e a condição de guarda é verdadeira
- É interrompida a actividade associada ao estado de origem, se não tinha já terminado
- É executada a acção á saída do estado de origem
- É executada a acção associada à transição
- É executada a acção à entrada do estado de destino
- É iniciada a actividade associada ao estado de destino


                               UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001      ‹#›
Estados
   Um estado é uma condição ou situação na vida de um objecto,
    durante a qual o objecto satisfaz alguma condição, realiza
    alguma actividade ou espera por algum evento
     • Exemplo (relativamente ao estado civil de uma pessoa): solteira, casada, ...

   Escolha dos estados e relação com atributos e ligações:
     • Foi dito anteriormente que o estado de um objecto é dado pelos valores de
       atributos e ligações com outros objectos que mantém num dado momento
     • Essa definição conduz, em geral, a demasiados estados
     • Ora, no diagrama de estados, interessa apenas distinguir estados que
       apresentam diferentes respostas a eventos
     • Assim, os estados que interessa considerar aqui correspondem, em geral, a
       conjuntos de valores de atributos e ligações (possivelmente expressos por
       condições), e ignoram-se atributos e ligações irrelevantes para o
       comportamento do objecto




                              UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Eventos
   Um evento é uma ocorrência significativa que tem uma
    localização no tempo (instante de tempo do evento) e no espaço
   No contexto de uma máquina de estados, um evento pode ter
    como resposta uma transição (mudança de estado) e/ou uma
    acção
   Os eventos são instantâneos
     • O que interessa é que se lhe possa atribuir um instante de tempo de
       ocorrência

   Os eventos podem ser de vários tipos:
     •   Sinais - eventos simbólicos sinalizados explicitamente
     •   Chamadas - invocação de operações (porque não também o retorno?)
     •   Eventos temporais - passagem de tempo ou ocorrência de um data-hora
     •   Eventos de mudança - uma condição tornar-se verdadeira

   Os eventos podem ter parâmetros [ exemplo: dígito-marcado(5) ]

                               UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Sinais (eventos simbólicos)
   Sinais são modelados por classes com estereótipo «signal»
     • Parâmetros (argumentos) do sinal são atributos da classe
     • Hierarquias de sinais são modeladas como hierarquias de generalização

   Envio de sinal representado por acção send
     • Receptor pode ser conhecido do emissor ou não (graças a mecanismo
       publish/subscribe)

   Sinais em linguagens de programação
     • Sinais assíncronos, enviados imediatamente (kill, suspend, ... ) ou de forma
       diferida (eventos em COM+) para processos concorrentes, usando primitivas
       do sistema operativo
     • Sinais síncronos, em que a geração do evento provoca a chamada de rotinas
       que tratam o evento (event handlers) no mesmo processo, usando primitivas
       das linguagens de programação (eventos em C# e Visual Basic.NET)
     • Excepções, representadas por objectos lançados com "throw" e apanhados
       com "catch", em que o lançamento da excepção provoca o retorno automático
       de vários níveis de chamadas e o salto para uma rotina de tratamento de
       excepções no mesmo processo


                             UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Exemplo de hierarquia de sinais
                                     «signal»
                                      Event
                                   time

                                     «signal»
                                 User Input Event
                                device


               «signal»                                           «signal»
             Mouse Event                                          Key Pressed
             position                                             character


 «signal»            «signal»                 «signal»                               «signal»
Mouse Down           Mouse Up            Control Key Pressed                   Printable Key Pressed




                           UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001       ‹#›
Chamadas
   Um chamada representa a invocação de uma operação
     • Para quem faz a chamada (ponto de vista do actuador), trata-se de
       uma acção
     • Para quem testa se a operação foi chamada (ponto de vista do
       observador), trata-se de um evento

   Um chamada é geralmente síncrona
     • Quando uma operação de um objecto invoca uma operação noutro
       objecto, o controlo passa para o 2º objecto

   Nome do evento tem a sintaxe da invocação da operação
     • Exemplo: insert(record)
     • Diferença entre evento e acção por contexto




                           UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Eventos temporais
   Evento de tempo relativo:
     • Representa a passagem de um certo tempo desde um certo instante
     • Notação: after(período-de-tempo)
     • Por omissão, tempo conta desde a entrada no estado de origem da
       transição a que está associado o evento
     • Também se usa a palavra chave timeout quando não se quer precisar
       o período de tempo
     • Exemplo: after(5 segundos)

   Evento de tempo abosluto:
     • Representa a chegada a um certo instante de tempo (data e/ou hora)
     • Notação: when(instante-de-tempo)
     • Exemplo: when(11:59PM)



                          UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Eventos de mudança
   Um evento de mudança (change event) é um evento que
    representa o facto de uma condição se tornar verdadeira
   Notação: when(expressão booleana)
   A expressão booleana pode ser usada para marcar um
    tempo absoluto (ver atrás) ou para o teste contínua de uma
    expressão
   Exemplo: when(altitude < 1000)




                       UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Transições
   Uma transição é uma relação entre dois estados indicando que
    um objecto no 1º estado realizará uma certa acção (opcional) e
    passará ao 2º estado quando um evento especificado ocorrer se
    uma condição especificada (opcional) for satisfeita
   Duas transições a sair do mesmo estado devem ter eventos
    diferentes ou condições mutuamente exclusivas, para que o
    diagrama de estados seja determinístico
   Se, num dado estado, ocorrer um evento que não corresponde a
    nenhuma transição, nenhuma transição é disparada e o evento é
    ignorado
   Transição automática: transição sem evento
     • Tem como evento implícito o fim da actividade associada ao estado de origem
     • Se tiver uma condição, fica à espera que a condição seja satisfeita


                              UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Actividades
   Uma actividade é uma execução contínua (ongoing
    execution) não atómica numa máquina de estados
     • Tem duração
     • Pode ser interrompida
     • Pode ter fim (termina por si só) ou não (só termina se for
       interrompida)

   É associada a estados
     • Inicia-se ao entrar no estado
     • Termina por si só ou é interrompida na saída do estado (causada por
       um evento)

   Exemplo (num telefone): do / dá sinal de marcar



                            UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Acções
   Uma acção é uma computação atómica executável que resulta numa
    mudança de estado ou no retorno de um valor
     •   A mudança de estado pode ser noutro objecto
     •   Não tem duração (pelo menos no modelo) e não pode ser interrompida
     •   Ocorre em resposta a um evento
     •   Exemplo (num telefone): poisa auscultador / pára sinal de marcar
     •   Acções são associadas a transições (mais comum) ou estados

   Acção à entrada num estado: entry/acção
     • equivale a associar a acção a cada transição que entra no estado

   Acção à saída de um estado: exit/acção
     • equivale a associar a acção a cada transição que sai do estado

   Acção em resposta a evento interno a um estado: evento/acção
     • difere de auto-transição, porque não são executadas acções à saída e entrada e não é
       interrompida a actividade associada ao estado




                                  UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
  Exemplo: Jogo de xadrez
                               Estado                                   Transição



                               Vez das                    xeque-mate                                Vitória das pretas
                               brancas
                                                                   paralisado
                                                                                                    Empate
        jogada das brancas                jogada das pretas

                                                                      paralisado
                               Vez das                                                              Vitória das brancas
                                pretas                     xeque-mate


Estado inicial
(criação do objecto e início                                                           Estado final
da máquina de estados)
                                                                            (fim da máquina de estados
                                                                              e destruição do objecto)


                                        UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001             ‹#›
Exemplo: Semáforo
            N                                                                                                             N

    O               E                                                                                             O               E
                                              after( 30 seg )[ tem carros
                        Norte/Sul pode         na pista esquerda N/S ]                     Norte/Sul pode
            S                                                                                                             S
                        seguir em frente                                                   virar à esquerda

                                                             after( 30 seg )[ sem carros
                                                               na pista esquerda N/S ]
                after( 15 seg )                                                                       after( 15 seg )
                                     after( 30 seg )[ sem carros
                                       na pista esquerda E/O ]

                        Este/Oeste pode                                                   Este/Oeste pode
        N                virar à esquerda                                                 seguir em frente                N
                                                after( 30 seg )[ tem carros
                                                 na pista esquerda E/O ]
O               E                                                                                                     O           E

        S                                                                                                                     S



                                              UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001                   ‹#›
Exemplo: Menu popup

                                                     cursor deslocado / realça item do menu


            botão direito em baixo / mostra menu popup
 Inactivo                                                                  Menu
                                                                           visível



            botão dirteito em cima / apaga menu popup e
            lança acção associada ao item seleccionado




                           UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Exemplo: Porta com motor
                                        A abrir

                              entry/ motor para cima
                              exit/ motor desligado

                    acciona                                       porta aberta


            Fechado                                                         Aberto
                                  acciona



             porta fechada                                        acciona

                                       A fechar

                              entry/ motor para baixo
                              exit/ motor desligado


Como seria este diagrama com as acções associadas às transições?



                               UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Exemplo: Telefone (fazer chamadas)
                      no descanso                                          no descanso
                                               Inactivo
                                                      levantado

                                         Sinal de marcar tempo máximo Tempo máximo
                                            do/toca sinal              do/ toca apito
                                                     dígito(n)              tempo máximo
                            dígito(n)                                              Mensagem gravada
                                               Discando             número         do/ passa mensagem
  Sinal de ocupado            número                  número válido inválido
                              ocupado
   do/sinal ocupado lento                      Ligando
                                            do/ busca ligação
  Sinal de interrompido           ramal
                                  ocupado           encaminhada
   do/ sinal ocupado rápido                    Tocando
                                            do/ toca campaínha
                                                     resposta/ liga linha
    no descanso/ desliga linha                                                    mensagem dada
                                                Ligado
                                                     chamado desliga/desliga linha

                                             Desligado

                                    UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Subestados sequenciais




            UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Exemplo: Estado civil
                                                                   subestados sequenciais
           Nascimento



     Solteiro                Viúvo                    Divorciado

                                                                                    estado composto
                                                                                    (ou super-estado
                            Falecimento                                             ou contorno)
         Casamento           do cônjuge         Divórcio

                                                                              Equivale a várias
                                                                              transições, com origem
         Casado         Separação judicial         Separado                   em cada um dos
                                                 judicialmente
                                                                              subestados!

                                                                              Evita explosão
                                                                              combinatória de
                               Falecimento
                                                                              transições!




                           UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001       ‹#›
    Exemplo: Transmissão automática
                                                                      carrega R
Transição dirigida a                            Ponto                                           Marcha
(subestado inicial de)                          morto                                            atrás
estado composto
                                                                      carrega N
   Estado composto                                      carrega N
                                   carrega F


                                                 Frente
                                   subida                                  subida
                     Primeira                        Segunda                                Terceira


                                   redução                               redução
                paragem



  Transição com origem em super-
  estado e dirigida a sub-estado
                                            Subestados sequenciais de “Frente”


                                     UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Subestados sequenciais
   Vários estados de um diagrama (e transições entre esses estados) podem
    ser agrupados num único estado composto
   Os primeiros estados passam a chamar-se subestados sequenciais
     • Subestados – por estarem encaixados dentro doutro
     • Sequenciais – por não ser possível estar em dois estados simultaneamente

   Estado composto pode ser visto simplesmente como um contorno
   Estados e transições agrupados no estado composto formam um diagrama
    de estados encaixado, podendo ter estado inicial e final
   Também se chama a isto composição “ou”
     • Estar no estado composto é estar no 1º subestado ou...ou no n-ésimo subestado

   Também se chama a isto generalização de estados
     • O estado composto é também chamado um superestado
     • Estar num subestado é estar também no respectivo superestado



                                 UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Transições com estados compostos
   Podem-se definir transições com origem no estado composto
     • Equivale a repetir a mesma transição com origem em cada um dos subestados
       (excepto ). Por outras palavras, os subestados herdam a transição.
     • Simplifica-se o diagrama porque se desenha 1 transição em vez de n
       transições (tantas quantos os subestados), evitando-se a explosão
       combinatória de transições!
     • A transição pode ser dirigida a um subestado ou a um estado externo

   Podem-se definir transições com destino ao estado composto
     • Equivale a definir a mesma transição com destino ao respectivo estado inicial
       (ou melhor, ao estado apontado por ), que tem de estar definido

   Vantagem comum: abstracção de detalhes do estado composto
     • O estado composto pode até ser detalhado separadamente

   No entanto, também se podem definir transições que atravessam
    o estado composto, com origem ou destino em subestados
     • O estado inicial é apenas um estado inicial por omissão


                              UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Propriedades de estados compostos
   Um estado composto pode ter todas as propriedades dos estados simples,
    mas normalmente só tem o nome, que mesmo assim é opcional
   Um estado composto pode ter acções à entrada e à saída
     • Ao entrar no estado composto, executa primeira as acções à entrada no estado
       composto, e depois as acções à entrada no subestado de destino
     • Ao sair do estado composto, executa primeira as acções à saída do subestado de origem,
       e depois as acções à saída do estado composto

   A actividade do estado composto é detalhada pelos subestados e
    transições entre eles, isto é, pelo diagrama de estados encaixado
   Em alternativa, pode-se dar um nome à actividade do estado composto
    (com “do/...”) , e detalha-se essa actividade separadamente (com o
    mesmo diagrama de estados encaixado)
     • As acções à entrada e à saída são representadas no 1º diagrama
     • Uma actividade pode ser detalhada por um diagrama de estados ou actividade




                                 UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Subestados concorrentes




           UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Subestados concorrentes
   Um estado (estado composto) pode ser dividido em duas ou mais
    regiões concorrentes, separadas por linhas a traço interrompido,
    representando subestados concorrentes (que , por sua vez, têm
    normalmente subestados sequenciais)
   Subestados concorrentes correspondem a aspectos do objecto
    (grupos de atributos e ligações ou sub-objectos) que evoluem de
    forma mais ou menos independente
   Dependências entre regiões podem ser expressas através de
    condições de guarda (num componente testar o estado doutro)
   Também se chama a isto composição “e”:
     • Estar no estado composto é estar no 1º e ... e no nº subestado concorrente

   Notar que, a um nível mais global, os objectos (e portanto os
    respectivos diagramas de estados) são concorrentes entre si



                              UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
     Exemplo: Concorrência num objecto

                          Preparação do despertador                                                         X
                                                                                              E
                             Selecção do programa
                  comuta(banda)           sintoniza(frequência)                                        Subestados
                                                                                                       concorrentes de
                                banda                     programa                                     “Preparação do
                   Selecção     escolhida Selecção do escolhido                                        despertador”
                   da Banda                 Programa
                                                                                                    Alarme
                                                                                                    ligado
                                Activação do alarme
Ao entrar, inicia os               marca(hora)
dois subdiagramas                                       hora                                Sai quando
concorrentes                                                                                terminarem os dois
                                      Selecção          escolhida                           subdiagramas
                                                                                            concorrentes
                                      da Hora



                                    UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001          ‹#›
O mesmo exemplo sem subestados
concorrentes
                            Preparação do despertador
                            sintoniza(frequência)
                                                          programa
                banda          Selecção do                escolhido            Selecção
comuta(banda)   escolhida    Programa e Hora                                   da Hora                hora
                                                                                                      escolhida

  Selecção da                marca(hora)                                     marca(hora)
 Banda e Hora                                   hora
                                                escolhida
marca(hora)     hora        comuta(banda)                         sintoniza(frequência)
                escolhida                                                                      programa
                                                  banda
                             Selecção da          escolhida         Selecção do                escolhido
                               Banda                                 Programa


Tem-se (quase) o produto cartesiano dos estados do diagrama anterior!


                              UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001               ‹#›
   Sincronização: separação e fusão
      Separação - quando um objecto passa a fazer várias actividades
       concorrentemente (ordem irrelevante)
        • transição para estado com subdiagramas concorrentes activa cada um deles

      Fusão - quando as actividades concorrentes têm que terminar
       antes de passar ao estado seguinte
        • subdiagramas que não estejam na fusão são automaticamente terminados

                                     Emissão (Multibanco)

                              do/ liberta cartão
             pronto                                      recolhe cartão
Preparação                                                                                      Concluído

                            do/ liberta dinheiro
                                                        recolhe dinheiro


                                UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001       ‹#›
Conceitos avançados




           UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Variáveis num estado
    Um estado pode ter um compartimento de variáveis
    Estas variáveis são atributos da classe dona do diagrama de
     estados, distinguidos porque são usadas ou afectadas por
     acções no diagrama de estados
    Todos os compartimentos (nome, variáveis e actividade
     interna) são opcionais
                                                      Typing Password


                            {
    compartimento de variáveis
                                        password: String = “ ”
                                        fails: Integer = 0



                            {
                                        entry / set echo invisible
compartimento de actividade             exit / set echo normal
         interna                        do / echo typing
                                        help / display help


                                 UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Transições complexas
   Uma transição complexa é uma transição com múltiplos estados
    fonte (normalmente de subdiagramas concorrentes) ou múltiplos
    estados de destino (normalmente de subdiagramas concorrentes)
   Representa uma separação e/ou fusão de controlo em/de fios de
    controlo concorrentes
   Aplicável mesmo sem subdiagramas concorrentes
   Desenha-se com uma barra forte (barra de sincronização):


            Estado fonte 1                                         Estado destino 1
                                        ev1
                  ...                                                       ...
            Estado fonte n             evn                          Estado destino m




                             UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Eventos diferidos
   Uma acção possível em resposta a um evento é “defer”,
    que significa guardar o evento até chegar a um estado
    capaz de o “consumir”
   É aplicável num par “evento/acção” interno a um estado
   Exemplo (máquina de fax):

                                           Repouso

                    enviar fax                                  chegada de fax



                  A enviar fax                               A receber faz
            chegada de fax/defer                           enviar fax/defer




                             UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Descrição de eventos compostos
com diagramas de estados
   Um evento composto corresponde a uma sequência de
    eventos mais simples
     • O instante da ocorrência do evento composto é o instante da
       ocorrência do último evento da sequência
     • Exemplo: o evento composto “introduzir número” é uma sequência
       de uma ou mais ocorrências do evento “introduzir dígito”, seguido de
       uma ocorrência do evento “enter”

   Um evento composto pode ser definido através de um
    diagrama de estados (máquina de estados) que funciona
    como um “detector de eventos”
     • Detector sequencial: a detecção do evento composto corresponde à
       chegada a um estado final com o nome do evento
     • Detector cíclico: o evento composto é sinalizado explicitamente,
       podendo ser lançado vários vezes



                           UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
 Exemplo: Máquina de vendas (1)

Diagrama pincipal:


                     moeda ( montante ) / põe balanço                  Recolhe dinheiro
       Inactivo                                               moeda(montante) / adiciona ao balanço
                      cancelar / devolve moedas
                                                         [item vazio]            escolhe(item)         [troco<0]

                                                                 do/ testa item e calcula troco

                                                                         [troco=0]       [troco>0]


                                               do/ entrega(item)                     do/ faz troco




                               UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001               ‹#›
 Exemplo: Máquina de vendas (2)
Detalhe do evento composto “escolhe(item)”:
                                                                dígito(n)

                                      dígito(n)                                                    escolhe(item)
          do/ inicializa item                          do/ acrescenta dígito
                                      limpa                                          aceita




Detalhe da actividade “entrega(item)”:


        do/ move o braço               do/ move o braço para        do/ tira item da
        para a fila correcta    braço  a coluna correcta     braço prateleira                              tirado
                                pronto                       pronto




                                   UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001            ‹#›
Estados históricos (history states)
   Estado histórico (dentro de um estado composto) – refere-
    se ao último subestado em que se encontrava o estado
    composto
   Útil para reentrar num estado composto no subestado em
    que se encontrava anteriormente
   Não é aplicável na primeira entrada

                    B
         A                   B1                           interrupt
                                                                                      C
                                                               resume
                                               H

                              B2
                                                              estado histórico

                        UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
   Resíduos de subestados (stubs)
      Aplicáveis quando se escondem os detalhes de um estado
       composto, mas há transições que o atravessam

                                                      W
                         p                                              s
                 A                       E                                                    C
                                             u                                    q
                         r                                      t
                 B                                   F                                        D
abstracção


                             p                                  s
                     A                                                       C
                                                 W                  q
                             r                                               D
                     B



                             UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Exemplos e exercícios




            UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Exemplo: Rádio-despertador (a rever)

                            minutos
                                                             alarme
                            horas                       tempo          off radio alarme
                          desligar                                                                     sintonia
                                                  dormir

                                                                                            vol
                   18:35                             89.5            FM



   obter o diagrama de estados
      •   o botão dormir faz tocar durante uma hora (desligar cala-o logo)
      •   ao chegar ao instante do alarme, começa a tocar durante 1 hora (desligar só desliga
          durante 10 minutos)



                               UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001              ‹#›
  - Diagrama principal
                               Rádio-despertador
                                   Interruptor
                         radio                   alarme
           Desligado              Funcionar             Despertador
                          off   do/ radio activo radio


               Botão de sintonia                                      Botão de volume
               sintoniza(freq)                                   ajusta(nível)/alterar nível
   Ruído                         Estação                  Cortado                         Activo
                dessintoniza                                             [nível=0] ajusta(nível)/
                                                                                       alterar nível
                                                                       Altifalante
               Display                                            [em Estação e Activo e
                                                                 (Funcionar ou Despertar
              botão alarme                                           ou Adormecer)]
               carregado                                  Desligado                       Tocar
Hora actual                Hora despertar
 do/ mostra   botão alarme do/ altera hora                             [em (Ruído ou Cortado)
hora actual       livre      despertar                                ou (Desligado ou Armado
                                                                            ou Latente)]

                                 UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
- Subdiagrama Hora despertar

                          Hora despertar

                            botão minutos
                              carregado
              Mostra                    Põe minutos
             do/ mostra botão minutos do / incrementa
           hora despertar       livre minutos despertar
                                          mod 60
       botão horas botão horas
        carregado         livre
            Põe horas
          do/ incrementa
          horas despertar
              mod 24




                  UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
- Subdiagrama Hora actual

                                   Hora actual

                                 Mostra
                                do/ mostra
                                hora actual
                        botão tempo botão tempo
                         carregado          livre


                 botão horas                            botão minutos
Acerta horas        livre         Altera hora             carregado Acerta minutos
do/ incrementa                    do/ mostra                          do/ incrementa
 horas mod 24    botão horas      hora actual           botão minutos minutos mod 60
                  carregado                                  livre




                          UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
   - Subdiagrama Despertador

                                         Despertador

                    minuto [hora_actual =
                       hora_despertar]                               desligar/desliga   Latente
        Armado                           Despertar
                                                                                     do/ incrementa
                                       do/ rádio activo
                                                                          10 minutos minutos mod 60
                       minuto [hora actual
        desligar      - hora despertar>60]
        /desliga 60 minutos / desliga
        Adormecer
dormir do/ rádio activo




                                UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Caso de estudo: Biblioteca




            UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Estados de uma Publicação

                    consulta / incrementa contador




        aquisição         Disponível



                                                                mediante
                devolução          empréstimo
                                                                requisição


                         Emprestada




                      UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Estados de um Sócio

                                             evento ocorre quando a condição se
                                             torna verdadeira




                               when(esgotado prazo da inscrição e não tem
                                 exemplares emprestados) / avisa sócio


    inscrição
                       Activo                                           Inactivo



                renovação                    desistência




                            UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Estados de uma Requisição
          requisição[ publicação
                                                      requisição[ publicação disponível ] /
        indisponível ] / coloca em
                                                              empresta exemplar
              lista de espera

                                                                      Significa que ocorreu a devolução ou
                                                                      aquisição de um exemplar ou que
      Espera                                                          uma requisição à espera de
   disponibilidade                                                    levantamento foi anulada, na condição
                      publicação disponível /                         de não existir outra requisição à
                        avisa requisitante                            espera de disponibilidade mais antiga
                                                                      do que esta
                                Espera
                             levantamento

                                                                               esgotado prazo
                                                                              devolução / avisa
                                           levantamento                          requisitante
     desistência

                                                                   Espera
                       esgotado prazo                             devolução
                       levantamento /
                      avisa requisitante                                               devolução

     Requisição                                                                                   Requisição
      Anulada                 Prevê já vários exemplares por publicação e                         Encerrada
                              possibilidade de requisição ficar em lista de
                              espera!




                                 UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001         ‹#›
Exercícios




             UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Exercício 1: Sistema de portas
   (ASI,10/2/99) Modele o funcionamento do seguinte sistema
    de portas através de um diagrama de estados em UML:
     • À entrada de um edifício existem duas portas: uma porta interior e
       uma porta exterior
     • Por razões de segurança, as duas portas não podem estar abertas
       simultaneamente
     • De ambos os lados (interior e exterior) de cada porta, há um botão
       de abrir
     • Quando se carrega no botão de abrir uma porta, se a outra porta
       estiver trancada, a porta é destrancada durante 5 segundos,
       permitindo a sua abertura manual
     • As portas fecham-se por acção de molas e ficam imediatamente
       trancadas
     • Em cada porta há um sensor que detecta o seu fecho.


                           UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Exercício 2: Auto-rádio
   (ASI 4/2/97) Modele o mecanismo a seguir descrito, através de um
    diagrama de estados:
     • Um auto-rádio tem um mecanismo anti-roubo baseado num código secreto com 4 dígitos.
     • O auto-rádio encaixa numa gaveta que é montada na viatura, e que permite a sua fácil
       extracção. Quando se retira o auto-rádio da respectiva gaveta (cortando-lhe assim a
       alimentação), este fica num modo de “segurança”, que é também o modo inicial.
     • Quando se liga o auto-rádio (alimentação e interruptor), no modo de “segurança”, este
       começa por exigir o código secreto, antes de entrar no modo de funcionamento normal.
       Para a introdução do código secreto, o auto-rádio dispõe de teclas correspondentes aos
       dígitos de “0” a “9” e uma tecla de “Enter”.
     • Uma vez em modo de funcionamento normal, o simples desligar do interruptor, sem
       cortar a alimentação, não provoca a passagem ao modo de “segurança”; isto é, ao voltar
       a ligar o interruptor, este não exige a introdução do código secreto.
     • No caso de o utilizador introduzir um código errado, dispõe de mais 2 tentativas. Ao fim
       de 3 tentativas falhadas (sem nenhuma tentativa bem sucedida pelo meio), o auto-rádio
       fica completamente bloqueado, só podendo ser desbloqueado na fábrica, mediante o
       mesmo código secreto. O número de tentativas falhadas é memorizado mesmo que se
       desligue o auto-rádio (interruptor e/ou alimentação).




                                  UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Exercício 3: Telefone de cartões
   (ASI 3/4/98) Considere um telefone público de cartões que
    funciona normalmente de acordo com o seguinte cenário:
     • estando o telefone em repouso (auscultador poisado e mostrador desligado),
       o utilizador levanta o auscultador;
     • aparece quase imediatamente no mostrador a mensagem “introduza cartão”;
     • o utilizador introduz o cartão na ranhura;
     • aparece quase imediatamente no mostrador o número de períodos disponíveis
       no cartão;
     • o utilizador digita o número pretendido (os dígitos aparecem imediatamente
       no mostrador e são imediatamente transmitidos para a central);
     • passadas uma fracções de segundo ou escassos segundos após ter sido digitado
       o último dígito, o telefone emite um sinal sonoro indicando que o número
       pretendido está a ser chamado (sinal de chamada, proveniente da central);
     • o sinal de chamada pára, indicando que o número chamado atendeu;
     • decorre então a conversação (enquanto decorre a conversação, aparecem no
       mostrador os períodos disponíveis no cartão, que são actualizados há medida
       que chegam os impulsos da central);
     • (continua)

                             UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Exercício 3: Telefone de cartões
(cont.)
     • o utilizador poisa o auscultador;
     • o utilizador pressiona num botão para sair o cartão (só nesse momento é que
       desaparece do mostrador a indicação dos períodos disponíveis), e recolhe o
       cartão.

   Considere ainda os seguintes modos de funcionamento
    alternativos:
     • No caso de pretender efectuar uma segunda chamada, o utilizador não
       precisa de retirar o cartão (isto é, não precisa de pressionar o botão para sair
       o cartão). Basta poisar o auscultador e voltar a levantá-lo.
     • Passados 5 segundos desde que se poisa o auscultador, o cartão sai
       automaticamente.
     • Se, no momento de taxar um impulso, o cartão já não tiver mais períodos
       disponíveis, a chamada é cortada automaticamente pelo telefone automático
       (surge então um sinal contínuo que desaparece quando se poisa o
       auscultador).

   Modele o funcionamento acima descrito através de um diagrama
    de estados em UML.

                               UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Exercício 4
   Modele através de uma máquina de estados um programa
    (tipo filtro Unix) que lê do standard input código fonte em
    Java e escreve no standard output o mesmo código sem
    comentários
     • O programa deve ler e escrever caracter a caracter
     • A chegada de um caracter c ao standard input deve ser modelada
       como um evento input(c)
     • O fim dos dados de entrada deve ser modelada pelo evento EOF
     • A escrita de um caracter c no standard output deve ser modelada
       pela acção output(c)




                           UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001   ‹#›
Exercício 4 - resolução
                          outro caracter c / output(c)                                 outro caracter c / output(c)

                                                             '"' / output('"')


                                      Normal                                                  Dentro de
                                                                                                string

                                                              '"' / output('"')

                  outro caracter               '/'
                   c / output('/');                                     '"' / output('/');                 '\' / output('\')
                      output(c)                                             output('"')
     '\n' /
     outpu                                                                 caracter c / output(c)
     t('\n')                       Possível início                                                                             '/'
                                   de comentário
                                                                                               A seguir a
     outro caracter c                                                                              '\'
                                                          outro caracter c
                                                '*'
                             '/'


      Dentro de                                          Dentro de
     comentário //                                      comentário /*

                 EOF / output('/')
     Em todos os outros                     outro             '*'
     estados, EOF                         caracter c                        '*'
     salta simplesmente
     para o f im


                                                       Possível fim de
                                                        comentário /*




                                            UML – DIagramas de estados, v. 1.1, João Pascoal Faria, Novembro 2001                    ‹#›