怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖-創(chuàng)新互聯(lián)

今天就跟大家聊聊有關(guān)怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、重慶小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了銅官免費(fèi)建站歡迎大家使用!

軟件結(jié)構(gòu)師、開(kāi)發(fā)人員及測(cè)試人員都熟知統(tǒng)一建模語(yǔ)言(UML),該語(yǔ)言適用于文檔化用例、類(lèi)圖、序列圖和其他圖表。也可以通過(guò)其他許多軟件輔助工具來(lái)幫助軟件工程師來(lái)完成這些工作,或者是
正向工程 或者是逆向工程的。

  • 正向工程是對(duì)一個(gè)系統(tǒng)物理結(jié)構(gòu)實(shí)現(xiàn)的高層抽象性、邏輯性及獨(dú)立性設(shè)計(jì)的傳統(tǒng)處理過(guò)程。

  • 逆向工程是對(duì)一個(gè)已存在系統(tǒng)的分析處理,以鑒別它的組成部分及它們的內(nèi)在聯(lián)系,從而以高層抽象性來(lái)構(gòu)建一個(gè)系統(tǒng)的框架。在大多數(shù)情況下,逆向工程用于以抽象的模型 UML 格式從已存在的源代碼中,提取已丟失的設(shè)計(jì)文件,從而同時(shí)可得知一個(gè)系統(tǒng)的靜態(tài)結(jié)構(gòu)及動(dòng)態(tài)行為。

類(lèi)及序列圖問(wèn)題的實(shí)質(zhì)

IBM? Rational? Software Architect 在很多工業(yè)中得以廣泛采用,因?yàn)樗峁┝撕芏嗟奶匦砸詭椭嫦蚬こ處煛?問(wèn)題是當(dāng)您以 Java? 代碼逆向構(gòu)建 UML 類(lèi)及序列圖時(shí),Rational Software Architect 不能自動(dòng)地產(chǎn)生有用的 UML 類(lèi)及序列圖。 但是已經(jīng)存在改善 Rational Software Architect 輸出產(chǎn)物的技術(shù)。本篇文章論證了怎樣使用這里介紹的技術(shù)技巧,從 Java 代碼中識(shí)別其組成部分及對(duì) UML 種類(lèi)和序列圖進(jìn)行高層的抽象。

使用逆向工程,您可以很容易就從正向工程中得到您想要的,本篇文章將介紹在逆向工程以下領(lǐng)域中存在的問(wèn)題:

  • 發(fā)現(xiàn)其抽象類(lèi)及識(shí)別它們的等級(jí)結(jié)構(gòu)

  • 產(chǎn)生具有聚合及關(guān)聯(lián)關(guān)系的高層抽象性的類(lèi)圖

  • 構(gòu)建序列圖

接下來(lái)的部分為每個(gè)問(wèn)題提供一個(gè)解決方案,并論證了怎樣產(chǎn)生有意義的類(lèi)及序列圖。例子向您展示了怎樣從一個(gè)已給 Java 項(xiàng)目的源代碼中,識(shí)別一個(gè)系統(tǒng)的繼承關(guān)系及組成部分,以對(duì) UML 類(lèi)圖及序列圖進(jìn)行高層的抽象。

注意:
本篇文章中的例子產(chǎn)生于 Rational Software Architect 7.0 版本

識(shí)別一個(gè) UML 類(lèi)圖的繼承樹(shù)

