第04章 順序圖和協(xié)作圖_第1頁
第04章 順序圖和協(xié)作圖_第2頁
第04章 順序圖和協(xié)作圖_第3頁
第04章 順序圖和協(xié)作圖_第4頁
第04章 順序圖和協(xié)作圖_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第4章順序圖和協(xié)作圖4.1交互圖概述

在標(biāo)識出系統(tǒng)的類圖之后,僅給出了實(shí)現(xiàn)用例的組成結(jié)構(gòu),這時還需要描述這些類的對象是如何交互來實(shí)現(xiàn)用例功能的。即不但需要把用例圖模型轉(zhuǎn)化為類圖模型,還要將它轉(zhuǎn)化為交互圖模型。交互圖(interactiondiagram)是用來描述對象之間以及對象與參與者之間的動態(tài)協(xié)作關(guān)系以及協(xié)作過程中行為次序的圖形文檔.交互圖通常用于描述一個用例的行為,顯示該用例中所涉及的對象及對象之間消息傳遞情況.交互圖包括:順序圖(sequencediagram),描述對象按照時間順序的消息交換;協(xié)作圖(collaborationdiagram),描述系統(tǒng)成分如何協(xié)同工作.2面向?qū)ο蠓治雠c設(shè)計&UML4.2順序圖Rumbaugh的定義:順序圖是顯示對象之間交互的圖,這些對象是按時間順序排列的.它顯示參與交互的對象及對象之間消息交互的順序.它體現(xiàn)出系統(tǒng)用例的行為。時間維對象維對象/參與者生命線控制焦點(diǎn)消息順序圖有四個主要的標(biāo)記符:活動對象生命線控制焦點(diǎn)消息3面向?qū)ο蠓治雠c設(shè)計&UML4.2順序圖活動對象

活動對象可以是系統(tǒng)的參與者或者任何有效的系統(tǒng)對象。對象是類的實(shí)例,它使用包圍名稱的矩形框來標(biāo)記。名稱帶下劃線,順序圖中對象的標(biāo)記符如下圖所示。

4面向?qū)ο蠓治雠c設(shè)計&UML4.2順序圖對象的三種命名方式:生命線是對象圖標(biāo)向下延伸的虛線,表示對象生存時間.消亡點(diǎn)5面向?qū)ο蠓治雠c設(shè)計&UML4.2順序圖生命線順序圖中垂直方向代表時間維,時間流逝的方向?yàn)樽皂斚蛳???拷敳康南l(fā)生的時間要比靠近底部的消息早。

因此,順序圖是兩維的。自左至右的維數(shù)代表對象的布局,自頂向下的維數(shù)代表時間的流逝。每個對象的生命線都是一條從對象向下的虛線。表示對象的存在時間。6面向?qū)ο蠓治雠c設(shè)計&UML4.2順序圖控制焦點(diǎn)(FocusofControl)又稱為激活期(Activation),用生命線上的小矩形表示,在這個時間段內(nèi),對象執(zhí)行相應(yīng)的操作.FOC嵌套7面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息消息

