自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

圖例解析Java與UML交互圖

開(kāi)發(fā) 架構(gòu)
Java與UML交互圖前面我們主要討論的是UML類(lèi)圖,下面我們要討論的是另一種UML圖——交互圖,交互圖描述的是一組對(duì)象之間的交互過(guò)程。

本文和大家重點(diǎn)討論一下Java與UML交互圖,UML交互圖描述的是一組對(duì)象之間的交互過(guò)程,或者說(shuō),這里我們實(shí)際上要回答這樣一個(gè)問(wèn)題:“方法調(diào)用過(guò)程在UML中怎樣表示?”

Java與UML交互圖

Java與UML交互圖前面我們主要討論的是UML類(lèi)圖,下面我們要討論的是另一種UML圖——交互圖(InteractionDiagram)。交互圖描述的是一組對(duì)象之間的交互過(guò)程,或者說(shuō),這里我們實(shí)際上要回答這樣一個(gè)問(wèn)題:“方法調(diào)用過(guò)程在UML中怎樣表示?”

UML交互圖

本文將通過(guò)一個(gè)非常簡(jiǎn)單的交易系統(tǒng)來(lái)說(shuō)明UML交互圖。這個(gè)系統(tǒng)包含六個(gè)Java類(lèi)。從前面幾篇文章中,我們已經(jīng)知道UML類(lèi)圖是分析Java程序結(jié)構(gòu)的有效方法,圖一顯示了這個(gè)交易和支付系統(tǒng)的類(lèi)圖。為了更清楚地說(shuō)明各個(gè)類(lèi)的職能和角色,圖一利用了前面介紹過(guò)的彩色類(lèi)原型表示法。

 

圖一:一個(gè)簡(jiǎn)單交易系統(tǒng)的UML類(lèi)圖


如果我們跟蹤任意一個(gè)Java程序的執(zhí)行過(guò)程,就會(huì)發(fā)現(xiàn),這個(gè)過(guò)程包含了一個(gè)或者多個(gè)對(duì)類(lèi)和對(duì)象的方法調(diào)用。我們通過(guò)調(diào)用對(duì)象的方法來(lái)尋求特定問(wèn)題的答案或執(zhí)行一個(gè)特定的動(dòng)作。很多時(shí)候,被調(diào)用的方法還會(huì)調(diào)用其他方法——或者是同一對(duì)象的方法,或者是同一類(lèi)的其他對(duì)象的方法,或者是其他類(lèi)的對(duì)象的方法。類(lèi)似地,這些被調(diào)用的方法又會(huì)繼續(xù)調(diào)用其他方法,直至問(wèn)題得到了明確的答案或動(dòng)作全部執(zhí)行完畢(或者出現(xiàn)異常,這時(shí)問(wèn)題將沒(méi)有答案或動(dòng)作不能完成)。

UML交互圖以圖形的形式表示出方法調(diào)用過(guò)程,它有兩種形式:UML序列圖(SequenceDiagram)和協(xié)作圖(CollaborationDiagram)。

UML序列圖

要達(dá)到某個(gè)特定的目標(biāo),必然要執(zhí)行一系列的方法調(diào)用。UMLUML序列圖的典型用途就是顯示出方法調(diào)用過(guò)程。圖二顯示了一個(gè)交易事務(wù)中計(jì)算累計(jì)金額的UML序列圖,調(diào)用從Sale類(lèi)的calcTotal()方法開(kāi)始,相關(guān)的代碼片斷在UML序列圖之后給出。

術(shù)語(yǔ)說(shuō)明:UML把操作(Operation)定義為方法的特征(Signature)。“方法”(Method)這一術(shù)語(yǔ)被保留給實(shí)現(xiàn)操作的代碼。但在Java環(huán)境中,“方法”這一術(shù)語(yǔ)的應(yīng)用范圍更廣泛一些。在UMLUML序列圖中,調(diào)用一個(gè)操作就叫做發(fā)送一個(gè)消息(Message)。UML序列圖實(shí)際上闡述了操作的具體實(shí)現(xiàn),所以下面我們會(huì)較多地用到“方法”這個(gè)術(shù)語(yǔ)(偶爾也會(huì)用到“消息”這個(gè)術(shù)語(yǔ))。

 

圖二:計(jì)算交易總金額的UML序列圖

