日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

UML圖詳解(八)——狀態(tài)機(jī)(狀態(tài)圖和活動(dòng)圖)

 星光閃亮圖書館 2017-09-22

一、概念

狀態(tài)圖和活動(dòng)圖是狀態(tài)機(jī)的兩種表現(xiàn)形式。

利用狀態(tài)機(jī)可以精確地描述對象的行為。 
從對象的初始狀態(tài)起,開始響應(yīng)事件并執(zhí)行某些動(dòng)作,這些事件引起狀態(tài)的轉(zhuǎn)換;對象在新狀態(tài)下又開始響應(yīng)事件和執(zhí)行動(dòng)作,如此連續(xù)進(jìn)行直到終結(jié)狀態(tài)。

二、狀態(tài)圖

狀態(tài)圖(State Diagram)=狀態(tài)(State)+遷移(Transition)

  • 一個(gè)狀態(tài)圖描述一個(gè)狀態(tài)機(jī)。

  • 狀態(tài)圖表現(xiàn)從一個(gè)狀態(tài)到另一個(gè)狀態(tài)的控制流。

<1>狀態(tài)圖的語法

  • 除了狀態(tài)中的初始狀態(tài)(實(shí)心圓)和終止?fàn)顟B(tài)(牛眼形狀),其它狀態(tài)用一個(gè)圓角矩形表示

  • 轉(zhuǎn)換表示狀態(tài)間可能的路徑,用箭頭表示

  • 事件/動(dòng)作寫在由它們觸發(fā)引起的轉(zhuǎn)換上



<2>狀態(tài)

  • 狀態(tài)一般是給定類對象中的一組屬性值,在其所在的上下文中應(yīng)該唯一,但可以匿名。

  • 在對系統(tǒng)建模時(shí),我們可以只關(guān)心那些明顯影響對象行為的屬性以及由他們表達(dá)的對象狀態(tài),而不用理睬那些于對象行為無關(guān)的狀態(tài)。

表示方式:狀態(tài)由一個(gè)帶圓角的矩形表示。

應(yīng)用標(biāo)簽標(biāo)示狀態(tài)的內(nèi)部活動(dòng)。

語法:標(biāo)簽/活動(dòng)表達(dá)式

UML提供的標(biāo)簽:

  1. entry:當(dāng)進(jìn)入一個(gè)狀態(tài)的時(shí)候被自動(dòng)觸發(fā),該活動(dòng)在狀態(tài)中其它任何活動(dòng)之前被自動(dòng)觸發(fā)。

  2. do:當(dāng)狀態(tài)處于激活時(shí)執(zhí)行do活動(dòng),do活動(dòng)在進(jìn)入活動(dòng)之后執(zhí)行,并且一直運(yùn)行到它本身完成為止。

  3. exit:當(dāng)離開一個(gè)狀態(tài)的時(shí)候被自動(dòng)觸發(fā),該活動(dòng)在該狀態(tài)結(jié)束之前、所有其它活動(dòng)都完成后被觸發(fā)。

狀態(tài)可以嵌套狀態(tài)圖,此時(shí)狀態(tài)稱為組成狀態(tài),否則為簡單狀態(tài)。
入口事件表示一個(gè)入口的動(dòng)作序列,它在進(jìn)入狀態(tài)時(shí)執(zhí)行。入口事件的動(dòng)作是原子的,并且先于人和內(nèi)部活動(dòng)或轉(zhuǎn)換。
出口事件表示一個(gè)出口的動(dòng)作序列,它在退出狀態(tài)時(shí)執(zhí)行。出口事件也是原子的,它跟在所有的內(nèi)部活動(dòng)之后,但是先于所有的出口轉(zhuǎn)換。

1. 簡單狀態(tài)(Simple State)


2. 復(fù)合狀態(tài)(Composite State)

