軟件開發(fā)方法與技術(shù)(動態(tài)模型)_第1頁
軟件開發(fā)方法與技術(shù)(動態(tài)模型)_第2頁
軟件開發(fā)方法與技術(shù)(動態(tài)模型)_第3頁
軟件開發(fā)方法與技術(shù)(動態(tài)模型)_第4頁
軟件開發(fā)方法與技術(shù)(動態(tài)模型)_第5頁
已閱讀5頁,還剩63頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章動態(tài)模型之

狀態(tài)圖、順序圖、協(xié)作圖和活動圖§4.1狀態(tài)圖(StatechartDiagram)狀態(tài)圖:描述了一個特定對象在其生存期間的所有可能狀態(tài)以及引起狀態(tài)躍遷的事件。其中:1.“事件”是引起狀態(tài)躍遷(轉(zhuǎn)移)的內(nèi)部消息2.“狀態(tài)圖”主要用于描述一個對象在其生存期間的動態(tài)行為,表現(xiàn)一個對象所經(jīng)歷的狀態(tài)序列,引起狀態(tài)轉(zhuǎn)移的事件(event),以及因狀態(tài)轉(zhuǎn)移而伴隨的動作(action);3.所謂對象可以是類的實例、用例的實例或整個系統(tǒng)的實例.大多數(shù)面向?qū)ο蠹夹g(shù)用狀態(tài)圖描述單個對象(類的實例)在其生命周期中的動態(tài)行為;4.狀態(tài)圖是對某個類對象的補充;5.狀態(tài)圖在檢查、調(diào)試和描述類的動態(tài)行為時非常有用;6.狀態(tài)圖是UML中對系統(tǒng)的動態(tài)行為建模的5個視圖之一一、狀態(tài)圖中的基本元素基本元素包括:狀態(tài)、關(guān)系(轉(zhuǎn)移)、判斷、事件和動作。

1.狀態(tài)(State)狀態(tài):是指在對象的生命期中的某種狀況,在此期間對象將滿足某個條件、或執(zhí)行某個動作、或等待某個事件。說明:每個對象都有狀態(tài),一個狀態(tài)表示該對象執(zhí)行了之前活動后的結(jié)果。其中:狀態(tài)可以細分為不同的類型:

⑴初態(tài):⑵終態(tài):

說明:一個狀態(tài)圖只能有一個初態(tài)。但終態(tài)可以有一個或多個,也可以沒有終態(tài)。

⑶一般狀態(tài):

活動格式:

do/執(zhí)行的動作

entry/執(zhí)行的動作:入口動作

exit/執(zhí)行的動作:出口動作例如:或狀態(tài)名狀態(tài)名活動表說明:

當進入這個狀態(tài)時首先執(zhí)行“entry”動作,所以一個狀態(tài)只能有一個“entry”動作。習慣上把它放在其他動作的最前面。

②當退出這個狀態(tài)時再執(zhí)行“exit”這個動作,所以一個狀態(tài)只能有一個“exit”動作。習慣上把它放在其他動作的最后面。③“do”動作順次執(zhí)行,執(zhí)行完所有動作(不包括“exit”這個動作)后等待事件發(fā)生。⑷組合狀態(tài)(compositestate)組合狀態(tài):一個含有“子狀態(tài)(substate)”的狀態(tài)子狀態(tài):嵌套在另一個狀態(tài)中的狀態(tài)

WXYAB例如:⑸歷史狀態(tài)(historystate)歷史狀態(tài):是一個偽狀態(tài)(pseudostate),其目的是記住從組合狀態(tài)中退出時所處的子狀態(tài)。當再次進入組合狀態(tài)時,可直接進入這個子狀態(tài),而不是再次從組合狀態(tài)的初態(tài)開始。HH*其中:歷史狀態(tài)用符號或表示:是淺(shallow)歷史狀態(tài)的符號,表示只記住最外層組合狀態(tài)的歷史H設(shè)置方法:在該狀態(tài)的Specification對畫框中的General頁面選擇

