UML から C++ への変換プロファイルのステレオタイプ

UML から C++ の変換プロファイルには、パラメーター、プロパティー、文書、固有の関係、クラス、パッケージ、 およびモデルに適用できるステレオタイプが含まれます。 各ステレオタイプは、定義済みの有効な属性とタイプのセットを持ちます。

この内容は、バージョン 7.5.4 以降にあてはまります。 以下の表には、プロファイルのステレオタイプと、その関連するプロパティーおよびタイプがリストされています。

ステレオタイプ 適用対象 プロパティー タイプ
«cpp_assignment» 操作 isInline デフォルト値として false を持つ Boolean。
«cpp_body_comment» 関数や静的変数に対するコメントなど、ソース・コードに表示したいコメント    
«cpp_constructor» 操作 isExplicit、isInline デフォルト値として false を持つ Boolean。
memberInitializers この文字列は、クラスのコンストラクターのイニシャライザー・リストを指定します。リストは、クラスまたは親クラスの属性の初期値を指定します。
例えば、以下の文字列を指定して、attribute1 という名前の整数属性および name1 という名前の文字列属性を持つ、Class1 という名前のクラスのコンストラクター・メソッドのイニシャライザー・リストを生成します。
attribute1(10),name1("Class1")
単一引用符で文字列を囲まないでください。変換によって、以下のコンストラクターが生成されます。
Class1::Class1() :
attribute1(10),name1("Class1")
{
//TODO 自動生成されたメソッド・スタブ
}
«cpp_copy_constructor» 操作 isExplicit、isInline デフォルト値として false を持つ Boolean。
memberInitializers この文字列は、クラスのコンストラクターのイニシャライザー・リストを指定します。リストは、クラスまたは親クラスの属性の初期値を指定します。
例えば、以下の文字列を指定して、attribute1 という名前の整数属性および name1 という名前の文字列属性を持つ、Class1 という名前のクラスのコンストラクター・メソッドのイニシャライザー・リストを生成します。
attribute1(10),name1("Class1")
単一引用符で文字列を囲まないでください。変換によって、以下のコンストラクターが生成されます。
Class1::Class1() :
attribute1(10),name1("Class1")
{
//TODO 自動生成されたメソッド・スタブ
}
«cpp_dependency» 依存関係 isForwardReference デフォルト値として false を持つ Boolean。 値が true に設定されている場合は、クライアント・クラスのヘッダー・ファイルにサプライヤー型のフォワード宣言が生成されます。
このプロパティーが true に設定されていても、次の場合には変換により前方参照が生成されません。
  • サプライヤーが型定義、ネスト型、または列挙型である場合
  • クライアント・クラスに、サプライヤー型の非参照型または非ポインター型が含まれている場合
isInclusionInHeader デフォルト値として false を持つ Boolean。 値が true に設定されている場合は、クライアント・クラスのヘッダー・ファイルに #include ディレクティブが生成されます。
«cpp_destructor» 操作 isVirtual、isInline デフォルト値として false を持つ Boolean。
«cpp_enum» 列挙型 isAnonymousEnum デフォルト値として false を持つ Boolean。値が true に設定されている場合は、変換により匿名列挙が生成されます。
«cpp_external_inclusion» クラス、インターフェース includeType インポートされたクラスが変換ソースの一部でないときに変換がインクルード・ディレクティブを生成する方法を指定する値を持つ列挙。
relativeToFolderInput String。includeType プロパティーで「このフォルダーに関連しているインクルード・ディレクティブの生成」値を指定する場合に必要です。
specificFileNameInput String。includeType プロパティーで「次のファイル名を含むインクルード・ディレクティブの生成」値を指定する場合に必要です。
«cpp_friend» 依存関係   ヘッダー・ファイルに #include ディレクティブが生成され、サプライヤー・クラスがクライアント・クラスのフレンドとして宣言されます。
«cpp_generalization» 汎化関係、InterfaceRealization 関係 GeneralizationKind public、protected、private、およびデフォルト値を持つ列挙型 (0-public、1-protected、2-private、3-default)
isVirtual デフォルト値として false を持つ Boolean であり、仮想継承を示します。
«cpp_internal_inclusion» クラス、インターフェース includeType インポート元のクラスと、インポートされたクラスが変換ソースの一部であるときに変換がインクルード・ディレクティブを生成する方法を指定する値を持つ列挙型。
relativeToFolderInput String。includeType プロパティーで「このフォルダーに関連しているインクルード・ディレクティブの生成」値を指定する場合に必要です。
specificFileNameInput String。includeType プロパティーで「次のファイル名を含むインクルード・ディレクティブの生成」値を指定する場合に必要です。
«cpp_namespace» パッケージ NamespaceName String
«cpp_operation» 操作 isInline デフォルト値として false を持つ Boolean。 値が true に設定されている場合には、インラインとして操作が生成され、 対応するヘッダー・ファイルに操作本体が追加されます。
isVirtual デフォルト値として false を持つ Boolean。 値が true に設定されている場合は、仮想関数として操作が生成されます。
isFriend デフォルト値として false を持つ Boolean。値が true に設定されている場合は、フレンド操作が生成されます。
isGlobal デフォルト値として false を持つ Boolean。値が true に設定されている場合は、グローバル関数が生成されます。
«cpp_properties» クラス、インターフェース、列挙 bodyFileExtension 指定された拡張子を持つ C++ ボディ・ファイル
headerFileExtension 指定された拡張子を持つ C++ ヘッダー・ファイル
例えば、 ファイル名拡張子として .inc を持つヘッダー・ファイルの C++ テンプレート・クラスのコードを生成するには、 このステレオタイプをクラスに適用し、このプロパティーを「.inc」に設定します。
注: C/C++ 開発ツール (CDT) が .inc を有効な C++ ファイル名拡張子として認識するように、.inc ファイル名拡張子を C++ ヘッダー・ファイルに関連付ける必要があります。
«cpp_struct» クラス    
«cpp_type» プロパティー、パラメーター arrayDimensions これは、一般的に UML 2.0 がサポートしていない多次元の配列を指定するのに使用される文字列です。

