Modelos dinâmicos OMT
Exercício do elevador
Gabriel David
FEUP - Rua dos Bragas, 4099 Porto Codex - PORTUGAL
Tel. 351-2-2041842 - Fax: 351-2-319280
Email: [email protected]
URL: http://www.fe.up.pt
1
Especificação






Objectivo: elaborar um modelo dinâmico que descreva o
funcionamento de um elevador.
Pretende-se um diagrama de estados para a classe Elevador
cujo diagrama de objectos está na figura.
O elevador tem comandos para descer e para subir, em cada
andar excepto nos terminais, onde só tem um.
Tem memorização dos destinos dos vários passageiros numa
viagem e das chamadas para um andar
Considera-se que não há porta interior, mas apenas portas
manuais nos andares
Em descanso, a luz apaga ao fim de algum tempo
Elevador - 2
Diagrama de classe
Elevador
actual: integer
pedidosSubir: set of integer
pedidosDescer: set of integer
destinos: set of integer
actualiza(andar: integer)
limpaPedidosDestinos()
apagaLuz()
acendeLuz()

Eventos






abrePorta
fechaPorta
atinge( andar )
botãoPremido( tipo, andar )
topo
fundo
Elevador - 3
Diagrama de estados
atinge(andar)[andar  pedidosSubir  destinos  {termo}]/actualiza(andar)
Descanso
botãoPremido(tipo,andar) [actual<andar]
entry/apagaLuz
exit/ligaLuz
tempoEsgotado[botões 
actual=termo]/põeTermo(sobe)
tempoEsgotado
[actual < termo]
tempoEsgotado[botões=]
botãoPremido(tipo,andar)
[actual>andar]
PáraDescida
abrePorta
ASubir
Parado
tempoEsgotado
[actual > termo]
PáraSubida
fechaPorta/anulaTempo
fechaPorta/anulaTempo
PortaAbertaD
atinge(andar)[andar 
pedidosSubir  destinos 
{termo}]/actualiza(andar),
iniciaTempo, limpa(subir, andar)
atinge(andar)[andar 
pedidosDescer  destinos 
{termo}]/actualiza(andar),
iniciaTempo, limpa(descer, andar)
abrePorta
PortaAbertaS
tempoEsgotado[botões  actual=termo]/põeTermo(desce)
ADescer
atinge(andar)[andar  pedidosDescer  destinos  {termo}]/actualiza(andar)
Elevador - 4
Notas ao diagrama

Difícil o equilíbrio entre valores em atributos e número de
estados
• notem a ausência de atributo direcção e dois conjuntos de estados,
um para subir e outro para descer
• a actualização do atributo termo tem que respeitar as condições de
ser sempre o máximo (mínimo) dos botões premidos durante a
subida (descida), não podendo ultrapassar o extremo



“truque” - evento fechaPorta põe a zero o atraso para forçar
indirectamente o evento fimDeEspera
existe um super-estado com uma transição
robustez (tolerância a falhas)
• incluir eventos a assinalar os extremos e a fazer transições para os
estados de paragem opostos, com as respectivas limpezas de dados
• introduz redundância, pois não existe nenhuma sequência de eventos
válida que pudesse levar à tentativa de ultrapassar um extremo
Elevador - 5
Redução de estados
Descanso
atinge(andar)[andar 
paragens(direcção) 
{termo}]/actualiza(andar)
botãoPremido/põeTermo
Mover
tempoEsgotado
[botões=]
tempoEsgotado[botões 
actual=termo]/inverte,põeTermo
tempoEsgotado
[actual  termo]
atinge(andar)[andar  paragens(direcção)
 {termo}]/actualiza(andar),
iniciaTempo, limpa(andar)
fechaPorta/anulaTempo
Parado
PortaAberta
abrePorta
Elevador - 6
Download

Elevador