Enum e máquina de estado

4 respostas
Dieval_Guizelini

Senhores,

eu posso facilmente utilizar os tipos enum para representar os estado de uma máquina, por exemplo:

public enum CSVEstado { A,B,C; }
Mas, existe alguma forma de eu controlar as transições de estado. Por exemplo, do estado A eu posso mudar para A,B e C. Do estado B eu posso mudar para A ou B. E do estado C posso ir para A,B ou C. (ver a figura em anexo).

Como posso fazer para que quando o estado do objeto for alterado do estado B para C gere por exemplo um java.lang.IllegalStateException?

Terei que encapsular um objeto desse enum em uma classe para realizar esse tipo de controle?

vw

4 Respostas

dudaskank

É, acredito que vc vai ter de fazer isso sim. Colocar um setEstado() e dentro dele realizar essa lógica que você descreveu logo acima. Não conheço outro meio para fazer isso

:slight_smile:

Marky.Vasconcelos

Ou então no enum ter um método como getNextEstado e te retorna o proximo possivel

ViniGodoy

Oi professor,

Dê uma olhada nessa excelente referência sobre máquinas de estados escrita por Mat Buckland:
http://www.ai-junkie.com/architecture/state_driven/tut_state1.html

Ele mostra uma implementação usando o padrão State e creio que poderia ser facilmente adaptada para o contexto dos enums.

ViniGodoy

PS: Essa máquina representa os estados de um Analisador Léxico?
Nesse caso, não seria melhor recorrer a um automato finito, ou mesmo a uma ferramenta como o antlr?

Criado 30 de novembro de 2007
Ultima resposta 30 de nov. de 2007
Respostas 4
Participantes 4