UML から Java への変換

UML から Java 変換では、UML モデル要素が Java™ コードに変換され、Java 2 Platform, Standard Edition 1.4 (J2SE 1.4) および Java 2 Platform, Standard Edition 5.0 (J2SE 5.0) と互換性のあるコードが生成されます。
重要: UML から Java 1.4 への変換は推奨されません。現在これは、UML から Java (非推奨) 変換と呼ばれています。UML から Java (非推奨) 変換には新規の機能は含まれていませんが、UML から Java 5.0 への変換 (現在は UML から Java 変換と呼ばれています) とは変換の振る舞いが異なります。 アプリケーションに含まれているコードが J2SE 5.0 と互換性があるか J2SE 1.4 以降と互換性があるかに関わらず、UML から Java 変換を使用する必要があります。

変換構成が 調整されたモデリング設計規約管理プロトコル (DCMP) を実装する場合は、UML から Java 変換と Java から UML への変換に有効なソース要素とターゲット要素を指定する必要があります。

有効な変換ソース

UML から Java 変換により、以下の UML ソースから Java クラスが生成されます。
  • UML モデル
  • パッケージと、そのパッケージのコンテンツ
  • ネストなしのクラスと、そのクラスのコンテンツ
  • ネストなしのインターフェースと、そのインターフェースのコンテンツ
  • ネストなしの列挙

この変換では、UML モデル、パッケージ、クラス、およびインターフェースのコンテンツを変換します。 例えば、この変換によってクラスが変換された場合、 そのクラスの操作とプロパティーも変換されます。

変換構成エディターを使用しないで、「プロジェクト・エクスプローラー」ビューでモデルまたはモデル要素を選択した場合は、その選択したモデルまたは要素により、変換構成で指定されたソース・モデルまたは要素がオーバーライドされます。 変換構成は影響を受けず、変換構成エディターまたは「新規変換構成」ウィザードの「ソースとターゲット」ページで指定したソースも変更されません。

有効な変換ターゲット

UML から Javaの出力の宛先として、Java プロジェクト、または Java プロジェクト内のソース・フォルダーを指定できます。

生成される出力の代替名

マッピング・モデルを作成すれば、変換によって生成された要素の代替名をソース・モデルを変更せずに指定できます。 命名上の制約などの Java 固有の詳細をプラットフォーム独立モデルに組み込む場合、 またはソース・モデルの論理編成が対象のパッケージングとして適切でない場合は、代替名を指定できます。

com.ibm.NewName などの修飾名や、NewName などの非修飾名を指定できます。 パッケージに代替名を指定すると、分類子に完全修飾名が指定されていない限り、該当パッケージ内のすべての分類子に影響を及ぼします。 変換によって生成された要素に対して、同じプロジェクト内の代替場所を指定することもできます。

カスタム列挙型のサポート

列挙型リテラルの名前と値を取得可能な文字列として保持する Java 列挙型の生成を可能にすることができます。この機能を使用可能にするには、変換の構成時に、「UML から Java へのカスタム列挙型拡張」を選択します。

XSD データ型の変換

XSD 型のモデル・ライブラリーを UML モデルに適用すると、UML から Java 変換を実行したときに、XSD データ型が対応する Java 修飾名に変換されます。マッピング情報の詳細は、下の参照トピックを参照してください。

UML から Java 変換でサポートされるパラメーター化された型

UML から Java 変換を作成または構成する場合に、パラメーター化された型の汎用インターフェース、または generics として以下の Java コレクション型を指定できます。
  • AbstractCollection
  • AbstractList
  • AbstractMap
  • AbstractSequentialList
  • AbstractSet
  • ArrayList
  • BitSet
  • Collection
  • HashMap
  • HashSet
  • Hashtable
  • LinkedList
  • List
  • Map
  • Set
  • SortedMap
  • SortedSet
  • Stack
  • TreeMap
  • TreeSet
  • WeekHashMap
  • Vector

変換では、その他の Java コレクションに対してはパラメーター化された型の情報を生成しません。

UML コレクション・タイプ

