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

Enterprise Architectの一部のエディションでは、ステートマシン図などの振る舞い図からのソースコード生成が可能です。ただし、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クラスで定義されている関数を直接割り当て、その関数内で処理を記述する方法になっています。しかし、それぞれのアクションの処理を直接記述できます。

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

このサンプルにご興味がある方・実際に試したい方は、サポートにご連絡ください。上記の内容を含むプロジェクトファイルをお渡しいたします。

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

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

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

カスタマイズについて

この出力内容は、Enterprise Architectのコード生成テンプレートをカスタマイズして作成したサンプルです。必要に応じてさらにカスタマイズして利用することを前提としています。お客様自身で自由にカスタマイズし利用できます。なお、カスタマイズについては、有償でのカスタマイズサービスもあります。

補足

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