程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Rational >> 使用各版本的IBM Rational Software Architect以及相關軟件中的UML-to-Java轉

使用各版本的IBM Rational Software Architect以及相關軟件中的UML-to-Java轉

編輯:Rational

使用各版本的IBM Rational Software Architect以及相關軟件中的UML-to-Java轉換

簡介:本文展示了如何應用 IBM® Rational® Software Architect 中包含的 Java 轉換,來進行在設計合約管理協議(design contract management protocols)背景下的交互式開發。這些協議是專門面向在軟件開發周期內管理設計模型與實現代碼之間關系的方法。

在 Rational Software Archictect V7.5 版本中,已經引入了支持設計合約管理協議的轉換。以下是對該轉換的一些特性的介紹。

注意:
為了簡單起見,本文中對該轉換都采用 Rational Software Architect(RSA)這一名稱來進行描述,但這些信息均適用於以下各版本的 Rational Software Architect,以及相關的 IBM® Rational® 產品。

Rational Software Architect RealTime Edition

Rational Software Architect Standard Edition

Rational Software Architect for WebSphere® Software

Rational Software Modeler

作者假設您已經了解統一建模語言(Unified Modeling Language,UML)2.0、Eclipse、Rational Software Architect 的一個版本,以及 Java 開發方面的基本知識,這篇文章並不會具體地展示 UML 建模以及 Java 代碼實現的細節問題。

過程概述

包含實現轉換的開發過程,由以下基本步驟組成:

創建一個反映程序結構的 UML 模型。

使用 UML 到 Java 轉換以生成基於已創建 UML 模型的 Java 代碼。

編輯生成的代碼並運行程序的業務邏輯。

使用提供的 Java 轉換來保持 UML 模型與 Java 程序同步化。

創建一個排序系統的 UML 模型

在 Rational Software Architect 中,打開Modeling 視圖,然後從主菜單中選擇File > New > Model Project ,來創建一個新的模型項目

命名項目為 order,並在向導的第二個頁面上,對排序項目添加一個名為 Order Model 的空白包(見於圖 1)。

圖 1. 創建 UML 模型向導

向創建的模型添加名為orderingApplication 包(圖 2)。

圖 2. 創建的 UML 樣品模型

開發 UML 模型。您可以從 Palette 的 Class 項中的 orderingApplication 包中,對 Main Diagram 添加元素,並在圖中使用建模助手。

圖 3 展示了范例程序的模型,該程序允許業務所有人生成一個序列,並從用戶那裡接受付款。

圖 3. 范例模型的 UML 類圖

使用轉換生成基於模型的 Java 代碼

下一步,您需要創建一個轉換,以指定轉換實現參數。

配置轉換

為了創建一個新的 UML 到 Java 轉換配置,在主菜單中選擇Modeling>Transform > New Configuration。

在打開的 New Transformation Configuration 向導(圖 4)的Name區域中,輸入轉換配置的名字:MyUMLtoJavaTransform in Name。

點擊省略號(...)以浏覽 UML 項目順序 。

在應用轉換的列表中,打開Java Transformations 文件夾並選擇UML-to-Java 轉換。

您必須在向導頁面中選擇協議類型(圖 4)。

圖 4. New Transformation Configuration 向導的 Main 頁面

協議種類指定在開發周期中推薦采用的 Design Contract Management 協議(DCMP)。使用不同的設計合約管理協議,提供管理的水平,並控制設計模型和實現代碼。在三種類型的DCMPs 中涉及到了轉換:Conceptual,Mixed,以及 Reconciled。您在轉換配置中選擇的協議種類,決定了源模型與目標代碼之間的同步化水平。

Conceptual protocol

如果您想使用源模型作為未來重復開發中的主引擎產品的話,那麼您就可以選擇該協議。對源模型的任何更改,都將會在有人運行轉換時,推廣到目標項目中。

Mixed protocol

如果概念 UML 模型在開發生命周期內重復涉及到了,該協議就是最佳的選擇。在運行轉換時,源模型中的 UML 元素,會轉換為 Java 元素的可視化代表,而且轉換輸出成為主要的引擎產品。

Reconciled protocol

如果概念模型被維護,並在設計過程中重復使用的話,您必須選擇這個模型,而且您會想要在開發周期的某個特定點時,同步化 Java 和 UML 域中發展項目。

注意:

在 Conceptual 協議的背景下,使用 UML 到 Java 的轉換,會在這裡首先討論。而在 Mixed 和 Reconciled 協議的背景下,使用轉換也會在文章的後面部分涉及到。

