astah* C++リバース 利用ガイド

2009年10月19日
株式会社 チェンジビジョン


【概要】

astah*の編集API利用サンプル「C++リバースプログラム」を作成しました。本アプリケーションにより、C++のソースコードからastah*モデルを作成できます。 本ドキュメントでは、このC++リバースの方法を説明します。

本アプリケーションは、Doxygenというフリーソフトと併せて動作します。
事前にDoxygenによってソースコードをパースして作成したXMLファイルを使用してastah*モデルを作成するためです。

astah* API サンプルプログラム使用許諾契約

【ソースコードインポートの手順】

【実行環境の準備】

本アプリケーションを実行するには、J2SEおよびDigesterを利用できる環境が必要です。
さらに、本アプリケーションはDoxygen経由でソースコード(.cs)を変換して作成したXMLを使用するため、Doxygenのインストールと設定が必要です。 Doxygenの利用に関しては、Doxygenのライセンスやドキュメントをご参照ください。

【ステップ1 Doxygenのダウンロード】

【ステップ2 Doxygenのインストール】

【ステップ3 Doxygenの起動】

【ステップ4 Doxygenの設定】

【ステップ5 Doxygenでソースコードの読み込み】

【ステップ6 Doxygenで作成したXMLからastah*プロジェクトに変換】

【本プログラムの設定 - Config.propertiesファイル】

以下の設定ファイルを編集することで、一部挙動の設定が可能です。
astah* professional(astah* UML)インストールフォルダ\api\sample\sample_doxygen_c_plus\doxygen_cplus\Config.properties
jude_cplus_types_for_attribute
プロパティを、クラスの属性として作成するか、関連として作成するかを設定します。プロパティは通常関連として作成されますが、 ここで設定した型を持つプロパティは、クラスの属性として作成されます。
(例)BrickOut::Form1,BrickOut::Form2 (コンマ区切りで、型をネームスペース付きで列挙します。)

【サンプルのコンパイル】

本プログラムのソースコードを改変した場合は、起動前に、コンパイルする必要があります。
以下のバッチファイルをダブルクリックします。
astah* professional(astah* UML)インストールフォルダ\api\sample\sample_doxygen_c_plus\compile.bat

【サポートについて】

本プログラムは、astah*編集APIのサンプルとして提供しているため、サポート対象外となります。
障害報告や実行環境に関連するご質問などは、対応できない場合がございますので予めご了承ください。

【動作環境】

Windowsのみで動作確認しています。

環境 ダウンロード
astah* professional(astah* UML)6.0以降
astah* professional(astah* UML)インストールフォルダ\lib\commons-digester.jar(バージョン1.5)などにも依存します。
-
Java実行環境 (astah*のシステム要件を満たすバージョン) astah*システム要件ページ
Doxygen 1.5.8 (doxygen-1.5.8-setup.exe) Doxygenサイト(英語)
Doxygenサイト(日本語)
Doxygenダウンロード

【対応項目詳細】

クラス、属性、操作の情報を、定義を含めて取込みます。
ポインタは、クラス名に*が含まれる形でリバースされます。ポインタの扱いは、将来のバージョンで変更される可能性がございます。

項目 説明
デフォルトモデル 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.5b1から][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.5b1から][astah*/6.0から]
属性(名前:p、型:int、型修飾子:*)が生成される。
int **p [JUDE/5.4.xまで]
クラス(名前:int **)、属性(名前:p、型:int **)が生成される。
[JUDE/5.5b1から][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.5b1から][astah*/6.0から]
プリミティブ型としてリバース
typedefで宣言された型 宣言元の型が使用される。
friend [JUDE/5.5b1から][astah*/6.0から]
[クラス]言語タブのfriend
[操作]言語タブのfriend
const [JUDE/5.4.xまで]
[属性]ベースタブのReadOnly
[操作]ベースタブのLeaf
[JUDE/5.5b1から][astah*/6.0から]
[属性]言語タブのconst
[操作]言語タブのconst
mutable [JUDE/5.5b1から][astah*/6.0から]
[属性]言語タブのmutable
Doxygen1.5.7.1まではmemberdefタグのmutable属性に常にnoが設定されるためコンバート不可。
yesにするとコンバートの結果に反映される。
volatile [JUDE/5.5b1から][astah*/6.0から]
[属性]言語タブのvolatile
explicit [JUDE/5.5b1から][astah*/6.0から]
[操作]言語タブのexplicit
inline [JUDE/5.5b1から][astah*/6.0から]
[操作]言語タブのinline
virtual [JUDE/5.5b1から][astah*/6.0から]
[操作]言語タブのvirtual

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