UML 至 CORBA 轉換可將統一塑型語言 (UML) 2.0 版模型元素轉換成「共同物件要求分配管理系統架構 (CORBA)」介面定義語言 (IDL)。 您可以利用轉換從 UML 2.0 規格開發出 CORBA 專案。 轉換也提供一個選用的、小型的設定檔,可以用來塑造和產生大部分的 CORBA 元素。
在使用 UML 至 CORBA 轉換之前,您應該要熟悉建立及編輯 UML 2.0 模型和專案。下列程序顯示 CORBA 轉換的最基本用法。
若要將 UML 模型轉換成 CORBA:
1. 確定目前在「建模」視景中。
2. 在「模型瀏覽器」視圖,建立 UML 元件,命名為 "Component1",然後在元件內,再建立介面,命名為 "Interface1"。
3. 用滑鼠右鍵按一下元件,按一下轉換 > 執行轉換 > UML 2 CORBA。
4. 在「執行轉換」視窗,按一下建立目標儲存區。
5. 在新建專案視窗,指定 Sample 做為專案名稱,再按一下完成。
新專案包含一個 IDL 檔案,名稱為 "Component1.idl",且檔案已定義一個介面,名稱為 Interface1。
轉換也可以執行其他一些更複雜的功能,例如不修改來源模型而直接置換名稱、驗證 UML 模型以預防潛在的轉換問題等。
您可以指定 UML 模型、元件、包含元件的套件或這些元素的組合,做為每一個轉換應用的來源。在指定來源的階層中,轉換會為每一個 UML 元件產生單一 IDL 檔案。 每一個 IDL 檔案只針對相對應的 UML 元件所擁有的元素來提供程式碼。 轉換會忽略不是 UML 元件擁有的元素。 如果指定其他任何元素做為轉換來源,則轉換在驗證期間會失敗。
套用 CORBA 設定檔時,您可以在模型中控制由轉換產生程式碼的 UML 元件。您可以將 generateCode 內容設為 true 或 false 來進行控制。 如果此內容設為 false,轉換在產生程式碼時會忽略元件。
每一個轉換應用的目標是一個簡單的 Eclipse 專案資源。此專案包含 IDL 檔案,這些檔案可視為 Eclipse 工作區資源檔。
不必使用設定檔,您可以直接建立下列 CORBA 類型的模型:
選用的設定檔提供模板來建立更特殊 CORBA 類型的模型,例如:
CORBA 轉換設定檔定義模板的限制。若要在來源模型上評估這些限制並報告任何錯誤,您可以使用執行驗證指令。CORBA 轉換也會在套用轉換的模型部份執行其他驗證。
您可以使用對映模型,在產生的程式碼中重新命名塑型元素。除了元件以外,您只能以簡式 ID 來重新命名 UML 元素。 您可以使用簡式 ID 或有效的局部路徑(相對於產生 IDL 檔案的目標儲存區)來重新命名 UML 元件。 路徑結尾必須是 IDL 檔案的名稱。 比方說,如果將元件 A 重新命名為 dirA\A,則轉換會在目錄 dirA 中產生 A.idl,而不是在目標儲存區的最上層產生。
下表列出轉換如何將 UML 2.0 模型元素對映至 CORBA IDL。
UML 2.0 元素 |
CORBA IDL 元素 |
模型 |
無 |
元件 |
IDL 檔案 |
初始類型 |
基本類型 |
原生 |
|
套件 |
模組(如果套件在元件中) |
忽略(如果套件不在元件中) |
|
介面 |
介面 |
屬性或關聯 |
屬性 |
運算 |
IDL 運算 |
參數 |
IDL 運算的參數 |
列舉 |
列舉 |
類別 <<CORBAValue>> |
值類型 |
自訂值類型 |
|
封裝值類型 |
|
靜態屬性 |
常數 |
類別 <<CORBAStruct>> |
結構 |
類別 <<CORBAException>> |
異常狀況 |
類別 <<CORBATypedef>> |
Typedef |
陣列 |
|
序列 |
一個 UML 2.0 元件對映至單一 CORBA IDL 檔案。元件的 IDL 檔案包含此元件擁有的所有 CORBA 元素。
UML 2.0 初始類型對映至 CORBA 基本類型或 CORBA 原生類型。模型中可以匯入 UML 2.0 類型庫,此類型庫包含 UML 2.0 初始類型對映的所有 CORBA 基本類型。 此外,您也可以使用現有 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 介面或 UML 類別中以 <<CORBAValue>> 模板宣告的 UML 2.0 運算, 直接對映至 IDL 運算。轉換會忽略其他 UML 2.0 運算。下表列出轉換如何轉換運算內容。
UML 運算內容 |
轉換結果 |
名稱 |
具有指定名稱的新 CORBA 運算 |
傳回類型 |
CORBA 運算的傳回類型 |
其他所有內容 |
忽略 |
具有 <<CORBAOneway>> 模板的運算 |
單向 IDL 運算 |
<<CORBAValue>> UML 類別中在運算上的 <<create>> 模板 |
對映至 CORBA 值起始設定元運算 |
UML 2.0 參數對映至 IDL 運算的參數。下表列出轉換如何轉換參數內容。
UML 參數內容 |
轉換結果 |
名稱 |
具有指定名稱的新參數 |
方向(in、out、inout) |
IDL 中相對應的參數;忽略 'return' |
類型 |
具有指定類型的參數 |
能見度 |
忽略 |
UML 2.0 列舉對映至 CORBA 列舉。列舉只能包含列舉文字。
具有 <<CORBAValue>> 模板的 UML 2.0 類別對映至 CORBA 值類型。<<CORBAValue>> 模板提供一個
specification 特性且含有列舉 {"none", "custom", "boxed"}。預設值是 "none"。
如果將 specification 內容設為 "custom",則會對映至
CORBA 自訂值。如果將 specification 內容設為 "boxed",則會對映至 CORBA 封裝值。
CORBA 值類型是具有選用狀態和起始設定元方法的實體,這些狀態和方法不同於介面的內容。CORBA 值類型的狀態成員以具有 <<CORBAState>> 模板的 UML 2.0 屬性來表示, 起始設定元方法則藉由從產品提供的基本設定檔中套用 <<create>> 模板來表示。
下表列出轉換如何轉換類別內容。
UML 類別內容 |
轉換結果 |
模板 |
<<CORBAValue>> |
名稱 |
具有指定名稱的新的值類型。 |
能見度 |
忽略 |
抽象 |
抽象值類型 |
具有 <<CORBAState>> 的屬性,能見度為 public 或 private |
CORBA 值類型的 CORBA 狀態成員,能見度為 public 或 private |
具有 <<create>> 的運算 |
非抽象值類型的 CORBA Factory 方法 |
CORBA 常數宣告可以出現在 IDL 檔案、模組、介面或值類型的範圍內。
在介面或值類型範圍內出現的 CORBA 常數,可以由相對應的 UML 介面或類別中的 UML
靜態屬性來表示。
在 CORBA 模組或 IDL 檔案範圍內出現的 CORBA 常數,
必須是 UML 類別中的屬性,而且此類別具有
<<CORBAConstants>> 模板且出現在 UML 套件
(模組常數)或 UML 元件(IDL 範圍常數)中。
此類別的名稱會被忽略。在具有 <<CORBAConstants>> 模板的類別中,
每一個屬性代表一個常數宣告。
具有 <<CORBAStruct>> 模板的 UML 2.0 類別對映至 CORBA 結構。此類別僅限包含屬性,不含運算。結構成員以類別的 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 陣列和序列類型的匿名宣告。此對映不支援匿名
CORBA 陣列或序列。您應該使用 typedef 宣告來命名陣列或序列類型。
延伸 UML 2.0 類別的 <<CORBATypedef>> 模板
包含 specification 內容(值包括 "none"、"array" 及 "sequence",預設值為 "none")及
dimensions 內容(預設值空白),dimensions 內容含有陣列或序列維度。
從具有 <<CORBATypedef>> 模板的類別至代表陣列元素類型的 UML 元素之間,
CORBA 陣列建立成其中的 UML 2.0 替代關係模型。模板的 "specification" 內容設為 "array","dimensions" 內容設為
代表陣列維度的字串(例如,"[3][5]")。從建構類型至具有 <<CORBATypedef>> 模板的類別之間,
關聯可以在 CORBA 陣列類型的建構類型中建立成員的模型。
從具有 <<CORBATypedef>> 模板的類別至代表序列元素類型的 UML 元素之間
CORBA 序列建立成其中的 UML 2.0 替代關係模型。模板的 "specification" 內容設為
"sequence",(選擇性地)"dimensions" 內容
設為代表序列上限的字串(例如,"12")。
從建構類型至具有 <<CORBATypedef>> 模板的類別之間,
關聯可以在 CORBA 序列類型的建構類型中建立成員的模型。
使用類型時,如果類型的定義位於不同的元件中,轉換會自動產生 #include。大部分 CORBA IDL 檔案
都需要包含 ORB.idl 檔案。對於未建立模型的另一個外部 IDL 檔案,
當您需要在產生的 IDL 檔案中強制包含 #include 時,您必須
在現行元件至代表外部 IDL 檔案的新建元件之間建立相依關係。
如果要避免為
新建立的元件產生程式碼,您可以將 generateCode 內容設為 false。
此內容使用 CORBA 設定檔來提供元件的
模板。例如,若要在 IDL 檔案中產生 "#include <ORB.idl>",
您應該在建立現行 IDL 檔案模型的元件至
新元件 ORB 之間建立相依關係。
另外,若要防止轉換為新元件 ORB 產生程式碼,
請將 generateCode 內容設為 false。
下列 CORBA 建構在此設定檔中目前沒有對映:
CORBA 轉換提供「團隊支援」整合,使用者可以自動移出和新增檔案至來源控制系統。
如果您不想為了轉換而修改來源模型,您可以為轉換的目標元素指定替代名稱。如果您要將 CORBA 特有的詳細資料併入可在不同平台上執行的模型中,例如命名慣例,您也可以指定替代名稱。若要支援替代目標名稱,但不要修改來源模型,請建立模型對映。
如果您要將 CORBA 特有的詳細資料併入可在不同平台上執行的模型中,例如命名慣例,
您也可以指定替代名稱。若要支援替代目標名稱,但不要修改來源模型,請建立模型對映。
若要建立對映模型:
1. 確定目前在「建模」視景中。
2. 在「模型瀏覽器」視圖中,按一下 UML 模型。
3. 從功能表列按一下建模 > 轉換 > 配置轉換。
4. 建立新的 UML 2.0 至 CORBA 轉換
(例如,將轉換命名為
建立對映)。
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 轉換
(例如,將轉換命名為
使用對映)。
5. 在「對映」頁面上,按一下使用對映模型。
6. 按一下您稍早之前建立的對映模型,再按一下執行。
當轉換執行時,它會使用您在對映模型中指定的任何替代名稱。
CORBA 轉換外掛程式可以驗證模型,預防潛在的轉換問題。
例如,循環的一般化關係和命名衝突會導致產生的 IDL 檔案發生編譯錯誤。
若要查看產生的程式碼可能發生的潛在問題,
請將設定檔套用至來源模型,並執行驗證內容。
下表列出一些潛在的轉換問題。
種類 |
潛在轉換問題 |
CORBAValue Stereotype |
除了 typedef、結構、異常狀況或列舉之外,值類型不能有任何巢狀分類器。 |
值類型的成員必須有唯一的名稱。 |
|
值類型必須有唯一的沿用屬性。 |
|
值類型必須有唯一的沿用運算。 |
|
值類型最多只能支援一個非抽象介面。 |
|
抽象值類型只能繼承自其他抽象值類型。 |
|
值類型不能多次繼承自相同的類別。 |
|
具有狀態成員的值類型只能繼承自具有狀態成員的單一值類型。 |
|
抽象值類型不能有狀態成員,也不能是封裝值類型。 |
|
封裝值類型不能參與繼承 |
|
封裝值類型只能有一個關聯或屬性。 |
|
CORBAConstants Stereotype
|
The CORBAConstants class must not have operation潛在轉換問題 |
CORBAConstants 類別不能有任何巢狀分類器。 |
|
CORBAConstants 類別的成員必須有唯一的名稱。. |
|
CORBAException Stereotype |
CORBAException 類別不能有任何巢狀分類器。 |
CORBAStruct Stereotype |
結構不能是一般化或實作關係的擁有者。. |
結構不能有任何巢狀分類器。 |
|
結構不能有任何運算。 |
|
CORBATypedef Stereotype |
typedef 不能有任何一般化關係。. |
typedef 必須有一個替代關係。 |
|
typedef 不能有任何關聯、屬性或運算。 |
|
typedef 不能有任何巢狀分類器。 |
|
CORBAState Stereotype |
狀態成員屬性必須以值類型類別做為擁有者。 |
CORBAOneway Stereotype |
單向運算不能有 in 或 inout 類型的參數。 |
單向運算的傳回類型必須是 void。 |
|
單向運算必須以介面做為擁有者。 |
|
單向運算不能擲出任何異常狀況。 |
|
列舉 |
列舉的列舉文字必須有唯一的名稱。 |
元件 |
元件不能包含巢狀元件。 |
元件中的所有套件必須有唯一的名稱。 |
|
介面 |
介面的成員必須有唯一的名稱。 |
介面不能包含巢狀的介面、套件、值類型或元件。 |
|
未限制的介面不能繼承自本端介面。 |
|
介面必須有唯一的沿用運算。 |
|
介面必須有唯一的沿用屬性。 |
|
介面不能多次繼承自相同的介面。 |
|
抽象介面只能繼承自其他抽象介面。 |
|
一般 |
模型的元素不能以 CORBA 關鍵字命名 (例如,packages、classes、interfaces、operations、properties、parameters 及 enumerations)。 |
模型的類別或介面不能有循環的一般化或實作關係。 |
|
模型不能有重複的元素名稱。 |
|
模型不能有格式不正確的階層,例如包含巢狀元件。 |