60 likes | 180 Views
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: gtd@fe.up.pt URL: http://www.fe.up.pt. Especificação.
E N D
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: gtd@fe.up.pt URL: http://www.fe.up.pt
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 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 Diagrama de classe
Diagrama de estados atinge(andar)[andar pedidosSubir destinos {termo}]/actualiza(andar) Descanso botãoPremido(tipo,andar) [actual<andar] ASubir entry/apagaLuz exit/ligaLuz tempoEsgotado[botões actual=termo]/põeTermo(sobe) atinge(andar)[andar pedidosSubir destinos {termo}]/actualiza(andar), iniciaTempo, limpa(subir, andar) tempoEsgotado[botões=] tempoEsgotado [actual < termo] botãoPremido(tipo,andar) [actual>andar] Parado PáraDescida PáraSubida tempoEsgotado [actual > termo] abrePorta fechaPorta/anulaTempo fechaPorta/anulaTempo PortaAbertaD atinge(andar)[andar pedidosDescer destinos {termo}]/actualiza(andar), iniciaTempo, limpa(descer, andar) PortaAbertaS abrePorta tempoEsgotado[botões actual=termo]/põeTermo(desce) ADescer atinge(andar)[andar pedidosDescer destinos {termo}]/actualiza(andar)
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
Redução de estados atinge(andar)[andar paragens(direcção) {termo}]/actualiza(andar) Descanso botãoPremido/põeTermo Mover tempoEsgotado[botões actual=termo]/inverte,põeTermo tempoEsgotado [botões=] tempoEsgotado [actual termo] atinge(andar)[andar paragens(direcção) {termo}]/actualiza(andar), iniciaTempo, limpa(andar) fechaPorta/anulaTempo Parado PortaAberta abrePorta