UML コレクション・タイプは以下のモデル要素のプロパティーによって決まります。
  • 「一般」ページの「プロパティー」ビューで、Ordered プロパティーおよび Unique プロパティーによって、UML コレクション・タイプが指定されます。
  • 「拡張」ページの「プロパティー」ビューで、「順序付け」プロパティーおよび「固有」プロパティーによって UML コレクション・タイプが指定されます。
注: 変換によって生成される Java コレクション・タイプを指定するには、«JavaCollection» または «JavaArray» ステレオタイプを、UML 属性、関連、または操作に適用します。このステレオタイプを適用すると、変換構成において選択したデフォルト・コレクションがオーバーライドされます。これらのステレオタイプは、UML から Java への変換プロファイルで使用できます。

UML コレクション情報がある Java ソース・コードの注釈

J2SE 5.0 と互換性のあるコードを生成するように変換を構成しない場合、UML から Java 変換では、生成される Java コレクション・タイプに UML コレクション・タイプについてのコメントが追加されます。 これらのコメントにより、ビジュアル開発ツールで Java コレクション型の正確なビジュアル表示を作成できるようになります。

UML 属性に多重度 * を指定し、変換構成の Java コレクション情報を変更しない場合、デフォルトでは、UML から Java 変換によって、Java セットが生成されます。

以下の表は、Class1 と Class2 の間の関連関係の例を示しています。この関連関係は多重度 1..* を指定します。 この表は、変換が変換構成のデフォルト値を使用して生成するソース・コードの抜粋と、関連関係のビジュアル表示も示しています。変換は、ソース・モデル要素と生成されたコードの間のトレース関係を作成するように構成されていないものとします。
UML 要素 UML から Java 変換の出力 変換出力のビジュアル表示
このイメージは、多重度を指定する関連がある UML モデル要素 Class1 および Class2 を示しています。 変換構成で「Java 5 を使用」チェック・ボックスをクリアすると、変換により、以下のソース・コードが生成されます。
public class Class1 {
	/** 
	 * <!-- begin-UML-doc -->
	 * <!-- end-UML-doc -->
	 * @uml.annotations for <code>class2</code>
	 *     collection_type="Package1.Class2"
	 * @generated "UML to Java (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
	 */
	private Set class2;
}
このイメージは、クラス Class2 のコレクションが含まれている、「プロジェクト・エクスプローラー」ビューの Class1 のビジュアル表示を示しています。
変換構成で「Java 5 を使用」チェック・ボックスを選択すると、変換により、以下のソース・コードが生成されます。
public class Class1 {
	/** 
	 * <!-- begin-UML-doc -->
	 * <!-- end-UML-doc -->
	 * @generated "UML to Java (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
	 */
private Set<Class2> class2;
}
Java から UML への変換を、上の例の生成されたコードを変換ソースとして使用して実行すると、以下の項目が生成されます。
  • 変換によって、Class1 に、«JavaCollection» ステレオタイプが適用された class2 という UML 属性が生成されます。collectionType プロパティーは java.util.Collection に設定され、多重度は * に設定されます。
  • 変換によって、Class2 に、多重度が 1 に設定され、ステレオタイプが適用されていない、class1 という Class タイプの UML 属性が生成されます。

以下のイメージは、Java から UML への変換によって生成される UML クラスのビジュアル表示を示しています。

このイメージは、前の段落で説明した例を図で示しています。

Javadoc 情報の生成

J2SE 5.0 のコードを生成するために、UML から Java への変換を構成している場合、変換は、サポートされる Java 要素について、その Javadoc 情報を生成します。 生成される Javadoc 情報は、以下のコンポーネントで構成されます。
  • UML 要素の documentation プロパティーの内容。 変換はそれを以下のタグの間に入れます。
    /*
     * <!-- begin-UML-doc -->
     * <!-- end-UML-doc -->
     */
  • 変換によって生成されるアノテーション
  • 対応する Java 型の JDT コメント・テンプレートによって生成される情報
    注: JDT テンプレートによって生成される Javadoc 情報をカスタマイズするには、「ウィンドウ」 > 「設定」 > 「Java」 > 「コード・スタイル」 > 「コード・テンプレート」をクリックしてから、「コメント」を展開し、Java 型を選択し、その型の Pattern フィールドにおいて Java コメントをカスタマイズします。

