UML から Java への変換の再実行時の考慮事項

UML から Java への (非推奨) 変換および UML から Java への 変換では、特定の生成された要素に @generated タグが追加されます。 変換の再実行時には、変換は @generated タグのついた要素を上書きします。 また、変換により、クラスの限定子、クラス・メンバー、メソッドの限定子、メソッド・パラメーター、およびメソッド本文が上書きされます。

UML から Java への変換を実行する前に、変換により上書きされたくない要素から @generated タグを除去できます。 また、@generated タグを編集して @ 文字の後に文字を挿入することもできます (例えば @wasgenerated など)。 文字を挿入することで、変換の再実行時に上書きされない生成済みコードを識別しやすくなります。

変換により生成される要素

UML から Java への変換では、@generated タグが以下の生成された要素に追加されます。
  • クラス
  • インターフェース
  • フィールド
  • メソッド

生成されたコードの保護

UML から Java への変換を再実行する場合、 デフォルトでは、変換によって生成されるメソッド本文も、ユーザーが作成したメソッド本文もその変換では上書きされません。 変換では、@generated タグを除去または編集したかどうかにかかわらず、// begin-user-code コメントと // end-user-code コメントの間にあるメソッド本文は常に保持されます。

変換では常にメソッド本文は保持されますが、 メソッドから @generated タグを削除するか編集して、そのメソッドに対する構造上の変更点を保持する必要があります。 例えば、メソッド・シグニチャーを変更した場合や、メソッドの名前を変更した場合は、そのメソッドの @generated タグを削除するか編集する必要があります。

@generated タグを削除または編集しないと、@generated タグが適用される要素が変換により上書きされます。

注: ソースの UML モデルにメソッドを追加するには、後方変換を実行します。
この例では、ソース UML モデルに Class1 という UML クラスがあり、 そのクラスに、attribute という 1 つの整数属性、およびパラメーターのない Operation1 および Operation2 という 2 つの操作があります。 以下の表には、変換により保持または上書きされる要素の例がリストされています。 変更されたコードの列には、以下の変更点が含まれるコードがリストされています。
変換を再実行すると、以下の項目が実行されます。
  • @generated タグが削除されているため、継承を保持します
  • @generated タグが削除されていないため、メソッド Operation1 のメソッド・シグニチャーへの変更を上書きします
  • 変換では新規のメソッド本文が属するメソッドが検索できないため、Operation1 のメソッド本文への変更を保存しません
  • メソッド本文 Operation2 への変更を保持します
UML モデル要素 生成されたコード 変更されたコード 変換の再実行後の生成されたコード
このイメージは、前の段落で説明されている Class1 という UML クラスを示しています。 Class1.java:
/** 
 	 * @generated  "UML to Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
 */
public class Class1 {
	/** 
	 * @generated  "UML to Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
	 */
	private Integer attribute1;

	/** 
	 * @generated  "UML to Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
	 */
	public void Operation1() {
// begin-user-code
		// TODO 自動生成されたメソッド・スタブ

// end-user-code
	}

	/** 
	 * @generated  "UML to Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
	 */
	public void Operation2() {
// begin-user-code
		// TODO 自動生成されたメソッド・スタブ

// end-user-code
	}
}
Class1.java:
/** 
  */
public class Class1 extends MyClass {
	/** 
	 * @generated  "UML to Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
	 */
	private Integer attribute1;

	/**
	 * @generated  "UML to Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
	 */
	public void Operation1(int parameter1) {
// begin-user-code
		// TODO 自動生成されたメソッド・スタブ
		int i = 2;
		System.out.println(i);
// end-user-code
	}

	/**
	 * @generated  "UML to Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
	 */
	public void Operation2() {
// begin-user-code
		// TODO 自動生成されたメソッド・スタブ
		int j = 2;
		System.out.println(j);
// end-user-code
	}
}
Class1.java:
/**
 * 
 */

public class Class1 extends MyClass {
	/** 
	 * @generated  "UML to Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
	 */
	private Integer attribute1;

	/**
	 * @generated  "UML to Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
	 */
	public void Operation1() {
// begin-user-code
		// TODO 自動生成されたメソッド・スタブ

// end-user-code
	}

	/**
	 * @generated  "UML to Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
	 */
	public void Operation2() {
// begin-user-code
		// TODO 自動生成されたメソッド・スタブ
		int j = 2;
		System.out.println(j);
// end-user-code
	}
}

新規コードの保護

変換では、生成されたコードに追加した Java™ 要素は、その要素に誤って @generated タグを追加しない限り、上書きしません。
注: ソースの UML モデルに Java 要素を追加するには、後方変換を実行します。

@generated タグおよびユーザー定義セクションによって柔軟性が提供されますが、発生する可能性のある問題を回避するには、生成されたコードにではなく、ソース UML モデルに対して構造上の変更を行う必要があります。 また、後方変換を実行し、ソース UML モデルに対して新規のメソッドまたは属性を追加することもできます。

関連タスク
UML から Java への変換の実行または再実行
サイレント・モードでの UML から Java への変換の実行
関連資料
UML から Java への変換出力におけるコード変更の影響
UML から Java への変換出力におけるモデル変更の影響
UML から Java への変換による UML 要素の変換処理

フィードバック