UML から CORBA への変換

UML から CORBA への変換では、統一モデリング言語 (UML) バージョン 2.0 モデル要素を Common Object Request Broker Architecture (CORBA) Interface Definition Language (IDL) に変換します。この変換を使用して、CORBA プロジェクトを UML 2.0 仕様からシードできます。また、変換では、ほとんどの CORBA 要素を モデル化および生成するために使用できる、単純なプロファイルがオプションで 提供されます。


1. 始めに

UML から CORBA への変換を使用する前に、UML 2.0 モデルおよび プロジェクトの作成と編集についての知識を身につける必要があります。 次の手順では、CORBA 変換の最も基本的な使用法を説明します。

UML モデルを CORBA に変換するには、次の手順を実行します。

 

1.    モデリング・パースペクティブになっていることを確認する。

2.    「モデル・エクスプローラー」ビューで、 「Component1」 という名前の UML コンポーネントを作成し、そのコンポーネント内に「Interface1」 という名前のインターフェースを作成する。

3.    コンポーネントを右クリックしてから、「変換」>「変換を実行」>「UML から CORBA へ (UML 2 CORBA)」をクリックする。

4.    「変換を実行」ウィンドウで、「対象コンテナーの作成 (Create Target Container)」を クリックする。

5.       「新規プロジェクト」ウィンドウで、 プロジェクト名としてSample」を 選択して、「完了」をクリックする。

 

新規プロジェクトには、「Component1.idl」という名前の IDL ファイルが 含まれており、そのファイルには、Interface1 という名前のインターフェースが 定義されています。

変換は、 それ以外にも、さらに複雑な機能を実行できます。例えば、ソース・モデルを 変更しない名前の指定変更、および潜在的な変換の問題を検出するための UML モデルの 検証などがあります。

 

2. 変換の詳細

 

2.1 CORBA テンプレート・モデル

CORBA テンプレート・モデルは、CORBA のモデル化を素早く開始するのに 役立ちます。まず、「ファイル」>「新規」>「UML モデル」を クリックして、選択可能なテンプレートから「CORBA モデル (CORBA Model)」を 選択します。 これを選択すると、UML モデルが生成され、CORBA モデルを作成するための 手順および基本的なインフラストラクチャーが提供されます。

 

2.2 変換ソース

変換の各アプリケーションのソースとして、UML モデル、コンポーネント、 コンポーネントを含むパッケージ、またはこれらの要素の組み合わせを指定することが できます。変換によって、指定されたソースの階層内の UML コンポーネントごとに 1 つの IDL ファイルが生成されます。各 IDL ファイルには、対応する UML コンポーネントが所有する要素専用のコードが含まれています。 変換では、UML コンポーネントが所有していない要素は無視されます。 他の要素を変換のソースとして指定すると、変換は検証中に失敗します。  

CORBA プロファイルを指定すると、変換でコードが生成される対象となる モデル内の UML コンポーネントを制御できます。この制御は、generateCode プロパティーを true または false に設定することで実行できます。このプロパティーを false に 設定すると、変換でコードが生成されるときに、このコンポーネントは無視されます。

2.3 変換対象

変換の各アプリケーションのターゲットは、単一の Eclipse プロジェクト・ リソースです。プロジェクトには、Eclipse ワークスペースのリソース・ ファイルであると見なされている、1 つ以上の IDL ファイルが含まれています。

2.4 オプションのプロファイル

次の CORBA タイプは、プロファイルを使用せずにモデル化できます。

オプションのプロファイルは、次のような、より特定された CORBA タイプを モデル化するためのステレオタイプを提供します。

2.5 ソース・モデルの検証

CORBA 変換プロファイルは、ステレオタイプに関する制約を定義します。 これらの制約を評価して、ソース・モデルに関するエラーを報告するには、「検証の実行コマンドを 使用できます。また CORBA 変換は、変換が適用されるモデルの部分で追加の 検証を実行します。

2.6 マッピング・モデルの使用