繼承關(guān)系是一種普遍的對(duì)象型的模式。它允許一組類(lèi)共享共同的狀態(tài)和行為,從而子類(lèi)可以從父類(lèi)那里繼承共同的狀態(tài)和行為。從一個(gè)已存在系統(tǒng)中發(fā)現(xiàn)整個(gè)的繼承樹(shù)結(jié)構(gòu)是相當(dāng)有用的,因?yàn)樗芟蚰衣对跇?shù)中什么是頂級(jí)類(lèi)以及什么是子類(lèi)。而且,您可以識(shí)別一個(gè)繼承樹(shù)中有哪些共同狀態(tài)及行為,以及這些共同行為怎樣起作用。您可以在探索過(guò)程中以以下三種方式使用 Rational Software Architect。

  • 從一個(gè)工作場(chǎng)所或工作集中發(fā)現(xiàn)其抽象結(jié)構(gòu)

  • 從抽象結(jié)構(gòu)表中選擇一個(gè)類(lèi)從而顯示其抽象類(lèi)圖

  • 在一個(gè)瀏覽表中研究樹(shù)狀結(jié)構(gòu),您會(huì)發(fā)現(xiàn)顯示在Abstraction之下的一系列抽象類(lèi)。

第一步是在一個(gè)已存在系統(tǒng)中自動(dòng)得到其頂級(jí)類(lèi)。這樣您就能使用這些類(lèi)作為切入點(diǎn)以研究繼承樹(shù)中的類(lèi)。您可以按以下步驟來(lái)完成此項(xiàng)。

  1. 打開(kāi) Rational Software Architect 中Diagram Navigation視圖。

  2. Object-oriented Pattern下,右鍵點(diǎn)擊Abstraction,然后點(diǎn)擊
    Discover Architecture(如圖 1 所示)。

這可以揭示整個(gè)工作空間的架構(gòu)。

圖 1.發(fā)現(xiàn)整個(gè)工作空間的架構(gòu)
怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖

圖 2 顯示了得到一個(gè)抽象類(lèi)圖的樹(shù)狀結(jié)構(gòu)所需的剩余步驟:

  1. 通過(guò)右鍵點(diǎn)擊位于Abstraction之下的類(lèi) Car來(lái)打開(kāi)內(nèi)容菜單。

  2. 顯示右邊面板中 Car類(lèi)圖,通過(guò)選擇菜單中的Show Diagram選項(xiàng)。

  3. 通過(guò)選擇并右鍵點(diǎn)擊右邊面板中類(lèi)圖 Car來(lái)打開(kāi)內(nèi)容菜單。

  4. 通過(guò)選擇內(nèi)容菜單中Explore in Browse Diagram選項(xiàng)來(lái)產(chǎn)生抽象類(lèi)圖的樹(shù)狀結(jié)構(gòu)。

做完第六步,您將在右邊面板中見(jiàn)到 Car類(lèi)圖的樹(shù)狀結(jié)構(gòu)。

圖 2. 從整個(gè)工作場(chǎng)所中發(fā)現(xiàn)其抽象結(jié)構(gòu)
怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖

結(jié)果有以下缺陷:

  • 結(jié)構(gòu)樹(shù)中被發(fā)現(xiàn)類(lèi)的同類(lèi)及子類(lèi)可能被丟失。

  • 除去被發(fā)現(xiàn)的抽象類(lèi)之外,其他類(lèi)沒(méi)有屬性及操作。

要得到第六步產(chǎn)生的樹(shù)狀結(jié)構(gòu),還需其他的步驟。您需要增加分離度(如圖 3 所示),這決定了從被發(fā)現(xiàn)類(lèi)擴(kuò)展的層。

圖 3. 改變分離度
怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖

默認(rèn)度是 1,這就是為什么在繼承樹(shù)中一些子類(lèi)會(huì)丟失的原因。在本例中,分離度被增加至 2。

第二個(gè)問(wèn)題是除了在樹(shù)狀結(jié)構(gòu)中被發(fā)現(xiàn)的類(lèi),其他類(lèi)沒(méi)有屬性和操作。這不利于使用者出于再使用的目的來(lái)研究已存在的普遍模式。