復(fù)合狀態(tài)可以有多組狀態(tài)圖,每組用虛線分割開來。

  • 可以是通過“或”關(guān)系分解為互相排斥的順序子狀態(tài)

  • 可以是使用“與”關(guān)系分解為并發(fā)子狀態(tài)

  1. 如果一個(gè)組成狀態(tài)的子狀態(tài)對應(yīng)的對象在其生命期內(nèi)的任何時(shí)刻都只能處于一個(gè)子狀態(tài),即多個(gè)子狀態(tài)之間是互斥的,不能同時(shí)存在,這種子狀態(tài)稱為順序子狀態(tài)。

  2. 并發(fā)子狀態(tài)在同一層次給出兩個(gè)或多個(gè)順序子狀態(tài),任何時(shí)刻對象的狀態(tài)是其每個(gè)并發(fā)段中任取一個(gè)狀態(tài)的組合。

  • 并發(fā)狀態(tài)圖由兩個(gè)或多個(gè)并發(fā)子圖組成,每個(gè)子圖叫作一個(gè)并發(fā)段。在任何時(shí)刻,一個(gè)對象的狀態(tài)是每個(gè)并發(fā)段中各取一個(gè)狀態(tài)的組合。當(dāng)對象離開并發(fā)段后,它又恢復(fù)成一個(gè)單一的狀態(tài)。

  • 如果并發(fā)子圖中的一個(gè)狀態(tài)首先完成,它將首先轉(zhuǎn)入下一個(gè)狀態(tài)。但是,如果異常事件發(fā)生,則進(jìn)入唯一的異常狀態(tài)。

  • 當(dāng)一個(gè)對象有幾個(gè)相互獨(dú)立的行為時(shí),并發(fā)狀態(tài)圖可以方便地刻畫它的行為。但一個(gè)對象的并發(fā)行為不應(yīng)太多;如果太多,應(yīng)將其狀態(tài)圖分細(xì)。

并發(fā)區(qū)域(Concurrent Regions)

狀態(tài)圖可以分為區(qū)域,而區(qū)域又包括退出或者當(dāng)前執(zhí)行的子狀態(tài)。說明組合狀態(tài)在某一時(shí)刻可以同時(shí)達(dá)到多個(gè)子狀態(tài)。如下圖剎車系統(tǒng),同時(shí)進(jìn)入前剎車【Applying Front Brakes】狀態(tài)和后剎車【Applying Rear Brakes】狀態(tài)。


3. 初始狀態(tài)(Initial State)

  • 初始狀態(tài)代表狀態(tài)圖的起始位置,只能作為轉(zhuǎn)換的源

  • 初始狀態(tài)在一個(gè)狀態(tài)圖中只允許有一個(gè),而不能作為轉(zhuǎn)換的目標(biāo)。,它用一個(gè)實(shí)心的圓表示。


4. 終止?fàn)顟B(tài)(Final State)

  • 終止?fàn)顟B(tài)是模型元素的最后狀態(tài),是一個(gè)狀態(tài)圖的終止點(diǎn)。

  • 終止?fàn)顟B(tài)只能作為轉(zhuǎn)換的目標(biāo),而不能作為轉(zhuǎn)換的源。

  • 終止?fàn)顟B(tài)在一個(gè)狀態(tài)圖中可以有多個(gè),它用一個(gè)套有一個(gè)實(shí)心圓的空心圓表示。


5. 結(jié)合狀態(tài)(Junction State)---《暫時(shí)未理解》

將兩個(gè)轉(zhuǎn)換連接成一次就可以完成的轉(zhuǎn)換。

6. 歷史狀態(tài)(History State)

保存組成狀態(tài)中先前被激活的狀態(tài)


  • 歷史狀態(tài)代表上次離開組成狀態(tài)時(shí)的最后一個(gè)活動(dòng)子狀態(tài),它用一個(gè)包含字母“H”的小圓圈表示。

  • 每當(dāng)轉(zhuǎn)換到組成狀態(tài)的歷史狀態(tài)時(shí),對象便恢復(fù)到上次離開該組成狀態(tài)時(shí)的最后一個(gè)活動(dòng)子狀態(tài),并執(zhí)行入口動(dòng)作。

