版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第八章狀態(tài)圖現(xiàn)在要開始學習的是如何隨時間變化的UML動態(tài)元素。本章的主要內容是:什么是狀態(tài)圖事件、動作和監(jiān)視條件事件類型子狀態(tài):順序的和并發(fā)的歷史狀態(tài)為什么狀態(tài)圖很重要在前—章的最后曾提到,這一章要開始學習在前面沒有遇到過的另一類UML元素。這個新類被稱為行為元素,它們能夠展示UML模型部件如何隨時間變化。事物的一個普遍的現(xiàn)象是隨著時間的流逝,都要經(jīng)歷變化。任何計算機系統(tǒng)也是如此。當系統(tǒng)與用戶(也可能是其他系統(tǒng))交互的時候,組成系統(tǒng)的對象為了適應交互要經(jīng)歷必要的變化。如果要對系統(tǒng)建立模型,那么模型中必須要反映出這種變化。本章將學習這類元素中的一種:狀態(tài)圖。狀態(tài)圖(狀態(tài)機)是展示狀態(tài)與狀態(tài)轉換的圖。狀態(tài)圖(狀態(tài)機)包含了一個類的對象在其生命期間所有狀態(tài)的序列以及對象對接受到的事件所產生的反應。利用狀態(tài)圖(狀態(tài)機)可以精確地描述對象的行為。
8.1什么是狀態(tài)圖一種表征系統(tǒng)變化的方法可以說成是對象改變了自己的狀態(tài)(state)以響應事件和時間的流逝。下面是幾個簡單的例子:當你拉下電燈的開關時,電燈改變了它的狀態(tài),由關變?yōu)殚_。當你按下遠程遙控器的調頻按鈕時,電視機的狀態(tài)由顯示一個頻道的節(jié)目變?yōu)轱@示另一個頻道的節(jié)目。經(jīng)過一個適宜的時間后,洗衣機可以由洗滌變?yōu)槠礌顟B(tài)。UML狀態(tài)圖能夠展示這種變化。它描述了一個對象所處的可能狀態(tài)以及狀態(tài)之間的轉移,并給出了狀態(tài)變化序列的起點和終點。狀態(tài)圖也被引用為狀態(tài)機(statemachine)。
狀態(tài)圖與類圖、對象圖和用例圖有著本質的不同。前面章節(jié)介紹過的這3種圖能夠對一個系統(tǒng)或者至少是一組類、對象或用例建立模型。而狀態(tài)圖只是對單個對象建立模型。通常狀態(tài)名的首字母要大寫,并且最好給狀態(tài)一個以“ing”為結尾的名字。(例如“Dialing”、“Faxing”)。當然有時也無法起這樣的名字(例如“Idle”)。
狀態(tài)圖所包含的內容狀態(tài)圖主要顯示以下3種內容:對象在生命周期中所經(jīng)歷的狀態(tài)序列;誘發(fā)對象從一個狀態(tài)轉換到另一個狀態(tài)的事件;狀態(tài)改變所導致的動作。
狀態(tài)圖工具箱13種常用的工具:可以定制;8.1.1符號集下圖顯示了圓角矩形代表一個狀態(tài),狀態(tài)間帶箭頭的實線代表狀態(tài)的遷移(轉移)。箭頭指向目標狀態(tài)。圖中的實心圓代表狀態(tài)轉移的起點,公牛眼形圓圈代表終點。8.1.2在狀態(tài)圖標中增加細節(jié)UML提供了在狀態(tài)圖標中增加細節(jié)的選項。類似于類的圖標可以被分成3個區(qū)域(名字,屬性和操作區(qū)域),你可以把狀態(tài)圖標也分成3個區(qū)域。最上面的區(qū)域保存狀態(tài)名(不管分不分區(qū)都得有狀態(tài)名),中間區(qū)域保存狀態(tài)變量,下面區(qū)域保存的是活動。下圖說明了狀態(tài)圖標中的細節(jié)。狀態(tài)變量,像計時器或者計數(shù)器—樣,有時很有用途。活動是由事件和動作組成:3個常用的事件和動作是入口動作(entry),即系統(tǒng)進入該狀態(tài)時要發(fā)生的動作;出口動作(exit),即系統(tǒng)離開該狀態(tài)時要發(fā)生的動作;動作(do)是系統(tǒng)處于該狀態(tài)時要發(fā)生的動作。還可以增加其他的動作或事件。傳真機例子可以用來說明狀態(tài)變量和活動。當它發(fā)傳真時,換句話說就是當它處于Faxing(發(fā)傳真)狀態(tài)時,傳真機記錄下發(fā)送傳真的日期和時間(用狀態(tài)變量“Date”和“Time”來表示),并且記錄接收者的電話號碼和名字(用狀態(tài)變量“PhoneNumber”和“Owner”來表示。在這個狀態(tài)下,傳真機參加給傳真“增加日期戳(addingadatestamp)”和“時間戳(timestamp)”的活動,以及增加電話號碼和接收者姓名到傳真機中。這個狀態(tài)下的其他活動是機器拉進傳真頁,逐頁傳真,完成傳輸任務。在Idle狀態(tài)下,傳真機要顯示出當前的時間和日期。下圖顯示了傳真機的狀態(tài)圖。8.1.3增加轉移的細節(jié):事件和動作可以對狀態(tài)轉移線添加一些細節(jié)。可以指明引起轉移發(fā)生的事件(觸發(fā)器事件)和引起狀態(tài)變化所需執(zhí)行的計算(動作)。添加的事件和動作寫在轉移線上,觸發(fā)器事件和動作名之間用反斜杠隔開。有時一個事件會引起沒有相關動作的狀態(tài)轉移,或者有時一個轉移是由于某個狀態(tài)完成了它的活動所引起(而不是由于事件引起)。這種類型的狀態(tài)轉移被稱為無觸發(fā)器轉移。圖形用戶界面(GUI)是一個可以說明狀態(tài)轉移細節(jié)的例子。在這里,假設GUI可以處于以下3種狀態(tài)之一:Initializing(初始化)。
Working(工作)。
ShutDown(關閉)。當打開PC電源的時候,自啟動發(fā)生。因此TurningthePCon(打開PC)是一個觸發(fā)器事件,它導致了GUI的狀態(tài)轉移到Initializing狀態(tài),而Bootup(自啟動)是一個在轉移過程中執(zhí)行的動作。
由于Initializing狀態(tài)中活動的完成,GUI將轉移進入Working狀態(tài)。當你對PC選擇ShutDown(關閉機器)時,就生成了一個引起轉移到ShutingDown狀態(tài)的觸發(fā)器事件,最后PC自己切斷電源,整個過程結束。下面的狀態(tài)圖捕獲了GUI的這些狀態(tài)和轉移。8.1.4增加轉移的細節(jié):監(jiān)視條件上面對GUI的狀態(tài)變遷還有考慮不全之處。首先,如果你離開,你的計算機將無人照管或者你漫無目的坐在一旁,不打字或不碰鼠標,那么過一段時間屏幕保護程序就會運行。用狀態(tài)轉移的術語來說,就是如果GUI在足夠的時間內沒有接收到用戶的輸入,那么它將從Working狀態(tài)轉移到另一種狀態(tài)——Screensaving(屏幕保護)狀態(tài)。進入屏幕保護狀態(tài)取決于指定的時間間隔。比如是15分鐘。15分鐘的時間間隔是一個保護條件——當滿足這個條件時,轉移才能發(fā)生。下圖是GUI加入了Screensaving狀態(tài)和保護條件的狀態(tài)圖,注意圖中的保護條件[isTimeout],被寫成一個布爾表達式。8.2事件類型事件是發(fā)生在時間和空間上的一點的值得注意的事情。它在時間上的一點發(fā)生,沒有持續(xù)時間。如果某一事情的發(fā)生造成了影響,那么在狀態(tài)機模型中它是一個事件。當我們使用事件這個詞時,通常是指一個事件的描述符號,即對所有具有相同形式的獨立發(fā)生事件的描述,就像類這個詞表示所有具有相同結構的獨立類一樣。一個事件的具體發(fā)生叫做事件的實例。事件可能有參數(shù)來辨別每個實例,就像類用屬性來辨別每個對象。對類而言,信號利用泛化關系來進行組織,以使不同的類共享公用的結構。事件可以分成明確或隱含的幾種:信號事件、調用事件、修件事件、時間事件等。
事件類型描述語法調用事件接受等待應答的對象的明確形式的同步請求op(a:T)改變事件對布爾表達式值的修改When(exp)信號事件接受一個對象間外在的、命名的、異步的通信Sname(a:T)時間事件絕對時間的到達或者相對時間段的終結After(time)1.信號事件信號是作為兩個對象之間的通信媒介的命名的實體,信號的接收是信號接受對象的一個事件。發(fā)送對象明確地創(chuàng)建并初始化一個信號實例并把它發(fā)送到一個或一組對象。最基本的信號是異步單路通信,發(fā)送者不會等待接收者如何處理信號而是獨立地做它自己的工作。在雙路通信模型中,要用到多路信號,即至少要在每個方向上有一個信號。發(fā)送者和接受者可以是同一個對象。信號可以在類圖中被聲明為類元,并用關鍵字《signal》表示,信號的參數(shù)被聲明為屬性。同類元一樣,信號間可以有泛化關系,信號可以是其他信號的子信號,它們繼承父信號的參數(shù),并且可以觸發(fā)依賴于父信號的轉換2.調用事件調用事件是一個對象對調用的接收,這個對象用狀態(tài)的轉換而不是用固定的處理過程實現(xiàn)操作。對調用者來說,普通的調用(用方法實現(xiàn)的調用)不會被調用事件所辨別。接收者不是用方法來實現(xiàn)操作就是觸發(fā)一個狀態(tài)轉換來實現(xiàn)這個操作。操作的參數(shù)即事件的參數(shù)。一旦調用的接收對象通過由事件觸發(fā)的轉換完成了對調用事件的處理或調用失敗而沒有進行任何狀態(tài)轉換,則控制返回到調用對象。不過,與普通的調用不同,調用事件的接收者會繼續(xù)它自己的執(zhí)行過程,與調用者處于并行狀態(tài)。3.修改事件修改事件是依靠特定屬性值的布爾表達式所表示的條件的滿足。這是等到特定條件被滿足的一種聲明途徑,但是一定要小心使用它,因為它表示了一種具有時間持續(xù)性的并且可能是涉及全局的計算過程(是一種遠距離的動作,因為被測試的值可能是遠距離的)。這既有好處也有壞處,它的好處在于它將模型集中在真正的依賴關系上—一種當給定條件被滿足時發(fā)生的作用—而不是集中在測試條件的機制上。缺點在于它使修改系統(tǒng)潛在值和最終效果的活動之間的因果關系變得模糊了。測試修改事件的代價可能很大,因為原則上修改事件是持續(xù)不斷的。而實際上,又存在著避免不必要的計算的方法。修改事件應該僅用在當一個具有更明確表達形式的通信形式顯得不自然時。請注意監(jiān)護條件與修改事件的區(qū)別。監(jiān)護條件只是在引起轉換的觸發(fā)器事件觸發(fā)時和事件接收者對事件進行處理時被賦值一次。如果它為假,那么轉換將不會被激發(fā),條件也不會被再賦值。而修改事件被多次賦值直到條件為真,這時轉換也會被激發(fā)。
4.時間事件時間事件代表時間的流逝。時間事件既可以被指定為絕對形式(天數(shù)),也可以被指定為相對形式(從某一指定事件發(fā)生開始所經(jīng)歷的時間)。在高層模型中,時間事件可以被認為是來自整個世界的事件;在實現(xiàn)模型中,它們由一些特定對象的信號所引起,這些對象既可能是操作系統(tǒng)也可能是應用中的對象。
8.3子狀態(tài)我們建立的GUI狀態(tài)模型好像仍然少了什么。特別是working狀態(tài),應該比以上狀態(tài)圖所表示的內容更為豐富才對。當GUI處于working狀態(tài),幕后同時進行著許多事情,盡管這些事情并未在屏幕中顯現(xiàn)出來。GUI始終在等用戶的動作——敲鍵盤、移動鼠標或者按下鼠標按鈕。然后它必須注冊這些輸入然后改變屏幕顯示來反映用戶的動作——例如,如果你移動鼠標則屏幕就移動光標;如果你按下鍵盤上的“a”鍵,屏幕上就顯示出字符“a”。因此GUI處于working狀態(tài)時仍然要經(jīng)歷變化,即狀態(tài)的變化。因為這些狀態(tài)存在于單個狀態(tài)之中,因此它們被稱為子狀態(tài)。子狀態(tài)以兩種形式出現(xiàn):順序子狀態(tài)和并發(fā)子狀態(tài)。8.3.1順序子狀態(tài)正如名字所暗示的那樣,順序子狀態(tài)按照順序一個接著一個出現(xiàn)。重新分析前面提到的GUI的Working狀態(tài),可以得到以下的狀態(tài)序列:
AwaitingUserInput。RegistringUserInput。VisualizingUserInput。用戶輸入觸發(fā)了從Awaiting狀態(tài)到Registering狀態(tài)的轉移。Registering狀態(tài)內的活動引起了GUI到Visualizing狀態(tài)的轉移。在第3個子狀態(tài)之后,GUI重新回到Awaiting狀態(tài)。下圖說明了在Working狀態(tài)中的順序子狀態(tài)。8.3.2并發(fā)子狀態(tài)在處于Working狀態(tài)時,GUI并不是僅僅只等待用戶的輸入。它還要監(jiān)視系統(tǒng)的時鐘(Watchsystemclock)或者定期更新應用程序的界面顯示。例如,一個應用程序可能包括一個屏幕時鐘,它的GUI需要定期被更新。所有這些與前面的順序子狀態(tài)的轉移同時進行。盡管每個狀態(tài)序列是一組順序子狀態(tài),但是兩個狀態(tài)序列之間是并發(fā)關系。并發(fā)狀態(tài)之間用虛線隔開,表示狀態(tài)序列之間是并發(fā)關系,如下圖所示。前面類圖中說了,當每個部分體只能屬于一個整體時,這種關系叫組成關系。Working狀態(tài)和它的兩個并發(fā)部分之間也有類似的關系。因此,Working狀態(tài)被稱為組成狀態(tài)。只包含順序子狀態(tài)的狀態(tài)也是組成狀態(tài)。8.4歷史狀態(tài)當屏幕保護程序正在運行時移動了鼠標的話,系統(tǒng)又會回到Working狀態(tài)。這時將發(fā)生什么呢?屏幕顯示又會回到GUI剛剛初始化時的狀態(tài)嗎?不是,而是回到屏幕保護程序運行之前的狀態(tài)。
狀態(tài)圖中能夠表達出這種思想。UML提供了一個符號,這個符號能夠用來表示當對象轉移出該組成狀態(tài)后,該組成狀態(tài)能夠記住它的活動子狀態(tài)。這個符號是一個小圓圈中字母“H”,并用一條實線連接到被記憶的子狀態(tài)。下圖說明了working狀態(tài)中的表示法。在狀態(tài)圖中,還未涉及由一個窗口所打開的其它窗口,換句話說,也就是子狀態(tài)中嵌入的其他子狀態(tài)。當一個歷史狀態(tài)記憶了各個嵌套層次的子狀態(tài)時,這個歷史狀態(tài)就是深的。如果它只記億了最高層次嵌入的子狀態(tài),那么就說這個歷史狀態(tài)是淺的。深的歷
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初物理教學工作計劃
- 2025高爐熱風爐灌漿施工承包合同
- 福安藥業(yè)回復函
- 2025集體土地房產買賣合同
- 輸液科護理工作總結
- 電信設備采購合同三篇
- 2025經(jīng)營合同 鄉(xiāng)鎮(zhèn)企業(yè)以物抵債協(xié)議書
- 2025農業(yè)發(fā)展銀行質押擔保借款合同
- 2025杭州市房屋中介服務合同范本
- 推動學生貸款業(yè)務創(chuàng)新發(fā)展的政策建議與展望
- GB/T 24474.1-2020乘運質量測量第1部分:電梯
- GB/T 12684-2006工業(yè)硼化物分析方法
- 定崗定編定員實施方案(一)
- 高血壓患者用藥的注意事項講義課件
- 特種作業(yè)安全監(jiān)護人員培訓課件
- (完整)第15章-合成生物學ppt
- 太平洋戰(zhàn)爭課件
- 封條模板A4打印版
- T∕CGCC 7-2017 焙烤食品用糖漿
- 貨代操作流程及規(guī)范
- 常暗之廂(7規(guī)則-簡體修正)
評論
0/150
提交評論