変換では、UML 関連からメンバー変数を生成します。 コンポジション関連以外の関連からは、変換により、属性の型限定子にポインター演算子 (*) が追加されます。 以下の表には、変換で C++ 要素の生成に使用される、関連の端の各プロパティーがリストされています。
| UML プロパティー | C++ 要素 |
|---|---|
| 名前 | 新規メンバー変数 |
| 可視性 | メンバー変数の可視性 |
変換では、UML 汎化関係のターゲットに対して継承を生成し、多重継承がサポートされています。 変換では、生成されたヘッダー・ファイルにターゲット・ヘッダー・ファイルをインクルードします。 ステレオタイプ «cpp_generalization» のプロパティーを設定することにより、継承のスコープ、およびその継承が仮想であるかどうかを指定できます。
通常、依存関係はクラスまたは列挙を参照します。 デフォルトで、変換では、C++ ヘッダー・ファイルに前方参照を生成し、ボディ・ファイルに #include ディレクティブを生成します。
依存関係を変換してヘッダー・ファイルに #include ディレクティブを生成するには、ステレオタイプ «cpp_dependency» の isInclusionInHeader フィールドを true に設定します。 または、依存関係にステレオタイプ «cpp_friend» を適用することによっても、#include ディレクティブがヘッダー・ファイルに生成され、依存要素名の前にキーワード friend が付加されます。
UML クラスでは、UML インターフェースを実装できます。 変換により、この関係が C++ クラスの継承に変換されます。 ステレオタイプ «cpp_generalization» が実現関係に適用され、プロパティー GeneralizationKind の値が public である場合、変換ではキーワード public をその継承に適用します。
以下の表には、Class2 と Interface1 の間の実装関係の変換により生成されるコードと、ステレオタイプ «cpp_friend» が適用された Class2 と Class1 の間の依存関係とが示されています。
| UML 要素 | 変換出力 |
|---|---|
![]() |
#ifndef CLASS2_H
#define CLASS2_H
//ファイル Class2.h のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class2.h のセクションの終了
#include "Interface1.h"
#include "Class1.h"
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class2 : Interface1
{
//Class2 のセクションの開始
//TODO: 保持する属性を追加します
//Class2 のセクションの終了
public:
friend class Class1;
}; //クラス Class2 の終了
#endif
|
変換では、テンプレート・パラメーターがある UML クラスからテンプレート・クラスを生成します。
変換では、テンプレート・クラス Class1 とバインド関係がある UML クラスを、テンプレート・クラス Class1 のインスタンス化に変換します。 変換では、バインド関係で指定されたパラメーター置換を使用し、仮パラメーターを実パラメーターに置き換えます。
クラスが多重バインド関係におけるコンシューマーである場合、変換では最初に発見したバインド関係のみを変換します。
変換により、テンプレート・パラメーターのデータ型がインスタンス化クラスのインクルード・リストに追加されます。
変換では、仮パラメーターとして使用されるテンプレートおよびパラメーター化されたクラスへの静的変数の組み込みなど、テンプレート・クラスの複合使用パターンはサポートされていません。
| UML 要素 | 変換出力 |
|---|---|
![]() |
TemplateClass1.h:
#ifndef TEMPLATECLASS1_H
#define TEMPLATECLASS1_H
//ファイル TemplateClass1.h のセクションの開始
//TODO: 保持する定義を追加します
//ファイル TemplateClass1.h のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
template <class T1>
class TemplateClass1
{
//TemplateClass1 のセクションの開始
//TODO: 保持する属性を追加します
//TemplateClass1 のセクションの終了
private:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
T1 attribute1;
public:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation1(T1 Parameter1);
}; //クラス TemplateClass1 の終了
#endif
TemplateClass.cpp:
#include "TemplateClass1.h"
//ファイル TemplateClass1.cpp のセクションの開始
//TODO: 保持する定義を追加します
//ファイル TemplateClass1.cpp のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
template <class T1> int TemplateClass1<T1>::Operation1(T1 Parameter1)
{
//TODO 自動生成されたメソッド・スタブ
return 0;
}
ParamClass1.h:
#ifndef PARAMCLASS1_H
#define PARAMCLASS1_H
//ファイル ParamClass1.h のセクションの開始
//TODO: 保持する定義を追加します
//ファイル ParamClass1.h のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class ParamClass1
{
//ParamClass1 のセクションの開始
//TODO: 保持する属性を追加します
//ParamClass1 のセクションの終了
}; //クラス ParamClass1 の終了
#endif
UserClass1.h:
#ifndef USERCLASS1_H
#define USERCLASS1_H
//ファイル UserClass1.h のセクションの開始
//TODO: 保持する定義を追加します
//ファイル UserClass1.h のセクションの終了
#include "TemplateClass1.h"
#include "ParamClass1.h"
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class UserClass1
{
//UserClass1 のセクションの開始
//TODO: 保持する属性を追加します
//UserClass1 のセクションの終了
private:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
TemplateClass1<ParamClass1> attribute1;
}; //クラス UserClass1 の終了
Binding1.h:
#ifndef BINDING1_H #define BINDING1_H //ファイル Binding1.h のセクションの開始 //TODO: 保持する定義を追加します //ファイル Binding1.h のセクションの終了 #include "TemplateClass1.h" #include "ParamClass1.h" typedef TemplateClass1<ParamClass1> Binding1; #endif |