接下來(lái)的例子將向您展示,怎樣識(shí)別具有任意屬性及操作的整個(gè)繼承樹(shù)。

  1. 向 Rational Software Architect 載入一個(gè) Java 項(xiàng)目。

  2. 切換至Diagram Navigation視圖,按以上步驟所述,從工作場(chǎng)所中發(fā)現(xiàn)其抽象結(jié)構(gòu)。

  3. 從您感興趣的第二步中找出一個(gè)抽象類(lèi)。

  4. 通過(guò)尋找模型搜索器中的類(lèi),找出等級(jí)樹(shù)狀結(jié)構(gòu)類(lèi) ,雙擊打開(kāi)編輯器中的類(lèi),按下F4以打開(kāi)等級(jí)樹(shù)。確保type hierarchy已被選擇。

  5. 右鍵點(diǎn)擊類(lèi),并將其轉(zhuǎn)變?yōu)橐粋€(gè)可視的類(lèi)圖,通過(guò)選擇Visualize > Add to New Diagram File > Class Diagram,如圖4所示。

  6. 通過(guò)右鍵點(diǎn)擊并選擇Visualize > Add to Current Diagram來(lái)向當(dāng)前的圖添加剩余的類(lèi)。

圖 4 . 將類(lèi)可視化為新的類(lèi)圖
怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖

圖 5 展示了產(chǎn)生一個(gè)繼承樹(shù)類(lèi)圖的過(guò)程:

  1. 打開(kāi)并按下F4以顯示類(lèi)的等級(jí)。

  2. 選擇每一個(gè)類(lèi)并將其添加到類(lèi)圖中。

  3. 檢查并完成右邊的圖。

圖 5. 產(chǎn)生一個(gè)繼承樹(shù)類(lèi)圖的機(jī)理
怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖

類(lèi)圖以 Rational Software Architect 默認(rèn)格式產(chǎn)生。有幾個(gè)有用的修改可以幫助您將圖表進(jìn)行可視化。例如,您可以修改連接路徑樣式以使用樹(shù)狀樣式路徑 ,并且您可以通過(guò)在工作區(qū)右鍵點(diǎn)擊來(lái)打開(kāi)內(nèi)容菜單然后點(diǎn)擊 Arrange all。到此產(chǎn)生的類(lèi)圖要比自動(dòng)產(chǎn)生的看上去更好。如圖 6 所示。

圖 6. 帶有屬性的繼承樹(shù)狀圖及樹(shù)狀路徑連接
怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖

圖6中的類(lèi)既顯示了屬性又顯示了操作。屬性及操作顯示的好處在于,您可以研究它們共同的狀態(tài)及行為,從而進(jìn)一步了解一個(gè)已存在系統(tǒng)是如何被實(shí)現(xiàn)的,這將有助于系統(tǒng)的再使用。

產(chǎn)生一個(gè)高層的 UML 類(lèi)圖

Rational Software Architect 能讓您通過(guò)從一個(gè)Java項(xiàng)目中,選擇多個(gè) Java 文件,來(lái)產(chǎn)生類(lèi)圖。

  1. 在模型搜索器中,使用Visualize來(lái)將它們添加到一個(gè)新圖或當(dāng)前的類(lèi)圖中。

如果多個(gè)類(lèi)已經(jīng)被添加到當(dāng)前的圖中,那么它們之間的關(guān)系也將被顯示。

圖 7 是一個(gè)從 Java 代碼中自動(dòng)產(chǎn)生的類(lèi)圖的例子

圖 7. 一個(gè)自動(dòng)產(chǎn)生的類(lèi)圖
怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖

如圖 7 所示,您可以從模型搜索器中選擇多個(gè) Java 文件 來(lái)將它們?cè)谛碌念?lèi)圖中可視化。如果您想添加更多的類(lèi),您可以選擇更多的 Java 源代碼來(lái)將它們?cè)诋?dāng)前的類(lèi)圖中可視化。本圖顯示類(lèi)包括在項(xiàng)目及它們的基本關(guān)系中。這有利于在項(xiàng)目中自動(dòng)發(fā)現(xiàn) UML 類(lèi),但是自動(dòng)發(fā)現(xiàn)的關(guān)系在這里用處不大。