在 Transformation Configuration 向導中選擇 Conceptual 協議。

應用協議以後,對源模型的任何更改都會擴大到目標模型中。在您運行轉換以後,在不更改源模型的前提下,更新目標項目也是可能的。

在 Transformation Configuration 向導中點擊Next 按鈕(圖 4),以移動倒向導的新頁面中,在這裡您可以為轉換指定源元素和目標元素 。

從創建的 UML 項目中選擇一個名為Order Model 的模型以作為一個源,然後選擇Create a Target Container (圖 5)。這將會打開一個 New Java Project 向導。

創建一個名為myOrderCode 的新 Java 項目。並將其作為一個目標選擇。

圖 5. New Transformation Configuration 向導的源和目標頁面

點擊Finish (圖 5)以指定的項目順序,創建一個新的 Transformation Configuration 文件,MyUMLtoJavaTransform.tc。

創建的 Java 項目和轉換配置文件,在 Project Explorer 視圖中可以看到,而且會在 Editor 視圖中打開 Transformation 配置(圖 6)。

圖 6. 轉換配置

運行轉換配置

在 Transformation Configuration 向導中點擊Run 以運行配置。

在目標項目中生成 Java 代碼(圖 7)。

圖 7. 生成的轉換輸出

轉換會在源 UML 模型的背景的基礎之上,生成 Java 代碼:

對於類和界面,會生成相應的 xyz.java 文件。轉換會對文件和文件夾分配默認的文件名(在 UML 模型中指定)。例如,會生成與 UMLOrderDetail 相應的 JavaOrderDetail 類。

轉換還會生成 Java 方法和 Java 類文件中的屬性。

例如,與 UML 屬性數量相關的 Java 屬性數量,會在如清單 1 所示的 Java 類OrderDetail中生成。

清單 1. Java OrderDetail 類

/**
* < !-- begin-UML-doc -->
* < !-- end-UML-doc -->
* @generated UML to Java (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)
*/
private Integer quantity;

對於每一個 Java 屬性 get 和 set 方法,例如,轉換會生成getQuantity() 和setQuantity(Integer) 。而與 UML 操作calcSubTotal() 和 calcWeight() 相關的 Java 方法calcSubTotal() 和calcWeight() 會在 JavaOrderDetail 類中生成(清單 2)。

清單 2. OrderDetail 類中的 calcSubTotal() 和 calcWeight() UML 操作

/**
* (non-Javadoc)
* @see Autirization#autorized()
* @generated UML to Java (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)
*/
public void calcSubTotal() {
// begin-user-code
// TODO Auto-generated method stub
// end-user-code
}
/**
* (non-Javadoc)
* @see Autirization#autorized()
* @generated UML to Java (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)
*/
public void calcWeight() {
// begin-user-code
// TODO Auto-generated method stub
// end-user-code
}

可能您會注意到,轉換會在生成的代碼中,對元素應用@generated 注釋(圖 8)。

圖 8. 生成代碼中的@generated 項

該注釋用於保護代碼。如果包含實現代碼的@generated 注釋被刪除或者更改了,那麼當在同一目標項目中再次運行轉換轉換時,該代碼會受到保護並不再更改(改善的選項,會進一步保護在轉換設計中提供的用戶代碼,在本文中對此不再贅述)。

您可能偶爾會需要更新程序。例如,您可能想要添加一種新的付款方式,例如接受付款順序。您可以直接更改 Java 代碼,或者向模型添加新的類,然後您必須返回致轉換部分中。代碼會重新生成,而在目標 Java 項目中會添加新類,而根本不去更改受保護的代碼部分。

建立一個源-目標追蹤關系

轉換會給您一個選項,去建立源產品與目標產品之間的追蹤關系。元素之間的關系,隨著系統復雜性的增加,將會幫助您的團隊理解元素,設計決定的說明。

為了生成轉換源與目標元素之間的追蹤關系,在 Transformation Configuration 編輯器的 Common 頁面中選擇Create trace relationships 復選框(圖 9)。

圖 9. Transformation Configuration 向導的 Common 頁面

當有人在運行轉換時,支持 @generated 注釋的每一個生成的元素的注釋,都被修改為包含代表源 UML 元素的 EMF URI 。如清單 3 所示。

清單 3. 代表源 UML 元素的 EMF URI

/**
* @generated sourceid:platform:/resource/UMLS/UMLS.emx#_NLHDQIr0Edu0eunV5GC2yg
*/
public class Order {
}

在源 UML 元素和目標 Java 元素之間,建立一個追蹤關系。建立的追蹤關系,允許在返回致轉換時,目標與源元素之間的改善的合並操作(改善的功能超出了本文的討論范圍)。