消息用來說明順序圖中不同活動對象之間的通信。它可在一個對象需要取消不同對象的進(jìn)程時或者需要向另一個對象提供服務(wù)時,使用消息。消息從活動對象生命線到接收對象生命線的箭頭表示。箭頭上面標(biāo)記要發(fā)送的消息,如下圖所示。8面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息>>消息的限定消息可以包含條件以便限制它們只在滿足條件時才能發(fā)送。條件顯示在消息名稱上面的方括號中。右圖示例演示了如何建立一個順序圖來顯示登錄嘗試。如果登錄失敗,會在放棄登錄之前重試一次,如下圖所示。9面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息UML1.4后定義的消息有:調(diào)用消息procedurecall異步消息asynchronous返回消息returnUML1.3前的消息還有:簡單消息simpleRose擴(kuò)充的消息阻止消息balking超時消息time-out10面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息調(diào)用消息:消息的發(fā)送者把控制傳遞給消息的接收者,等待接收者返回或放棄控制.調(diào)用消息必有一個與之配對的返回消息,但是可以不用畫出.11面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息12面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息異步消息:消息的發(fā)送者把控制傳遞給消息的接收者,然后繼續(xù)自己的工作,不等待接收者返回或放棄控制.UML1.4及以后UML1.3及以前13面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息下面示例演示了如何在登錄文件的情況下使用異步消息。14面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息簡單消息:如果所有的消息都是同步或者異步消息,那么為什么還要簡單消息呢?因?yàn)橛袝r候我們不關(guān)心消息是同步還是異步,此外在高層分析中,有時候沒有必要指定一個消息是同步的還是異步的。如下面的示例所示。15面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息16面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息返回消息:表示從過程調(diào)用返回.如果是過程消息返回,則不用畫出;如果是非過程消息,則必須畫出.返回消息17面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息阻止消息:消息的發(fā)送者傳遞消息給接收者,如果接收者無法立即接收,則發(fā)送者放棄該消息.超時消息:消息的發(fā)送者發(fā)出消息給接收者并按指定時間等待,若接收者無法在指定時間內(nèi)接收,則發(fā)送者放棄該消息.18面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息消息的語法格式[前置消息列表][警戒條件][消息順序號][返回值:=]消息名稱([參數(shù)列表])例子:2:display(x,y)簡單消息1.3.1p:=find(specs)嵌套消息,有返回值[x<0]4:invert(x,color)條件消息3.1*:update()循環(huán)消息A3,B4/C2:copy(a,b)線程間同步19面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息順序圖的其它技術(shù)1.創(chuàng)建對象創(chuàng)建對象的標(biāo)記符如下圖中的示例所示。有一個主要步驟用來把“create”消息發(fā)送給對象實(shí)例。對象創(chuàng)建之后就會具有生命線,就像順序圖中的任何其他對象一樣?,F(xiàn)在可以像順序圖中的其他對象那樣來使用該對象發(fā)送和接收消息。在處理新創(chuàng)建的對象,或者處理順序圖中的任何其他對象時,都可以發(fā)送“destroys”消息來刪除對象。若要想說明某個對象被銷毀,需要在被銷毀對象的生命線上放一個X字符。20面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息順序圖的其它技術(shù)創(chuàng)建對象21面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息順序圖的其它技術(shù)22面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息2.分支和從屬流

有兩種方式來修改順序圖的控制流:使用分支和使用從屬流。這兩種方式很相似,各自的標(biāo)記符略微不同??刂屏鞯母淖兪怯捎诓煌臈l件導(dǎo)致控制流走向不同的道路。

23面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息分支允許控制流走向不同的對象,如下圖所示。24面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息

注意消息的開始位置是相同的,分支消息的結(jié)束“高度”也是相等的。這說明在下一步中,其中之一將會執(zhí)行,如下圖所示。25面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息

從屬流還允許控制流根據(jù)條件改變,但是只允許控制流改變?yōu)橄嗤瑢ο蟮牧硪粭l生命線分支,如下圖所示。26面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息

在下面的示例中,Editor在用戶刪除文件或者保存文件時向Filesystem發(fā)送一條消息。顯然,F(xiàn)ilesystem將會執(zhí)行兩種完全不同的活動,并且每一個工作流都需要獨(dú)立的生命線,如下圖所示。27面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息練習(xí):閱讀一個順序圖閱讀下圖所示的順序圖,該圖說明了開發(fā)者編譯應(yīng)用程序的步驟。在閱讀順序圖時,請指出我們到目前為止已經(jīng)學(xué)習(xí)過的標(biāo)記符組件。練習(xí)步驟

1)指出順序圖中的參與者和對象。

2)指出出錯處理發(fā)生的位置。