在圖 7 中,幾乎所有的關(guān)系是use除去繼承關(guān)系。使用關(guān)系太過(guò)平常以至于不能給出有用的設(shè)計(jì)信息,越來(lái)越多的特別的聚集及組成關(guān)系被隱藏了甚至當(dāng)所有的關(guān)系在圖中都出現(xiàn)過(guò)。聚集關(guān)系表現(xiàn)為一對(duì)多關(guān)系當(dāng)一個(gè)類(lèi)含有其他類(lèi)的很多項(xiàng)目時(shí),組成關(guān)系用于描述一多一關(guān)系當(dāng)一個(gè)類(lèi)僅含有其他類(lèi)的一個(gè)例子時(shí)。這個(gè)高層的抽象意味著對(duì)類(lèi)之間更精確的關(guān)系發(fā)現(xiàn),并為本設(shè)計(jì)的執(zhí)行提供了有用的信息。這個(gè)類(lèi)圖如果沒(méi)有抽象關(guān)系的細(xì)節(jié)將不再像以前那樣有用。

這里,我們嘗試并探索了,以半自動(dòng)方法產(chǎn)生UML類(lèi)圖的高層抽象方案。 UML 類(lèi)以和以前同樣的技術(shù)發(fā)現(xiàn),并且類(lèi)間的關(guān)系由人為指定。高層的抽象方案基于研究已有源代碼所必須的知識(shí)。

圖 8 的例子顯示了,怎樣應(yīng)用這個(gè)方法來(lái)得到高層的 UML 類(lèi)圖。

圖 8. 使用 UML 模型向?qū)Ы⒁粋€(gè)空白模型
怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖

為了得到一個(gè)高層的類(lèi)圖,您必須首先建立一個(gè)空白模型。

  1. 按圖 8 所述步驟建立一個(gè)新的空白模型:

    1. 在文件種類(lèi)下,選擇UML Modeling。

    2. 在模板下,選擇Blank Model。

    3. 在文件名區(qū)域,輸入Blank Model。

    4. 對(duì)于目的文件夾,輸入example。

    5. 默認(rèn)的圖檢查框 "Create a default diagram in the new model" 應(yīng)該被檢查。

    6. 對(duì)于默認(rèn)的圖種類(lèi),選擇Freeform. Diagram

    7. 點(diǎn)擊Finish。

接下來(lái)的一步是從自動(dòng)生產(chǎn)類(lèi)圖中總結(jié)選擇的類(lèi)。 Rational Software Architect 中的總結(jié),能讓您從一個(gè)類(lèi)中拷貝一個(gè)類(lèi)并粘貼到另一個(gè)類(lèi)圖中,這必須在一個(gè)空白模型中完成。如果您將總結(jié)的類(lèi)粘貼到同一個(gè)類(lèi)圖,或本空白模型以外另一個(gè)類(lèi)圖中時(shí),那么該類(lèi)的屬性和功能將丟失。

  1. 通過(guò)圖 9 所示的步驟,從自動(dòng)生成的類(lèi)圖中總結(jié)已選擇的 Java 類(lèi):

    1. 從 classdiagram2.dnx 中選擇類(lèi) FuelTank,Engine,Passenger以及
      Car

    2. 在一個(gè)已選類(lèi)上右鍵點(diǎn)擊以打開(kāi)內(nèi)容菜單

    3. 選擇Harvest菜單

  2. 將已總結(jié)的類(lèi)粘貼至分離的創(chuàng)建于步 2 的類(lèi)圖中。

  3. 在類(lèi)間創(chuàng)建聚集及組成關(guān)系。

圖 9. 一個(gè)類(lèi)圖中的總結(jié)類(lèi)
怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖

下一步,在類(lèi)間創(chuàng)建關(guān)聯(lián)關(guān)系,這使您能夠在聚集及組成關(guān)系中選擇一個(gè)。圖 10 顯示了一個(gè)高層的類(lèi)圖。