前のリリースの Rational モデリング製品の Javadoc 情報の保持

本製品の前のリリースで生成された Javadoc タグ間の情報を保持するためには、Java から UML への変換を一回実行して、 Javadoc 情報を、UML モデルの対応する要素の文書プロパティーにマイグレーションします。
注: 本製品の前のリリースで生成された Javadoc タグを生成するには、Java Development Toolkit.

変換出力における関係の文書

UML から Java 変換では、以下の UML 関係に対する UML 関係文書を Javadoc 情報に変換します。
  • 関連
  • 汎化
  • 実装
  • 実現
使用関係の文書を Javadoc 情報に変換する場合は、 J2SE 5.0 コードを生成するよう UML から Java 変換を構成する必要があります。

変換では、汎化、実装、および実現の各関係の文書を、各関係内の発生元クラスの UML 文書に対して追加します。 また、変換では、各関係の生成されたターゲット・クラスの Javadoc 情報に対しても、それらの関係の文書を追加します。

関連の場合、変換では、それぞれの関連プロパティーの文書に対して UML 文書を追加します。

Java キーワードの保持

UML モデルでは、strictfp、native、transient、および volatile などのいくつかの Java キーワードを表すことができません。 UML から Javaへの変換を実行する際に、これらのキーワードを保持するには、これらのキーワードを UML キーワードとしてモデル化する必要があります。

生成された Java 要素のビジュアル表示

UML から Java 変換の出力を基本技術成果物にする場合は、変換によって混合モデリングと呼ばれる設計規約管理プロトコル (DCMP) が実装されるように指定します。 この DCMP を指定することで、変換によって、ソース UML オブジェクトと生成された Java コードの間に直接関係が作成されます。直接関係の作成により、ソース UML オブジェクトが削除され、それがソース・オブジェクトのビジュアル表示で置き換えられます。

ネストされた要素などで、UML 要素を変換できない場合、これらの要素は最も近いパッケージに移動されます。変換でモデル要素を最も近いパッケージに移動できない場合、その要素は削除されます。

起こりうる問題を回避するために、ソース・モデルのバージョン管理を行ってください。

ソース・モデル要素と変換出力の間のトレース関係

UML から Java 変換を使用して、UML ソース・モデル要素から生成された Java クラスへのトレース関係を作成できます。その後、モデル照会を作成および実行して、トピック図内にそのトレース関係を表示することができます。

トレース関係の作成は、複数のモデルおよび複数の変換構成を持つような大規模なプロジェクトの場合に便利です。 また、変換出力がソフトウェアの仕様やモデル要素とどのように関係しているかを表示する、追跡可能性照会を作成および実行することもできます。

トレース関係を作成するように構成された変換を実行すると、@generated タグをサポートする各要素について、@generated タグに固有 ID が追加されます。 ソース UML モデル内の要素の名前を変更すると、この固有 ID によりマージ機能で適切な要素のリファクタリングとマージが可能になります。
注: UML 要素をそのトップレベルのクラスの範囲外に移動すると、要素の範囲が変更されるため、変換を再実行したときに、マージ・アルゴリズムでは名前変更された要素がリファクタリングまたはマージされません。

変換を再実行すると、必要に応じて、ソース・コード内の ID を 使用して、対応する要素がマッチングされ、モデルに対する変更内容を反映するためにコードが変更されます。例えば、ソース・モデル内の UML 操作の名前を変更して変換を再実行すると、変換により前に生成された Java メソッドが削除されて新規メソッドが追加されるのではなく、前に生成されたメソッドの名前が変更され、メソッドの本文が保持されます。

Java から UML への変換、または後方変換でも、ID を使用して Java プロジェクトと UML モデル間の対応する要素をマッチングすることができます。この方法を使用すると、Java ソース・コード要素に対する変更は、生成されたコードの追加や削除ではなく、変更として、またはコードのリファクタリングとして扱われます。

