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