マッピング・モデルを使用すると、生成されたコード内で、モデル化された 要素の名前を変更することができます。コンポーネントを除き、単純な ID を持つ UML 要素のみ、名前変更できます。UML コンポーネントの名前変更は、 単純な ID、または IDL ファイルが生成されるターゲット・コンテナーを基準とする 有効な部分パスのいずれかを持つ場合に行うことができます。 パスは、IDL ファイルの名前で終了する必要があります。例えば、Component A の 名前を dirA\A に変更する場合、変換では、ターゲット・コンテナーの トップレベルではなく、dirA という名前のディレクトリーに A.idl が生成されます。

3. UML から CORBA へのマッピング

次の表に、変換で UML 2.0 モデル要素が CORBA IDL にマップされる方法を リストします。

UML 2.0 要素

CORBA IDL 要素

モデル

なし

コンポーネント

IDL ファイル

基本タイプ

基本タイプ

ネイティブ

パッケージ

モジュール (パッケージがコンポーネント内にある場合)

無視される (パッケージがコンポーネント内にない場合)

インターフェース

インターフェース

属性または関連

属性

操作

IDL 操作

パラメーター

IDL 操作のパラメーター

列挙

列挙

クラス <<CORBAValue>>

値タイプ

カスタム値タイプ

Boxed 値タイプ

静的属性

定数

クラス <<CORBAStruct>>

Struct

クラス <<CORBAException>>

Exception

クラス <<CORBATypedef>>

Typedef

Array

Sequence

3.1 UML 2.0 モデル

UML 2.0 モデルは、CORBA 要素には直接マップされません。マッピングが 行われないということは、モデルでコンポーネントが定義されていない場合に、 変換ではモデル要素のコードが生成されないことを意味します。

3.2 UML 2.0 コンポーネント

UML 2.0 コンポーネントは、 単一の CORBA IDL ファイルにマップされます。コンポーネントの IDL ファイルには、 コンポーネントが所有するすべての CORBA 要素が含まれています。

3.3 UML 2.0 基本タイプ

UML 2.0 基本タイプは、CORBA 基本タイプまたは CORBA ネイティブ・ タイプのいずれかにマップされます。UML 2.0 基本タイプとしてすべての CORBA 基本タイプが含まれている UML 2.0 タイプ・ライブラリーは、モデルに インポート可能です。または、既存の CORBA 基本タイプと同じ名前で UML 2.0 基本タイプを作成して、モデルでのタイプ選択に使用することができます。 次のリストには、タイプ・ライブラリーで使用可能な CORBA 基本タイプを示します。

リストで指定されているタイプ以外の名前がついた UML 2.0 基本 タイプは、CORBA ネイティブ・タイプを表します。CORBA ネイティブ・ タイプは、IDL ファイルで 
ネイティブ定義を生成し、モデルでの タイプ選択に使用可能です。

3.4 UML 2.0 パッケージ

UML 2.0 コンポーネントに含まれている UML 2.0 パッケージは、CORBA モジュールに マップされます。変換では、UML 2.0 コンポーネント内にない UML 2.0 パッケージは 
無視されます。

3.5 UML 2.0 インターフェース

UML 2.0 インターフェースは、CORBA インターフェースにマップされます。 UML 2.0 インターフェースの UML 2.0 汎化は、CORBA インターフェースの継承に マップされます。次の表に、変換がインターフェース・プロパティーを 変換する方法をリストします。

UML インターフェース・プロパティー

変換の結果

名前

指定された名前を持つ IDL 内の新規 CORBA。正しくない文字は すべて除去される

可視性、public

通常のインターフェース

可視性、private

ローカル・インターフェース

抽象

CORBA インターフェースを抽出する

リーフ

無視される

3.6 UML 2.0 属性 および関連

UML 2.0 属性および関連は、CORBA 属性にマップされます。次の 表に、変換が属性プロパティーを変換する方法をリストします。

UML 属性プロパティー

変換の結果

名前

同じ名前を持つ CORBA 属性

タイプ