State/activityhistory。:是深(deep)歷史狀態(tài)的符號,表示可記住任何深度的組合狀態(tài)的歷史。H*設(shè)置方法是在該狀態(tài)的Specification對畫框中的General頁面同時選擇:

State/activityhistory和Substate/activityhistory。說明:需要注意的是,如果一個組合狀態(tài)到達了其終態(tài),則會丟失歷史狀態(tài)中的信息,就好像還沒有進入過這個組合狀態(tài)一樣2.關(guān)系

狀態(tài)與狀態(tài)之間的關(guān)系是標有“事件”字符串的單向關(guān)聯(lián)關(guān)系。也可以沒有“事件”。3.并發(fā)和同步4.判定一個判定是一個狀態(tài)同兩個以上狀態(tài)之間的一種關(guān)系,工作流在此處分支轉(zhuǎn)移。判定符號:例如:二、事件(event)“事件”是引起狀態(tài)躍遷(轉(zhuǎn)移)的內(nèi)部消息。(前面給出的)或者說是指已發(fā)生并可能引發(fā)某種活動的一件事其中:事件產(chǎn)生的原因有調(diào)用、滿足條件的狀態(tài)的出現(xiàn)、到達時間點或經(jīng)歷某一時間段、發(fā)送信號等。事件的語法格式:

?事件名:包括“調(diào)用事件”、“變化事件”、“時間事件”名稱

?參數(shù)列表傳送的數(shù)據(jù)列表或是表達式

?監(jiān)護條件:當該事件發(fā)生時,是否躍遷到下一個狀態(tài)條件表達式

?動作表達式:當事件發(fā)生,監(jiān)護條件成立時所執(zhí)行的動作。事件名(參數(shù)列表)[監(jiān)護條件]/動作表達式

1.調(diào)用事件(Callevent):

?“調(diào)用(Call)”

是指在一個過程的執(zhí)行點激發(fā)一個操作,它將一個控制線程暫時從調(diào)用過程轉(zhuǎn)移到被調(diào)用過程。

?調(diào)用事件(Callevent)

指的是一個對象對調(diào)用(Call)的接收,這個對象利用狀態(tài)轉(zhuǎn)換而不是利用固定的處理流程實現(xiàn)操作。說明:調(diào)用事件分為同步調(diào)用和異步調(diào)用兩種;如果調(diào)用者需要等待操作的完成,則是同步調(diào)用;反之則是異步調(diào)用。調(diào)用事件的語法格式如下:過程名(實參列表)[監(jiān)護條件]/動作表達式例:設(shè)有登錄窗口和Login類,Login類中暫時沒有屬性

其描述“準備登錄”狀態(tài)到“登錄”狀態(tài)過程的狀態(tài)圖:123456******其描述“準備登錄”狀態(tài)到“登錄”狀態(tài)過程的狀態(tài)圖:例:設(shè)有登錄窗口和Login類,Login類中有屬性

123456******

2.變化事件(ChangeEvent):變化事件指的是依賴于特定屬性值的布爾表達式的條件滿足時,狀態(tài)發(fā)生改變。變化事件用關(guān)鍵字“when”表示,其語法格式如下:

when(布爾表達式)[監(jiān)護條件]/動作表達式例:基于上例,Login類中增加屬性LoginTimes用來記錄登錄次數(shù)則描述“等待登錄”到“準備登錄”狀態(tài)過程的狀態(tài)圖為:

3.時間事件(timeevent):

時間事件指的是滿足某一時間表達式的情況的出現(xiàn),例如到了某一時間點或經(jīng)過了某一時間段.

時間事件用關(guān)鍵字“after/when”表示,其語法格式如下:after(時間表達式)[監(jiān)護條件]/動作表達式例:基于上例,Login類中再增加屬性CountTime用來記錄等待時間(秒).

