ステートマシン図からC言語のソースコードを出力するサンプル

Enterprise Architect Suiteシリーズでは、ステートマシン図などの振る舞い図からのソースコード生成をサポートしています。ただし、C言語のソースコード生成の場合には「オブジェクト指向のサポート」モードにのみ対応していました。ここでは、より一般的と思われるソースコード生成の結果になるようなカスタマイズの例をご紹介します。

なお、この例はあくまでも現時点でのサンプルです。追加・改善のご要望がありましたら、サポートにお寄せください。なお、C++言語で既定の生成結果とは異なる形式の出力を行うテンプレートはこちらをご覧ください

例として、以下のようなステートマシン図を考えます。


(↓状態turning_leftの中のステートマシン図)

このような場合に、外部からイベントを引き渡し、switch-case文で状態に応じて遷移するようなソースコードを生成する例を作成しました。なお、現在のサンプルから生成したすべての結果はこちらに掲載しています

上記の例であれば、以下のような形を配列を自動的に生成します。

○自動生成された、列挙値の定義

enum StateType
{
	ST_NOSTATE = 0,
	ST_sampleStateMachine_turning_left,
	ST_sampleStateMachine_turning_left_OFF,
	ST_sampleStateMachine_turning_left_ON,
	ST_sampleStateMachine_initialize,
	ST_sampleStateMachine_turning_right
};

enum Event{
	E_NOEVENT = 0,
	E_right,
	E_left,
	E_light_on,
	E_light_off
};
そして、外部からイベントを受け取り、状態遷移を行います。外部からイベントを発行する部分は、この生成機能では出力されません。

なお、プロジェクトブラウザの構成とクラス図は以下のようになっています。

このサンプルクラスに対して「ソースコードの生成」を実行すると、上記のコードが生成されます。なお、現在のサンプルから生成したすべての結果はこちらに掲載しています

このコード生成のサンプルでは、イベントを引き渡すためのperformEvent関数も提供しています。このperformEvent関数を利用する場合の呼び出し方の例は、次の通りです。

#include "sample.h"

initializeStateMachine();
performEvent(E_left);
performEvent(E_right);

このサンプルでは、doなどのアクションや遷移のアクションとしてsampleクラスで定義されている関数を直接割り当て、その関数内で処理を記述する方法になっています。しかし、それぞれのアクションの処理を直接記述することも可能です。

このサンプルの利用について

このサンプルにご興味がある方・実際に試したい方は、サポートにご連絡ください。上記の内容を含むEAPファイルをお渡しいたします。改善のご要望などがありましたら、ぜひお寄せください。

なお、このサンプルはEnterprise Architect Suiteの各エディションでのみ動作するため、サポートが有効なEnterprise Architect Suite日本語版の各エディションをお持ちの方に限定させていただきます。また、Enterprise Architectの内部動作の都合上、「オブジェクト指向のサポート」モードを有効にしてください。(このテンプレートを利用すれば、「オブジェクト指向のサポート」モードが有効でもオブジェクト指向的なソースコードは生成しません。)

このサンプルの制限・注意:

  • このサンプルは、特定のOS/環境や言語処理系を想定したものではありませんので、必要に応じてカスタマイズしてご利用下さい。
  • 選択点・連結点・フォーク&ジョインはすべて同じコード生成結果になります。
  • 入れ子の状態は、1階層のみ対応しています。
  • バージョン10.0で表現可能になった内部遷移には未対応です。
  • このサンプルは、状態マシンが1つのみ実行されるという前提で、クラス要素に定義した属性をそのまま変数として出力しています。複数の状態マシンを生成できるようにするためには、クラスの属性を構造体にまとめて、各関数の引数で渡す形にする必要があります。

カスタマイズについて

この出力内容は、すべてEnterprise Architectのコード生成テンプレートをカスタマイズして作成したサンプルです。必要に応じてカスタマイズして利用することを前提としています。カスタマイズについては、有償でのカスタマイズサービスもございます。

なお、「生成元のステートマシン図」「生成結果となるソースコード」のサンプルを提供いただける場合に、弊社が無料でテンプレートをカスタマイズし、Enterprise Architectユーザーに広く公開するという選択肢もあります。(実施するかどうかは内容を見て、弊社で検討させていただきます。) ご興味がある方は、サポートにご連絡ください
(ただし、この場合には全ての場合において正しく動作するレベルまで作成するかどうか、は保証できません。)

補足

ステートマシン図からのソースコード生成の概要は、こちらのページをご覧ください。また、PDFドキュメント「ステートマシン図からのコード生成 機能ガイド」も参考になります。