指定された基本タイプを持つ CORBA 属性

「Is Static」および「default」値

CORBA 定数

読み取り専用

読み取り専用の CORBA 属性

順序付け

IDL 順序

次の表に、変換が関連プロパティーを変換する方法をリストします。

UML 関連プロパティー

変換の結果

名前

同じ名前を持つ CORBA 属性

タイプ

この関連のサプライヤーとしてのタイプを備えた CORBA 属性

「Is Static」および「default」値

CORBA 定数

読み取り専用

読み取り専用の CORBA 属性

順序付け

IDL 順序

3.7 UML 2.0 操作

UML インターフェース内、または <<CORBAValue>> ステレオタイプを 持つ UML クラス内で宣言される UML 2.0 操作は、IDL 操作に直接マップされます。 変換では、他の UML 2.0 操作は無視されます。次の表に、変換が操作 プロパティーを変換する方法をリストします。

UML 操作プロパティー

変換の結果

名前

指定された名前を持つ新規の CORBA 操作

戻り値の型

CORBA 操作の戻り値の型

その他すべてのプロパティー

無視される

<<CORBAOneway>> ステレオタイプを持つ操作

片方向の IDL 操作

<<CORBAValue>> UML クラス内の操作での <<create>> ステレオタイプ

CORBA 値の初期化指定子の操作にマップされる

3.8 UML 2.0 パラメーター

UML 2.0 パラメーターは、IDL 操作のパラメーターにマップされます。 次の表に、変換がパラメーター・プロパティーを変換する方法をリストします。

UML パラメーター・プロパティー

変換の結果

名前

指定された名前を持つ新規パラメーター

方向 (入力、出力、入出力)

IDL で対応するパラメーター。'戻り' は無視される

タイプ

指定されたタイプのパラメーター

可視性

無視される

3.9 UML 2.0 列挙

UML 2.0 列挙は、CORBA 列挙にマップされます。列挙には、 列挙リテラルのみを含めることができます。

3.10 <<CORBA Value>> ステレオタイプを持つ UML 2.0 クラス

<<CORBAValue>> ステレオタイプを持つ UML 2.0 クラスは、CORBA 値 タイプにマップされます。<<CORBAValue>> ステレオタイプは、 名前が specification で、 
タイプが列挙 {"none", "custom", "boxed"} の プロパティーを持ちます。デフォルト値は「none」です。 specification プロパティーを「custom」に 設定すると、CORBA カスタム値に 
マップされます。specification プロパティーを 「boxed」に設定すると、CORBA boxed 値にマップされます。

CORBA 値タイプは、インターフェースのプロパティーとは別の オプションの状態および初期化指定子メソッドを持つエンティティーです。 CORBA 値タイプの状態メンバーは、<<CORBAState>> ステレオタイプを持つ UML 2.0 属性によって表され、 初期化指定子メソッドは、製品に付属の基本プロファイルから <<create>> ステレオタイプを適用することによって 表されます。

次の表に、変換がクラス・プロパティーを変換する方法をリストします。

UML クラス・プロパティー

変換の結果

ステレオタイプ

<<CORBAValue>>

名前

指定された名前を持つ新規値タイプ

可視性

無視される

抽象

抽象値タイプ

<<CORBAState>> を持ち、可視性が public または private の属性

CORBA 値タイプで、可視性が public または private の CORBA 状態メンバー

<<create>> を持つ操作

非抽象値タイプの CORBA Factory Method

3.11 UML 2.0 静的属性

CORBA 定数宣言は、IDL ファイル、モジュール、インターフェース、 または値タイプの範囲内で表示できます。

インターフェースまたは値タイプの範囲内で表示される CORBA 定数は、 対応する UML インターフェースまたはクラス内の UML 静的属性によって 
表すことが できます。

