オブジェクト指向モデリングでは、状態機械(state machine)が動的モデルの核となるモデル要素です。
状態機械はネスト状態をサポートした本格的なものをScala DSLとして組み込み済みです。しかし、Mindmap DSLとSmartDox DSLで定義できるようにはなっていないので、文法の拡張を行ない定義可能にする予定です。
まず、最初のターゲットとしてScala DSLのフルスペックの状態機械ではなく、Javaの属性として変数領域を確保するための情報を定義する範囲でのDSL化を行なっています。
MindmapModeling
状態機械のために、MindmapModelingのトップクラスの枝であるBOI構造枝に「状態機械」を追加しました。各状態機械はこの枝の下に配置します。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk8BjPhzJ8BECQAIvbzq6unK54f0Y_tD61H9Pkf0cauvyTPOuAbm2cz1tXiinuUaG2Kp8VWtpK3nAHh8pNafFimjqGK7zdGow7q6RAnWdYgnvrA2qunWC9yepkJ5tIfK0XCpo2s-3n9Io/s400/grammar-statemachine-mm.png)
以下のようにしてクラス図を生成することができます。
$ sm -diagram statemachine.xmind
このマインドマップから生成されるクラス図です。3つの状態「開始」、「実行中」、「終了」を持つ状態機械「進行」が定義されています。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZz0T26h8ERzj3PxT6GG3rgNnoDi0n3HWQjPt36w3Jv_asScw-c-Mh0cFerTm8xCURYF4GAyGyTvJ_d4m7NfByhGr2lI3va00qYg-8G_ZnSYKq6cP_GIwKD0VnpTmBTf1jQsaOVZVf3dc/s400/grammar-statemachine-xmind.png)
SmartDox DSL
上のMindmapModeling文法に対応するSmartDox DSLは以下になります。
#+title: 状態機械/StateMachine * StateMachine ** 進行 #+caption: 状態 | name | |--------| | 開始 | | 実行中 | | 終了 |
このDSLから以下のようにしてクラス図を生成することができます。
$ sm -diagram statemachine.org
生成されるクラス図は以下になります。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRYFVsqHmQ9AWiyAzi9wqXslFbYjC2bNd1bhPmgFYKtQNJve8wD2-OLWyxPl-4hyphenhyphen6OAQeRa-TKPK7Z415Ge2BQPU20Q08eZhRzkBObOKFpXI6LQz5T9y5QPx6DsRdN5pHPtxETnxg_ulg/s400/grammar-statemachine-org.png)
ノート
状態機械内の状態遷移を記述するSmartDox DSLおよびMindmapModelingの文法は現在検討中です。
最終的には、この状態機械モデルからJavaやScalaプログラムの生成まで行う予定です。
諸元
SimpleModeler Version 0.4.0-RC5-SNAPSHOT (20121126)
SimpleModeler 0.4.0-RC4から少し手を入れたバージョンなので、0.4.0-RC4とは出力されるクラス図が若干異なります。