UML から C++ への変換により、@generated タグが以下の要素に追加されます。
UML から C++ への変換を再実行する場合、 デフォルトでは、変換によって生成されるメソッド本文も、ユーザーが作成したメソッド本文もその変換では上書きされません。 変換では、@generated タグを削除したかどうかにかかわらず、メソッド本文は常に保持されます。
変換では常にメソッド本文は保持されますが、 メソッドに対する構造上の変更点を保持するには、メソッドから @generated タグを削除する必要があります。 例えば、メソッド・シグニチャーを変更した場合や、コンストラクターにイニシャライザーを追加した場合、メソッドに例外を追加した場合、ソース・コードにコメントを追加した場合などは、そのメソッドから @generated タグを削除する必要があります。
| UML モデル要素 | 生成されたコード | 変更されたコード | 変換の再実行後の生成されたコード |
|---|---|---|---|
![]() |
Class1.h:
#ifndef CLASS1_H
#define CLASS1_H
//ファイル Class1.h のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.h のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1
{
//Class1 のセクションの開始
//TODO: 保持する属性を追加します
//Class1 のセクションの終了
private:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int attribute1;
public:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation1();
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation2();
}; //クラス Class1 の終了
#endif
Class1.cpp:
#include "Class1.h"
//ファイル Class1.cpp のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.cpp のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation1()
{
//TODO 自動生成されたメソッド・スタブ
return 0;
}
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation2()
{
//TODO 自動生成されたメソッド・スタブ
return 0;
}
|
Class1.h:
#ifndef CLASS1_H
#define CLASS1_H
//ファイル Class1.h のセクションの開始
#include Class2.h
//ファイル Class1.h のセクションの終了
class Class1:public Class2
{
//Class1 のセクションの開始
//TODO: 保持する属性を追加します
//Class1 のセクションの終了
private:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int attribute1;
public:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation1(int parameter1);
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation2();
}; //クラス Class1 の終了
#endif
Class1.cpp:
#include "Class1.h"
//ファイル Class1.cpp のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.cpp のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation1(int parameter1)
{
int j = 1;
return j;
}
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation2()
{
int i = 2;
return i;
}
|
Class1.h:
#ifndef CLASS1_H
#define CLASS1_H
//ファイル Class1.h のセクションの開始
#include Class2.h
//ファイル Class1.h のセクションの終了
class Class1:public Class2
{
//Class1 のセクションの開始
//TODO: 保持する属性を追加します
//Class1 のセクションの終了
private:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int attribute1;
public:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation1();
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation2();
}; //クラス Class1 の終了
#endif
Class1.cpp:
#include "Class1.h"
//ファイル Class1.cpp のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.cpp のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation1()
{
//TODO 自動生成されたメソッド・スタブ
return 0;
}
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation2()
{
int i = 2;
return I;
}
|
| 変換出力 | ユーザー定義セクションの場所と使用方法 |
|---|---|
| ヘッダー・ファイルおよびボディ・ファイル | 変換により、1 つのユーザー定義セクションがそれぞれのファイルの先頭に追加されます。
このセクションを使用して、以下のタイプのステートメントを指定できます。
|
| クラス、共用体、構造体、列挙 | これらのユーザー定義セクションを使用して、UML ではモデル化できない属性、操作、またはその両方を指定できます。 例えば、ユーザー定義セクションには、int myFunction(int* myOtherFunction) 属性などの関数ポインター属性を指定できます。 |
@generated タグおよびユーザー定義セクションによって柔軟性が提供されますが、発生する可能性のある問題を回避するには、生成されたコードにではなく、ソース UML モデルに対して構造上の変更を行う必要があります。 また、後方変換を実行し、ソース UML モデルに対して新規のメソッドまたは属性を追加することもできます。
| UML モデル要素 | 生成されたコード | ユーザー定義セクションの外側に追加される属性 | ユーザー定義セクションに追加される属性 |
|---|---|---|---|
![]() |
Class1.h:
#ifndef CLASS1_H
#define CLASS1_H
//ファイル Class1.h のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.h のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1
{
//Class1 のセクションの開始
//TODO: 保持する属性を追加します
//Class1 のセクションの終了
private:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int attribute1;
public:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation1();
}; //クラス Class1 の終了
#endif
Class1.cpp:
#include "Class1.h"
//ファイル Class1.cpp のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.cpp のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation1()
{
//TODO 自動生成されたメソッド・スタブ
return 0;
}
|
Class1.h:
#ifndef CLASS1_H
#define CLASS1_H
//ファイル Class1.h のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.h のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1
{
//Class1 のセクションの開始
//TODO: 保持する属性を追加します
//Class1 のセクションの終了
private:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int attribute1;
bool attribute2;
public:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation1();
}; //クラス Class1 の終了
#endif
Class1.cpp:
#include "Class1.h"
//ファイル Class1.cpp のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.cpp のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation1()
{
//TODO 自動生成されたメソッド・スタブ
return 0;
}
|
Class1.h:
#ifndef CLASS1_H
#define CLASS1_H
//ファイル Class1.h のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.h のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1
{
//Class1 のセクションの開始
bool attribute2;
//Class1 のセクションの終了
private:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int attribute1;
public:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation1();
}; //クラス Class1 の終了
#endif
Class1.cpp:
#include "Class1.h"
//ファイル Class1.cpp のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.cpp のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation1()
{
//TODO 自動生成されたメソッド・スタブ
return 0;
}
|