例えば、この文字列を使用して、プロパティーに対して配列 [10][20]、 戻りの型でないパラメーターに対しては [][10] などと指定します。

InitializerKind この列挙型は、constructor 値および assignment 値 (0-constructor) を持ちます。

InitializerKind プロパティーが 0 に設定されている場合、変換でコンストラクター・イニシャライザーが生成されます。

InitializerKind プロパティーが 1 に設定されている場合、 変換でコンストラクターに代入ステートメントが生成されます。

UML から C++ への変換で «cpp_type» ステレオタイプを適用して、要素をどのように変換するかを示す例。を参照してください。

isAuto、isMutable、isRegister、isVolatile デフォルト値として false を持つ Boolean。
qualifier この文字列には、** や & など、変数名の前かつ型名の後に表示される、UML でモデル化できない C++ の型の一部が含まれます。
例えば、const int **a[12][33] は、以下によって表されます。
  • a という名前の UML プロパティー
  • isReadOnly ステレオタイプ・プロパティーが true に設定されます
    注: isReadOnly プロパティーは const キーワードを生成します。
  • «cpp_type» ステレオタイプを適用
  • ステレオタイプの qualifier プロパティーを ** に設定
  • ステレオタイプの arrayDimensions のプロパティーは [12][33] に設定
属性 isGlobal デフォルト値として false を持つ Boolean。値が true に設定されている場合は、グローバル変数が生成されます。
«cpp_typedef» クラス arrayDimensions String
ImplementationType この文字列は、typedef が参照するタイプを指定します。 基本タイプか、ユーザー定義タイプを指定できます。

ユーザー定義タイプは、完全修飾してもしなくてもかまいません。 タイプ名が完全修飾されない場合、typedef のスコープがユーザー定義タイプに適用されます。

qualifier この文字列は、ポインター型や定数などを指定します。
例えば、変換では、以下に当てはまる UML 要素に対して const int **Typedef1[12][13] が生成されます。
  • Typedef1 という名前のクラスで、ステレオタイプ «cpp_typedef» を設定
  • ImplementationType は int
  • arrayDimensions は [12][13]
  • qualifier は const **
«cpp_union» クラス isAnonymousUnion デフォルト値として false を持つ Boolean。

UML から C++ への変換で «cpp_type» ステレオタイプを適用して、要素をどのように変換するかを示す例。

この例では、Class1 という名前の UML クラスに、以下の属性が含まれています。
  • デフォルト値 5 を持つ attribute1 という名前の整数属性。InitializerKind プロパティーは 0 に設定されています。
  • デフォルト値 true を持つ attribute2 という名前の Boolean 属性。InitializerKind プロパティーは 1 に設定されています。
«cpp_type» ステレオタイプは、両方の属性に適用されています。UML から C++ への変換構成は、 コンストラクターを生成するように構成されており、追跡可能性オプションは有効になっていません。 下表に、変換によって生成される C++ コードをリストします。
UML 要素 変換出力
このイメージは、例で説明されているクラスを示しています。 Class1.cpp:
#include "Class1.h" 
//ファイル Class1.cpp のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.cpp のセクションの終了


//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
Class1::Class1() : 
attribute1(5)
{
    //TODO 自動生成されたメソッド・スタブ
    attribute2 = true;
}

フィードバック