歷史狀態(tài)是一個(gè)偽狀態(tài)(Pseudostate),其目的是記住從組合狀態(tài)中退出時(shí)所處的子狀態(tài),當(dāng)再次進(jìn)入組合狀態(tài),可直接進(jìn)入這個(gè)子狀態(tài),而不是再次從組合狀態(tài)的初態(tài)開始。


在上圖的狀態(tài)圖中,正常的狀態(tài)順序是:【W(wǎng)ashing】- >【Rinsing】->【Spinning】。
如果是從狀態(tài)【Rinsing】突然停電(Power Cut)退出,,洗衣機(jī)停止工作進(jìn)入狀態(tài)【Power Off】,當(dāng)電力恢復(fù)時(shí)直接進(jìn)入狀態(tài)【Running】。

7.退出節(jié)點(diǎn)(Exit Point)

<3>判定

判定在狀態(tài)圖中的位置:工作流在此處按監(jiān)護(hù)條件的取值而發(fā)生分支。
表示方式:判定用空心小菱形表示。

<4>遷移/轉(zhuǎn)移(Transitions)

轉(zhuǎn)移(Transitions)是兩個(gè)狀態(tài)之間的一種關(guān)系,表示對象將在源狀態(tài)(Source State)中執(zhí)行一定的動(dòng)作,并在某個(gè)特定事件發(fā)生而且某個(gè)特定的警界條件滿足時(shí)進(jìn)入目標(biāo)狀態(tài)(Target State)

事件標(biāo)記(Trigger):是轉(zhuǎn)移的誘因,可以是一個(gè)信號(hào),事件、條件變化(a change in some condition)和時(shí)間表達(dá)式。

警界條件(Guard Condition):當(dāng)警界條件滿足時(shí),事件才會(huì)引發(fā)轉(zhuǎn)移(Transition)。

結(jié)果(Effect):對象狀態(tài)轉(zhuǎn)移后的結(jié)果。

<5>動(dòng)作(State Actions)

動(dòng)作(Actions)是一個(gè)可執(zhí)行的原子操作,也就是說動(dòng)作是不可中斷的,其執(zhí)行時(shí)間是可忽略不計(jì)的。
UML提供的三中標(biāo)簽《參考上面》
在上例中,對象狀態(tài)轉(zhuǎn)移后的結(jié)果顯示在轉(zhuǎn)移線上,如果目標(biāo)狀態(tài)有許多轉(zhuǎn)移,而且每個(gè)轉(zhuǎn)移有相同的結(jié)果,這時(shí)把轉(zhuǎn)移后的結(jié)果(Effect)展示在目標(biāo)狀態(tài)中(Target State)更好一些,可以定義進(jìn)入動(dòng)作(Entry Action )和退出動(dòng)作(Exit Action),如下圖


三、活動(dòng)圖

活動(dòng)圖(Activity Diagram)=活動(dòng)(Activity)+動(dòng)作(Action)+活動(dòng)邊(Activity Edge)+活動(dòng)節(jié)點(diǎn)(Activity Node)

  • 活動(dòng)圖是狀態(tài)機(jī)的另一種表現(xiàn)形式。用于為一個(gè)對象在其生命周期中的行為建模。

  • 活動(dòng)圖是一種描述系統(tǒng)動(dòng)態(tài)行為的圖,它用于描述活動(dòng)的順序,展現(xiàn)從一個(gè)活動(dòng)到另一個(gè)活動(dòng)的控制流。

<1>動(dòng)作狀態(tài)

  • 動(dòng)作狀態(tài)是指執(zhí)行原子的、不可中斷的動(dòng)作,并在此動(dòng)作完成后通過轉(zhuǎn)換轉(zhuǎn)向另一個(gè)動(dòng)作。

  • 動(dòng)作狀態(tài)使用平滑的圓角矩形表示,動(dòng)作狀態(tài)所表示的動(dòng)作寫在圓角矩形內(nèi)部。


