[ooaa main]  [object pasta2]   [essence] (旧blogはこちら)  [flickr]  [myspace]  [View Eiichi Hayashi's profile on LinkedIn] 

思いつきメモ(ステートドリブンプログラミング)

イベントドリブンに代わるステートドリブンプログラミングのことを以前書きましたが、言語レベルでステートドリブンをサポートしたら面白いんじゃないかというアイディアです。
イベントドリブンの欠点は、ある状態になるための処理をイベントごとに記述しなければならないので、処理が分散する傾向がある点と、必要な処理を選択してその状態が正常であることを保証することの設計コストが高いことです。

ステートドリブンプログラミングでは、その状態の定義と状態の移動ルールを書くだけなのでその状態の整合性をとるためのコストは少なくできることが予想できます。

クラス図からそのコンポーネントであるクラスごとの設計ができるなら、ステートチャートからその状態ごとの記述をするコンポーネントが記述できるんじゃないだろうか。
ステートパターンをクラスで実装するのではなくて、ステートを表現する独自の構文あるいは言語を作ることで、複雑な状態を扱うアプリを簡易に記述できないだろうか。

疑似言語としてclassのかわりに、状態をあわらす state というキーワードを仮に定義します。
リンクさきの遷移はイベントにより励起されます。
stateにもてるメソッドentryとexitは予約語、そのほかのメソッドも書くことができる。
実行時のstateはそれをグルーピングしたもののなかで現在のstateはかならず一つとる。

//開始状態の定義
state Start
{
 exit( ) next A
 {
 }
}

//状態 A の定義
state A
{
 //この状態にはいったときの処理
 //どこからくるかによってエントリー処理を切り替えることができる。
//無指定はすべて、指定したものはその状態とサブ状態が対象
 entry( Event e ) from Start
 {
 }
 entry( Event e ) from B
 {
 }

//出るときの処理
//出るときの処理 そのイベントタイプを受信すると状態Aに移行
 exit( ExitAEvent e ) next End
 {
 }
}

state End
{
}

単純にイベントが発生するたびに onとoffが切り替わる場合。

//開始状態の定義
state Start
{
 exit( ) next on
 {
 }
}

//状態 on の定義
state on
{
 //この状態にはいったときの処理
 //どこからくるかによってエントリー処理を切り替えることができる。
 entry( Event e )
 {
 }

//出るときの処理
 exit( Event e ) next off
 {
 }
}

//状態 off の定義
state off
{
 //この状態にはいったときの処理
 //どこからくるかによってエントリー処理を切り替えることができる。
 entry( Event e )
 {
 }

//出るときの処理
 exit( Event e ) next on
 {
 }
}

state End
{
}