voiture de machine d'état de Java

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

voiture de machine d'état de Java
J'ai essayé la machine Spring State
Qu'est-ce que JVM (Java Virtual Machine)?
Java
Java
Distributeur automatique d'échantillons fabriqué avec Java
Java marque les documents PPT comme état final
Échantillon de distributeur automatique fabriqué avec Java (classification)
Distributeur automatique fabriqué avec Java (piloté par domaine)