圖 10. 半自動(dòng)方法產(chǎn)生的 UML 類(lèi)圖的高層抽象
怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖

通過(guò)將圖 10 與圖 9 進(jìn)行比較,您可以發(fā)現(xiàn)半自動(dòng)方法能精確顯示類(lèi)間關(guān)系。本圖可用于獨(dú)立設(shè)計(jì)執(zhí)行文件,或已有系統(tǒng)遠(yuǎn)期改善。

著重點(diǎn):
如果不經(jīng)過(guò)總結(jié),聚集及組成關(guān)系將不能應(yīng)用于 Rational Software Architect 。

創(chuàng)建一個(gè)序列圖

序列圖是應(yīng)用最為廣泛的 UML 動(dòng)態(tài)建模方法。它致力于識(shí)別一個(gè)系統(tǒng)的行為。一個(gè)序列圖通常應(yīng)用于建模用例,以顯示一個(gè)系統(tǒng)的方法及功能。

Rational Software Architect 不能從 Java 代碼中自動(dòng)創(chuàng)建一個(gè)序列圖。下面的步驟會(huì)告訴您怎樣去創(chuàng)建一個(gè):

  1. 創(chuàng)建一個(gè)空白模型。

  2. 創(chuàng)建一個(gè)序列圖:

    1. Blank Model上右鍵點(diǎn)擊。

    2. 從 drop-down (context) 菜單中,選擇Add Diagram然后選擇Sequence Diagram(如圖 11 所示)。

  3. 向序列圖添加類(lèi)。

  4. 在兩個(gè)類(lèi)間對(duì)方法標(biāo)記進(jìn)行排序。

  5. 保存序列圖。

圖 11. 創(chuàng)建一個(gè)序列圖
怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖

當(dāng)您完成創(chuàng)建一個(gè)序列圖,一個(gè)序列文件產(chǎn)生于Collaboration: Interaction標(biāo)簽下。 您可以從 Java 代碼中向序列圖添加類(lèi)。二者均見(jiàn)于圖 12 。

圖 12 的主要工作區(qū)顯示了一個(gè)序列圖的例子。

圖 12. 產(chǎn)生于 Java 源文件的序列圖
怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖

一個(gè)方法調(diào)用意味著信息從召集者傳向被召集者。被召集者是方法所有人,它從方法召集者那里收到信息。信息可以是單道的也可以是雙道的。一個(gè)序列圖由在處于一組方法所有者及一個(gè)初始發(fā)起者之間的,一系列方法標(biāo)記組成。第一個(gè)標(biāo)記必須從發(fā)起第一個(gè)方法標(biāo)記的地方開(kāi)始。

層級(jí)類(lèi)圖代表著一種方式,該方式能發(fā)現(xiàn)在一個(gè)項(xiàng)目或工作集中,發(fā)現(xiàn)整個(gè)類(lèi)間的層次關(guān)系。這將有助于開(kāi)發(fā)人員向一個(gè)已有系統(tǒng)擴(kuò)展或添加新功能。高層的類(lèi)圖能直觀顯示類(lèi)間的聚集及組成關(guān)系。這有助于開(kāi)發(fā)人員擴(kuò)展或修改一個(gè)已有設(shè)計(jì)。這對(duì)開(kāi)發(fā)人員們開(kāi)發(fā)大型應(yīng)用系統(tǒng)意義非凡。序列圖顯示了在執(zhí)行特定任務(wù)時(shí)類(lèi)間的動(dòng)態(tài)方法標(biāo)記。這為系統(tǒng)中提供了清晰的運(yùn)行原理圖。


看完上述內(nèi)容,你們對(duì)怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

新聞標(biāo)題:怎樣從Java代碼逆向工程生成UML類(lèi)圖和序列圖-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://bm7419.com/article34/dehpse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶(hù)體驗(yàn)、手機(jī)網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站內(nèi)鏈、網(wǎng)站排名、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)