掲示板一覧   -   トピック一覧
   Enterprise Architect 全般
     メンバ変数の初期値が「タグ付き値」の「initializer」部分に移動してしまう件について


スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
未登録ゲスト
投稿日時: 2008-4-24 20:32

メンバ変数の初期値が「タグ付き値」の「initializer」部分に移動してしまう件について

お疲れ様です。
いつもお世話になっています。

メンバ変数の初期値が「タグ付き値」の「initializer」部分に移動してしまうという現象が起きました。
現象の確認よろしくお願い致します。


移動してしまうのは問題だと思います。

オプションの設定等で移動しなくなったり対応方法などがあれば
教えてください。
よろしくお願い致します。

【現象】
1.「属性のプロパティ」画面にてメンバ変数を追加し「初期値」に値を追加。
2.「ソースコードの生成」を行なう。
3.「ソースコードの読み込み」を行なう。
4.メンバ変数の初期値が「初期値」ではなく、クラスのコンストラクタの
  「タグ付き値」の「initializer」部分に移動される。
※ソースコード上では問題ありません。

【環境】
EAバージョン7.1.828(ビルド:828)

以上よろしくお願い致します。
tkouno
投稿日時: 2008-4-25 9:07
EA Administrator
投稿: 3939

Re: メンバ変数の初期値が「タグ付き値」の「initializer」部分に移動してしまう件について

ご迷惑をおかけし申し訳ございません。

ご指摘の件につきまして、再現することができませんでした。

過去のご質問の内容から推測すると、対象の言語はC++でしょうか?

ただ、C++では、属性の初期値の情報はソースコードには反映されませんので、
あるいは、他の言語でしょうか?

お手数をおかけし申し訳ございませんが、もう少し詳細な
情報をお寄せください。


未登録ゲスト
投稿日時: 2008-4-25 11:08

Re: メンバ変数の初期値が「タグ付き値」の「initializer」部分に移動してしまう件について

お疲れ様です。

対象言語は、C++です。

メンバ変数の「属性の初期値」情報をコード生成するように「コード生成のテンプレート」を修正しています。
また、クラスのコンストラクタの「タグ付き値」の「initializer」部分にメンバ変数の初期値設定がされている場合
についてもコード生成するように「コード生成のテンプレート」を修正しています。

EAのメンバ変数の「属性の初期値」情報がある場合、
以下のような【ソースコード】について「ソースコードの読み込み」を行なった時の
以下記載の2件について今現在問題になっています。

(1)メンバ変数の「属性の初期値」が削除される。
(2)メンバ変数のクラスのコンストラクタの「タグ付き値」の「initializer」に初期値が追加される。

以下に現象が起きたいときの例を記入致します。

【メンバ変数】
Private
int m_Test
【メンバ変数の初期値】
0
【ソースコード】
CTestClass::CTestClass ()
: m_Test(0)
{
}

【状況一覧】
ソースコードの読み込み: 前、 後
「属性の初期値」:      0、 削除
「タグ付き値」の「initializer」: なし、 m_Test(0)

ご不明な点などありましたらご連絡ください。

以上よろしくお願い致します。
tkouno
投稿日時: 2008-4-25 11:25
EA Administrator
投稿: 3939

Re: メンバ変数の初期値が「タグ付き値」の「initializer」部分に移動してしまう件について

詳細な情報をお寄せ下さいまして
ありがとうございました。

今回の件、どちらも現状のEnterprise Architectの意図した
正しい挙動となります。
(また、これらの挙動は以前より変わっていないという認識です。
この点について、以前は初期値が削除されなかったという
点があれば、お知らせください。)


まず、初期値の件ですが、Enterprise Architectの既定の
テンプレートでは初期値の情報は出力されません。

また、読み込みの際にはヘッダファイル内の

Private
int m_Test;

の部分のみが解析対象となっています。
ここには、初期値の情報がないため、初期値の情報を
初期化しています。
(対応する情報がない場合に値を空にすべきかどうか、については
検討すべき課題だと思います。)

そのため、コードからの読み込みを実行すると、初期値が
消えるように見えます。



また、この初期値の挙動とは全く関係なく、
Enterprise Architectの動作として、クラスのコンストラクタに
付随する初期化情報は、タグ付き値に保存して
既定のテンプレートの状態で、ラウンドトリップできるようにしています。


これらの2つの挙動をあわせますと、確かに「移動した」ように
見えますが、これはEnterprise Architectが移動したわけではなく
上記2つのまったく別の挙動が組み合わさった結果、と
ご理解ください。


その上で、解決策としては、

・C++の場合には初期値の情報がない(不明)のだから、初期値の情報は
 削除しないように変更する

か、あるいは

・003107さんが行っているようなテンプレートをEnterprise Architectの
 既定のテンプレートとし、この内容に対応して
 属性の初期値の情報を同期できるようにする

のいずれか(あるいは両方)になるかと思います。


いずれにしましても、ご指摘の件はバグではなく
Enterprise Architectの意図した2つの挙動です。

ご指摘の件は機能改善要望として検討させていただきます。

引き続きご迷惑をおかけし申し訳ございませんが
ご理解いただけますと助かります。
未登録ゲスト
投稿日時: 2008-4-25 14:37

Re: メンバ変数の初期値が「タグ付き値」の「initializer」部分に移動してしまう件について

お疲れ様です。

---------------------------------------------------------------------
その上で、解決策としては、

・C++の場合には初期値の情報がない(不明)のだから、初期値の情報は
 削除しないように変更する

---------------------------------------------------------------------

以上の対策案に関して

「ソースコードの読み込み」時、初期値情報を削除しないようにテンプレートを
修正するということでしょうか?

以前、「ソースコードの読み込み」のテンプレートは修正出来ないという話を伺ったのですが。

機能改善要望としての検討、よろしくお願い致します。
tkouno
投稿日時: 2008-4-25 17:57
EA Administrator
投稿: 3939

Re: メンバ変数の初期値が「タグ付き値」の「initializer」部分に移動してしまう件について

当方の説明が悪く、お手数をおかけし申し訳ございません。
ご理解の通り、「ソースコードの読み込み」のテンプレートは
修正できません。

よって、今回の解決案は、いずれもEnterprise Architect側で
修正すべき問題です。お客様側で回避可能な方法では
ございません。

この点について不明瞭であり、申し訳ございませんでした。

未登録ゲスト
投稿日時: 2008-5-8 16:37

Re: メンバ変数の初期値が「タグ付き値」の「initializer」部分に移動してしまう件について

解答ありがとうございました。

今後ともよろしくお願い致します。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