jp.go.aist.rtm.RTC
クラス StateMachine<STATE,LISTENER>

java.lang.Object
  上位を拡張 jp.go.aist.rtm.RTC.StateMachine<STATE,LISTENER>

public class StateMachine<STATE,LISTENER>
extends java.lang.Object

状態マシンクラスです。
StateMachine クラスは状態マシンを実現するクラスです。
例: ActiveObjectは状態マシンを持つアクティブオブジェクトであるとします。 状態は3状態 INACTIVE, ACTIVE, ERROR あり、各状態でのEntryやExit動作を 定義したいとすると、以下のように実現されます。

 class ActiveObject {
 
   public ActiveObject() { 
     m_sm = new StateMachine(3);
     m_sm.setListener(this); 
  
     m_sm.setExitAction(INACTIVE, new inactiveExit()); 
       : 
     m_sm.setPostDoAction(ERROR, new errorPostDo()); 
     m_sm.setTransitionAction(new tratransitionnsition()); 
     
     StateHolder st = new StateHolder();
     st.prev = LifeCycleState.INACTIVE_STATE;
     st.curr = LifeCycleState.INACTIVE_STATE;
     st.next = LifeCycleState.INACTIVE_STATE;
     m_sm.setStartState(st);
     m_sm.goTo(LifeCycleState.INACTIVE_STATE);
   }
  
   private class inactiveExit implements StateAction {
       public Object doAction(StateHolder state) {
       }
   }
     : 
   private class errorPostDo implements StateAction {
       public Object doAction(StateHolder state) {
       }
   }
   private class tratransitionnsition implements StateAction {
       public Object doAction(StateHolder state) {
       }
   }
  
   private StateMachine m_sm; 
 }
 
状態を持たせたいクラスは以下の条件を満たすように実装しなければなりません。
  1. 状態を定義
  2. StateMachine のテンプレート引数は、
    <状態の型(MyState), アクション関数の戻り型(RESULT), 当該オブジェクトの型>
  3. StateMachine のコンストラクタ引数は状態の数
    1. 各状態毎に, set(Entry|PreDo|Do|PostDo|Exit)Action でアクションを実行するクラスを設定
    2. 状態遷移時のアクションを実行するクラスを setTransitionAction() で設定。
  4. 遷移時のアクションは、与えられた現在状態、次状態、前状態を元に、 ユーザが実装しなければなりません。
  5. 状態の変更は goTo() で、状態のチェックは isIn(state) で行います。
  6. goTo()は次状態を強制的にセットする関数であり、遷移の可否は、 ユーザが現在状態を取得し判断するロジックを実装しなければなりません。
このクラスは、一つの状態に対して、 5つのアクションが定義することができます。 Transition action はあらゆる状態間遷移で呼び出されるアクションで、 その振る舞いはユーザが定義しなければなりません。 このクラスは以下のようなタイミングで各アクションが実行されます。


フィールドの概要
protected  java.util.HashMap<STATE,StateAction> m_do
          Do Action
protected  java.util.HashMap<STATE,StateAction> m_entry
          Entry Action
protected  java.util.HashMap<STATE,StateAction> m_exit
          Exit Action
protected  LISTENER m_listener
          リスナー
protected  int m_num
          状態数
protected  java.util.HashMap<STATE,StateAction> m_postdo
          Post Do Action
protected  java.util.HashMap<STATE,StateAction> m_predo
          Pre Do Action
protected  StateHolder<STATE> m_states
          ステートマシンが保持する状態
protected  StateAction m_transit
          遷移Action
 
コンストラクタの概要
StateMachine(int num_of_state)
          コンストラクタです。
 
メソッドの概要
 STATE getState()
          現在の状態を取得します。
 void goTo(STATE state)
          状態を変更します。
 boolean isIn(STATE state)
          現在状態を確認します。
 boolean setDoAction(STATE state, StateAction call_back)
          Do action 関数を登録します。
 boolean setEntryAction(STATE state, StateAction call_back)
          Entry action 関数を登録します。
 boolean setExitAction(STATE state, StateAction call_back)
          Exit action 関数を登録します。
 void setListener(LISTENER listener)
          Listener オブジェクトを登録します。
 void setNOP()
          NOP関数を登録します。
 boolean setPostDoAction(STATE state, StateAction call_back)
          Post action 関数を登録します。
 boolean setPreDoAction(STATE state, StateAction call_back)
          PreDo action 関数を登録します。
 void setStartState(StateHolder states)
          初期状態をセットします。
 boolean setTransitionAction(StateAction call_back)
          State transition action 関数を登録します。
 void worker()
          StateMachineの駆動用クラスです。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

m_num

protected int m_num

状態数


m_listener

protected LISTENER m_listener

リスナー


m_entry

protected java.util.HashMap<STATE,StateAction> m_entry

Entry Action


m_predo

protected java.util.HashMap<STATE,StateAction> m_predo

Pre Do Action


m_do

protected java.util.HashMap<STATE,StateAction> m_do

Do Action


m_postdo

protected java.util.HashMap<STATE,StateAction> m_postdo

Post Do Action


m_exit

protected java.util.HashMap<STATE,StateAction> m_exit

Exit Action


m_transit

protected StateAction m_transit

遷移Action


m_states

protected StateHolder<STATE> m_states

ステートマシンが保持する状態

コンストラクタの詳細

StateMachine

public StateMachine(int num_of_state)

コンストラクタです。

パラメータ:
num_of_state - 状態数
メソッドの詳細

setNOP

public void setNOP()

NOP関数を登録します。


setListener

public void setListener(LISTENER listener)

Listener オブジェクトを登録します。

パラメータ:
listener - 登録対象リスナー

setEntryAction

public boolean setEntryAction(STATE state,
                              StateAction call_back)

Entry action 関数を登録します。

パラメータ:
state - 登録対象状態
call_back - 実行アクションクラス
戻り値:
処理結果(True/False)

setPreDoAction

public boolean setPreDoAction(STATE state,
                              StateAction call_back)

PreDo action 関数を登録します。

パラメータ:
state - 登録対象状態
call_back - 実行アクションクラス
戻り値:
処理結果(True/False)

setDoAction

public boolean setDoAction(STATE state,
                           StateAction call_back)

Do action 関数を登録します。

パラメータ:
state - 登録対象状態
call_back - 実行アクションクラス
戻り値:
処理結果(True/False)

setPostDoAction

public boolean setPostDoAction(STATE state,
                               StateAction call_back)

Post action 関数を登録します。

パラメータ:
state - 登録対象状態
call_back - 実行アクションクラス
戻り値:
処理結果(True/False)

setExitAction

public boolean setExitAction(STATE state,
                             StateAction call_back)

Exit action 関数を登録します。

パラメータ:
state - 登録対象状態
call_back - 実行アクションクラス
戻り値:
処理結果(True/False)

setTransitionAction

public boolean setTransitionAction(StateAction call_back)

State transition action 関数を登録します。

パラメータ:
call_back - 実行アクションクラス
戻り値:
処理結果(True/False)

setStartState

public void setStartState(StateHolder states)

初期状態をセットします。

パラメータ:
states - 初期状態(1つ前,現在,遷移予定)

getState

public STATE getState()

現在の状態を取得します。

戻り値:
現在の状態

isIn

public boolean isIn(STATE state)

現在状態を確認します。

パラメータ:
state - 確認対象の状態
戻り値:
確認結果

goTo

public void goTo(STATE state)

状態を変更します。

パラメータ:
state - 遷移先の状態

worker

public void worker()

StateMachineの駆動用クラスです。