動(dòng)作狀態(tài)的特點(diǎn):

  1. 動(dòng)作狀態(tài)是原子的,它是構(gòu)造活動(dòng)圖的最小單位,已經(jīng)無法分解為更小的部分。

  2. 動(dòng)作狀態(tài)是不可中斷的狀態(tài),它一旦開始運(yùn)行就不能中斷,一直運(yùn)行到結(jié)束。

  3. 動(dòng)作狀態(tài)是瞬時(shí)的行為,它所占用的處理事件極短,有時(shí)甚至可以忽略。

  4. 動(dòng)作狀態(tài)和狀態(tài)圖中的狀態(tài)不同,它不能有入口動(dòng)作和出口動(dòng)作,更不能有內(nèi)部轉(zhuǎn)移。

<2>活動(dòng)狀態(tài)

  • 活動(dòng)狀態(tài)用于表達(dá)狀態(tài)機(jī)中的一個(gè)非原子的運(yùn)行。

  • 活動(dòng)狀態(tài)的表示圖標(biāo)也是平滑的圓角矩形,并可以在圖標(biāo)中給出入口動(dòng)作和出口動(dòng)作等信息。


活動(dòng)狀態(tài)的特點(diǎn):

  1. 活動(dòng)狀態(tài)可以分解成其他子活動(dòng)或動(dòng)作狀態(tài),由于它是一組動(dòng)作或操作的組合,所以可以被中斷。

  2. 活動(dòng)狀態(tài)的內(nèi)部活動(dòng)可以用另一個(gè)活動(dòng)圖來表示。

  3. 和動(dòng)作狀態(tài)不同,活動(dòng)狀態(tài)可以有入口動(dòng)作和出口動(dòng)作,也可以有內(nèi)部轉(zhuǎn)移。

  4. 動(dòng)作狀態(tài)是活動(dòng)狀態(tài)的一個(gè)特例,如果某個(gè)活動(dòng)狀態(tài)只包括一個(gè)動(dòng)作,那么它就是一個(gè)動(dòng)作狀態(tài)。

<3>動(dòng)作流

  • 所有動(dòng)作狀態(tài)之間的轉(zhuǎn)換流稱之為動(dòng)作流,相當(dāng)于狀態(tài)圖中的轉(zhuǎn)換。

  • 與狀態(tài)圖的轉(zhuǎn)換相同,活動(dòng)圖的轉(zhuǎn)換也用帶箭頭的直線表示,箭頭的方向指向轉(zhuǎn)入的方向。

  • 動(dòng)作流可以是無條件的,也可以是有條件的。無條件的動(dòng)作流即是活動(dòng)圖中的普通轉(zhuǎn)換(完成轉(zhuǎn)換,內(nèi)部轉(zhuǎn)換);有條件的動(dòng)作流通過分支與合并來描述。

<4>分支與合并

  • 條件行為用分支和合并表達(dá)。

  • 在活動(dòng)圖中分支與合并用空心小菱形表示。

  • 一個(gè)分支有一個(gè)入轉(zhuǎn)換和兩個(gè)帶條件的出轉(zhuǎn)換,出轉(zhuǎn)換的條件應(yīng)當(dāng)是互斥的,這樣可以保證只有一條出轉(zhuǎn)換能夠被觸發(fā)。

  • 一個(gè)合并有兩個(gè)帶條件的入轉(zhuǎn)換和一個(gè)出轉(zhuǎn)換,合并表示從對應(yīng)的分支開始的條件行為的結(jié)束。