3)按照控制流的順序指出各個消息。28面向?qū)ο蠓治雠c設(shè)計&UML4.3順序圖中的消息29面向?qū)ο蠓治雠c設(shè)計&UML4.4建立順序圖的步驟

創(chuàng)建順序圖包含4項(xiàng)任務(wù):

1)確定需要建模的工作流。

2)從左到右布置對象。

3)添加消息和條件以便創(chuàng)建每一個工作流。

4)繪制總圖以便連接各個分圖。30面向?qū)ο蠓治雠c設(shè)計&UML4.4建立順序圖的步驟確定交互過程的上下文識別參與交互過程的對象為每個對象設(shè)置生命線從引發(fā)這個交互過程的初始消息開始,在生命線之間自頂向下依次畫出隨后的各個消息.如果需要嵌套或(和)表示消息發(fā)生的時間點(diǎn),使用FOC.如果需要說明時間約束,則在消息旁邊加上約束說明.如果需要,可以為每個消息設(shè)置前置條件和后置條件.31面向?qū)ο蠓治雠c設(shè)計&UML4.4建立順序圖的步驟1)確定工作流建模順序圖的第一步是確定將要建模的工作流。對于這個練習(xí),我們將要建模Gradingsystem的ViewGrades用例。為此,需要至少標(biāo)識出3個要建模的工作流:

>>教師成功地檢查學(xué)生分?jǐn)?shù)

>>教師試圖檢查某個學(xué)生分?jǐn)?shù),但該學(xué)生在系統(tǒng)中不存在。

>>教師試圖檢查某個學(xué)生分?jǐn)?shù),但該學(xué)生分?jǐn)?shù)在系統(tǒng)中不存在。

32面向?qū)ο蠓治雠c設(shè)計&UML4.4建立順序圖的步驟2)布置對象建模順序圖的下一步是從左到右布置所有的參與者和對象,包含要添加消息的對象生命線,如下圖所示。33面向?qū)ο蠓治雠c設(shè)計&UML4.4建立順序圖的步驟3)添加消息和條件

接下來,對每一個工作流作為獨(dú)立的順序圖建模。從基本的工作流開始,它是沒有出錯條件,并且需要最少決策的工作流。

注意選擇適當(dāng)?shù)南㈩愋停ó惒?、同步、簡單和返回)。在本例中,基本工作流是教師成功地檢查某個學(xué)生的分?jǐn)?shù),如下圖所示。

第1個工作流34面向?qū)ο蠓治雠c設(shè)計&UML4.4建立順序圖的步驟35面向?qū)ο蠓治雠c設(shè)計&UML4.4建立順序圖的步驟接下來以獨(dú)立的順序圖建模從屬工作流。此處只建模否定的條件,如下圖所示。第2個工作流36面向?qū)ο蠓治雠c設(shè)計&UML4.4建立順序圖的步驟

注意使用條件來指示在什么時候發(fā)送什么消息,如下圖所示。第3個工作流37面向?qū)ο蠓治雠c設(shè)計&UML4.4建立順序圖的步驟4)繪制總圖建模順序圖的最后一步是把所有獨(dú)立的工作流連接為一個總圖,如下圖所示。在此階段,如果覺得前面的消息和交互對于當(dāng)前的順序圖過于詳細(xì),可以讓它們更加泛化一些,但是在軟件建模的下一個階段,就會覺得初始的各個順序圖越詳細(xì)越好。