在建立追蹤關系以後,對於每一個 UML 類或者界面,您可以通過在 Project Explorer 中選擇元素,然後從下拉菜單中選擇Query > Traceability > Implementations ,來追蹤 Java 的實現情況。

點擊OK 以響應 Save As 對話框(圖 10)。

圖 10. Traceability 圖的 Save As 對話框

將會創建一個新的圖,以追蹤選擇 UML 類和實現該類的 Java 類之間的關系(圖 11)。

圖 11. 生成追蹤性圖

使用映射模型以指定可選的 Java 文件名

在開發過程中,為目標 Java 文件或者 Java 包,可能需要指定可選的(非默認的)名字。例如,您可能會想要生成包含特定用戶信息,或者提供不同類名的多種 Java 包。在UML 到Java 轉換中,在映射模型中可以指定可選或者邏輯組織的名字。

為了生成 Mapping mode,l ,在 Transformation Configuration 編輯器中打開 the Mapping 項,並選中Enable the mapping functionality for this configuration 旁邊的復選框(圖 12)。

圖 12. Transformation Configuration 編輯器的映射項

點擊 New按鈕然後選擇 OK,這樣在 Create a Mapping Model 向導中接受默認值(圖 13)。

注意:

您可以選擇任意的項目,以存儲 Mapping 模型,但是該 Mapping 模型必須存儲在存儲源模型的地方 。

圖 13. Create a Mapping Model 向導

結果,會為每一個源模型的 UML 元素,生成一個新的包含了 UML 產品的 UML 模型,而生成產品與相應 UML 元素之間關系的關系也建立起來。在該模型中,您可以為任意的 Java 文件,或者轉換生成的 Java 包指定文件名。

在 Transformation Configuration 編輯器的 Mapping 項上,點擊 Edit Mapping 按鈕。

當您看到 Model Element 向導的 Edit the Mapped names 窗口時(圖 14),選擇您想要指定名字的 UML 元素。

在“Mapped name”區域中,為在目標項目中生成的選擇元素輸入一個新名字 。

在圖 14 中,選中了orderingApplication 包,並為其指定了名字 orderingCD。

圖 14. Edit the Mapped Names 視圖

點擊Apply 。

指定的映射名,出現在 UML Element List 中包的附近(圖 15)。

提示:

然後您可以指定另外一個元素(例如, **Customer 類),並為其指定一個映射名。您可以使用一個有意義的名字,例如 com.ibm、NewCustomer.com,也或者是一個無意義的名字,例如NewCustomer。

在圖 15 中,NewCustomer 就是映射名。注意在映射模型中指定一個名字,並不會改變源模型。

圖 15. 在前面為包已經指定名字的 Edit the Mapped Names 向導

在 Edit the Mapped Names 視圖中,為包更改前面指定的映射名

點擊Apply 然後點擊OK 以關閉 Edit the Mapped Names 視圖的 Model Element 對話框。

在 Mapping 模型中, Customer 產品的 File Name 屬性值被設置為NewCustomer (圖 16)。

圖 16. Mapping 模型中 Customer 產品的屬性

保存更改的轉換配置並運行轉換。

當您運行已經選中 Mapping 模型的轉換時,在 Mapping 模型中指定的文件或者包名,會應用到轉換生成的元素上。在新的包下,會生成已指定映射名的包下的所有類(圖 18)。該例會生成一個新的 Java 包,orderingCD,它包含了在源 UML 模型中所有可用的 Java 類。在該包中會生成稱為 Customer 的 UML 類,它的名字就是在 Mapping 模型中指定的新名字 NewCustomer。

圖 17 .能夠使用 Mapping 模型的 UML 到 Java 轉換生成的輸出

Java 區域以及操作參數的種類,同樣會以新名字 NewCustomer 生成(見於清單 4)。

清單 4. 參數同樣會以新名字"NewCustomer"生成

/**
*
*/
package orderingCD; import java.util.Set;

