官术网_书友最值得收藏!

3.4.1 Rational Rose雙向工程

前面關于Rational如何對UML提供支持中介紹過Rational Rose可以進行代碼生成以及逆向工程。代碼生成能夠使在Rational Rose中設計的解決方案的架構信息在一開始就轉換為相關目標語言的代碼,這樣就不需要人工再重新創建這些代碼了。逆向工程使所創建的代碼逆向轉換為對應的模型,能夠使設計者或程序員把握系統的靜態結構,并且幫助程序員編寫良好的代碼。

1.Rational Rose生成代碼

在Rational Rose 2007中,不同的版本對于代碼生成提供了不同程度的支持,對于前面所介紹的三個版本中,Rational Rose Modeler僅可以提供生成系統的模型,不支持代碼生成功能。Rational Rose Professional版本只提供對一種目標語言的支持,這種語言取決于用戶在購買該版本時的選擇。Rational Rose Enterprise版本對UML提供了更高程度的支持,可以使用多種語言進行代碼生成,這些語言包括Ada83、Ada95、ANSI C++、CORBA、Java、COM、Visual Basic、Visual C++、Oracle8和XML_DTD等。可以通過選擇“Tools”(工具)下的“Options”(選項)選項來查看所支持的語言信息,如圖3-25所示。

圖3-25 Rational Rose Enterprise支持的語言信息

使用Rational Rose進行生成代碼可以通過以下四個步驟進行,以目標語言為Java代碼為例。

(1)選擇待轉換的目標模型。在Rational Rose中打開已設計好的目標圖形,選擇需要轉換的類、構件或包。使用Rational Rose生成代碼一次可以生成一個類、一個構件或一個包,我們通常在邏輯視圖的類圖中選擇相關的類,在邏輯視圖或構件視圖中選擇相關的包或構件。

(2)檢查Java語言的語法錯誤。Rational Rose擁有獨立于各種語言之外的模型檢查功能,通過該功能可以在代碼生成以前保證模型的一致性。

使用Rational Rose進行模型檢查可以通過選擇“Tools”(工具)下的“Check Model”(檢查模型)選項來檢查模型的正確性,如圖3-26所示。出現的錯誤寫在下方的日志窗口中。常見的錯誤包括對象與類的映射不正確等。在檢查模型錯誤時發現的這些錯誤,需要及時地進行校正。在Report(報告)工具欄中,可以通過Show Usage、Show Instances、Show Access Violations等功能來輔助校正錯誤。

圖3-26 檢查模型示例

對于Java語言的語法檢查,可以通過選擇“Tools”(工具)中“Java”菜單下的“Syntax Check”(語法檢查)選項來進行Java語言的語法檢查,如圖3-27所示。如果檢查發現一些語法錯誤,也將在日志中顯示出來。如果檢查正確,則會出現如圖3-28所示的提示信息。

圖3-27 Java語言的語法檢查

圖3-28 語法檢查正確示例

(3)設置代碼生成屬性。在Rational Rose中,可以對類、類的屬性、操作、構件和其他一些元素設置一些代碼生成屬性。通常,Rational Rose提供默認的設置。可以通過選擇“Tools”(工具)下的“Options”(選項)選項來自定義設置這些代碼生成的屬性。如圖3-29所示,是對Java語言進行的代碼生成屬性的設置。對這些生成屬性設置后,將會影響模型中使用Java實現的所有類。

對單個類進行設置時,可以選擇該類的規范窗口,在對應的語言中改變相關的屬性,如圖3-30所示。

圖3-29 Java語言代碼生成屬性設置示例

圖3-30 單個類的生成設置

(4)生成代碼。在使用Rational Rose Professional或Rational Rose Enterprise版本進行代碼生成之前,一般來說需要將一個包或組件映射到一個Rational Rose的路徑目錄中來指定生成路徑。可以通過選擇“Tools”(工具)中“Java”菜單下的“Project Specification”(項目規范)選項來設置項目的生成路徑,而后彈出如圖3-31所示的窗口,在classpaths下添加生成的路徑,可以選擇目標是生成在一個jar/zip文件中或者是在一個目錄中。

在設置完生成路徑之后,可以在工具欄中通過選擇“Tools”(工具)中“Java”菜單下的“Generate Code”(生成代碼)選項來執行代碼的生成,如前面圖3-27所示。

下面以圖3-32中的類模型為例生成代碼來進行說明。在該類模型中,類的名稱為“ClassName”,包含一個私有屬性為name,它的類型為Boolean;另外還包含一個“public”類型的方法,方法的名稱為“opname”,除此外,還包含該類的構造函數。通過上面的步驟,生成該類的代碼,生成的代碼如程序3.1所示。在程序中,可以一一對應圖中所要表達的內容。

圖3-31 設置項目生成路徑

圖3-32 類模型

程序3.1 通過模型生成的代碼示例

在生成的代碼中,注意到會出現如下的語句:

     @roseuid 47903BFD0216

這些數字和字母的符號是用來標識代碼中的類、操作以及其他模型元素,便于Rational Rose中的模型與代碼進行同步。

2.逆向工程

在Rational Rose中,可以通過收集有關類(Classes)、類的屬性(Attributes)、類的操作(Operations)、類與類之間的關系(Relationships)以及包(Packages)和構件(Components)等靜態信息,將這些信息轉化成為對應的模型,并在相應的圖中顯示出來。以下是將Java代碼逆向轉化為Rational Rose中的類圖的過程。

程序3.2 逆向工程代碼示例

在該程序中,包含兩個私有屬性和一個公有屬性,分別是APriNumber、ALongNumber和APubNumber,還包含兩個公有操作和一個私有操作,分別是AddAPriNumber、RemoveLong和SwapTwoNumber,除此之外還包含一個類的構造函數TestProject。在設置完成路徑之后,可以在工具欄中通過選擇“Tools”(工具)中“Java”菜單下的“Reverse Engineer...”(逆向工程)選項來執行逆向工程。程序3.2生成的類模型如圖3-33所示。從圖中,可以一一對應在程序中所要表達的內容。

圖3-33 逆向工程生成模型

Rational Rose除了能夠將代碼直接轉換成類圖以外,還能夠通過代碼間的關系轉換成相關圖形來表達類與類之間的關系。例如程序3.3,在名稱為“TestA”的類中聲明了名稱為“TestB”的類,根據這些代碼創建的關聯關系如圖3-34所示。

圖3-34 關聯關系逆向轉換圖

程序3.3 逆向工程代碼關系示例

     //Source file: E:\\TestA.java
     public class  TestA{
     public TestB testBClass;
     public TestA() {}
     }
     //Source file: E:\\TestB.java
     public class  TestB{
     public TestB() {}
     }
主站蜘蛛池模板: 木兰县| 兴义市| 通州区| 新巴尔虎右旗| 安平县| 商城县| 红原县| 曲沃县| 宿迁市| 绵阳市| 浦县| 那坡县| 申扎县| 临泽县| 日土县| 陆良县| 和田县| 湘阴县| 南昌市| 四子王旗| 丰台区| 龙陵县| 永定县| 长白| 西畴县| 沧州市| 拉萨市| 谷城县| 密云县| 池州市| 西华县| 泸西县| 汾阳市| 神农架林区| 凤山市| 东宁县| 什邡市| 遵化市| 新民市| 南靖县| 永仁县|