為了便于把握UML序列圖的總體情況,圖一只顯示了方法的名稱(chēng)。詳細(xì)的UML序列圖可以顯示出方法的參數(shù)和返回值。在UML序列圖中,對(duì)象以常規(guī)的UML符號(hào)顯示,即使用與對(duì)象所屬的類(lèi)一樣的形狀或符號(hào)(默認(rèn)是矩形),再注明對(duì)象的名稱(chēng),加上一個(gè)冒號(hào),再加上相應(yīng)的類(lèi)名稱(chēng)。然后再為整個(gè)名字加上下劃線(xiàn)(例如,圖二中的aProduct:Product)??梢允÷詫?duì)象的名字(例如圖二中的:Sale),也可以省略類(lèi)的名字(例如圖二的Sender),但兩者都省略顯然是不允許的。如果省略了類(lèi)的名字,冒號(hào)必須保留。

時(shí)間的流逝方向是從上到下的垂直方向。每一個(gè)對(duì)象有一條順著頁(yè)面垂直向下的生命線(xiàn)(Lifeline),緊接著表示對(duì)象的矩形。方法調(diào)用的表示方式是,畫(huà)一根從發(fā)出調(diào)用的對(duì)象的生命線(xiàn)指向被調(diào)用對(duì)象生命線(xiàn)的箭頭。只要對(duì)象的任意方法處于執(zhí)行狀態(tài),對(duì)象的生命線(xiàn)加寬。加寬之后的生命線(xiàn)稱(chēng)為“活動(dòng)條”(ActivationBar),活動(dòng)條可以嵌套,表示在前一方法的執(zhí)行過(guò)程中,又有同一對(duì)象的另一個(gè)方法被調(diào)用,圖二的getQuantity()方法示范了活動(dòng)條嵌套的一個(gè)例子。

方法的返回值可以通過(guò)虛線(xiàn)開(kāi)叉箭頭的形式表示,但這是可選的,例如圖二中從:Sale指向Sender的箭頭。
如果要在一個(gè)對(duì)象的集合上進(jìn)行迭代操作,則在方法的名字前面加上一個(gè)星號(hào)(再在方括號(hào)里面說(shuō)明循環(huán)條件,可選)。在圖二中,Sale類(lèi)對(duì)LineItem類(lèi)對(duì)象的調(diào)用給出了迭代操作的一個(gè)例子。
就象UML類(lèi)圖一樣,原本需要查看多個(gè)源代碼文件才能了解的信息,通過(guò)一個(gè)UMLUML序列圖就可以表示出來(lái)。對(duì)已有的代碼實(shí)施反向工程獲得對(duì)應(yīng)的UML序列圖,可以幫助不熟悉代碼的開(kāi)發(fā)者快速了解程序的工作流程。

圖三顯示了Sale類(lèi)complete()方法的UML序列圖,它對(duì)調(diào)用次序(消息)進(jìn)行了編號(hào)。complete()方法調(diào)用了Sale類(lèi)的另外兩個(gè)方法,即calcTotal()和calcPayments()。圖三用環(huán)形的回調(diào)符號(hào)表示一個(gè)對(duì)象正在調(diào)用它自身的方法。

圖三:完成一次交易的UML序列圖#p#

如果UML序列圖很大,可能出現(xiàn)一個(gè)屏幕無(wú)法顯示出來(lái)的情況。在圖三中,通過(guò)設(shè)置建模工具TogetherControlCenter的選項(xiàng)面板,類(lèi)的名稱(chēng)不再和對(duì)象名稱(chēng)并列顯示,而是顯示在對(duì)象名稱(chēng)的下方,減少了顯示對(duì)象所需的水平空間。如果類(lèi)的名稱(chēng)很長(zhǎng),用這種顯示方式可以有效地縮減圖形寬度,一般能夠改善圖形的可讀性。然而,如果要嚴(yán)格遵從最新的UML規(guī)范,類(lèi)的名稱(chēng)必須和對(duì)象名稱(chēng)并列放置,中間用冒號(hào)分隔,如圖二所示。

complete()方法調(diào)用了calcTotal()方法,圖二顯示的calcTotal()序列是圖三complete()序列的結(jié)果。如果要簡(jiǎn)化圖三,我們可以省略圖三的Product對(duì)象以及它與LineItem對(duì)象的交互,讓讀者在查看這部分內(nèi)容時(shí)參考圖二。和類(lèi)圖中面臨的細(xì)節(jié)處理問(wèn)題一樣,到底是否要省略(或者說(shuō),詳細(xì)到哪種程度),也必須根據(jù)用戶(hù)的需要而定。例如,一些UML序列圖的讀者可能希望注明各種標(biāo)準(zhǔn)的Java類(lèi),例如迭代器、封裝器、集合類(lèi)等。雖然UML序列圖可以顯示出要用到的循環(huán)和分支結(jié)構(gòu),但通常而言,這一層次的細(xì)節(jié)最好讓讀者在UML序列圖的指導(dǎo)下通過(guò)閱讀Java源代碼獲得。