<5>分叉與匯合(并發(fā)與同步)

  1. 分叉用于將動(dòng)作流分為兩個(gè)或者多個(gè)并發(fā)運(yùn)行的分支,而匯合則用于同步這些并發(fā)分支,以達(dá)到共同完成一項(xiàng)事務(wù)的目的。

  2. 分叉可以用來描述并發(fā)線程,每個(gè)分叉可以有一個(gè)輸入轉(zhuǎn)換和兩個(gè)或多個(gè)輸出轉(zhuǎn)換,每個(gè)轉(zhuǎn)換都可以是獨(dú)立的控制流。

  3. 匯合代表兩個(gè)或多個(gè)并發(fā)控制流同步發(fā)生,當(dāng)所有的控制流都達(dá)到匯合點(diǎn)后,控制才能繼續(xù)往下進(jìn)行。每個(gè)匯合可以有兩個(gè)或多個(gè)輸入轉(zhuǎn)換和一個(gè)輸出轉(zhuǎn)換。

  4. 分叉和匯合都使用加粗的水平線段表示。


<6>泳道

  1. 泳道將活動(dòng)圖中的活動(dòng)化分為若干組,并把每一組指定給負(fù)責(zé)這組活動(dòng)的業(yè)務(wù)組織即對象。

  2. 泳道區(qū)分了負(fù)責(zé)活動(dòng)的對象,明確地表示了哪些活動(dòng)是由哪些對象進(jìn)行的。

  3. 每個(gè)活動(dòng)只能明確地屬于一個(gè)泳道。

  4. 泳道用垂直實(shí)線繪出,垂直線分隔的區(qū)域就是泳道。在泳道上方可以給出泳道的名字或?qū)ο螅▽ο箢悾┑拿郑搶ο螅▽ο箢悾┴?fù)責(zé)泳道內(nèi)的全部活動(dòng)。

  5. 泳道沒有順序,不同泳道中的活動(dòng)既可以順序進(jìn)行也可以并發(fā)進(jìn)行,動(dòng)作流和對象流允許穿越分隔線。


<7>對象流

對象流是動(dòng)作狀態(tài)或者活動(dòng)狀態(tài)與對象之間的依賴關(guān)系,表示動(dòng)作使用對象或者動(dòng)作對對象的影響。
對象流中的對象特點(diǎn):

  1. 一個(gè)對象可以由多個(gè)動(dòng)作操縱。

  2. 一個(gè)動(dòng)作輸出的對象可以作為另一個(gè)動(dòng)作輸入的對象。

  3. 在活動(dòng)圖中,同一個(gè)對象可以多次出現(xiàn),它的每一次出現(xiàn)表明該對象正處于對象生存期的不同時(shí)間點(diǎn)。

對象流用帶有箭頭的虛線表示。如果箭頭從動(dòng)作狀態(tài)出發(fā)指向?qū)ο螅瑒t表示動(dòng)作對對象施加了一定的影響。如果箭頭從對象指向動(dòng)作狀態(tài),則表示該動(dòng)作使用對象。


<8>活動(dòng)的分解

  1. 一個(gè)活動(dòng)可以分為若干個(gè)動(dòng)作或子活動(dòng),這些動(dòng)作和子活動(dòng)本身可以組成一個(gè)活動(dòng)圖。

  2. 一個(gè)包含子活動(dòng)的活動(dòng)和嵌套了子狀態(tài)的組合狀態(tài)類似,概念上也相對統(tǒng)一。

  3. 一個(gè)不含內(nèi)嵌活動(dòng)或動(dòng)作的活動(dòng)稱之為簡單活動(dòng);一個(gè)嵌套了若干活動(dòng)或動(dòng)作的活動(dòng)稱之為組合活動(dòng),組合活動(dòng)有自己的名字和相應(yīng)的子活動(dòng)圖。

