KAOS (73) 図式を使用する: 状態機械図 (4.3.7ー4)

我々のモデリングアプローチ,特にステートチャート言語は,反応型のシステムに有効である.そのふるまいは複雑で,よく知られているように,見つけにくい誤りに満ちた仕様上の問題を引き起こす.多くのリアルタイムシステムは,相当する 1

ステートチャートは,いまではよく知られている.しかし,OMT手法で取りあげられる前は,余り一般的ではなかった.また,ステートチャートの記法の全てが採用されているわけではない.

冒頭の文は,数少ないHarel氏の著作から引用してる 2.副題は,STATEMATEアプローチである.STATEMATEはツールの名前である.かつて私はSTATEMATEのユーザだった(動作環境は,SUN OS).

それで少し振り返る.STATEMATEを作っていた I-Logix社は,DOORSで有名だったTelelogic社に買収された.Telelogic社はRational社に買収され,現時点ではIBM社の1部門である.この食物連鎖のような移り変わりを見ているとツールビジネスの難しさを感じる.しかし,それでも残っているのは,オリジナルのアイデアが優れていたからに違いない.

さて,ステートチャートには幾つもの特徴がある.もっとも代表的なものは直交表現である.

スクリーンショット 2014-10-16 21.18.32

ステートチャートの直交表現(AND状態)

上記で,点線 3で仕切られた2つの状態遷移図は,並列に動作することを示している.上図と同値で,直交表現を使用しない状態遷移図だと以下になる.

スクリーンショット 2014-10-16 21.18.41

非直交表現

如何に直交表現が端的に表現できるかが分かる.

例えば,初期状態(状態Uと状態X,非直交表現では,U_X)で,イベントEを受けたときには,状態Vと状態Y(非直交表現では,V_Y)に移動するが,見やすさは,直交表現が優る.

もちろん,2つ状態遷移図を並べて,両者は並行動作するといっても良いのだが,図式として説明を不要にしている.また,VからUへの遷移にでてくるF[in(Y)]は,「(隣の状態遷移図で)Yにいるならば,FイベントでUに遷移する」という意味になる.変数のスコープも含めて扱いが容易である.

ちなみに,「in(S)」キーワード は,「システムがS状態にいる」として,オリジナルのステートチャートでは定義されている.このほかにもタイムアウトやクロックなどの様々なキーワードが定義されている.その一部は,しばらくしたところで紹介があるので,ここでは省略する.

(nil)

Notes:

  1. David Harel and Michal Politi.  Modeling Reactive Systems with Statecharts: The Statemate Approach (1st ed.). McGraw-Hill, Inc, 1998, p.3
  2. Harel氏は,Computers Ltd. what they really can’t doという小冊子だが見事な読みものも書いている
  3. 点線自身をUMLでは,アンドラインと呼ぶ.しかし,STATEMATEでは,特別の呼び名はない.他の図式でもそうだが,実線のノードをまとめるときに点線を用いている.また,点線を含む状態のことを,「AND状態(AND state)」と呼んでいる.

KAOS (72) 図式を使用する: 状態機械図 (4.3.7ー3)

今回は,Mealy風の会議スケジュール管理システムの例である(原書からは変更している).

スクリーンショット 2014-10-18 10.38.05

会議スケジュール管理システムのMealy風の状態遷移図の例

Mealy風にアクション(初期の状態機械の例だと出力)は,遷移に付随している.

Moore風に書くこともできる.但し,Moore型の場合は,Entryアクション(状態に入ったときに一度だけ実行される)で,状態中で出力を記述する.そのために状態名が変わることに注意する必要である.例えば,参加予定者への問い合わせは,状態中で問い合わせることになるので,「問い合わせ完了」ではなく「問い合わせ中」とする必要がある.

もう一つある.ここでは,問い合わせというのは,返事をもらうまでを含んでいる.システムが全員の返事をもらうまでには時間が掛かるので,「問い合わせ中」の副状態機械を作り,詳細なふるまいは,副状態機械側で記述することが望ましいかもしれない.

さて,Syntropyの太陽の話に戻ってみる.朝日はたちどころに鳥に届く.鳥はさえずるのがアクションないしはアクティビティに相当する.最終的には,問い合わせの詳細記述が必要だと判断するにしても,高い抽象度の記述はあって良い.鳥が歌を奏でるか否かは太陽にとって関係ないように,返事の有りなしに関わらず,開催予定期日には近づくのだから.

(nil)

KAOS (71) 図式を使用する: 状態機械図 (4.3.7ー2)

有限状態機械は,記憶素子を持つスイッチング回路からコンピュータ全体に至るシステム理論的モデルでもあるし,またコンピュータのプログラムの構造など,ソフトウェアシステムを説明するときにも用いられる重要な概念である 1

前回の続きである.

1が連続するときに,1を出力する機械(それ以外はゼロを出力)は,以下のようにも書ける.

Mealy

別の状態機械の書き方(Mealy)

ずいぶんとシンプルになっている.こちらの記法が状態遷移図としては,見慣れているかもしれない.

遷移に付随しているラベルは,入力と出力を表している.例えば,1/0 であれば,入力が1のときに0を出力することを示している.全く両者は等価である.

歴史的には,前回の記法は,Moore型と云われ,今回の書き方がMealy型と呼ばれる.共に50年以上前に活躍した研究者の名前にちなんでいる.簡単に違いをまとめておく.

Moore型とMealy型の違い
Moore型 出力は状態だけで決まる 状態中のアクション(e.g. entry action)
Mealy型 出力は状態と入力で決まる 遷移上のアクション

最後のカラムは,例えばUMLの有限状態機械図で記載する場合の記述場所である.混在した書き方も可能なのだが,少なくとも要求分析段階では,望ましくない.

(nil)

Notes:

  1. 岩田茂樹,笠井琢美,「有限オートマトン入門」,森北出版,1986.前回と今回はこの教科書にある例を用いていています