38面向?qū)ο蠓治雠c設(shè)計&UML4.4建立順序圖的步驟39面向?qū)ο蠓治雠c設(shè)計&UML4.5協(xié)作圖協(xié)作圖是用于描述系統(tǒng)的行為是如何由系統(tǒng)成分協(xié)作實(shí)現(xiàn)的圖.對象object鏈link消息message協(xié)作圖中的元素:40面向?qū)ο蠓治雠c設(shè)計&UML4.5協(xié)作圖>>多對象在協(xié)作圖中,多對象指的是由多個對象組成的對象集合,一般這些對象是屬于同一類的。當(dāng)需要把消息同時發(fā)送給多個對象而不是單個對象時,就要用多對象這個概念。多對象用多個方框的重疊表示。1.對象對象這個概念前面已經(jīng)多次提到,這里主要強(qiáng)調(diào)多對象和主動對象。41面向?qū)ο蠓治雠c設(shè)計&UML4.5協(xié)作圖多對象的例子一個對象可能會向同一類的多個對象同時發(fā)送一個消息,例如,老師會讓多個學(xué)生同時交作業(yè)。在多對象前面可以加上用方括號括起來的條件,前面加一個星號,用來說明消息發(fā)送給多個對象,如下圖所示。42面向?qū)ο蠓治雠c設(shè)計&UML4.5協(xié)作圖

>>主動對象

主動對象是一組屬性和一組方法的封裝體,其中至少有一個方法不需要接受消息就能主動執(zhí)行(稱做主動方法)。也就是說,主動對象可以在不接受外部消息的情況下自己開始一個控制流。在協(xié)作圖中,主動對象的表示法除了矩形框邊界要加黑加重外,其他方面與一般對象的表示法相同。43面向?qū)ο蠓治雠c設(shè)計&UML4.5協(xié)作圖2.鏈

鏈用來在協(xié)作圖中關(guān)聯(lián)對象。它們代表一個來自類圖的關(guān)聯(lián)的實(shí)例。在協(xié)作圖中,消息顯示在鏈的旁邊,一個鏈上可以有多個消息。在鏈上可以加一些修飾,如角色名、導(dǎo)航(表示鏈?zhǔn)请p向還是單向)、鏈兩端的對象是否有聚集關(guān)系等,但由于鏈?zhǔn)沁B接對象的,所以鏈的兩端沒有多重性標(biāo)記。44面向?qū)ο蠓治雠c設(shè)計&UML4.5協(xié)作圖3.消息

消息是協(xié)作圖中對象與對象之間通信的方式。消息在協(xié)作圖中顯示為一個伴隨鏈接或者關(guān)聯(lián)角色的文本字符串,并帶有一個箭頭來指示消息沿著關(guān)系傳遞的方向,如下圖所示。45面向?qū)ο蠓治雠c設(shè)計&UML4.5協(xié)作圖消息的返回結(jié)果消息可能是要求某個對象進(jìn)行計算并返回結(jié)果的值.UML提供了返回值的表示法。返回值的名字在最左,后跟賦值號“:=”,接著是操作名和操作的參數(shù)。對計算商品價格這個例子,可以表示成:

totalPrice:=compute(itemPrice,salesTax)返回值46面向?qū)ο蠓治雠c設(shè)計&UML4.6建立協(xié)作圖的步驟協(xié)作圖的建模有3個基本的步驟:

1)確定屬于協(xié)作圖的元素。

2)建模這些元素之間的結(jié)構(gòu)關(guān)系。

3)建模實(shí)例層的協(xié)作圖。建模分?jǐn)?shù)記錄系統(tǒng)的協(xié)作圖。具體用例是Teacher使用Website登錄并且查看學(xué)生的分?jǐn)?shù)。47面向?qū)ο蠓治雠c設(shè)計&UML4.6建立協(xié)作圖的步驟確定交互過程的上下文識別參與交互過程的對象如果需要,為每個對象設(shè)置初始特性確定對象之間的鏈,及沿著鏈的消息從引發(fā)該交互過程的初始消息開始,將每個消息附到相應(yīng)的鏈上如果需要表示消息嵌套,則有Dewey十進(jìn)制表示.如果需要說明時間約束,則在消息旁邊加上約束說明如果需要,可以為每個消息設(shè)置前置條件和后置條件48面向?qū)ο蠓治雠c設(shè)計&UML4.6建立協(xié)作圖的步驟1.確定協(xié)作圖的元素

