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
          PostDo action 用コールバック関数
protected  java.util.HashMap<STATE,StateAction> m_predo
          PreDo action 用コールバック関数
protected  StateHolder<STATE> m_states
          現在の状態情報
protected  StateAction m_transit
          State transition 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)
          PostDo action 関数を登録する。
 boolean setPreDoAction(STATE state, StateAction call_back)
          PreDo action 関数を登録する。
 void setStartState(StateHolder states)
          初期状態をセットする。
 boolean setTransitionAction(StateAction call_back)
          State transition action 関数を登録する。
 void worker()
          駆動関数。
 
クラス 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
PreDo action 用コールバック関数


m_do

protected java.util.HashMap<STATE,StateAction> m_do
Do action 用コールバック関数


m_postdo

protected java.util.HashMap<STATE,StateAction> m_postdo
PostDo action 用コールバック関数


m_exit

protected java.util.HashMap<STATE,StateAction> m_exit
Exit action 用コールバック関数


m_transit

protected StateAction m_transit
State transition action 用コールバック関数


m_states

protected StateHolder<STATE> m_states
現在の状態情報

コンストラクタの詳細

StateMachine

public StateMachine(int num_of_state)
コンストラクタ

パラメータ:
num_of_state - ステートマシン中の状態数
メソッドの詳細

setNOP

public void setNOP()
NOP関数を登録する。

NOP関数(何もしない関数)を登録する。


setListener

public void setListener(LISTENER listener)
Listener オブジェクトを登録する。

各種アクション実行時に呼び出される Listener オブジェクトを 登録する。

パラメータ:
listener - 登録対象リスナーオブジェクト

setEntryAction

public boolean setEntryAction(STATE state,
                              StateAction call_back)
Entry action 関数を登録する。

各状態に入った際に実行される Entry action 用コールバック関数を 登録する。

パラメータ:
state - 登録対象状態
call_back - Entry action 用コールバック関数
戻り値:
アクション実行結果

setPreDoAction

public boolean setPreDoAction(STATE state,
                              StateAction call_back)
PreDo action 関数を登録する。

各状態内で実行される PreDo action 用コールバック関数を登録する。

パラメータ:
state - 登録対象状態
call_back - PreDo action 用コールバック関数
戻り値:
アクション実行結果

setDoAction

public boolean setDoAction(STATE state,
                           StateAction call_back)
Do action 関数を登録する。

各状態内で実行される Do action 用コールバック関数を登録する。

パラメータ:
state - 登録対象状態
call_back - Do action 用コールバック関数
戻り値:
アクション実行結果

setPostDoAction

public boolean setPostDoAction(STATE state,
                               StateAction call_back)
PostDo action 関数を登録する。

各状態内で実行される PostDo action 用コールバック関数を登録する。

パラメータ:
state - 登録対象状態
call_back - PostDo action 用コールバック関数
戻り値:
アクション実行結果

setExitAction

public boolean setExitAction(STATE state,
                             StateAction call_back)
Exit action 関数を登録する。

各状態内で実行される Exit action 用コールバック関数を登録する。 Set callback function for Exit action that is executed in each state.

パラメータ:
state - 登録対象状態
call_back - Exit action 用コールバック関数
戻り値:
アクション実行結果

setTransitionAction

public boolean setTransitionAction(StateAction call_back)
State transition action 関数を登録する。

状態遷移時に実行される State transition action 用コールバック関数を 登録する。

パラメータ:
call_back - State transition 用コールバック関数
戻り値:
アクション実行結果

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()
駆動関数。

ステートマシンの駆動関数。 実際の状態遷移および状態遷移発生時の各アクションの呼びだしを実行する。