則描述“等待登錄”到“終止狀態(tài)”狀態(tài)過程的狀態(tài)圖為:OK例1:基于類Login的對象進行登錄之狀態(tài)圖例2:殺毒軟件的定時殺毒過程可用狀態(tài)圖描述如下:例3:BOOLCEditDlg::OnInitDialog(){

CDialog::OnInitDialog();

//TODO:Addextrainitializationhere

EditRes.Open(CRecordset::snapshot,NULL,CRecordset::none);m_er1=EditRes.m_R1; m_er2=EditRes.m_R2;m_er3=EditRes.m_R3; m_er4=EditRes.m_R4;

UpdateData(FALSE);

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidCEditDlg::OnCancel(){ //TODO:Addextracleanuphere

EditRes.Close();

CDialog::OnCancel();}voidCEditDlg::OnUpButton(){ //TODO:Addyourcontrolnotificationhandlercodehere

if(!EditRes.IsBOF())EditRes.MovePrev(); m_er1=EditRes.m_R1; m_er2=EditRes.m_R2;m_er3=EditRes.m_R3; m_er4=EditRes.m_R4;

UpdateData(FALSE); }voidCEditDlg::OnDownButton(){ //TODO:Addyourcontrolnotificationhandlercodehere

if(!EditRes.IsEOF())EditRes.MoveNext();m_er1=EditRes.m_R1;m_er2=EditRes.m_R2;m_er3=EditRes.m_R3;m_er4=EditRes.m_R4;

UpdateData(FALSE);}voidCEditDlg::OnOK(){ //TODO:Addextravalidationhere

UpdateData();//將編輯框中的值賦給對應(yīng)變量m_erl--m_er4

EditRes.Edit();EditRes.m_R1=m_er1; EditRes.m_R2=m_er2;EditRes.m_R3=m_er3; EditRes.m_R4=m_er4;

if(EditRes.CanUpdate()) {

EditRes.Update();

AfxMessageBox("修改成功!");}

EditRes.Close();

CDialog::OnOK();}CDialog::OnCancel()CDialog::OnOK()!EOF!BOF!BOF!EOF!EOFdo/close()注:作為課后練習,建議課后用

Rose

重新構(gòu)造該圖三、狀態(tài)圖的用途及建模技術(shù)問題:在對對象(類、用例)建模時,在什么樣的情況下使用狀態(tài)圖呢?回答:對反應(yīng)型對象建模一般使用狀態(tài)圖。反映型對象通常具有如下特點:

(1)響應(yīng)外部事件,即來自對象語境外的事件;例如,窗口中的菜單和按鈕命令

(2)在對某事件做出反映后,它又會變回空閑狀態(tài),等待下一個事件;

窗口菜單選擇退出IdleWorking例如:

(3)具有清晰的生命期,可以被建模為狀態(tài)、躍遷和事件的演化;

例如,時間事件或變化事件的發(fā)生

(4)當前行為和過去行為存在著依賴關(guān)系。例如,“目標狀態(tài)”返回到“源狀態(tài)”在使用狀態(tài)圖對系統(tǒng)反映型對象建模時,可以參照以下步驟進行:

(1)識別一個要對其生命周期進行描述的參與行為的類;

(2)對狀態(tài)建模,即確定對象可能存在的狀態(tài);

(3)對事件建模,即確定對象可能存在的事件;

(4)對動作建模,即確定當轉(zhuǎn)變被激活時,相應(yīng)被執(zhí)行的動作;

(5)對建模結(jié)果進行精化和細化。狀態(tài)圖作用是輔助確定類中的:

(1)屬性、方法

(2)方法和方法之間的關(guān)系

(3)對方法中的算法設(shè)計也起著指導(dǎo)作用說明:在實際建模應(yīng)用中狀態(tài)圖用的并不多,使用較多的有:時序圖、協(xié)作圖和活動圖;但學習、建立和理解狀態(tài)圖對基于事件驅(qū)動的程序設(shè)計和對程序的分析、調(diào)試是很重要的?!?.2順序圖(sequencediagram)

順序圖:也稱時序圖,它是一種描述對象之間按照時間順序進行交互的圖,它由一組相互協(xié)作的對象以及它們之間可發(fā)送的消息組成,它強調(diào)消息之間的順序。順序圖組成:主要有橫向和縱向兩個軸。其中:橫向軸排列的是參與交互的對象,縱向軸表示時間。例如:

對象時間說明:1.對象間的排列順序并不重要,但一般把表示參與者的對象放在圖的兩側(cè),主要參與者放在最左邊,次要參與者放在最右邊(或表示人的參與者放在最左邊,表示系統(tǒng)的參與者放在最右邊);2.縱向軸按時間順序列出各對象所發(fā)出和接受的消息。順序圖建模元素:對象(object)生命線(lifeline)控制焦點(focusofcontrol)或激活期(activation)消息(message)其中:

1.對象的命名方式主要有以下三種:其中:第一種命名方式包括對象名和類名;第二種命名方式只顯示類名不顯示對象名,即表示這是一個匿名對象;第三種命名方式只顯示對象名不顯示類名,即不關(guān)心對象屬于什么類。

2.消息包含普通消息、調(diào)用消息、異步消息和返回消息等多種(1)普通消息(Simple)

(2)調(diào)用消息(Procedurecall)

調(diào)用消息:指發(fā)送者把控制傳遞給消息的接收者,然后停止活動,等待消息接收者放棄或返回控制。調(diào)用消息的表示符號如下圖所示:①調(diào)用消息可以用來表示同步的意義,事實上,在UML規(guī)范說明的早期版本中,就是采用“同步消息”這個術(shù)語的。②一般地,調(diào)用消息的接收者必須是一個被動對象(passiveobject),即它是一個需要通過消息驅(qū)動才能執(zhí)行動作的對象。③另外調(diào)用消息必有一個配對的返回消息,為了圖的簡潔和清晰,與調(diào)用消息配對的返回消息可以不用畫出。說明:(3)異步消息(Asynchronous)異步消息指發(fā)送者通過消息把信號傳遞給消息的接收者,然后繼續(xù)自己的活動,不等待接收者返回消息或控制異步消息的表示符號如下圖所示:說明:異步消息的接收者和發(fā)送者是并行工作的。(4)返回消息(Return)

返回消息的表示符號如下圖所示:說明:如果是從調(diào)用(同步)消息返回,則返回消息是隱含的,所以返回消息可以不用畫出來。對于非調(diào)用(同步)消息,如果有返回消息,必須明確表示出來。

ROSE中順序圖消息圖形符號列表:英文名稱中文名稱符號simple普通消息synchronous同步消息balking阻止消息timeoue超時消息Procedurecall調(diào)用消息asynchronous異步消息return返回消息對象的創(chuàng)建和撤銷

1.對象的創(chuàng)建(兩種形式)

如果對象在圖的頂部(默認位置),說明對象在交互開始之前就已經(jīng)存在了(關(guān)聯(lián))。如果對象是在交互過程中創(chuàng)建的,那末應(yīng)當位于圖的中間(依賴)2.對象的撤銷建立時序圖遵循的指導(dǎo)性的原則:

(1)確定交互的語境語境:可以是系統(tǒng)、子系統(tǒng)和用例等

(2)確定參與交互作用的角色—對象,根據(jù)對象的重要性,將其從左向右的方向放在時序圖中。

(3)設(shè)置每個對象的生命線。一般情況下,對象存在于交互的整個過程,但它也可以在交互過程中創(chuàng)建和撤銷。

(4)從引發(fā)某個交互的信息開始,在生命線之間按從上向下的順序畫出隨后的消息。

(5)如果需要設(shè)置時間或空間的約束,可以為每個消息附上合適的時間和空間約束。

(6)給某控制流的每個消息附上前置或后置條件,這可以更詳細地說明這個控制流。例1:基于“學生成績管理系統(tǒng)”之“登錄”語境建立順序圖控制焦點的嵌套:Tools

Options

Diagram設(shè)置了“顯示”中的“控制焦點”+“分級消息”后的視圖:例2:基于“圖書館管理系統(tǒng)”之“登錄”、“借書業(yè)務(wù)”語境建立順序圖借助上述順序圖的進一步分析和設(shè)計,可將概念層類圖細化為如下說明層類圖:注意:不完備界面設(shè)計登錄界面:借書業(yè)務(wù)界面:§4·3協(xié)作圖(CollaborrationDiagram)消息消息流圖形表示為:

顯示兩個對象之間的信息流:協(xié)作圖:描述系統(tǒng)成份如何協(xié)同工作,它強調(diào)參加交互的各對象的組織結(jié)構(gòu)。·協(xié)作圖組成:主要由對象、關(guān)聯(lián)和消息流3種成份組成。其中:關(guān)聯(lián)就是關(guān)聯(lián)關(guān)系,其圖形符號為:·建立協(xié)作圖遵循的指導(dǎo)性的原則:

(1)確定交互過程的語境(上下文))。

