astah*

Japanese | English
Home 機能 C++リバース 対応項目の詳細

お知らせ

[pro,UML] C++リバース 対応項目の詳細

Eメール 印刷

ここでは astah* の編集APIを利用したサンプル「C++リバースプログラム」を解説します。
本アプリケーションを用いて、C++ソースコードから astah*モデルを作成できます。


未対応の項目

現在、次の項目は未対応のためリバースできません。

  • B & operator=(sonst B &)
  • extern
  • 英語以外(例:日本語)を含むクラス、属性、操作等(doxygen1.5.7以降で解消済み)
  • 英語以外(例:日本語)のパスを含むファイル

対応項目の詳細

  • クラス、属性、操作の情報を定義を含めて取込みます。
  • [バージョン 6.3以降] stdパッケージに含まれないクラス、テンプレートを持つコレクションクラスの場合(std::list<Child>, std::list<Child,allocator<Child>>, std::set<Child>, std::queue<Child>, std::vector<Child>, std::stack<Child>, std::map<string, Child>)は関連として出力され限定子、制約({ordered},{unique})、多重度を設定するように改善しました。(【本プログラムの設定 - Config.propertiesファイル】のjude_cplus_types_for_attributeより優先されます。)
ソースコード(親クラスの属性のタイプ) 親関連端の限定子 子関連端 多重度 制約
std::list<Child> なし Child *
{ordered}
std::list<Child,allocator<Child>> なし Child * {ordered}
std::set<Child> なし Child * {unique}
std::queue<Child> なし Child * {ordered}
std::vector<Child> なし Child * {ordered}
std::stack<Child> なし Child * {ordered}
std::map<string, Child> key:string Child なし なし
ユーザー定義テンプレートクラス<Child> なし ユーザー定義テンプレートクラス<Child> なし なし
ユーザー定義クラス[] なし ユーザー定義クラス * なし

 

デフォルトモデル astah* professional(astah* UML)インストールフォルダ\template\project\C++.astaをデフォルトモデルとして読み込みます。このファイルがない場合、デフォルトモデルを読み込みません。C++.astaはastah* professional(astah* UML)インストール時に配備され、std配下の主要なクラスを含みます。
~destructor() 操作(名前: ~から始まる名前、戻り型: " ")
enum
  • [クラス] ステレオタイプタブの <<enum>>
  • [属性] ステレオタイプタブの <<enum constant>>
  • 匿名enumには対応していない
template <class T=B>
class A {
T attr;
}
class E {
A attr1;
A<B> attr2;
A<B*> attr3;
A<> attr4;
}
[JUDE 5.4.xまで]
  • クラスBが生成
  • クラスAが生成
  • クラスAにデフォルト値BのテンプレートパラメタTが生成
  • クラスAの型Tの属性attrが生成
  • クラスEが生成
  • クラスEに型Aの属性attr1が生成
  • 匿名バウンドクラスA<B>からA<T=B>に実パラメタBのテンプレートバィンディングが生成
  • クラスEに型A<B>の属性attr2が生成
  • クラスB*が生成
  • 匿名バウンドクラスA<B*>からA<T=B>に実パラメタB*のテンプレートバィンディングが生成
  • クラスEに型A<B*>の属性attr3が生成
  • クラスEに型Aの属性attr4が生成
[JUDE 5.5以降] [astah* 6.0以降]
  • クラスBが生成
  • クラスAが生成
  • クラスAにデフォルト値BのテンプレートパラメタTが生成
  • クラスAに型Tの属性attrが生成
  • クラスEが生成
  • クラスEに型Aの属性attr1が生成
  • 匿名バウンドクラスA<B>からA<T=B>に実パラメタBのテンプレートバィンディングが生成
  • クラスEに型A<B>の属性attr2が生成
  • 匿名バウンドクラスA<B*>からA<T=B>に実パラメタB、型修飾子(実パラメタ)*のテンプレートバィンディングが生成
  • クラスEに型A<B*>の属性attr3が生成
  • クラスEに型Aの属性attr4が生成
int b[2][2] = {{1,2},{3,4}} 属性(名前:b、型:int、多重度:2 , 2、初期値:{{1,2},{3,4}})が生成される
int *p [JUDE 5.4.xまで]
  • クラス(名前:int *)、属性(名前:p、型:int *)が生成される
[JUDE 5.5以降]、[astah* 6.0以降]
  • 属性(名前:p、型:int、型修飾子:*)が生成される
int **p [JUDE 5.4.xまで]
  • クラス(名前:int **)、属性(名前:p、型:int **)が生成される
[JUDE 5.5以降]、[astah* 6.0以降]
  • 属性(名前:p、型:int、型修飾子:**)が生成される
int p = &a 属性(名前:p、型:int、初期値:&a)が生成される
int (*pf)(int)

関数ポインタにあたるクラス(名前:int (*)(int))が作成され、そのクラスには、操作(名前:function、型:int、パラメタ:int arg0)が生成される。
参照元クラスには、属性(名前:pf、型:int (*)(int))が生成される。

int (*pa)[3] クラス(名前:int (*))が生成される。参照元クラスには、属性(名前:pa、型:int (*、多重度3))が生成される。
int add(int,int) int add(int arg1, int arg2)
static [属性] ベースタブのStatic、[操作]ベースタブのStatic
struct [クラス] ステレオタイプタブの <<struct>>
union [クラス] ステレオタイプタブの <<union>>
void fun(int a=1,int b=3,int c=5) void fun(int a,int b,int c)と解釈。パラメタの初期値は設定されない
クラス内に存在しない属性 クラス(名前:Global)、その中に属性が作成される
クラス内に存在しない操作 クラス(名前:Global)、その中に操作が作成される
プリミティブ型 [JUDE 5.4.xまで] クラスとしてリバース
[JUDE 5.5以降] [astah* 6.0以降] プリミティブ型としてリバース
typedefで宣言された型 宣言元の型が使用される
friend [JUDE 5.5以降] [astah* 6.0以降]
[クラス] 言語タブのfriend、[操作] 言語タブのfriend
const

[JUDE 5.4.xまで]
[属性] ベースタブのReadOnly、[操作] ベースタブのLeaf

[JUDE 5.5以降] [astah* 6.0以降]
[属性] 言語タブのconst、[操作] 言語タブのconst

mutable [JUDE 5.5以降] [astah* 6.0以降]
[属性] 言語タブのmutable
Doxygen 1.5.7.1までは memberdefタグのmutable属性に常に noが設定されるためコンバートできない。yesにするとコンバートの結果に反映される。
volatile [JUDE 5.5以降] [astah* 6.0以降] [属性]言語タブのvolatile
explicit [JUDE 5.5以降] [astah* 6.0以降] [操作]言語タブのexplicit
inline [JUDE 5.5以降] [astah* 6.0以降] [操作]言語タブのinline
virtual [JUDE 5.5以降] [astah* 6.0以降] [操作]言語タブのvirtual