UML から CORBA への変換では、統一モデリング言語 (UML) バージョン 2.0 モデル要素を Common Object Request Broker Architecture (CORBA) Interface Definition Language (IDL) に変換します。この変換を使用して、CORBA プロジェクトを UML 2.0 仕様からシードできます。また、変換では、ほとんどの CORBA 要素を モデル化および生成するために使用できる、単純なプロファイルがオプションで 提供されます。
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 モデルの 検証などがあります。
変換の各アプリケーションのソースとして、UML モデル、コンポーネント、 コンポーネントを含むパッケージ、またはこれらの要素の組み合わせを指定することが できます。変換によって、指定されたソースの階層内の UML コンポーネントごとに 1 つの IDL ファイルが生成されます。各 IDL ファイルには、対応する UML コンポーネントが所有する要素専用のコードが含まれています。 変換では、UML コンポーネントが所有していない要素は無視されます。 他の要素を変換のソースとして指定すると、変換は検証中に失敗します。
CORBA プロファイルを指定すると、変換でコードが生成される対象となる モデル内の UML コンポーネントを制御できます。この制御は、generateCode プロパティーを true または false に設定することで実行できます。このプロパティーを false に 設定すると、変換でコードが生成されるときに、このコンポーネントは無視されます。
変換の各アプリケーションのターゲットは、単一の Eclipse プロジェクト・ リソースです。プロジェクトには、Eclipse ワークスペースのリソース・ ファイルであると見なされている、1 つ以上の IDL ファイルが含まれています。
次の CORBA タイプは、プロファイルを使用せずにモデル化できます。
オプションのプロファイルは、次のような、より特定された CORBA タイプを モデル化するためのステレオタイプを提供します。
CORBA 変換プロファイルは、ステレオタイプに関する制約を定義します。 これらの制約を評価して、ソース・モデルに関するエラーを報告するには、「検証の実行」コマンドを 使用できます。また CORBA 変換は、変換が適用されるモデルの部分で追加の 検証を実行します。
マッピング・モデルを使用すると、生成されたコード内で、モデル化された 要素の名前を変更することができます。コンポーネントを除き、単純な ID を持つ UML 要素のみ、名前変更できます。UML コンポーネントの名前変更は、 単純な ID、または IDL ファイルが生成されるターゲット・コンテナーを基準とする 有効な部分パスのいずれかを持つ場合に行うことができます。 パスは、IDL ファイルの名前で終了する必要があります。例えば、Component A の 名前を dirA\A に変更する場合、変換では、ターゲット・コンテナーの トップレベルではなく、dirA という名前のディレクトリーに A.idl が生成されます。
次の表に、変換で UML 2.0 モデル要素が CORBA IDL にマップされる方法を リストします。
UML 2.0 要素 |
CORBA IDL 要素 |
モデル |
なし |
コンポーネント |
IDL ファイル |
基本タイプ |
基本タイプ |
ネイティブ |
|
パッケージ |
モジュール (パッケージがコンポーネント内にある場合) |
無視される (パッケージがコンポーネント内にない場合) |
|
インターフェース |
インターフェース |
属性または関連 |
属性 |
操作 |
IDL 操作 |
パラメーター |
IDL 操作のパラメーター |
列挙 |
列挙 |
クラス <<CORBAValue>> |
値タイプ |
カスタム値タイプ |
|
Boxed 値タイプ |
|
静的属性 |
定数 |
クラス <<CORBAStruct>> |
Struct |
クラス <<CORBAException>> |
Exception |
クラス <<CORBATypedef>> |
Typedef |
Array |
|
Sequence |
UML 2.0 コンポーネントは、 単一の CORBA IDL ファイルにマップされます。コンポーネントの IDL ファイルには、 コンポーネントが所有するすべての CORBA 要素が含まれています。
UML 2.0 基本タイプは、CORBA 基本タイプまたは CORBA ネイティブ・ タイプのいずれかにマップされます。UML 2.0 基本タイプとしてすべての CORBA 基本タイプが含まれている UML 2.0 タイプ・ライブラリーは、モデルに インポート可能です。または、既存の CORBA 基本タイプと同じ名前で UML 2.0 基本タイプを作成して、モデルでのタイプ選択に使用することができます。 次のリストには、タイプ・ライブラリーで使用可能な CORBA 基本タイプを示します。
リストで指定されているタイプ以外の名前がついた UML 2.0 基本
タイプは、CORBA ネイティブ・タイプを表します。CORBA ネイティブ・
タイプは、IDL ファイルで
ネイティブ定義を生成し、モデルでの
タイプ選択に使用可能です。
UML 2.0 コンポーネントに含まれている UML 2.0 パッケージは、CORBA モジュールに
マップされます。変換では、UML 2.0 コンポーネント内にない
UML 2.0 パッケージは
無視されます。
UML 2.0 インターフェースは、CORBA インターフェースにマップされます。 UML 2.0 インターフェースの UML 2.0 汎化は、CORBA インターフェースの継承に マップされます。次の表に、変換がインターフェース・プロパティーを 変換する方法をリストします。
UML インターフェース・プロパティー |
変換の結果 |
名前 |
指定された名前を持つ IDL 内の新規 CORBA。正しくない文字は すべて除去される |
可視性、public |
通常のインターフェース |
可視性、private |
ローカル・インターフェース |
抽象 |
CORBA インターフェースを抽出する |
リーフ |
無視される |
UML 2.0 属性および関連は、CORBA 属性にマップされます。次の 表に、変換が属性プロパティーを変換する方法をリストします。
変換の結果 |
|
名前 |
同じ名前を持つ CORBA 属性 |
タイプ |
指定された基本タイプを持つ CORBA 属性 |
「Is Static」および「default」値 |
CORBA 定数 |
読み取り専用 |
読み取り専用の CORBA 属性 |
順序付け |
IDL 順序 |
次の表に、変換が関連プロパティーを変換する方法をリストします。
UML 関連プロパティー |
変換の結果 |
名前 |
同じ名前を持つ CORBA 属性 |
タイプ |
この関連のサプライヤーとしてのタイプを備えた CORBA 属性 |
「Is Static」および「default」値 |
CORBA 定数 |
読み取り専用 |
読み取り専用の CORBA 属性 |
順序付け |
IDL 順序 |
UML インターフェース内、または <<CORBAValue>> ステレオタイプを 持つ UML クラス内で宣言される UML 2.0 操作は、IDL 操作に直接マップされます。 変換では、他の UML 2.0 操作は無視されます。次の表に、変換が操作 プロパティーを変換する方法をリストします。
UML 操作プロパティー |
変換の結果 |
名前 |
指定された名前を持つ新規の CORBA 操作 |
戻り値の型 |
CORBA 操作の戻り値の型 |
その他すべてのプロパティー |
無視される |
<<CORBAOneway>> ステレオタイプを持つ操作 |
片方向の IDL 操作 |
<<CORBAValue>> UML クラス内の操作での <<create>> ステレオタイプ |
CORBA 値の初期化指定子の操作にマップされる |
UML 2.0 パラメーターは、IDL 操作のパラメーターにマップされます。 次の表に、変換がパラメーター・プロパティーを変換する方法をリストします。
UML パラメーター・プロパティー |
変換の結果 |
名前 |
指定された名前を持つ新規パラメーター |
方向 (入力、出力、入出力) |
IDL で対応するパラメーター。'戻り' は無視される |
タイプ |
指定されたタイプのパラメーター |
可視性 |
無視される |
UML 2.0 列挙は、CORBA 列挙にマップされます。列挙には、 列挙リテラルのみを含めることができます。
<<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 |
CORBA 定数宣言は、IDL ファイル、モジュール、インターフェース、 または値タイプの範囲内で表示できます。
インターフェースまたは値タイプの範囲内で表示される CORBA 定数は、
対応する UML インターフェースまたはクラス内の UML 静的属性によって
表すことが
できます。
CORBA モジュールの範囲内、または IDL ファイルの範囲内に表示される
CORBA 定数は、UML パッケージ内 (モジュール定数の場合) または
UML コンポーネント内 (IDL 範囲定数の場合) に表示される
<<CORBAConstants>> ステレオタイプを持つ UML クラス内の
属性でなければなりません。
このクラスの名前は無視されます。<<CORBAConstants>> ステレオタイプを
持つクラスの各属性は、定数宣言を表します。
<<CORBAStruct>> ステレオタイプを持つ UML 2.0 クラスは、CORBA struct にマップされます。このクラスが備えるのは 1 つの 属性のみで、操作を備えないように制限されています。struct メンバーは、 クラスの UML 属性または関連によって表されます。
<<CORBAException>> ステレオタイプを備えた UML 2.0 クラスは、 例外定義を表します。このタイプのクラスは、オプションで属性を含むことが できます。
CORBA 2.4 では、CORBA 操作のみが例外を発生させることができ、CORBA 属性は
例外を発生させることはできません。そのため、CORBA
操作が例外を発生させた場合は、
この例外は、対応する UML 操作の RaisedException プロパティーで表されます。
変換では、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 タイプで
メンバーをモデル化します。
変換では、定義が別のコンポーネントで表示されるタイプが
使用されると、#include が自動的に生成されます。大部分の CORBA
IDL ファイルでは、
ORB.idl ファイルを含める必要があります。モデル化されていない
別の外部 IDL ファイルの、生成された IDL ファイルで #include を強制する必要が
ある場合は、
現行のコンポーネントから、外部 IDL ファイルを表す新規作成の
コンポーネントへの依存関係を作成する必要があります。generateCode プロパティーを
false に設定すると、
新規作成されたコンポーネントのコードの生成を
回避できます。このプロパティーは、CORBA プロファイルから得られる
コンポーネントの
ステレオタイプを備えています。例えば、IDL ファイル内に
「#include <ORB.idl>」を生成するには、現行の IDL ファイルをモデル化する
コンポーネントから、
ORB という名前の新規コンポーネントへの依存関係を
作成する必要があります。また、変換で、ORB という名前の新規コンポーネントの
コードが生成されないようにするには、
その generateCode プロパティーを false に
設定します。
次の CORBA 構成は、現在このプロファイルではマッピングが行われません。
CORBA 変換では、ユーザーがチェックアウトおよびソース制御システムへの 新規ファイルの追加を自動的に行えるようにするために、チーム・サポートとの統合を サポートしています。
変換用にソース・モデルを変更しない場合は、変換の対象要素に
代替名を指定できます。
命名上の制約などの 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. 以前に作成したマッピング・モデルをクリックして、「実行」をクリックする。
変換が実行されると、マッピング・モデルに指定した代替名が
使用されます。
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 キーワードで名前を付けた要素 (例えば、 パッケージ、クラス、インターフェース、操作、プロパティー、パラメーター、および 列挙) を持つことができません。 |
モデルは、循環の汎化または実装関係を持つクラスまたは インターフェースを備えることができません。 |
|
モデルは、重複した要素名を持つことができません。 |
|
モデルは、ネストされたコンポーネントを含む階層など、 誤って形成された階層を持つことができません。 |