首先,確定協(xié)作圖中將會包含的元素或者類。從已經(jīng)描述的用例中可以確定需要Teacher、Student和Grade類,其他類是否需要不太清楚。對于分?jǐn)?shù)記錄系統(tǒng),我們需要一個Website類來提供進(jìn)行交互的場所。還需要一個Database類來提供為學(xué)生檢索信息的功能。最后,還需要一個Security類提供讓Teacher登錄系統(tǒng)的手段,如下圖所示。49面向?qū)ο蠓治雠c設(shè)計&UML4.6建立協(xié)作圖的步驟分?jǐn)?shù)記錄系統(tǒng)中的類Teacher類如何與Student類交互?Student類從哪里獲取其數(shù)據(jù)?Teacher類如何登錄系統(tǒng)?通過這些問題和其他問題,我們就會認(rèn)識到需要更多的類才能完成目標(biāo)。:Teacher:Student:Grade:Security:Database:Website50面向?qū)ο蠓治雠c設(shè)計&UML4.6建立協(xié)作圖的步驟2.建模類之間關(guān)系下一步就是確定這些類之間的關(guān)系。在這一步中,著手建模早期階段的協(xié)作圖,在類角色之間添加鏈接和關(guān)聯(lián)角色,如下圖所示。51面向?qū)ο蠓治雠c設(shè)計&UML4.6建立協(xié)作圖的步驟52面向?qū)ο蠓治雠c設(shè)計&UML4.6建立協(xié)作圖的步驟3.建模實(shí)例層協(xié)作圖最后一步就是在實(shí)例層建模協(xié)作圖。這意味著需要把類角色修改為對象實(shí)例,并且指定執(zhí)行用例的消息序列。這一步需要用到描述對象之間鏈接的消息標(biāo)記符,包括控制點(diǎn)、迭代、創(chuàng)建實(shí)例,以及特定消息類型的規(guī)范。53面向?qū)ο蠓治雠c設(shè)計&UML4.6建立協(xié)作圖的步驟54面向?qū)ο蠓治雠c設(shè)計&UML4.7順序圖與協(xié)作圖的比較相同點(diǎn)規(guī)定責(zé)任,二者均直觀地規(guī)定了發(fā)送對象和接收對象的責(zé)任.支持消息,二者均支持所有的消息類型.衡量工具,二者均是衡量耦合性的工具.不同點(diǎn)協(xié)作圖強(qiáng)調(diào)參與交互的對象的組織結(jié)構(gòu);順序圖強(qiáng)調(diào)消息的時間順序.順序圖可以反映對象的創(chuàng)建/激活/撤消;協(xié)作圖不能.協(xié)作圖能反應(yīng)動作路徑,消息必須有順序號;順序圖沒有.55面向?qū)ο蠓治雠c設(shè)計&UML4.7順序圖與協(xié)作圖的比較汽車租賃系統(tǒng)中”客戶還車”的順序圖56面向?qū)ο蠓治雠c設(shè)計&UML4.7順序圖與協(xié)作圖的比較汽車租賃系統(tǒng)中”客戶還車”的協(xié)作圖57面向?qū)ο蠓治雠c設(shè)計&UML4.8工具支持(略)58面向?qū)ο蠓治雠c設(shè)計&UML4.9常見問題分析(1)如何在順序圖中表示消息的循環(huán)發(fā)送?在消息名前加循環(huán)條件,例如:

1.1*[forallorderlines]:message1()2.1*[i:=1..n]:message2()59面向?qū)ο蠓治雠c設(shè)計&UML4.9常見問題分析(2)如何在順序圖中表示消息的條件發(fā)送?①在消息上加警戒條件,如:[x<0]4:invert(x,color)②在消息名字前加條件子句,如:3.1[x>y]message()③使用文字說明④分成多個順序圖60面向?qū)ο蠓治雠c設(shè)計&UML4.9常見問題

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論