CORBA モジュールの範囲内、または IDL ファイルの範囲内に表示される CORBA 定数は、UML パッケージ内 (モジュール定数の場合) または UML コンポーネント内 (IDL 範囲定数の場合) に表示される 
<<CORBAConstants>> ステレオタイプを持つ UML クラス内の 属性でなければなりません。 
このクラスの名前は無視されます。<<CORBAConstants>> ステレオタイプを 持つクラスの各属性は、定数宣言を表します。

<<CORBA Struct>> ステレオタイプを持つ 3.12 UML 2.0 クラス

<<CORBAStruct>> ステレオタイプを持つ UML 2.0 クラスは、CORBA struct にマップされます。このクラスが備えるのは 1 つの 属性のみで、操作を備えないように制限されています。struct メンバーは、 クラスの UML 属性または関連によって表されます。

3.13 <<CORBA Exception>> ステレオタイプを備えた UML 2.0 クラス

<<CORBAException>> ステレオタイプを備えた UML 2.0 クラスは、 例外定義を表します。このタイプのクラスは、オプションで属性を含むことが できます。

CORBA 2.4 では、CORBA 操作のみが例外を発生させることができ、CORBA 属性は 例外を発生させることはできません。そのため、CORBA 
操作が例外を発生させた場合は、 この例外は、対応する UML 操作の RaisedException プロパティーで表されます。

3.14 <<CORBA Typedef>> ステレオタイプを備えた UML 2.0 クラス

変換では、CORBA typedef を使用して、既存の CORBA タイプに新規の名前を 付けます。<<CORBATypedef>> ステレオタイプを備えた UML 2.0 クラスは、 
CORBA typedef にマップされます。このクラスから 既存の CORBA タイプへの UML 2.0 置換関係は、CORBA typedef 
を表す完全な表記です。

CORBA 2.4 仕様では、CORBA array および sequence タイプの 匿名宣言を使用すべきではありません。このマッピングでは、匿名の CORBA array または 
sequence はサポートされません。typedef 宣言を 使用して、array または sequence タイプに名前を付ける必要があります。 UML 2.0 クラスを拡張する <<CORBATypedef>> ステレオタイプには、 
array または sequence dimensions を含む specification プロパティー (値は「none」、「array」、 および「sequence」であり、デフォルトは「none」) 
および dimensions プロパティー (デフォルトは空) が含まれます。

CORBA array は、<<CORBATypedef>> ステレオタイプを備えた クラスから、array 要素のタイプを表す 
UML 要素への UML 2.0 置換関係として モデル化されます。ステレオタイプの「specification」プロパティーは 「array」に設定され、「dimensions」プロパティーは 
配列の次元を表す 文字列 (例えば、「[3][5]」) に設定されます。constructed タイプから <<CORBATypedef>> ステレオタイプを備えた クラスへの関連は、 
CORBA array としてのタイプを備えた constructed タイプで メンバーをモデル化します。

CORBA sequence は、<<CORBATypedef>> ステレオタイプを備えた クラスから、 
sequence 要素のタイプを表す UML 要素への UML 2.0 置換関係として モデル化されます。 ステレオタイプの「specification」プロパティーは「sequence」に設定され、 オプションで、「dimensions」プロパティーが、 
シーケンスの上限を表す 文字列値 (例えば、「12」) に設定されます。 
constructed タイプから <<CORBATypedef>> ステレオタイプを 備えたクラスへの関連は、CORBA sequence としてのタイプを備えた constructed タイプで メンバーをモデル化します。

4. CORBA フォワード宣言および包含

変換では、CORBA フォワード宣言が自動的に生成されます。 これらをモデル化することはできません。変換では、フォワード宣言を 最小化するために、IDL でタイプを再配列します。定義の前にタイプを使用し、 タイプ定義を使用する前に移動することができない場合、 
変換では、 正しい範囲内でそのタイプのフォワード定義が生成されます。

