深入學(xué)習(xí)UML狀態(tài)機(jī)視圖用法
本文和大家重點(diǎn)討論一下UML狀態(tài)機(jī)視圖的概念,狀態(tài)機(jī)視圖中狀態(tài)機(jī)用于描述類的行為,但它們也描述用例、協(xié)作和方法的動(dòng)態(tài)行為,下面請(qǐng)看UML狀態(tài)機(jī)視圖的詳細(xì)介紹。
UML狀態(tài)機(jī)視圖概述
UML狀態(tài)機(jī)視圖通過對(duì)類對(duì)象的生存周期建立模型來描述對(duì)象隨時(shí)間變化的動(dòng)態(tài)行為。每一個(gè)對(duì)象都被看作是通過對(duì)事件進(jìn)行探測(cè)并做出回應(yīng)來與外界其他部分通信的獨(dú)立的實(shí)體。事件表示對(duì)象可以探測(cè)到的事物的一種運(yùn)動(dòng)變化—如接受到從一個(gè)對(duì)象到另一個(gè)對(duì)象的調(diào)用或信號(hào)、某些值的改變或一個(gè)時(shí)間段的終結(jié)。任何影響對(duì)象的事物都可以是事件,真實(shí)世界所發(fā)生的事物的模型通過從外部世界到系統(tǒng)的信號(hào)來建造的。
狀態(tài)是給定類的對(duì)象的一組屬性值,這組屬性值對(duì)所發(fā)生的事件具有相同性質(zhì)的反應(yīng)。換而言之,處于相同狀態(tài)的對(duì)象對(duì)同一事件具有同樣方式的反應(yīng),所以當(dāng)給定狀態(tài)下的多個(gè)對(duì)象當(dāng)接受到相同事件時(shí)會(huì)執(zhí)行相同的動(dòng)作,然而處于不同狀態(tài)下的對(duì)象會(huì)通過不同的動(dòng)作對(duì)同一事件做出不同的反應(yīng)。例如,當(dāng)自動(dòng)答復(fù)機(jī)處于處理事務(wù)狀態(tài)或空閑狀態(tài)時(shí)會(huì)對(duì)取消鍵做出不同的反應(yīng)。
狀態(tài)機(jī)用于描述類的行為,但它們也描述用例、協(xié)作和方法的動(dòng)態(tài)行為。對(duì)這些對(duì)象方面而言,一個(gè)狀態(tài)代表了執(zhí)行中的一步。我們通常用類和對(duì)象來描述狀態(tài)機(jī),但是它也可以被其他元素所直接應(yīng)用。
狀態(tài)機(jī)
狀態(tài)機(jī)是展示狀態(tài)與狀態(tài)轉(zhuǎn)換的圖。通常一個(gè)狀態(tài)機(jī)依附于一個(gè)類,并且描述一個(gè)類的實(shí)例對(duì)接受到的事件所發(fā)生的反應(yīng)。狀態(tài)機(jī)也可以依附于操作、用例和協(xié)作并描述它們的執(zhí)行過程。
狀態(tài)機(jī)是一個(gè)類的對(duì)象所有可能的生命歷程的模型。對(duì)象被孤立地從系統(tǒng)中抽出和考察,任何來自外部的影響被概述為事件。當(dāng)對(duì)象探測(cè)到一個(gè)事件后,它依照當(dāng)前的狀態(tài)做出反應(yīng),反應(yīng)包括執(zhí)行一個(gè)動(dòng)作和轉(zhuǎn)換到新狀態(tài)。狀態(tài)機(jī)可以構(gòu)造成繼承轉(zhuǎn)換,也能夠?qū)Σl(fā)行為建立模型。
狀態(tài)機(jī)是一個(gè)對(duì)象的局部視圖,一個(gè)將對(duì)象與其外部世界分離開來并獨(dú)立考查其行為的圖。利用狀態(tài)機(jī)可以精確地描述行為,但不適合綜合理解系統(tǒng)執(zhí)行操作。如果要更好地理解整個(gè)系統(tǒng)范圍內(nèi)的行為產(chǎn)生的影響,那么交互視圖將更有用些。然而,狀態(tài)機(jī)有助于理解如用戶接口和設(shè)備控制器這樣的控制機(jī)。
UML狀態(tài)機(jī)視圖組成狀態(tài)
一個(gè)簡(jiǎn)單狀態(tài)沒有子結(jié)構(gòu),只帶有一組轉(zhuǎn)換和可能的入口和出口動(dòng)作。組成狀態(tài)是一個(gè)被分解成順序的或并發(fā)的子狀態(tài)的狀態(tài)。
將狀態(tài)分解成互斥的子狀態(tài)是對(duì)狀態(tài)的一種專門化處理。一個(gè)外部狀態(tài)被細(xì)分成多個(gè)內(nèi)部子狀態(tài),每一個(gè)子狀態(tài)都繼承了外部狀態(tài)的轉(zhuǎn)換。在某一時(shí)間只有一個(gè)子狀態(tài)處于激活狀態(tài)。外部狀態(tài)表達(dá)了每一個(gè)內(nèi)部狀態(tài)都具有的條件。
進(jìn)入或離開一個(gè)組成狀態(tài)的轉(zhuǎn)換會(huì)引起入口動(dòng)作或出口動(dòng)作的執(zhí)行。如果有多個(gè)組成狀態(tài),跨越多個(gè)層次的轉(zhuǎn)換會(huì)引起多重入口動(dòng)作(最外層***執(zhí)行)和出口動(dòng)作(最內(nèi)層***執(zhí)行)的執(zhí)行。如果轉(zhuǎn)換帶有動(dòng)作,那么這個(gè)動(dòng)作在入口動(dòng)作執(zhí)行后,出口動(dòng)作執(zhí)行前執(zhí)行。
UML狀態(tài)機(jī)視圖的組成狀態(tài)也可能在其內(nèi)部具有一個(gè)初始狀態(tài)。組成狀態(tài)邊界上的轉(zhuǎn)換隱含為初始狀態(tài)上的轉(zhuǎn)換。一個(gè)新對(duì)象起始于它的最外層的初始狀態(tài)。如果一個(gè)對(duì)象到達(dá)了它最外層狀態(tài)的終止?fàn)顟B(tài),那么該對(duì)象將被銷毀。初始狀態(tài)、終止?fàn)顟B(tài)、入口動(dòng)作和出口動(dòng)作封裝了狀態(tài)的定義,使?fàn)顟B(tài)的定義與進(jìn)出狀態(tài)的轉(zhuǎn)換無關(guān)。
將一個(gè)狀態(tài)分解成并發(fā)的多個(gè)子狀態(tài)代表相互獨(dú)立的并行處理過程。當(dāng)進(jìn)入一個(gè)并發(fā)超狀態(tài)時(shí),控制線程的數(shù)目增加;當(dāng)離開一個(gè)并發(fā)超狀態(tài)時(shí),控制線程的數(shù)目減少對(duì)于每一個(gè)狀態(tài)而言,并發(fā)通常依靠不同的對(duì)象實(shí)現(xiàn),但是,并發(fā)子狀態(tài)還可以代表一個(gè)單獨(dú)狀態(tài)內(nèi)部的邏輯并發(fā)關(guān)系。
通常,可以在一個(gè)狀態(tài)機(jī)中使用其他狀態(tài)機(jī)的一部分,這種可重用性會(huì)帶來一些方便。狀態(tài)機(jī)可以命名,并可以用名字引用其他一個(gè)或多個(gè)狀態(tài)機(jī)。目標(biāo)狀態(tài)機(jī)是一個(gè)子機(jī)器,引用這個(gè)子機(jī)器的狀態(tài)叫做子機(jī)器引用狀態(tài)。它的含義是在需要引用的地方用一個(gè)狀態(tài)機(jī)來替換原有內(nèi)容。一個(gè)狀態(tài)機(jī)可以包含一個(gè)活動(dòng),即可以包含一個(gè)處理過程或一個(gè)需要消耗時(shí)間才能完成的持續(xù)過程或是可以被中斷的事件,而子機(jī)器不能圖6-7演示了子機(jī)器的引用。
進(jìn)入一個(gè)子機(jī)器引用狀態(tài)的轉(zhuǎn)換會(huì)激活目標(biāo)子機(jī)器的初始狀態(tài)。要進(jìn)入其他狀態(tài)的子機(jī)器,需要在子機(jī)器引用狀態(tài)中安置一個(gè)或多個(gè)樁狀態(tài)。樁狀態(tài)用于在子機(jī)器中標(biāo)識(shí)狀態(tài)。
【編輯推薦】