Table des matières ⇒ Java Algorithm Library-Artery-Sample
Q08_01.java
package jp.avaj.lib.algo;
import jp.avaj.lib.test.ArTest;
/**
ArStateMechine-Machine d'état-Voiture
・ Prenez la voiture comme un exemple très simple de la machine d'état
・ C'est trop facile par rapport à la voiture réelle, mais cela fait ce qui suit
・ Appuyez sur l'accélérateur ⇒ le moteur tourne ⇒ les roues tournent
・ Relâchez l'accélérateur ⇒ le moteur s'arrête ⇒ les roues s'arrêtent
-Dans cet exemple, ArStateMachineDefault est utilisé comme implémentation d'ArStateMachine.
-ArStateMachineDefault peut déclencher plus d'événements lorsque la machine d'état change
・ Accélérateur ⇒ moteur ⇒ La transmission des événements de roue utilise cette fonction.
*/
public class Q08_01 {
public static void main(String[] args) {
//Machine de condition de roue
ArStateMachineDefault wheel = new ArStateMachineDefault();
{
//Matrice de transition d'état
ArStateTransition[] matrix = new ArStateTransition[] {
//Événement d'arrêt pendant la rotation ⇒ Arrêt
new ArStateTransition(WheelState.ROTATE,WheelEvent.OFF,WheelState.STOP,null),
//Événement de fonctionnement à l'arrêt ⇒ Rotation
new ArStateTransition(WheelState.STOP,WheelEvent.ON,WheelState.ROTATE,null),
};
//Réglage initial,Initialement arrêté
wheel.init(WheelState.STOP, matrix);
}
//Machine d'état du moteur
ArStateMachineDefault engine = new ArStateMachineDefault();
{
//Matrice de transition d'état
ArStateTransition[] matrix = new ArStateTransition[] {
//Événement d'arrêt pendant la rotation ⇒ Stop, WheelEvent.Éteindre
new ArStateTransition(EngineState.ROTATE,EngineEvent.OFF,EngineState.STOP,WheelEvent.OFF),
//Démarrer l'événement à l'arrêt ⇒ Rotate, WheelEvent.Éteindre
new ArStateTransition(EngineState.STOP,EngineEvent.ON,EngineState.ROTATE,WheelEvent.ON)
};
//Réglage initial, initialement arrêté
engine.init(EngineState.STOP,matrix);
//Connectez-vous avec des roues(vrai connecte,faux déconnecte)⇒ L'événement est envoyé
engine.connect(wheel,true);
}
//Machine d'état d'accélérateur
ArStateMachineDefault accel = new ArStateMachineDefault();
{
//Matrice de transition d'état
ArStateTransition[] matrix = new ArStateTransition[] {
//Événement à libérer en marchant ⇒ OFF,EngineEvent.Éteindre
new ArStateTransition(AccelState.ON,AccelEvent.OFF,AccelState.OFF,EngineEvent.OFF),
//Événement sur lequel marcher en étant séparé ⇒ Allumer,EngineEvent.Allumer
new ArStateTransition(AccelState.OFF,AccelEvent.ON,AccelState.ON,EngineEvent.ON)
};
//Réglage initial, initialement séparé
accel.init(AccelState.OFF,matrix);
//Connectez-vous avec le moteur(vrai connecte,faux déconnecte)⇒ L'événement est envoyé
accel.connect(engine,true);
}
//Lancer un cas de test
ArTest.startTestCase("Q08_01");
//Montez sur l'accélérateur
accel.sendEvent(AccelEvent.ON);
//Assurez-vous que le moteur tourne
ArTest.equals("accel:on","expected",EngineState.ROTATE,"engine",engine.getState());
//Assurez-vous que les roues tournent
ArTest.equals("accel:on","expecteed",WheelState.ROTATE,"wheel",wheel.getState());
//Relâchez l'accélérateur
accel.sendEvent(AccelEvent.OFF);
//Assurez-vous que le moteur est arrêté
ArTest.equals("accel:off","expected",EngineState.STOP,"engine",engine.getState());
//Assurez-vous que les roues sont arrêtées
ArTest.equals("accel:off","expecteed",WheelState.STOP,"wheel",wheel.getState());
//Terminer le cas de test
ArTest.endTestCase();
}
/**État de l'accélérateur. */
static enum AccelState { ON,OFF; }
/**Événement à accélérateur. */
static enum AccelEvent { ON,OFF; }
/**État du moteur. */
static enum EngineState { ROTATE,STOP; }
/**Événement à moteur. */
static enum EngineEvent { ON,OFF; }
/**État de la roue. */
static enum WheelState { ROTATE,STOP; }
/**Événement à la roue. */
static enum WheelEvent { ON,OFF; }
}
Le résultat est le suivant.
result.txt
**** Q08_01 start ****
OK accel:on:expected=ROTATE:engine=ROTATE
OK accel:on:expecteed=ROTATE:wheel=ROTATE
OK accel:off:expected=STOP:engine=STOP
OK accel:off:expecteed=STOP:wheel=STOP
**** Q08_01 summary ****
test count = 4
success = 4
Recommended Posts