変換では、定義が別のコンポーネントで表示されるタイプが 使用されると、#include が自動的に生成されます。大部分の CORBA IDL ファイルでは、 
ORB.idl ファイルを含める必要があります。モデル化されていない 別の外部 IDL ファイルの、生成された IDL ファイルで #include を強制する必要が ある場合は、 
現行のコンポーネントから、外部 IDL ファイルを表す新規作成の コンポーネントへの依存関係を作成する必要があります。generateCode プロパティーを false に設定すると、 
新規作成されたコンポーネントのコードの生成を 回避できます。このプロパティーは、CORBA プロファイルから得られる 
コンポーネントの ステレオタイプを備えています。例えば、IDL ファイル内に 「#include <ORB.idl>」を生成するには、現行の IDL ファイルをモデル化する コンポーネントから、 
ORB という名前の新規コンポーネントへの依存関係を 作成する必要があります。また、変換で、ORB という名前の新規コンポーネントの コードが生成されないようにするには、 
その generateCode プロパティーを false に 設定します。

5. クロス・モデル参照

UML から CORBA への変換では、相互参照を備えたモデルがサポートされます。 例えば、現行モデル内の Interface A は、Interface B から 
別のモデルに 拡張することができます。そのような場合は、変換により、 使用されるタイプ (この例では、Interface B) が表示される IDL ファイルの #include が 作成されます。 
変換は、ファイル・システム内の組み込み IDL ファイルの場所を管理しません。 マッピング・モデルを使用して、 
生成された IDL ファイルの相対パスを保守する 必要があります。

 

6. マップされない CORBA 構成

次の CORBA 構成は、現在このプロファイルではマッピングが行われません。

7. 共通の変換技術のサポート

 

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

CORBA 変換では、ユーザーがチェックアウトおよびソース制御システムへの 新規ファイルの追加を自動的に行えるようにするために、チーム・サポートとの統合を サポートしています。

7.2 変換マッピング・モデル

変換用にソース・モデルを変更しない場合は、変換の対象要素に 代替名を指定できます。 
命名上の制約などの CORBA 固有の詳細をプラットフォームに依存しないモデルに 包含したい場合、 
代替名を指定することもできます。ソース・モデルを変換しないで代替の ターゲット名をサポートするには、モデル・ マッピングを作成します。

マッピング・モデルを作成するには、以下の手順に従います。

1. モデリング・パースペクティブになっていることを確認する。
2.「モデル・エクスプローラー」ビューで、UML モデルをクリックする。
3. メニュー・バーで、「モデリング」> 「変換」>「変換を構成」をクリックする。
4. 新規の UML 2.0 から CORBA への変換を作成する (例えば、変換の 名前を
Create mapping (マッピングの作成)」に します)。
5.「マッピング」ページで、「マッピング・モデルの作成のみ (変換なし)」をクリックする。
6. ファイル名を指定して、「実行」をクリックする。

 

変換マッピング機能を使用する場合は、CORBA 変換によりマッピング・モデルが 作成されます。これは、変換可能要素ごとに成果物を持つ個別のモデルです。  成果物は元の変換可能な要素を参照し、この要素と同じ名前に なります。 元の要素の代替名を指定するには、 
成果物のファイル名プロパティーに新規の名前を 入力します。 成果物のファイル名プロパティーを変更しない場合は変換により、 
成果物のデフォルト名を持つ要素が生成されます。 次の表に、代替名の例をリストします。

 

UML ソース

マッピング成果物ファイル名

生成された CORBA

Component1

"" 

Component1.idl ファイル

Component2

"myIDL"

myIDL.idl ファイル

Component3

"myDir\myIDL2"

"myDir" フォルダー内の myIDL2.idl ファイル


マッピング・モデルを使用するには、以下の手順に従います。

1. モデリング・パースペクティブになっていることを確認する。
2.「モデル・エクスプローラー」ビューで、UML モデルをクリックする。
3. メニュー・バーで、「モデリング」> 「変換」>「変換を構成」をクリックする。
4. 新規の UML 2.0 から CORBA への変換を作成する (例えば、 変換の名前を
Use mapping (マッピングの使用)」に します)。
5.「マッピング」ページで、「マッピング・モデルの使用 (Use Mapping Model)」をクリックする。
6. 以前に作成したマッピング・モデルをクリックして、「実行」をクリックする。


