Modegramming Styleブログではモデリングとプログラミングの一体化を指向したModegrammingというコンセプトを提唱しており、その実現のための技術体系としてSimpleModelingを整備しています。
プロダクト
ちょうど一年前の記事「SimpleModeling」では、このSimpleModelingの技術体系の構成要素である以下の4つのプロダクトの開発について説明しました。ちょうど一年前の記事「SimpleModeling」では、このSimpleModelingの技術体系の構成要素である以下の4つのプロダクトの開発について説明しました。
- SmartDox
- 文書処理系
- SimpleModeler
- モデルコンパイラ
- Kaleidox
- アクション言語
- Arcadia
- Webフレームワーク
この中で、この一年は特にアクション言語であるKaleidoxの開発を進めてきました。
開発方法論
7月からオブジェクト指向開発方法論の講座を始めました。
UML(Unified Modeling Language)/UP(Unified Process)の基本を押さえつつ、オブジェクト指向開発方法論の現在地を整理する目的です。
その上で、最終的には上記のプロダクトを活用したモデル駆動開発と連携できればと考えています。
Cozy
Kaleidoxの開発も順調に進んできたので、Kaleidox, SmartDox, SimpleModeler, Arcadiaを統合した、モデル駆動開発のワークベンチとして新たなプロダクトCozyを立ち上げました。
モデルコンパイラにアクション言語、文書処理系、Webフレームワークを統合し連携することでより有効な活用を行うことができるでしょう。
状態機械図
Kaleidox, SmartDox, SimpleModeler, Arcadiaを統合することにより、KaleidoxからSimpleModelerのモデル生成機能などを直接使用できるようになりました。
今回はSimpleModelerの持つ状態機械図生成機能を使ってKaleidox上の状態機械モデルの状態機械図を生成してみます。
状態機械
まず「Kaleidox/状態機械:ヒストリー」で使用した状態機械の状態機械図を生成します。
以下のモデルでは状態機械purchaseを定義しています。
* event
event=[{
name="confirm"
},{
name="reject"
},{
name="delivered"
},{
name="cancel"
},{
name="suspend"
},{
name="resume"
}]
* statemachine
statemachine={
name="purchase"
state=[{
name=INIT
transition=[{
to=running
}]
},{
name=canceled
transition=[{
to=FINAL
}]
},{
name=suspended
transition=[{
guard=resume
to=HISTORY
}]
}]
statemachine=[{
name="running"
state=[{
name=applying
transition=[{
to=confirming
}]
},{
name=confirming
transition=[{
guard=confirm
to=confirmed
},{
guard=reject
to=rejected
}]
},{
name=confirmed
transition=[{
to=delivering
}]
},{
name=rejected
transition=[{
to=FINAL
}]
},{
name=delivering
transition=[{
guard=delivered
to=delivered
}]
},{
name=delivered
transition=[{
to=FINAL
}]
}]
transition=[{
guard=cancel
to=canceled
},{
guard=suspend
to=suspended
}]
}]
}
statemachine-diagram関数で上記の状態機械purchaseから状態機械図を生成します。
cozy> statemachine-diagram 'purchase Image
画像をviewコマンドで表示します。Kaleidox上で定義した状態機械の状態機械図として表示することができました。
cozy> :view
エンティティ
次は「Kaleidox状態機械/エンティティの状態遷移」で使用した状態機械を持つエンティティです。
エンティティsalesorderが状態機械statusを持っています。
* event
event=[{
name="confirm"
},{
name="reject"
},{
name="delivered"
},{
name="cancel"
},{
name="suspend"
},{
name="resume"
}]
* entity
** salesorder
*** features
table=salesorder
*** attributes
| Name | Type | Multiplicity |
|------+-------+--------------|
| id | token | 1 |
| price| int | 1 |
*** statemachines
**** status
state=[{
name=INIT
transition=[{
to=running
}]
},{
name=canceled
transition=[{
to=FINAL
}]
},{
name=suspended
transition=[{
guard=resume
to=HISTORY
}]
}]
statemachine=[{
name="running"
state=[{
name=applying
transition=[{
to=confirming
}]
},{
name=confirming
transition=[{
guard=confirm
to=confirmed
},{
guard=reject
to=rejected
}]
},{
name=confirmed
transition=[{
to=delivering
}]
},{
name=rejected
transition=[{
to=FINAL
}]
},{
name=delivering
transition=[{
guard=delivered
to=delivered
}]
},{
name=delivered
transition=[{
to=FINAL
}]
}]
transition=[{
guard=cancel
to=canceled
},{
guard=suspend
to=suspended
}]
}]
statemachine-diagram関数で上記のエンティティpurchaseが持っている状態機械statusの状態機械図を生成します。
cozy> statemachine-diagram 'salesorder Image
画像をviewコマンドで表示します。こちらもKaleidox上で定義した状態機械の状態機械図として表示することができました。
状態機械モデルとしては前出のpurchaseと同じなので、同じ状態機械図になっています。
cozy> :view
まとめ
Kaleidoxの開発もいい感じに進み、Cozyの枠組みの中でSimpleModelerと連携して状態機械図を生成することができるようになりました。
今年はCozyの各種機能の連携を強化し、効果的なモデル駆動開発の環境づくりに取り組んでいきたいと思います。
諸元
- Cozy
- 0.0.2
