変換により、複数の UML 関係のタイプが C++ 要素に変換されます。
変換による関係の変換方法は、その関係のタイプによって決まります。
UML 関連
変換では、UML 関連からメンバー変数を生成します。
コンポジション関連以外の関連からは、変換により、属性の型限定子にポインター演算子 (*) が追加されます。
以下の表には、変換で C++ 要素の生成に使用される、関連の端の各プロパティーがリストされています。
| UML プロパティー |
C++ 要素 |
| 名前 |
新規メンバー変数 |
| 可視性 |
メンバー変数の可視性 |
UML 汎化関係
変換では、UML 汎化関係のターゲットに対して継承を生成し、多重継承がサポートされています。
変換では、生成されたヘッダー・ファイルにターゲット・ヘッダー・ファイルをインクルードします。
ステレオタイプ «cpp_generalization» のプロパティーを設定することにより、継承のスコープ、およびその継承が仮想であるかどうかを指定できます。
UML 依存関係
通常、依存関係はクラスまたは列挙を参照します。
デフォルトで、変換では、C++ ヘッダー・ファイルに下方参照を生成し、ボディ・ファイルに #include ディレクティブを生成します。
依存関係を変換してヘッダー・ファイルに #include ディレクティブを生成するには、ステレオタイプ
«cpp_dependency» の isInclusionInHeader フィールドを true に設定します。
または、依存関係にステレオタイプ «cpp_friend» を適用することによっても、#include
ディレクティブがヘッダー・ファイルに生成され、依存要素名の前にキーワード friend が付加されます。
UML インターフェース実現関係
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 テンプレート・パラメーター
変換では、テンプレート・パラメーターがある UML クラスからテンプレート・クラスを生成します。
UML バインド関係 (インスタンス化クラス)
変換では、テンプレート・クラス Class1 とバインド関係がある UML クラスを、テンプレート・クラス Class1 のインスタンス化に変換します。
変換では、バインド関係で指定されたパラメーター置換を使用し、仮パラメーターを実パラメーターに置き換えます。
クラスが多重バインド関係におけるコンシューマーである場合、変換では最初に発見したバインド関係のみを変換します。
変換により、テンプレート・パラメーターのデータ型がインスタンス化クラスのインクルード・リストに追加されます。
変換では、仮パラメーターとして使用されるテンプレートおよびパラメーター化されたクラスへの静的変数の組み込みなど、テンプレート・クラスの複合使用パターンはサポートされていません。
以下のサンプルにおいて、TemplateClass1 は、テンプレート・パラメーター T1 があるテンプレート・クラスです。
Binding1 は、Binding1 と TemplateClass1 の間のバインド関係において T1 を ParamClass1 で置換する、テンプレートのインスタンス化です。
UserClass1 には、タイプ Binding1 の属性があります。
変換では、Binding1 を typedef に変換します。
ただし、このサンプルでは、UserClass1 がその typedef でなく、テンプレートのインスタンス化 Binding1 を使用しています。
以下のコードでは、変換で生成される typedef、およびテンプレートのインスタンス化のどちらも使用できます。
変換では、以前のバージョンの UML から C++ への変換と互換性がある typedef を生成します。
| 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
|