変換が実行されると、マッピング・モデルに指定した代替名が 使用されます。

7.3 検証

CORBA 変換プラグインでは、モデルに潜在的な変換の問題がないかどうかを検証する 機能が提供されています。例えば、循環の汎化、名前の競合などは、生成された IDL ファイル内でコンパイル・エラーが発生する原因となります。生成されたコードで発生する可能性がある 潜在的な問題のリストを参照するには、 
プロファイルをソース・モデルに適用して、 検証機能を実行します。

次の表は、潜在的な変換の問題の一部をリストしたものです。

カテゴリー

潜在的な変換の問題

CORBAValue ステレオタイプ

値タイプは、typedef、struct、exception、または enumeration 以外のネストされた分類子を持つことはできません。

値タイプには、固有の名前を持つメンバーが必要です。

値タイプには、 固有の継承された属性が必要です。

値タイプには、 固有の継承された操作が必要です。

値タイプは、 最大でも 1 つの非抽象インターフェースしかサポートできません。

抽象値タイプは、 他の抽象値タイプからのみ継承する必要があります。

値タイプは、同じクラスから 1 回を超えて継承することは できません。

状態メンバーを持つ値タイプは、状態メンバーを持つ単一の 値タイプからのみ継承できます。

抽象値タイプは 状態メンバーを持つことはできず、boxed 値タイプであってはなりません。

boxed 値タイプは、 継承に参加することはできません。

boxed 値タイプには、厳密に 1 つの関連または属性が必要です。

CORBAConstants ステレオタイプ

 

CORBAConstants クラスには、操作があってはなりません。

CORBAConstants クラスは、ネストされた分類子を持つことが できません。

CORBAConstants クラスには、固有の名前を持つメンバーが 必要です。

CORBAException ステレオタイプ

CORBAException クラスは、ネストされた分類子を持つことが できません。

CORBAStruct ステレオタイプ

struct は、汎化または実装関係が属する要素であってはなりません。

struct は、ネストされた分類子を持つことができません。

struct は、操作を持つことができません。

CORBATypedef ステレオタイプ

typedef は、汎化関係を持つことができません。

typedef には、1 つの置換関係が必要です。

typedef は、関連、属性、または操作を持つことができません。

typedef は、ネストされた分類子を持つことができません。

CORBAState ステレオタイプ

状態メンバー属性には、属する要素として値タイプ・クラスが 必要です。

CORBAOneway ステレオタイプ

片方向の操作には、タイプが入力または入出力のパラメーターを 指定することができません。

片方向の操作には、戻り値の型として void が必要です。

片方向の操作には、属する要素としてインターフェースが必要です。

片方向の操作は、どのような例外も発生させてはなりません。

列挙

列挙には、固有の名前を持つ列挙リテラルが必要です。

コンポーネント

コンポーネントは、ネストされたコンポーネントを含んでいては なりません。

コンポーネントのすべてのパッケージに、固有の名前が必要です。

インターフェース

インターフェースには、固有の名前を持つメンバーが必要です。

インターフェースは、ネストされたインターフェース、 パッケージ、値タイプ、またはコンポーネントを含んでいてはなりません。

非制約インターフェースは、ローカル・インターフェースからは 継承できません。

インターフェースには、固有の継承された操作が必要です。

インターフェースには、固有の継承された属性が必要です。

インターフェースは、同じインターフェースから 1 回を 超えて継承することはできません。

抽象インターフェースは、他の抽象インターフェースからのみ 継承できます。

一般

モデルは、CORBA キーワードで名前を付けた要素 (例えば、 パッケージ、クラス、インターフェース、操作、プロパティー、パラメーター、および 列挙) を持つことができません。

モデルは、循環の汎化または実装関係を持つクラスまたは インターフェースを備えることができません。

モデルは、重複した要素名を持つことができません。

モデルは、ネストされたコンポーネントを含む階層など、 誤って形成された階層を持つことができません。