掲示板一覧   -   トピック一覧
   Enterprise Architect 全般
     連結点要素を利用したソースコード


スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
ukkie(未登録ゲスト)
投稿日時: 2010-7-1 13:11

連結点要素を利用したソースコード

「ステートマシン図からのソースコード生成 機能ガイド」の12ページの一番上の「連結点要素を利用した例」のソースコードを生成すると、以下のようになりました。

*********************************************
void ActiveClass01_stateMachine_State1(ActiveClass01* this , int command)
{
switch(command)
{
case this->Do:
{
// Do Behaviors..
// State's Transitions
if((b==1) && (a==1))
{
this->nextState = this->StateMachine_State2;
}
if((a==1))
{
this->nextState = this->StateMachine_State3;
}
if((b==1) && (a==1))
{
this->nextState = this->StateMachine_State2;
}
if((b!=1) && (a==1))
{
this->nextState = this->StateMachine_State3;
}
if((b!=1) && (a==1))
{
this->nextState = this->StateMachine_State3;
}
if((b==1) && (a==1))
{
this->nextState = this->StateMachine_State2;
}
break;
}
default:
{
break;
}
}
}
*********************************************

なぜこのような冗長な変換をするのでしょうか(最初は
もっと自然だったと思いますが、途中から↑のように
なったような気がします)

それと、「それ以外」を示すelseのような記述は出来ませんか。
例えば↑の例だと、b!=1とするよりもelseとした方が
わかりやすいと思います。
tkouno
投稿日時: 2010-7-1 14:09
EA Administrator
投稿: 3939

Re: 連結点要素を利用したソースコード

まず、最初の問題ですが、いただいた内容とEnterprise Architectの
動作のルールを考えますと、今回のモデルで、今回のif文と
同じ数の遷移がモデル上に実際に定義されているのではないかと
推測しました。

問題の遷移に関係する連結点要素をダブルクリックして
プロパティ画面を表示し、「接続」のタブに表示される
接続の本数が、意図している本数(3本)と一致しているかどうか
ご確認ください。

もう1点の「それ以外」の件ですが、UMLの仕様としては
遷移の条件が評価される順序は不定です。そのため、
elseのような条件の表現は、モデルとして適切ではなく、
ツールとしても対応が難しいことをご理解いただけますと助かります。
ukkie(未登録ゲスト)
投稿日時: 2010-7-1 14:27

Re: 連結点要素を利用したソースコード

プロジェクトプラウザに、連結点が2つあったので、一つを
モデルから完全に削除すると、以下のような正しいコード
となりました。

void ActiveClass01_stateMachine_State1(ActiveClass01* this , int command)
{
switch(command)
{
case this->Do:
{
// Do Behaviors..
// State's Transitions
if((b==1) && (a==1))
{
this->nextState = this->StateMachine_State2;
}
if((b!=1) && (a==1))
{
this->nextState = this->StateMachine_State3;
}
break;
}
default:
{
break;
}
}
}

要素をデリートキーで消しても、プロジェクトブラウザに
残ったままですが、それが今回のように不具合の原因に
なるということでしょうか?

要素をデリートキーで消すと
プロジェクトブラウザ上の表示がなんらかの方法で
(字が灰色になるとか)変わると
わかりやすいと思うのですが。

elseの件は残念ですね。今後の開発で、要望として考慮
して頂けるとうれしいです。
tkouno
投稿日時: 2010-7-1 14:56
EA Administrator
投稿: 3939

Re: 連結点要素を利用したソースコード

お忙しい中ご確認ありがとうございました。
正しくコードが生成されるようになったとのことで、安心しました。

要素の削除については、以下の「良くある質問」のページにある
「ダイアグラムの要素を削除してもプロジェクトブラウザに要素が残る」の項目が参考になるかと思います。

https://www.sparxsystems.jp/products/EA/faq/faq_9.htm#faq_9_06

elseの件につきましては、UMLの仕様として定義されていないこともあり、
現時点ではツールとして対応することは考えていません。

こうした結果が必要な方については、それぞれの方で
独自の記法を定義し(例えばガード条件にelseと入力する、等)、その
定義に応じてコード生成の結果をカスタマイズする方法などで
ご対応いただければと思います。

ご要望に添えず、申し訳ございません。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