圖四是利用TogetherControlCenter對(duì)Sale類(lèi)的complete()實(shí)施反向工程,并要求它給出所有細(xì)節(jié)信息所得到的UML序列圖。對(duì)于大多數(shù)人來(lái)說(shuō),這里的細(xì)節(jié)信息可能太多了一點(diǎn)。但是,圖四也說(shuō)明了一個(gè)問(wèn)題,正如exception對(duì)象所顯示的:在序列執(zhí)行期間創(chuàng)建的對(duì)象畫(huà)在它被創(chuàng)建的位置,而不是UML序列圖的頂端。

圖四:利用工具生成的詳細(xì)UML序列圖

就象我們?cè)谟懻擃?lèi)圖時(shí)遇到的情況一樣,UML規(guī)范為UML序列圖也提供了大量有細(xì)微差別的符號(hào),不過(guò)本文說(shuō)明的符號(hào)已經(jīng)足以讓你入門(mén)了。

協(xié)作圖

UML交互圖的另一種形式是協(xié)作圖(CollaborationDiagram)。協(xié)作圖和UML序列圖在語(yǔ)義上相同,但協(xié)作圖排列對(duì)象的方式比較自由,完全由繪圖者的喜好決定。在協(xié)作圖中,交互動(dòng)作的次序由消息的編號(hào)決定。一些人偏愛(ài)這種繪圖方式,許多功能比較完善的UML工具允許用戶(hù)將一個(gè)圖在協(xié)作圖符號(hào)和UML序列圖符號(hào)之間來(lái)回轉(zhuǎn)換。一些開(kāi)發(fā)者建議,用協(xié)作圖來(lái)顯示組件之間的交互過(guò)程,用UML序列圖來(lái)顯示組件內(nèi)部各個(gè)類(lèi)的交互過(guò)程。圖五顯示的協(xié)作圖等價(jià)于圖二顯示的UML序列圖,圖六的協(xié)作圖和圖四的UML序列圖一樣。

圖五:與圖二等價(jià)的協(xié)作圖

 

圖六:與圖四等價(jià)的協(xié)作圖


結(jié)束語(yǔ):在實(shí)踐中,許多必需的交互序列可以隱含在類(lèi)圖之中,特別是類(lèi)圖用類(lèi)原型和Stereotype來(lái)表示特定的行為和交互模式之時(shí)。UML交互圖把原本隱含的交互過(guò)程明確地表達(dá)出來(lái),同時(shí)也明確地說(shuō)明了原本在類(lèi)圖中不明確的交互過(guò)程。換句話(huà)說(shuō),UML交互圖是對(duì)傾向于描述靜態(tài)特征的類(lèi)圖的補(bǔ)充,使得對(duì)象的動(dòng)態(tài)交互過(guò)程明確化。

【編輯推薦】

  1. UML交互圖的概念及繪制方法
  2. Java與UML交互圖
  3. 解析Java與UML交互圖有何關(guān)聯(lián)
  4. UML交互圖繪制及其應(yīng)用說(shuō)明
  5. 六種UML圖關(guān)系的表示及在代碼中體現(xiàn)

 

 

責(zé)任編輯:佚名 來(lái)源: svn8.com
相關(guān)推薦

2010-07-05 13:38:39

Java與UML交互圖

2010-07-09 09:36:59

UML圖

2010-07-02 13:22:25

UML交互圖

2010-07-06 10:30:58

UML關(guān)系圖

2010-06-17 09:22:48

UML面向?qū)ο蠓治雠c建

2010-07-12 10:43:41

UML交互圖

2009-04-23 14:24:36

UML建模組件圖

2010-07-12 10:25:44

UML類(lèi)圖

2010-07-12 09:18:36

UML模型圖

2010-06-11 10:31:19

UML部署圖

2010-07-02 10:25:50

UML模型圖

2010-07-06 13:04:33

UML系統(tǒng)組件圖

2010-06-18 09:05:04

UML交互圖

2010-06-11 17:59:24

UML對(duì)象圖

2010-07-02 09:21:34

UML部署圖

2010-07-06 12:00:23

UML活動(dòng)圖

2010-07-01 15:36:22

UML順序圖

2010-07-02 14:04:24

UML圖

2010-07-02 08:57:45

UML用例圖

2010-06-11 18:09:26

UML對(duì)象圖
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)