(2)識別參與交互過程的對象。

(3)確定對象之間的鏈(Link),以及沿著鏈的消息。

(4)從引發(fā)這個交互過程的初始消息開始,將隨后的每個消息附到相應(yīng)的鏈上。順序圖到協(xié)作圖自動轉(zhuǎn)換:

BrowseCreate

CollaborrationDiagram或F5協(xié)作圖到順序圖自動轉(zhuǎn)換:

BrowseCreate

SequenceDiagram或F5例:順序圖和協(xié)作圖的比較

1.順序圖和協(xié)作圖都屬于交互圖,都用于描述系統(tǒng)中對象之間的動態(tài)關(guān)系。

2.順序圖和協(xié)作圖在語義上是等價的,兩者之間可以相互轉(zhuǎn)換,但兩者并不能完全相互代替。

3.兩者強調(diào)的重點不同。順序圖強調(diào)的是消息的時間順序;協(xié)作圖強調(diào)的是參與交互的對象的組織。

4.順序圖可以表示某些協(xié)作圖無法表示的信息,同樣,協(xié)作圖也可以表示某些順序圖無法表示的信息。說明:可根據(jù)交互圖補充提取類操作?;顒訄D:是狀態(tài)圖的擴展,其擴展包括以下兩方面:內(nèi)部增加以下等元素:動作狀態(tài)(原有“狀態(tài)”)和“活動狀態(tài)”;對象及與對象的關(guān)聯(lián)(用依賴關(guān)系)外部增加有:泳道(不同對象的活動區(qū))●說明:活動圖同狀態(tài)圖一樣也是一種特殊的狀態(tài)機,