四、活動(dòng)圖與狀態(tài)圖的區(qū)別

  1. 活動(dòng)圖著重表現(xiàn)從一個(gè)活動(dòng)到另一個(gè)活動(dòng)的控制流,是內(nèi)部處理驅(qū)動(dòng)的流程。一般是一個(gè)結(jié)束后,自動(dòng)轉(zhuǎn)入下一個(gè)活動(dòng)。

  2. 狀態(tài)圖著重描述從一個(gè)狀態(tài)到另一個(gè)狀態(tài)的流程,主要有外部事件的參與。

  3. 活動(dòng)圖是一種特殊的狀態(tài)圖,如果在一個(gè)狀態(tài)圖中的大多數(shù)狀態(tài)是表示操作的活動(dòng),而轉(zhuǎn)移是由狀態(tài)中動(dòng)作的完成來觸發(fā),即全部或絕大多數(shù)的事件是內(nèi)部產(chǎn)生的動(dòng)作完成的,這就是活動(dòng)圖。

五、活動(dòng)圖與流程圖的區(qū)別

  1. 流程圖著重描述處理過程,它的主要控制結(jié)構(gòu)是順序、分支和循環(huán),各個(gè)處理之間有嚴(yán)格的順序和時(shí)間關(guān)系;而活動(dòng)圖描述的則是對象活動(dòng)的順序關(guān)系所遵循的規(guī)則,它著重表現(xiàn)的是系統(tǒng)的行為,而非系統(tǒng)的處理過程。

  2. 活動(dòng)圖能夠表示并發(fā)活動(dòng)的情形,此時(shí)活動(dòng)圖給了我們選擇做事順序的自由,而流程圖對活動(dòng)順序的描述固定。

  3. 活動(dòng)圖是面向?qū)ο蟮模鞒虉D是面向過程的。

六、活動(dòng)圖應(yīng)用

活動(dòng)圖的優(yōu)缺點(diǎn):

  • 優(yōu)點(diǎn):最適合支持并行行為,而且也是支持多線程編程的有力工具。

  • 缺點(diǎn):很難清楚地描述動(dòng)作與對象之間的關(guān)系。雖然在活動(dòng)旁標(biāo)出對象名或者采用泳道技術(shù)可以定義這種關(guān)系,但仍然沒有交互圖簡單直接。

  • 因此,像大多數(shù)建模技術(shù)一樣,最好把活動(dòng)圖與其他技術(shù)結(jié)合使用。

1.何時(shí)可使用活動(dòng)圖

  1. 分析用例。能直觀清晰地分析用例,了解應(yīng)當(dāng)采取哪些動(dòng)作以及這些動(dòng)作之間的依賴關(guān)系。一張完整的活動(dòng)圖是所有用例的集成圖。

  2. 理解牽涉多個(gè)用例的工作流。在難于區(qū)分不同用例而對整個(gè)系統(tǒng)的工作過程又十分清楚時(shí),可以先構(gòu)造活動(dòng)圖,然后用切片技術(shù)派生用例圖。

  3. 處理多線程應(yīng)用。采用“分層抽象,逐步細(xì)化”的原則描述多線程。

2.何時(shí)不應(yīng)使用活動(dòng)圖

  1. 顯示對象間的合作。用交互圖顯示對象間的合作更簡單直觀。

  2. 顯示對象在生命周期內(nèi)的運(yùn)轉(zhuǎn)情況?;顒?dòng)圖可以表示活動(dòng)的激活條件,但不能表示一個(gè)對象的狀態(tài)變換條件。因此,當(dāng)要描述一個(gè)對象整個(gè)生命周期的運(yùn)轉(zhuǎn)情況時(shí),應(yīng)當(dāng)使用狀態(tài)圖。

3.建模的一般步驟

  1. 識(shí)別要對其工作流描述的類或?qū)ο蟆?/p>

  2. 確定工作流的初始狀態(tài)和終止?fàn)顟B(tài),明確工作流的邊界。

  3. 對動(dòng)作狀態(tài)或活動(dòng)狀態(tài)建模。

  4. 對動(dòng)作流建模。

  5. 對對象流建模。

  6. 對建立的模型進(jìn)行精化和細(xì)化。


參考資料:

UML建模之狀態(tài)圖(Statechart Diagram)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多