変換構成を作成または編集することにより、またはモデル内でモデル要素を直接選択することにより、C++ コードに変換するモデル要素を指定できます。 選択されたモデル要素が、変換のソースとしての機能を果たします。 この変換では、コンテナーおよびそのモデル要素を両方選択した場合、または同一のモデル要素を 2 回選択した場合にエラー・メッセージが生成されます。
コンポーネントを使用して、C++ コードに変換するモデルの要素を編成できます。 コンポーネントを選択し、コンポーネントにパッケージおよびクラスへの使用関係がある場合は、UML から C++ への変換により関連するパッケージおよびクラスが、C++ コードに変換されます。
UML ソースの各要素の名前は、小文字、大文字、または下線 (_) で開始できます。 後続の文字には、小文字、大文字、または数値を使用できます。 オペレーション名内でコロン (:) を使用し、フレンド関数の完全修飾名を指定できます。 変換では、数値または無効文字で開始される名前に対して、下線 (_) を前につけます。 変換では、該当する名前空間における名前が固有であるか検査します。 その名前が固有でない場合は、変換により、接尾部に _<番号> をつけた重複名が割り当てられます。
生成されたコードの読みやすさを改善し、UML モデルと生成されたコード間の差異を最小限にするには、ソースの UML モデルにある無効な名前を訂正してから変換を適用する必要があります。
有効な変換ターゲットは、少なくとも 1 つのソース・フォルダーを含む C++ プロジェクトです。 新規にターゲット・コンテナーを作成する場合は、スタンダード Make C++ プロジェクト (ユーザーが makefile を作成するか、または既存の makefile を利用する) の作成、あるいは、管理 Make プロジェクト (makefile は自動作成される) の作成かの、いずれかを選択することができます。
以下の表には、UML から C++ への変換により、どのように UML モデル要素が C++ コードに変換されるかがリストされています。
| UML モデル要素 | C++ コード要素 |
|---|---|
| 関連関係 | クラス属性 |
| クラス | クラス (.h ファイルおよび .cpp ファイル) |
| 依存関係 | 取り込み |
| 列挙 | Enum (.h ファイル) |
| 汎化関係 | クラス継承 |
| 操作 | 操作 |
| パッケージ | フォルダー |
| パラメーター | 操作引数 |
| プロパティー | クラス属性 |
| テンプレート・バインド関係 | インスタンス化されたクラス (.h ファイル) |
| テンプレート・クラス | UML テンプレート・クラスと同じ名前を持つヘッダー・ファイル (.h ファイル)
メソッド本文コードもこのヘッダー・ファイル内に生成されます |
| テンプレート・パラメーター | パラメーター化されたクラス用のパラメーター |
変換のソースとターゲットの間の派生関係を作成するように変換を構成できます。 この機能を使用すると、UML モデル要素と生成されるソース・コードの間で追跡可能性が実現します。 変換の実行時、変換は、生成されるヘッダー・ファイル (複数の場合があります) で、@generated タグをサポートする各変換済み要素のソース・コード・コメントに固有 ID を追加します。 また、変換は必要に応じてコードをリファクタリングし、モデルへの変更を反映させます。。 これらの ID を使用することで、UML から C++ への変換、および C++ から UML への変換 (有効になっている場合) で、モデル要素またはコード要素を移動または名前変更できます。それらの要素を削除してから追加する必要はありません。 この機能により、変換では、要素の名前だけを使用するよりも、ソース要素およびターゲット要素を正確にマージできるようになります。
#ifndef CLASS1_H
#define CLASS1_H
//ファイル Class1.h のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.h のセクションの終了
//@uml.annotationsderived_abstraction="platform:/resource/MyProj/Blank%20Model.emx#_c8rj0FJQEdyKkf6pJAs7Ow"
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1
{
//Class1 のセクションの開始
//TODO: 保持する属性を追加します
//Class1 のセクションの終了
public:
//@uml.annotationsderived_abstraction="platform:/resource/MyProj/Blank%20Model.emx#_c8rj0FJQEdyKkf6pJAs7Ow?DEFCONSTRUCTOR"
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
Class1();
}; //クラス Class1 の終了
#endif
標準操作は、コンストラクター、コピー・コンストラクター、仮想および非仮想のデストラクター、代入演算子、および getter および setter の各メソッドです。 UML から C++ への変換で生成される標準操作を指定できます。 また、標準操作の 1 つであるステレオタイプをモデル内のクラスの操作に追加することもできます。UML から C++ への変換は、生成された標準操作に UML 操作の可視性を適用しますが、UML 操作の名前および パラメーターを無視します。 UML から C++ への変換では、UML モデルに追加したクラス、構造体、および共用体に対して標準操作を生成します。
変換では、デフォルトでコンストラクターおよびコピー・コンストラクターを生成します。 特定のステレオタイプがある操作を UML モデルに追加することにより、変換による標準操作の生成をより細かく制御できます。 あるクラス内に操作を作成し、それに標準操作ステレオタイプのいずれかを割り当てると、変換ではその指定した標準操作を生成します。
変換では、変換のターゲットとして指定した C++ プロジェクトおよび C++ フォルダー内に C++ コード・ファイルを生成します。