整個活動圖起始于起始狀態(tài)●終止于結(jié)束狀態(tài)§4.4活動圖(ActivityDiagram)一、組成元素1.動作狀態(tài)動作狀態(tài):表示活動圖的原子動作,即:結(jié)構(gòu)上不能再被分解,工作上不能被中斷的狀態(tài)。動作狀態(tài)的圖形符號為:如:說明:動作狀態(tài)是構(gòu)造活動圖的最小單位(原子動作),不能再分解;動作狀態(tài)是不可以中斷的狀態(tài);

動作狀態(tài)是瞬時行為,它所占用的處理時間極短,有時可以忽略不計;動作狀態(tài)不能同對象直接建立聯(lián)系,即不可以創(chuàng)建、撤銷一個對象;動作狀態(tài)不可以有入口動作、出口動作和子狀態(tài)機

2.活動狀態(tài)活動狀態(tài):是非原子的,也即是可以分解的,可被中斷的狀態(tài)。說明:

(1)活作狀態(tài)是可以被中斷的狀態(tài);

(2)活動狀態(tài)可以有入口動作、出口動作、狀態(tài)動作和子狀態(tài)機

(3)活作狀態(tài)可以同對象直接建立聯(lián)系,即活動狀態(tài)可以創(chuàng)建、撤銷一個對象?;顒訝顟B(tài)的圖形符號為:

如:3.躍遷躍遷:由一個狀態(tài)轉(zhuǎn)向下一個狀態(tài),不需要事件的觸發(fā)。用關(guān)聯(lián)線表示:4.分支(Branch)分支:規(guī)定了基于布爾表達式的替換路徑。圖形表示為:5.分叉和匯合(ForkandJoin)分叉:分叉表示將單一的控制流分成兩個或多個并發(fā)的控制流匯合:代表了兩個或多個并發(fā)(異步)控制流的同步,聯(lián)結(jié)有多個輸入躍遷和一個

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論