net.eduvax.util
public class StateMachine<ST,ET> extends java.lang.Object implements Observable<StateMachine<ST,ET>>
Automate générique. Le comportement de l'automate et la maintenance de son état interne sont défini par des transitions. Chaque transition est une règle qui précise depuis un état origine donnée, l'état cible à atteindre. Pour autoriser la bascule d'un état à un autre il est donc nécessaire que l'automate possède la transition qui le décrit. Dans le cas contraire la transition est refusée.
ST désigne le type qui modélise un état (en général un enum ou un int).
ET désigne le type qui modélise un événement, c'est à dire le phénomène qui induit un changement d'état (par exemple pour un interpréteur de texte, il pourra s'agir de classes de caractères).
Modifier and Type | Field and Description |
---|---|
private ET |
_lastEvent
Dernier evenement à l'origine d'une transition.
|
private ObserverManager<StateMachine<ST,ET>> |
_obsManager
Gestionnaire observateurs.
|
private ST |
_state
Etat courant de l'automate
|
private java.util.Hashtable<ST,java.util.Hashtable<ET,ST>> |
_transitions
table des transitions valides
dico indexé par les états de dico indexé par les evenements
|
Constructor and Description |
---|
StateMachine(ST startState)
Creation automate
|
Modifier and Type | Method and Description |
---|---|
void |
addTransition(ST from,
ET ev,
ST to)
Ajouter une transition au graphe d'états de
l'automate
|
java.lang.Iterable<ET> |
getAllowedTransition() |
ET |
getLastEvent()
Obtenir l'événement qui a provoqué la dernière transition
Attention, la valeur retourné n'est pas définie tant qu'aucune
transition n'a eu lieu.
|
ObserverManager<StateMachine<ST,ET>> |
getObserverManager()
Get this observable observer registration manager.
|
ST |
getState() |
boolean |
isTransitionAllowed(ET ev) |
boolean |
runTransition(ET ev) |
private ET _lastEvent
private ST _state
private java.util.Hashtable<ST,java.util.Hashtable<ET,ST>> _transitions
dico indexé par les états de dico indexé par les evenements
private ObserverManager<StateMachine<ST,ET>> _obsManager
public StateMachine(ST startState)
startState
- Etat initial de l'automatepublic ET getLastEvent()
Attention, la valeur retourné n'est pas définie tant qu'aucune transition n'a eu lieu.
public boolean isTransitionAllowed(ET ev)
public java.lang.Iterable<ET> getAllowedTransition()
public boolean runTransition(ET ev)
ev
- Evenement à soummettre à l'automatepublic void addTransition(ST from, ET ev, ST to)
from
- Etat origineev
- Evenement associé à la transitionto
- Etat ciblepublic ST getState()
public ObserverManager<StateMachine<ST,ET>> getObserverManager()
Observable
getObserverManager
in interface Observable<StateMachine<ST,ET>>