/**
* <!-- begin-UML-doc -->
* <!-- end-UML-doc -->
* @author Administrator
* @generated UML to Java (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)
*/
public class Order {

/**
* <!-- begin-UML-doc -->
* <!-- end-UML-doc -->
* @generated UML to Java (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)
*/
private NewCustomer customer;

/**
* @return the customer
* @generated UML to Java (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)
*/
public NewCustomer getCustomer() {
// begin-user-code
return customer;
// end-user-code
}

/**
* @param customer the customer to set
* @generated UML to Java (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)
*/
public void setCustomer(NewCustomer customer) {
// begin-user-code
this.customer = customer;
// end-user-code
}

提示:

當您打算傳遞一些UML 模型中生成的 Java 程序的時候,運行轉換時 Mapping 模型的使用將會十分有用。

決定是否使用 Mixed 或者 Reconciled 協議

什麼時候去使用 Mixed 協議

如果您打算在目標域中,而不是源模型中繼續開發的話,那麼您 可以選擇該協議。如果您為轉換選擇的是 Mixed 協議,那麼源模型中的 UML 元素將會在轉換和輸出成為主要的產品時,轉化為 Java 元素的可視化代表。

在 Transformation Configuration 編輯器的Main頁面上(圖 18),選擇 Mixed 復選框作為協議。

圖 18. 已選擇 Mixed 協議的轉換配置編輯器的主頁面

保存配置。

並不是概念協議中所有可用的轉換特性現在都可以使用;例如,在 Common 項上創建追蹤關系的選項現在就不能用。但是,您仍然可以為轉換輸出,創建以及使用 Mapping 模型以指定可選(非默認)文件名。當您運行轉換時,源模型中的 UML 元素會被 Java 文件的參考所代替 。

運行轉換並點擊 OK 以回應警告對話框(圖 19)。

注意:

顯示的對話框會提醒您,源模型中的 UML 元素已經刪除。如果您點擊 OK 以回應警告對話框的話,那麼在源模型中就只能使用 Java 元素的可視化代表了。而如果您點擊的是警告對話框中的Cancel 按鈕時,目標項目中仍然會生成代碼,而源模型中的 UML 元素則不會被參考所取代。

圖 19. 當轉換試著取代 UML 元素時的警告

在 UML 模型的 Project Explorer (圖 20)中,會顯示出 Java 文件而不是 UML 元素的參考。

圖 20. 使用 Mixed 協議的 UML 到 Java 轉換生成的 Project Explorer 視圖

在源模型中存在的圖上,UML 元素會被 Java 可視化元素所取代(圖 21)。注意 UML 聯系會被 Java 類中生成的屬性所取代。

圖 21. 使用混合協議的 UML 到 Java 轉換生成的輸出的 Diagram 視圖

在 Project Explorer 或者圖中雙擊任意一個鏈接,都將會在 Java 編輯器中打開元素的 Java 代碼。如果您需要在模型中存儲 UML 元素,使用這個 Main 菜單路徑:Edit > Undo UML to Java 5 Transform。

在未來的開發過程中,您可以完全的移至 Java 域,或者繼續對源模型添加 UML 元素,並重新使用 UML 到 Java 的轉換。

什麼時候使用 Reconciled 協議

如果您打算同時在 Java 和 UML 中獨立的發展項目,並且在開發周期的某個特定點處同步化產品,那麼您可以為 UML 到 Java 轉換選擇 Reconciled 協議。該選項回應了名為 Reconciled Modeling 的 Design Contract Management 協議。

在 Transformation Configuration 編輯器的主頁面上,選擇Reconciled protocol 。反向 Java 到 UML 的轉換也是可以的,在編輯器中還會出現 Java 到 UML 轉換的特定額外細節(圖 22):“Java to UML Options”和“Java to UML Associations”。您可以使用這些項去配置一個反向的 Java 到 UML 轉換。

圖 22. 帶有選擇 Reconciled 協議的轉換配置

通過運行前面(UML 到 Java)轉換,Java 代碼會以文章前面描述的那樣生成。您可以在 Java 和 UML 域中獨立的進行以後的開發。在開發周期的任意點處,通過運行 Java 到 UML 轉換,並將得到的結果與已存在的模型融合,可以使 UML 模型與 Java 代碼保持同步性。如果模型是從代碼中獨立發展出來的,那麼將已存在的 java 項目作為目標來實現 UML 到 Java 轉換,可以達到進一步同步化的效果(使用 Reconciled 協議來重復開發的具體細節部分,超出了本文的討論范圍)。

如果一個團隊要建模、實現、開發或者維護程序時,那麼 Reconciled 協議將會變得十分有用。Reconciled 建模為在開發周期內的結構化更改管理,提供了一種強有力的支持。

探索進一步的細節並得到范例模型

本篇文章涉及到了 Rational Software Architect 家族產品包含的 Java 轉換的基本程序,以使用 Java 程序的 Design Contract Management 協議。參考軟件的 Help 文件以得到更多的具體細節。

包含模型的 UML 項目可以被下載,提取,並輸入到 Rational Software Architect 工作區中(參見 下載)。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved