ソース・モデル要素間の派生関係を作成するように変換を構成すると、 その変換では、生成済みソース・コード内の各変換済み要素に固有 ID が追加されます。
| モデル要素 | 変更点 | 変換を再実行する場合の、前に生成されたコードへの影響 |
|---|---|---|
| 属性 | 名前変更または移動 | 属性の @generated タグを削除した場合、その属性に変更は行われません。
その getter メソッドおよび setter メソッドが生成された場合、それらに変更は行われません。
属性の @generated タグを削除しなかった場合、以下のアクションが実行されます。
|
| クラスまたはインターフェース | 名前変更 | クラスまたはインターフェースの @generated タグを削除した場合、そのクラスのファイルは名前変更されません。
@generated タグを削除しなかった場合、以下のアクションが実行されます。
|
| トップレベルのクラスまたはインターフェース | 移動 | トップレベルのクラスまたはインターフェースの @generated タグを削除した場合、そのクラスのファイルは変更されません。
@generated タグを削除しなかった場合、以下のアクションが実行されます。
|
| 操作 | 戻りタイプまたはシグニチャーの名前変更、移動、または変更 | 操作の @generated タグを削除した場合、その操作に変更は行われません。
@generated タグを削除しなかった場合、以下のアクションが実行されます。
|
| パッケージ | 名前変更または移動 | 元の生成済みフォルダー内にあるファイルが、新規フォルダーに移動されます。
旧ファイルの削除オプションを変換構成で選択している場合は、旧フォルダーおよび旧ファイルが削除されます。 |
| «cpp_namespace» が適用されたパッケージ | NamespaceName プロパティーの名前変更 | すべての生成済みソース・ファイルで名前空間が名前変更されます。 元の名前空間を参照するコード変更はリファクタリングされません。 |
| パッケージの名前変更 | パッケージに固有 ID がないため、コードがリファクタリングされ、名前変更後のパッケージに移動されます。 |
以下のサンプルでは、変換再実行時のコードの変更点を、固有 ID および @generated タグの有無に応じて示しています。
このサンプルの UML ソース・モデルには、以下のクラスがあるものとします。

| Class1.h | Class1.cpp |
|---|---|
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofslx4A"
//@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)"
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofslw3S"
int attribute1;
public:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofsly5D"
int Operation1(int Parameter1);
}; //クラス Class1 の終了
|
#include "Class1.h"
//ファイル Class1.cpp のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.cpp のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation1(int Parameter1)
{
//TODO 自動生成されたメソッド・スタブ
return 0;
}
|
int Class1::Operation1(int Parameter1)
{
return Parameter1;
}
| 固有 ID のあるコード |
|---|
| @generated タグは未削除 |
このコードは、以下の変更を示しています。
Class1.h: //@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofslx4A"
//@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)"
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofslw3S"
int attribute1;
public:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofsly5D"
int Operation2(int Parameter1);
}; //クラス Class1 の終了
Class1.cpp:
#include "Class1.h"
//ファイル Class1.cpp のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.cpp のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation2(int Parameter1)
{
return Parameter1;
}
|
| Class1.h または Class1.cpp から @generated タグを削除 |
| 変換では、固有 ID を使用して、モデル内で Operation1 が Operation2 に名前変更されたと判断しますが、メソッドの @generated タグが削除されているために、Operation1 の変更は保持されます。
そのため、Class1.h または Class1.cpp で Operation1 は変更されず、変換によって Operation2 というメソッドが生成されることはありません。
Class1.h:
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofslx4A"
//@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)"
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofslw3S"
int attribute1;
public:
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofsly5D"
int Operation1(int Parameter1);
}; //クラス Class1 の終了
Class1.cpp:
#include "Class1.h"
//ファイル Class1.cpp のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.cpp のセクションの終了
int Class1::Operation1(int Parameter1)
{
return Parameter1;
}
|
以下の表は、派生関係を生成するようには構成されていない変換を再実行した際に生成されるコードを示したものです。 固有 ID がないため、変換では、完全修飾名およびメソッド・シグニチャーを使用してモデル要素をソース・コード要素にリンクします。 また、リファクタリングはサポートされません。
| 固有 ID のないコード |
|---|
| @generated タグは未削除 |
このコードは、以下の変更を示しています。
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 Operation2(int Parameter1);
}; //クラス Class1 の終了
Class1.cpp:
//ファイル Class1.cpp のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.cpp のセクションの終了
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation2(int Parameter1)
{
//TODO 自動生成されたメソッド・スタブ
return 0;
}
|
| Class1.h または Class1.cpp から @generated タグを削除 |
| 固有 ID がないため、変換は Operation2 が新規メソッドであると判断します。
このコードは、以下の変更を示しています。
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:
int Operation1(int Parameter1);
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation2(int Parameter1);
}; //クラス Class1 の終了
#endif
Class1.cpp:
#include "Class1.h"
//ファイル Class1.cpp のセクションの開始
//TODO: 保持する定義を追加します
//ファイル Class1.cpp のセクションの終了
int Class1::Operation1(int Parameter1)
{
return Parameter1;
}
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation2(int Parameter1)
{
//TODO 自動生成されたメソッド・スタブ
return 0;
}
|