UML から C++ への変換によって変換される関係

変換により、複数の 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 要素 変換出力
このイメージは、上記のパラグラフで説明されている 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

フィードバック