1 UML – DIagramas de estados
UML – Diagramas de Estados
(Statechart Diagrams)
3 UML – DIagramas de estados,
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
(de sistema, objecto, etc.)
tempo evento
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
5 UML – DIagramas de estados,
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
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
7 UML – DIagramas de estados
Notação e conceitos básicos
Notação básica
Estado 1
do / actividade
entry / acção
exit / acção
evento / acção
Estado 2
evento(parâmetros) [condição] / 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
9 UML – DIagramas de estados,
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
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
11 UML – DIagramas de estados,
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
Exemplo de hierarquia de sinais
«signal»
Mouse Down Mouse Up«signal» Control Key Pressed«signal» Printable Key Pressed«signal» «signal» Mouse Event position «signal» Key Pressed character «signal» Event time «signal» User Input Event device
13 UML – DIagramas de estados,
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
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)
15 UML – DIagramas de estados,
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)
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
17 UML – DIagramas de estados,
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
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
19 UML – DIagramas de estados,
Exemplo: Jogo de xadrez
Vez das brancas
Vez das pretas
Vitória das pretas
Vitória das brancas Empate
jogada das pretas
xeque-mate paralisado jog ada d as b rancas
xeque-mate
paralisado
Estado inicial
(criação do objecto e início
da máquina de estados) Estado final
(fim da máquina de estados e destruição do objecto) Estado Transição
Exemplo: Semáforo
Exemplo: Semáforo
N O E S N S O E N O E S N O E S Norte/Sul pode seguir em frente Norte/S ul pode virar à esquerdaEst e/Oeste pode seguir em frente
after( 15 seg )
Este/Oeste pode virar à esquerda
after( 1 5 se g )
aft er( 30 seg )[ s em carros na pista esquerda E/O ]
after( 30 seg )[ tem carros na pista esquerda E/O ] after( 30 seg )[ tem carros
na pista esquerda N/S ]
after( 30 s eg )[ sem carros na pist a es querda N/S ]
21 UML – DIagramas de estados,
Exemplo: Menu popup
Inactivo Menu
visível botão direito em baixo / mostra menu popup
botão dirteito em cima / apaga menu popup e lança acção associada ao item seleccionado
cursor deslocado / realça item do menu
Exemplo: Porta com motor
Como seria este diagrama com as acções associadas às transições? A abrir
entry/ motor para cima exit/ motor desligado
A fechar entry/ motor para baixo exit/ motor desligado
Fechado Aberto
acciona porta aberta
acciona porta fechada
23 UML – DIagramas de estados,
Exemplo: Telefone (fazer chamadas)
Inactivo
Desligado
Sinal de ocupado
Sinal de interrompido
Tempo máximo
Mensagem gravada
no descanso levantadodígito(n) tempo máximo
número válido número inválido número ocupado ramal ocupado
resposta/ liga linha
chamado desliga/desliga linha mensagem dada
Ligado
Tocando
Ligando
Discando
Sinal de marcar
dígito(n) tempo máximo encaminhada no descansodo/toca sinal
do/ toca apito
do/ passa mensagem
do/ busca ligação
do/ toca campaínha do/sinal ocupado lento
do/ sinal ocupado rápido
no descanso/ desliga linha
25 UML – DIagramas de estados,
Casado Separado
judicialmente Solteiro Viúvo Divorciado
Casado Separado
judicialmente
Casado Separado
judicialmente Separação judicial
Solteiro Viúvo Divorciado Solteiro Nascime nto Viúvo Falecimento do cônjuge Divorciado Divórcio Falecimento Casamento
Exemplo: Estado civil
estado composto (ou super-estado ou contorno) Equivale a várias transições, com origem em cada um dos subestados! Evita explosão combinatória de transições! subestados sequenciais
Exemplo: Transmissão automática
Ponto morto
Marcha atrás
Frent e
Primeira Segunda Terceira
Primeira Segunda Terceira
subida redução subida redução paragem carrega N carrega N carrega R carrega F Estado composto
Subestados sequenciais de “Frente” Transição com origem em
super-estado e dirigida a sub-super-estado Transição dirigida a
(subestado inicial de) estado composto
27 UML – DIagramas de estados,
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
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 Q). 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 Q), 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
29 UML – DIagramas de estados,
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
31 UML – DIagramas de estados,
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
Exemplo: Concorrência num objecto
Preparação do despertador
Selecção
da Banda
Selecção do programa
Activação do alarme
Selecção do
Programa
banda
escolhida
comuta(banda)
sintoniza(frequência)
Selecção
da Hora
hora
escolhida
marca(hora)
programa
escolhido
Subestados concorrentes de “Preparação do despertador” Sai quando terminarem os dois subdiagramas concorrentesAlarme
ligado
Ao entrar, inicia os dois subdiagramas concorrentesX
E33 UML – DIagramas de estados,
O mesmo exemplo sem subestados
concorrentes
Preparação do despertador
Selecção da Banda e Hora Selecção do Programa e Hora banda escolhida comuta(banda) sintoniza(frequência) marca(hora) programa escolhido marca(hora) Selecção da Hora hora escolhida marca(hora) Selecção da Banda hora escolhida programa escolhido Selecção do Programa sintoniza(frequência) comuta(banda) banda escolhida hora escolhidaTem-se (quase) o produto cartesiano dos estados do diagrama anterior!
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)
Preparação
do/ liberta cartão
pronto
Concluído
do/ liberta dinheiro
recolhe dinheiro
recolhe cartão
35 UML – DIagramas de estados
Conceitos avançados
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
password: String = “ ” fails: Integer = 0 entry / set echo invisible exit / set echo normal do / echo typing help / display help
{
compartimento de actividade interna
{
37 UML – DIagramas de estados,
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 fonte n ... Estado destino 1 Estado destino m ... ev1 evn
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):
A enviar fax chegada de fax/defer Repouso A receber faz enviar fax/defer chegada de fax enviar fax
39 UML – DIagramas de estados,
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
Exemplo: Máquina de vendas (1)
Inactivo
moeda ( montante ) / põe balanço moeda(montante) / adiciona ao balançoRecolhe dinheiro
do/ testa item e calcula troco [troco<0] escolhe(item)
[item vazio]
[troco=0] [troco>0]
do/ faz troco do/ entrega(item)
cancelar / devolve moedas Diagrama pincipal:
41 UML – DIagramas de estados,
Exemplo: Máquina de vendas (2)
do/ inicializa item do/ acrescenta dígito
limpa dígito(n)
aceita
escolhe(item) dígito(n)
Detalhe do evento composto “escolhe(item)”:
do/ move o braço para a fila correcta
do/ move o braço para
a coluna correcta do/ tira item daprateleira
braço
pronto braçopronto tirado
Detalhe da actividade “entrega(item)”:
Estados históricos (history states)
Estado histórico
(dentro de um estado composto) –
refere-se ao último subestado em que refere-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
B1 interrupt resume B2 H C estado histórico B A
43 UML – DIagramas de estados,
Resíduos de subestados (stubs)
Aplicáveis quando se escondem os detalhes de um estado
composto, mas há transições que o atravessam
A C W E B F p r u s t D q A C W B p r q D abstracção s
Exemplos e exercícios
45 UML – DIagramas de estados,
Exemplo: Rádio-despertador (a rever)
18:35
89.5 FM
minutos
horas
alarme
tempo
dormir
desligar
off radio alarme
vol
sintonia
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)
- Diagrama principal
Desligado
Funcionar
do/ radio activo
Despertador
radio
off
alarme
radio
Ruído
Estação
sintoniza(freq)
dessintoniza
Botão de sintonia
Cortado
Activo
ajusta(nível)/
alterar nível
ajusta(nível)/alterar nível
[nível=0]
Botão de volume
Hora actual
do/ mostra
hora actual
Hora despertar
do/ altera hora
despertar
botão alarme
carregado
botão alarme
livre
Display
Desligado
Tocar
[em Estação e Activo e
(Funcionar ou Despertar
ou Adormecer)]
[em (Ruído ou Cortado)
ou (Desligado ou Armado
ou Latente)]
Altifalante
Interruptor
47 UML – DIagramas de estados,
- Subdiagrama Hora despertar
Mostra
do/ mostra
hora despertar
Põe minutos
do / incrementa
minutos despertar
mod 60
botão minutos
carregado
botão minutos
livre
Hora despertar
Põe horas
do/ incrementa
horas despertar
mod 24
botão horas
carregado
botão horas
livre
- Subdiagrama Hora actual
Mostra
do/ mostra
hora actual
Acerta minutos
do/ incrementa
minutos mod 60
botão minutos
carregado
botão minutos
livre
Hora actual
Acerta horas
do/ incrementa
horas mod 24
botão horas
carregado
botão horas
livre
Altera hora
do/ mostra
hora actual
botão tempo
49 UML – DIagramas de estados,
- Subdiagrama Despertador
Adormecer
do/ rádio activo
Latente
do/ incrementa
minutos mod 60
desligar/desliga
10 minutos
Despertador
Armado
minuto [hora actual
- hora despertar>60]
/ desliga
minuto [hora_actual =
hora_despertar]
Despertar
do/ rádio activo
desligar
/desliga
dormir
60 minutos
51 UML – DIagramas de estados,
Estados de uma Publicação
Disponível
Emprestada
mediante requisição aquisiç ão
consulta / incrementa contador
empréstimo devolução
Estados de um Sócio
Activo Inactivo Activo ins crição Inactivo renovaçãowhe n(esg otad o prazo da i nscrição e não tem exemplares emprestados) / avisa sócio
desistência
evento ocorre quando a condição se torna verdadeira
53 UML – DIagramas de estados,
Estados de uma Requisição
Espera devolução
Requisição Encerrada devolução
requi si ção[ pu blicação d ispon ível ] / empresta exemplar
esgotado prazo devolução / avisa
requ isi tante
Requisição Anulada Espera disponibilidade Espera levantamento Espera disponibilidade requisição[ publicação indisponível ] / coloca em lista de espera Espera levantamento publicação disponível / avisa requisitante desistência levantamento esgotado prazo levantamento / avisa requisitante
Sig nifica que o correu a devolução ou aquisição de u m exem plar ou que uma requisição à es pera de le vantam ento foi anul ada, na condição de não existi r outra requisição à espera de di spon ibi lidad e mais a ntiga do que esta
Prevê já vários exemplares por publicação e possibilidade de requisição ficar em lista de espera!
55 UML – DIagramas de estados,
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.
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).
57 UML – DIagramas de estados,
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)
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
59 UML – DIagramas de estados,
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)
Exercício 4 - resolução
Normal Dentro de
string
Possível início de comentário outro ca racter c / o utpu t(c)
A seguir a '\' '"' / output('"')
'/'
outro caracter c / output(c )
caracter c / output(c) Dentro de comentário /* Dentro de comentário // outro caracter c Possível fim de comentário /* outro caracter c '*' Em todos o s outros estados, EOF salta simpl esmente para o f im '*' '/' o utro caracter c '\' / output('\') '" ' / out put('"') '/' '*' '"' / output('/'); output('"') outro caracter c / output('/'); output(c) EOF / output('/') '\n' / outpu t('\n')