ソース・モデル要素と変換出力の関係を表示するには、ソース・モデル要素を図にして可視化し、変換によって生成されたコード要素をその図の中にドラッグします。以下の表は、attribute1 という名前の整数属性が含まれる Class1 という名前のソース・モデル要素の UML 表現と、パラメーターを持たない 2 つのオペレーション Operation1 と Operation2、変換によって生成されるコード、および要素間のトレース関係を示すクラス図をリストしています。
UML 要素 変換出力 クラス図のトレース関係
このイメージは、前のパラグラフで説明されている Class1 の UML 表記を示しています。
/**
 * 
 */
package Package1;

import java.util.Collection;

/** 
 * <!-- begin-UML-doc -->
 * <!-- end-UML-doc -->
 * @uml.annotations
 *     derived_abstraction="platform:/resource/UMLProject/Model.emx#_9YlH8CpPEdyn7_VFIWTp4A"
 * @generated "sourceid:platform:/resource/UMLProject/Model.emx#_9YlH8CpPEdyn7_VFIWTp4A"
 */
public class Class1 {
	/** 
	 * <!-- begin-UML-doc -->
	 * <!-- end-UML-doc -->
	 * @generated "sourceid:platform:/resource/UMLProject/Model.emx#__8ptgOSnEdyXH8PWExuX2g"
	 */
	private Integer attribute1;

	/** 
	 * @return the attribute1
	 * @generated "sourceid:platform:/resource/UMLProject/Model.emx#__8ptgOSnEdyXH8PWExuX2g?GETTER"
	 */
	public Integer getAttribute1() {
		// begin-user-code
		return attribute1;
		// end-user-code
	}

	/** 
	 * @param theAttribute1 the attribute1 to set
	 * @generated "sourceid:platform:/resource/UMLProject/Model.emx#__8ptgOSnEdyXH8PWExuX2g?SETTER"
	 */
	public void setAttribute1(Integer theAttribute1) {
		// begin-user-code
		attribute1 = theAttribute1;
		// end-user-code
	}

	/** 
	 * <!-- begin-UML-doc -->
	 * <!-- end-UML-doc -->
	 * @generated "sourceid:platform:/resource/UMLProject/Model.emx#_RDsjcOSnEdyXH8PWExuX2g"
	 */
	public void Operation1() {
		// begin-user-code
		// TODO 自動生成されたメソッド・スタブ

		// end-user-code
	}

	/** 
	 * <!-- begin-UML-doc -->
	 * <!-- end-UML-doc -->
	 * @generated "sourceid:platform:/resource/UMLProject/Model.emx#_R04v0OSnEdyXH8PWExuX2g"
	 */
	public void Operation2() {
		// begin-user-code
		// TODO 自動生成されたメソッド・スタブ

		// end-user-code
	}
}
このイメージは、Class1 の UML 表現と変換出力の間の、派生ステレオタイプが適用されたトレース関係を示しています。

変換によってトレース関係を生成するように指定した場合には、ソース・モデルは変換によって変更されません。

変換出力におけるモデル要素 ID

トレース関係を作成するように構成された変換を実行すると、@generated タグをサポートする各要素について、@generated タグに固有 ID が追加されます。 この ID は、Java 要素の生成元になった UML モデル要素を指定します。この例の場合は、* @generated "sourceid:platform:/resource/UMLProject/SimpleModel.emx#_83GpoBtIEdyLaOwyRX_ZMQ" です。 ソース UML モデル内の要素の名前を変更すると、この固有 ID によりマージ機能で適切な要素のリファクタリングとマージが可能になります。

Java から UML への変換、または後方変換でも、ID を使用して Java プロジェクトと UML モデル間の対応する要素をマッチングすることができます。この方法を使用すると、Java ソース・コード要素に対する変更は、生成されたコードの追加や削除ではなく、変更として、またはコードのリファクタリングとして扱われます。

チーム・サポートとの統合

UML から Java 変換は、ファイルの自動チェックアウトや新規ファイルの追加を可能にする IBM® Rational® Team Concert、CVS、Rational ClearCase®、および Rational ClearCase LT バージョン管理システムとの統合機能を提供します。 構成管理システムを使用するには、チーム機能を有効にする必要があります。


フィードバック