版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第10章狀態(tài)圖在一個交互中,可能發(fā)送給單個對象一個或多個消息, 并且,這些消息以特定的順序被 接收。但是,在另外的交互中, 同一個對象可能接收完全不同的消息。 根據(jù)各個交互的詳細 情況,特定消息發(fā)送到對象的順序也可能根據(jù)情況的不同而改變。 通過考慮對象能夠參與的 所有可能的交互,我們可以看到,在一個對象的整個生存期中, 它必須能夠合理地響應(yīng)次序 變動范圍相當(dāng)大的消息。在第8章,我們已經(jīng)看到,對象圖不是用來詳細說明系統(tǒng)所有可能的狀態(tài)的。首先,的其次,除了要知道可能的狀態(tài)是什么,我們還需要出于完全相同的原因, 順序圖和協(xié)作圖也不是用來文檔來自于網(wǎng)絡(luò)搜索確存在著太多的狀態(tài),不能用文檔窮舉; 知道哪些
2、狀態(tài)是不可能,或者不合法的。 描述對象能夠參與的所有可能交互的視圖。對這兩種情況,解決方案是相同的,即使用表示法的更抽象的形式詳細說明系統(tǒng),而不是舉例說明。在UML中,對象的行為規(guī)格說明是通過為對象定義 狀態(tài)機來給出的。狀態(tài)機 說明了對象對它在生存期期間可能檢測到的事件的響應(yīng)。在UML中,狀態(tài)機通常是用一種 稱為狀態(tài)圖的圖來文檔化的。文檔來自于網(wǎng)絡(luò)搜索交互圖和狀態(tài)機給出的是系統(tǒng)動態(tài)行為的兩個互補的視圖。交互圖顯示了在較短的一段時間在系統(tǒng)中的對象之間傳遞的消息,通常是在單個用戶產(chǎn)生的事務(wù)期間,因此這些圖必需描述很多對象,即特定事務(wù)中所涉及的那些對象。另一方面,狀態(tài)圖自始至終在一個單個對象的整個生
3、存期中跟蹤該對象,指定該對象能夠接收的所有可能的消息序列,以及它對這些消息的響應(yīng)。文檔來自于網(wǎng)絡(luò)搜索10.1依賴狀態(tài)的行為許多對象展現(xiàn)出了 依賴狀態(tài)的行為。不嚴密地說,這意味著對象在不同時間將對相同的刺激做出不同的響應(yīng)。例如,考慮一個簡單的CD播放機的行為,播放機包括一個裝 CD的抽屜,如果當(dāng)前有播放的CD,就放在抽屜里。還包括一個界面,界面包含三個按鈕, 標明"裝 入load、"播放play和"停止stop。如果當(dāng)前抽屜關(guān)著,裝入按鈕使之翻開, 如果是翻開的,那么使之關(guān)閉。停止按鈕使播放機停止正在進行的播放。如果沒有正在播放的CD時,按下停止按鈕不起作用。最后,
4、播放按鈕播放抽屜中的CD,如果按下播放按鈕時抽屜是翻開的,那么先關(guān)閉抽屜后再開始播放。文檔來自于網(wǎng)絡(luò)搜索這個CD播放機至少在兩個方面表現(xiàn)出了依賴狀態(tài)的行為。例如,如果抽屜開著,按下“裝入按鈕將關(guān)閉抽屜,而抽屜關(guān)著的時候,按下“裝入按鈕將翻開抽屜。另外,如果正在播放CD,按下停止按鈕就停止播放,但是如果沒有播放CD,按這個按鈕沒有作用。文檔來自于網(wǎng)絡(luò)搜索在這個例子中,我們可以標識CD播放機能夠處于的至少三個不同狀態(tài)。按下“裝入按鈕引起的不同結(jié)果說明我們需要區(qū)別“翻開open和“關(guān)閉closed狀態(tài),而按下“停止按鈕的不同結(jié)果說明存在第三個狀態(tài),可能標記為“正在播放playing ,它不同于上面任
5、一個狀態(tài)。同樣值得注意的是,CD播放機可以響應(yīng)事件而改變狀態(tài)。例如,重復(fù)地按下“裝入按鈕將引起 CD播放機在翻開和關(guān)閉狀態(tài)之間轉(zhuǎn)換。文檔來自于網(wǎng)絡(luò)搜索這個例子中的三個狀態(tài)符合 CD播放機的實際狀態(tài)中可觀察到的差異確實令人愉快,但是情況并不總是如此。區(qū)分狀態(tài)的根本原那么是,處于一個特定狀態(tài)的對象,對至少一個事件 的響應(yīng)和它處于其他狀態(tài)時對該事件的響應(yīng)不同。因而識別的狀態(tài)可能對應(yīng)于容易發(fā)現(xiàn)的對象的外部特征,也可能并不與之對應(yīng)。文檔來自于網(wǎng)絡(luò)搜索用于行為建模的狀態(tài)的概念應(yīng)該區(qū)別于第2章所討論的狀態(tài),在第2章,對象的狀態(tài)被定義為在給定時間其屬性的值的整體。狀態(tài)的行為概念比這個更廣泛:在兩個時間一個對象
6、的屬性很可能不同,可是卻處在相同的行為狀態(tài)。對此,CD播放機的“關(guān)閉狀態(tài)可以提供一個例子:抽屜中有或者沒有CD可以被認為是CD播放機不同的屬性值,但是在任一情況下 我們都可以認為播放機處于關(guān)閉狀態(tài)。文檔來自于網(wǎng)絡(luò)搜索行為狀態(tài)的識別并不是一個嚴格的過程。狀態(tài)的不同,是通過處于不同狀態(tài)的對象對事件的響應(yīng)不同來區(qū)分的,但是什么看作是不同的響應(yīng),在某種程度上卻是一個需要判斷的問 題。行為狀態(tài)的重要特性是,第一,一個對象有假設(shè)干個可能的狀態(tài),并且在任何給定時間恰好處于這些狀態(tài)中的一個。第二,對象可以改變狀態(tài),通常,它在給定時間所處的狀態(tài)會由它的歷史決定。最后,在不同時間,一個對象可能依賴其狀態(tài)對同一刺激
7、做出不同的響應(yīng)。文檔來自于網(wǎng)絡(luò)搜索10.2狀態(tài)、事件和轉(zhuǎn)換狀態(tài)圖statechart diagram,通常簡稱為statechart,顯示一個對象可能的狀態(tài),它能夠 檢測到的事件,以及它對這些事件的響應(yīng)。因此,為了構(gòu)造一個對象的狀態(tài)圖,我們必須首先至少暫時地確立對象能夠處于什么狀態(tài)以及它能夠檢測什么事件。比方CD播放機的例子,我們已經(jīng)標識了翻開、關(guān)閉和正在播放狀態(tài),這將作為開發(fā)狀態(tài)圖的根底。文檔來自于網(wǎng)絡(luò)搜索用軟件的術(shù)語,經(jīng)常假定,對象檢測到的事件就是發(fā)送給它的消息。然而,在剛開始設(shè)計時不必要這么具體:需要的只是對象能夠檢測到的外部事件這個更一般的概念。在CD播放機的例子中,能夠檢測到的外部事
8、件只是按下三個按鈕。因此,CD播放機的狀態(tài)機將包括至少三個事件:"裝入load、"播放play和"停止stop。文檔來自于網(wǎng)絡(luò)搜索一般而言,檢測到一個事件可能導(dǎo)致對象從一個狀態(tài)移動到另一狀態(tài),這樣的移動稱為轉(zhuǎn)換。例如,如果CD播放機處于翻開狀態(tài),按下裝入按鈕將引起抽屜關(guān)閉,并且CD播放機移動到關(guān)閉狀態(tài)。狀態(tài)圖上顯示的根本信息是實體的可能狀態(tài)以及它們之間的轉(zhuǎn)換,或換句話說,檢測各種事件的路徑引起系統(tǒng)從一個狀態(tài)轉(zhuǎn)換到另一個狀態(tài)。文檔來自于網(wǎng)絡(luò)搜索描述CD播放機的根本模型的狀態(tài)圖如圖10.1所示。系統(tǒng)的狀態(tài)以圓角矩形表示,其中寫著狀態(tài)的名字。狀態(tài)轉(zhuǎn)換用連接兩個狀態(tài)的箭頭
9、表示。每個這樣的箭頭必須標注一個事件的名字。這種箭頭的含意是如果系統(tǒng)在處于箭頭尾的時候接收到該事件,它將轉(zhuǎn)到箭頭的頭所指向的狀態(tài)。因此,事件通常將在狀態(tài)圖中出現(xiàn)屢次,該對象可能在多個不同的狀態(tài)檢測到同樣的事件。 文檔來自于網(wǎng)絡(luò)搜索圖10.1 CD播放機的一個簡單狀態(tài)機在圖10.1中,從每個狀態(tài)都有三個出發(fā)的箭頭,每一個事件都可以被CD播放機檢測到。這種完備性不是狀態(tài)機的根本性質(zhì),而只是反映了CD播放機的用戶在任何時候都可以按下三個按鈕中的任何一個的事實。如果事件沒有引起狀態(tài)的改變,那么相應(yīng)的轉(zhuǎn)換只是在一個狀態(tài)上形成回路。這種情況的例子是,在CD播放機已經(jīng)處于正在播放狀態(tài),檢測到播放事件時發(fā)生的
10、轉(zhuǎn)換。這樣的轉(zhuǎn)換被稱為自轉(zhuǎn)換self-transition 。文檔來自于網(wǎng)絡(luò)搜索事件如同消息一樣,能夠帶有數(shù)據(jù),寫在消息名字后面的括號中。播放機的例子中沒有 需要攜帶附加數(shù)據(jù)的事件,但在 10.10節(jié)考慮的例子中將看到這樣的例子。 文檔來自于網(wǎng)絡(luò)搜索 狀態(tài)機的執(zhí)行一個簡單的狀態(tài)機,如圖10.1中所示的狀態(tài)圖,可以認為是按照下面的方式“執(zhí)行。在任何給定時刻,對象恰好處于圖中所示的狀態(tài)之一。這個狀態(tài)稱為 激活狀態(tài)(active state )。任何從激活狀態(tài)出發(fā)的轉(zhuǎn)換都是一個候選激發(fā)。例如,如果CD播放機的激活狀態(tài)是 “翻開狀態(tài),那么候選激發(fā)的轉(zhuǎn)換有該狀態(tài)上的自轉(zhuǎn)換、標記著“裝入的到關(guān)閉狀態(tài)的轉(zhuǎn)換
11、,以 及標記著“播放的到達正在播放狀態(tài)的轉(zhuǎn)換。文檔來自于網(wǎng)絡(luò)搜索能夠引起轉(zhuǎn)換激發(fā)的事件稱為 觸發(fā)器(trigger)。當(dāng)檢測到一個事件時,該事件將激發(fā) 從激活狀態(tài)出發(fā)的標注著該事件名字的轉(zhuǎn)換。這個激發(fā)的轉(zhuǎn)換的另一端的狀態(tài)就成為激活狀態(tài),這個過程可以再次重演,不同的是現(xiàn)在的候選激發(fā)將是從新激活狀態(tài)出發(fā)的轉(zhuǎn)換。文檔來自于網(wǎng)絡(luò)搜索從當(dāng)前狀態(tài)出發(fā)的事件如果沒有標注為所檢測到事件名字的,就忽略該事件,不激發(fā)任何轉(zhuǎn)換,當(dāng)前狀態(tài)仍是激活狀態(tài)。 如果有必要指定在一個狀態(tài)是激活的情況下檢測到一個特 定事件是錯誤的時候, 可以定義一個錯誤狀態(tài), 并增加一個到錯誤狀態(tài)的轉(zhuǎn)換并用被禁止的 事件的名字加以標注。文檔來自
12、于網(wǎng)絡(luò)搜索10.3初始狀態(tài)和終止?fàn)顟B(tài)圖10.1中的圖描述了 CD播放機在使用時的運作機能,但是沒有說明機器在開關(guān)時發(fā)生 什么。我們將假定關(guān)機器時它不表現(xiàn)出任何行為,當(dāng)開機時它總是直接到關(guān)閉狀態(tài)。文檔來自于網(wǎng)絡(luò)搜索我們可以通過向狀態(tài)圖中參加 初始狀態(tài)表示后一種行為;初始狀態(tài)用黑色的小圓點表示。從初始狀態(tài)出發(fā)的轉(zhuǎn)換表示創(chuàng)立或初始化對象時進入的狀態(tài)。CD播放機的初始狀態(tài)如圖10.2所示,初始狀態(tài)上的轉(zhuǎn)換表示播放機在開機后總是處于關(guān)閉狀態(tài)。注意從初始狀態(tài)出 發(fā)的轉(zhuǎn)換上不應(yīng)該寫任何事件。文檔來自于網(wǎng)絡(luò)搜索圖10.2初始狀態(tài)和終止?fàn)顟B(tài)除了初始狀態(tài),狀態(tài)圖還可以表示 終止?fàn)顟B(tài)。終止?fàn)顟B(tài)代表對象在響應(yīng)撤銷、關(guān)
13、掉,或其他終止事件時到達的狀態(tài),終止?fàn)顟B(tài)用大圓圈中加一個小圓點表示。一般而言,可以從許多不同的狀態(tài)到達終止?fàn)顟B(tài)。在CD播放機的例子中,引起到達終止?fàn)顟B(tài)的事件是關(guān)播放機。我們可以用一個稱為“關(guān)機off的新事件對此建模??梢栽谌魏螘r刻關(guān)掉播放機,因此 用標注為“關(guān)機事件的轉(zhuǎn)換將終止?fàn)顟B(tài)連接到所有其他狀態(tài)。終止?fàn)顟B(tài)的含意依賴于狀態(tài)圖所描述的對象的特性。 如果一個軟件對象, 即類的實例,到達它的終止?fàn)顟B(tài),那么它將完 全被銷毀:如果它有析構(gòu)函數(shù),那么將調(diào)用析構(gòu)函數(shù),并回收對象占用的內(nèi)存。文檔來自于網(wǎng)絡(luò)搜索然而,圖10.2顯然不應(yīng)該被解釋說 CD播放機在每次關(guān)機時都被實際地銷毀:這樣的設(shè)計不可能制造出來投
14、入市場。實際模擬的是控制CD播放機的軟件的行為:當(dāng)關(guān)掉播放機時終止控制程序,并且機器將不響應(yīng)任何事件,直到再次開機。文檔來自于網(wǎng)絡(luò)搜索10.4監(jiān)護條件圖10.2中的狀態(tài)圖對CD播放機的行為給出了一個過分簡單的描述。有一個問題是,當(dāng)按下播放按鈕時,播放機并不總是進入正在播放狀態(tài),而是當(dāng)檢測到該事件時如果抽屜中有CD才進入正在播放狀態(tài),否那么如果抽屜還沒有關(guān)閉就只是關(guān)閉抽屜并且進入關(guān)閉狀態(tài)。這意味著在準確的模型中,關(guān)閉和翻開兩個狀態(tài)都應(yīng)該包含始于它們的兩個標注為“播放的轉(zhuǎn)換。在任何給定時刻,實際上沿哪個轉(zhuǎn)換前進將取決于在該時間抽屜中的內(nèi)容。文檔來自于網(wǎng)絡(luò)搜索圖10.3按下“播放時的兩種可能后果圖1
15、0.3顯示了在CD播放機抽屜關(guān)著的時候按下“播放按鈕的兩種可能的后果。這是一個非確定狀態(tài)圖的例子。這個圖說明播放事件可以觸發(fā)兩個可能的轉(zhuǎn)換,但并沒有說明何時將激發(fā)其中的一個轉(zhuǎn)換而不是另一個。文檔來自于網(wǎng)絡(luò)搜索原那么上,不確定的圖沒有任何錯誤,但是如果建模的系統(tǒng)事實上是確定的,那么不確定的圖必定是遺漏了系統(tǒng)的某些信息。在CD播放機的例子中,當(dāng)按鈕按下時不存在真正的非確定性,因為播放機接下來的行為由抽屜中的內(nèi)容確定。更準確的模型應(yīng)該說明是什么導(dǎo)致沿著一個轉(zhuǎn)換而不是另一個轉(zhuǎn)換前進,以消除圖10.3中呈現(xiàn)的非確定性。 文檔來自于網(wǎng)絡(luò)搜索在狀態(tài)圖上,這樣的信息可以通過為播放轉(zhuǎn)換增加監(jiān)護條件來表示,說明在
16、什么情況下將激發(fā)該轉(zhuǎn)換。監(jiān)護條件是轉(zhuǎn)換的規(guī)格說明的一局部,寫在標注該轉(zhuǎn)換的事件名字之后,并用方括號括起來。監(jiān)護條件通常以非正式的英語寫出,如這里一樣,但是如果要求,可以用更形式化的符號,如第 12章描述的OCL語言寫出。文檔來自于網(wǎng)絡(luò)搜索圖10.4所示的CD播放機的擴充狀態(tài)圖包括了監(jiān)護條件,區(qū)分了抽屜的非空和空的狀態(tài)。為了簡單起見,與當(dāng)前討論無關(guān)的初始狀態(tài)和終止?fàn)顟B(tài)在這個圖中省略了。文檔來自于網(wǎng)絡(luò)搜索圖10.4使用監(jiān)護條件區(qū)分轉(zhuǎn)換監(jiān)護條件對狀態(tài)機執(zhí)行的影響如下。當(dāng)檢測到一個事件時,將對標注著該事件名字的轉(zhuǎn)換上的監(jiān)護條件求值。如果轉(zhuǎn)換有監(jiān)護條件,那么只有在求值為真時這個轉(zhuǎn)換才會激發(fā)。如果所有監(jiān)護
17、條件都是假值,并且沒有無監(jiān)護的轉(zhuǎn)換,就忽略該事件。文檔來自于網(wǎng)絡(luò)搜索如果多個轉(zhuǎn)換有值為真的監(jiān)護條件,那么它們中只能有一個被激發(fā)。在這種情況下,非確定性再次引入到狀態(tài)機, 通常,要對一組離開轉(zhuǎn)換上的監(jiān)護條件進行挑選,以使得在任何給定時間,為真的不能超過一個。文檔來自于網(wǎng)絡(luò)搜索例如,假定CD播放機正處于翻開狀態(tài)時按下了播放按鈕。發(fā)生的第一件事情是關(guān)閉抽屜;這是必要的,以便機器能夠檢測是否有碟片。重要的是要注意在這個時候,盡管事實上抽屜是關(guān)閉的,但 CD播放機并不是在關(guān)閉狀態(tài)。仍然是在翻開狀態(tài)下,評估播放轉(zhuǎn)換上的 監(jiān)護條件的值,看應(yīng)該激發(fā)哪個轉(zhuǎn)換。這說明了前面提出的一點,CD播放機的狀態(tài)機中的狀態(tài)不
18、必要和CD播放機的實際狀態(tài)恰好對應(yīng)。文檔來自于網(wǎng)絡(luò)搜索如果有CD,將激發(fā)從翻開狀態(tài)到正在播放狀態(tài)的轉(zhuǎn)換。狀態(tài)機直接從翻開轉(zhuǎn)到正在播放狀態(tài),并且不經(jīng)過關(guān)閉狀態(tài),即使是暫時地。如果經(jīng)過,那么它必須檢測到第二個事件以激發(fā)它到正在播放狀態(tài)的轉(zhuǎn)換。然而,只有單獨一個事件,即按下播放按鈕事件,是將它從翻開狀態(tài)轉(zhuǎn)換到正在播放狀態(tài)所必需的。如果需要,抽屜關(guān)閉的物理事實在狀態(tài)圖上可以作為動作建模,如下節(jié)所描述的。文檔來自于網(wǎng)絡(luò)搜索10.5動作狀態(tài)圖能夠說明對象響應(yīng)檢測到的特定事件時做些什么。這通過在圖中的相關(guān)轉(zhuǎn)換上增加動作來說明。動作寫在事件名字之后,前面加斜線。圖10.5所示的是CD播放機的狀態(tài)圖,參加了動作
19、表示抽屜實際翻開和關(guān)閉的時間。文檔來自于網(wǎng)絡(luò)搜索動作可以用英語以偽代碼的方式描述,也可以使用目標編程語言的符號。轉(zhuǎn)換經(jīng)常既帶有條件,還帶有動作。如果是這樣,條件緊跟在事件名字之后,動作寫在條件的后面。文檔來自于網(wǎng)絡(luò)搜索動作被看作是簡短的、 自包含的一段處理, 所花費的完成時間可以忽略。動作的定義特征是它在轉(zhuǎn)換到達新狀態(tài)之前完成。這隱含著動作不能由對象可能檢測到的任何其他事件中 斷,而必須總是執(zhí)行完成。在這個意義上,不是原子的動作,或者對象處于給定狀態(tài)時執(zhí)行 的處理,可以通過 活動而不是動作描述,如第10.6節(jié)所描述的。文檔來自于網(wǎng)絡(luò)搜索pUynopi町 |no CDdra'ArClos
20、ed'x«n drawerplay CD pro«n(皿0闊 drawer圖10.5操縱CD播放機抽屜的動作入口和出口動作假定每次抽屜中有CD時如果按下播放按鈕,CD播放機的播放頭都將自己定位到當(dāng)前曲 目的開始。這可以在狀態(tài)圖上表示,方法是在每個標注“播放的到達正在播放狀態(tài)的轉(zhuǎn)換 上寫一個適當(dāng)?shù)膭幼?。但是,這相當(dāng)不妥而且累贅,可以用更節(jié)省的方法到達相同的效果, 即在正在播放狀態(tài)中包含一個 入口動作,如圖10.6所示。文檔來自于網(wǎng)絡(luò)搜索每當(dāng)一個狀態(tài)變?yōu)榧せ顮顟B(tài)時,緊接在通向該狀態(tài)的轉(zhuǎn)換上的動作完成之后就執(zhí)行入口動作。例如,如果 CD播放機處于翻開狀態(tài),這時按下播放按鈕
21、,會關(guān)閉抽屜并激發(fā)到正在 播放狀態(tài)的轉(zhuǎn)換。結(jié)果正在播放狀態(tài)變成激活的,正在播放狀態(tài)中的入口動作會立即被執(zhí)行。文檔來自于網(wǎng)絡(luò)搜索狀態(tài)還可以有 出口動作,只要離開該狀態(tài)的轉(zhuǎn)換激發(fā)時就會執(zhí)行。圖10.6中的出口動作表示只要執(zhí)行了引起停止 CD播放的動作,首先發(fā)生的事情就是提起CD播放機的播放頭。文檔來自于網(wǎng)絡(luò)搜索圖10.6 入口和出口動作注意,自轉(zhuǎn)換被看作狀態(tài)改變。 當(dāng)一個狀態(tài)上的自轉(zhuǎn)換激發(fā)時,這個狀態(tài)暫時不再是激活的,然后被再激活。這意味著,當(dāng)沿著自轉(zhuǎn)換前進時,如果該狀態(tài)存在入口動作和出口動作,那么首先執(zhí)行出口動作,接著執(zhí)行入口動作。在圖10.6中,這意味著當(dāng)CD正在播放時按下播放按鈕的結(jié)果是播放
22、頭回到當(dāng)前曲目的開頭,從而重新開始這個曲目。實際上很多CD播放機都展現(xiàn)出了這種行為。文檔來自于網(wǎng)絡(luò)搜索10.6活動顯然,當(dāng)處于正在播放狀態(tài)時,CD播放機正在做某些事情,即播放 CD的當(dāng)前曲目。要花費時間完成的延續(xù)的操作可以表示為狀態(tài)中的活動(activity )。和動作一樣,活動也寫在 狀態(tài)之中,前面加上"do標記,如圖10.7所示。文檔來自于網(wǎng)絡(luò)搜索Playing=rty,' find start MLrack; Icwe r圖10.7播放曲目的活動動作和活動之間的區(qū)別是這樣的, 動作被認為是瞬時的, 活動不同,是發(fā)生在一段延續(xù) 的時期之內(nèi)。當(dāng)狀態(tài)成為激活狀態(tài)時,它的入口動
23、作被執(zhí)行,然后開始它的活動, 并且在狀態(tài)處于激活的整個期間該活動都持續(xù)運行。 文檔來自于網(wǎng)絡(luò)搜索在對象能夠響應(yīng)任何事件之前,必須完成入口動作。 然而,活動可以被任何引起激發(fā)離開包含該活動的狀態(tài)的轉(zhuǎn)換的事件所中斷。例如,在曲目結(jié)束之前如果檢測到“停止事件,那么播放曲目的活動會被中斷并停止。當(dāng)離開一個狀態(tài)的轉(zhuǎn)換激發(fā)時, 在執(zhí)行出口動作之前,活動的執(zhí)行被中斷。文檔來自于網(wǎng)絡(luò)搜索完成轉(zhuǎn)換除了被事件中斷,一些活動會自動地結(jié)束。例如,對圖10.7中的正在播放狀態(tài)中的活動,如果到了曲目結(jié)束時就會出現(xiàn)這種情況。在某些情況下,活動終止會引起狀態(tài)轉(zhuǎn)換,狀態(tài)圖應(yīng)該指定接下來哪個狀態(tài)成為激活狀態(tài)。文檔來自于網(wǎng)絡(luò)搜索血
24、ariwu track OHjnt圖10.8完成轉(zhuǎn)換可以利用完成轉(zhuǎn)換(completion transition )做到這點。完成轉(zhuǎn)換是沒有事件標注的轉(zhuǎn)換。在狀態(tài)的內(nèi)部活動正常終止,沒有被外部事件中斷時,完成轉(zhuǎn)換可以觸發(fā)。 圖10.8顯示了 CD播放機具有兩個完成轉(zhuǎn)換的正在播放狀態(tài),一個轉(zhuǎn)換從正在播放狀態(tài)通向關(guān)閉狀態(tài),另一個是正在播放狀態(tài)上的自轉(zhuǎn)換。當(dāng)CD播放機正在播放時,用戶可以按下播放或停止按鈕中斷當(dāng)前曲目,如果這兩個事件都沒有被檢測到,當(dāng)前曲目最后會結(jié)束。在這種情況下,沒有檢測到外部事件,所以僅有完成轉(zhuǎn)換是激發(fā)的候選轉(zhuǎn)換。下來發(fā)生什么將取決于剛剛結(jié)束的曲目是否是CD的最后一個曲目。文檔來
25、自于網(wǎng)絡(luò)搜索完成轉(zhuǎn)換帶有監(jiān)護條件以區(qū)分這兩種情況。如果剛剛播放完了最后一個曲目,到關(guān)閉狀態(tài)的轉(zhuǎn)換將激發(fā),CD播放機將完全停止播放。否那么,將激發(fā)自轉(zhuǎn)換:曲目計數(shù)器遞增,再 次進入正在播放狀態(tài),CD播放機將開始播放 CD上的下一個曲目。 文檔來自于網(wǎng)絡(luò)搜索內(nèi)部轉(zhuǎn)換如上所述,自轉(zhuǎn)換被認為是狀態(tài)改變,所以如果圖10.8中的任一個自轉(zhuǎn)換激發(fā),正在播放狀態(tài)中的活動將終止, 并且在再次進入該狀態(tài)之前將執(zhí)行狀態(tài)的出口動作,然后執(zhí)行入口動作,重新開始狀態(tài)的活動。文檔來自于網(wǎng)絡(luò)搜索有時,需要對讓對象停在同一狀態(tài),但是不觸發(fā)狀態(tài)的改變以及入口與出口動作的執(zhí)行的這樣的事件建模。例如,假定CD播放機有一個“信息(in
26、fo )按鈕,當(dāng)按下時顯示當(dāng)前曲目剩余的時間,其發(fā)生應(yīng)該不中斷正在進行的曲目播放。文檔來自于網(wǎng)絡(luò)搜索這可以作為正在播放狀態(tài)中的內(nèi)部轉(zhuǎn)換來建模。內(nèi)部轉(zhuǎn)換寫在狀態(tài)之中, 標注為引起該轉(zhuǎn)換的事件的名字,如圖10.9所示。和自轉(zhuǎn)換不同,內(nèi)部轉(zhuǎn)換不會引起狀態(tài)的改變,因此也 不會觸發(fā)入口和出口動作。文檔來自于網(wǎng)絡(luò)搜索/Playmgwitiy.1' jind siait MMadxit rai 黃da1 pUy track由甲尊bneci圖10.9有內(nèi)部轉(zhuǎn)換的狀態(tài)10.7組合狀態(tài)圖10.5相當(dāng)混亂和難以理解,而且其中還存在著一些冗余,某些轉(zhuǎn)換以實質(zhì)上相同的形式出現(xiàn)了不止一次。 如果狀態(tài)圖要在實際中可
27、用于復(fù)雜系統(tǒng),就需要某些簡化圖的方法。通過允許一個狀態(tài)包含假設(shè)干 子狀態(tài),提供了一種這樣的技術(shù)。這些子狀態(tài),因為它們共享了某些特性,這些特性可以更簡明地表示為單獨一個“超狀態(tài)的特性,而將這些子狀態(tài)組合成 一組放入一個狀態(tài)中。文檔來自于網(wǎng)絡(luò)搜索狀態(tài)可以和其他狀態(tài)共享的一個性質(zhì)是它們的行為,或換句話說是它們參與的轉(zhuǎn)換。例如,當(dāng)CD播放機處于翻開或關(guān)閉狀態(tài)時,如果抽屜中有CD,它對播放事件的響應(yīng)是一樣的,即轉(zhuǎn)到正在播放狀態(tài),并播放 CD。稍不明顯的是,即使沒有 CD的時候,響應(yīng)也是相同的: 播放機結(jié)束于關(guān)閉狀態(tài)。這可能涉及狀態(tài)的改變,也可能不涉及,取決于抽屜原先是翻開的 或關(guān)閉的,但是事件的實際結(jié)果
28、是相同的。文檔來自于網(wǎng)絡(luò)搜索圖10.10所示的CD播放機的狀態(tài)圖用超狀態(tài)析出了這個公共行為。圖中引入了一個稱為“未播放(not playing )"的新狀態(tài),而翻開和關(guān)閉狀態(tài)現(xiàn)在顯示為這個新狀態(tài)的子狀態(tài)。“未播放狀態(tài)通常稱為是由這兩個嵌套的子狀態(tài)組成的組合狀態(tài)(composite state)。文檔來自于網(wǎng)絡(luò)搜索這個新狀態(tài)的存在只是為了將 CD播放機的相關(guān)狀態(tài)分組在一起,并沒有引入任何新行 為的可能性。組合狀態(tài)具有下面的特性。第一,如果組合狀態(tài)是激活的,那么它的子狀態(tài)中只有一個必須也是激活的。所以在圖10.10中,如果CD播放機沒有播放,那么它必須處于打開或關(guān)閉兩個狀態(tài)中的一個。文檔
29、來自于網(wǎng)絡(luò)搜索第二,在對象處于組合狀態(tài)時檢測到的事件可以觸發(fā)從組合狀態(tài)本身出發(fā)的轉(zhuǎn)換,或者從當(dāng)前激活的它的子狀態(tài)出發(fā)的轉(zhuǎn)換。例如,假設(shè)CD播放機處于關(guān)閉狀態(tài)。如果檢測到一個裝入事件,將激發(fā)通向翻開狀態(tài)的轉(zhuǎn)換,而翻開狀態(tài)將成為激活的。然而,這是未播放狀態(tài)的一個內(nèi)部轉(zhuǎn)換,所以它仍然是有效的,只不過有一個不同的激活子狀態(tài)。文檔來自于網(wǎng)絡(luò)搜索play no CD圖10.10 使用子狀態(tài)的CD播放機但是假設(shè)檢測到的是播放事件。不存在從關(guān)閉狀態(tài)出發(fā)的標注為"播放的轉(zhuǎn)換,但是有從未播放狀態(tài)出發(fā)的這樣的轉(zhuǎn)換。因為這個未播放狀態(tài)也是激活的,所以這些轉(zhuǎn)換將被激活,并且根據(jù)抽屜中是否有 CD,它們之中的一
30、個或另一個將被激發(fā)。如果有 CD,正在播放 狀態(tài)將變成激活狀態(tài)。如果沒有 CD,關(guān)閉狀態(tài)將變成激活的,不過是通過從未播放狀態(tài)出 發(fā)的自轉(zhuǎn)換。文檔來自于網(wǎng)絡(luò)搜索子狀態(tài)完全是正常的狀態(tài),并且到達它們的轉(zhuǎn)換能夠自由地穿過超狀態(tài)的邊界。圖10.10中的從正在播放狀態(tài)出發(fā)的停止和裝入轉(zhuǎn)換說明了這個特性。它們穿過了 “未播放狀態(tài)的邊界,但是在形式上和含意上對圖 10.5都沒有改變。轉(zhuǎn)換也可以連接一個超狀態(tài)中的假設(shè)干子 狀態(tài),如翻開狀態(tài)和關(guān)閉狀態(tài)之間的裝入轉(zhuǎn)換所例如的一樣。最后,轉(zhuǎn)換也可以從子狀態(tài)到達超狀態(tài)之外的一個狀態(tài),盡管圖10.10中沒有包含相應(yīng)的例子。文檔來自于網(wǎng)絡(luò)搜索組合狀態(tài)的特性組合狀態(tài)中的嵌套
31、狀態(tài)形成了一種“子狀態(tài)圖,并且,除了普通的狀態(tài),組合狀態(tài)還可以包含初始狀態(tài)和終止?fàn)顟B(tài)。組合狀態(tài)中的初始狀態(tài)表示如果到達組合狀態(tài)的轉(zhuǎn)換終止于 組合狀態(tài)的邊界時,該默認子狀態(tài)即成為激活狀態(tài)。組合狀態(tài)中的終止?fàn)顟B(tài)說明狀態(tài)中正在進行的活動已經(jīng)完成。到達終止?fàn)顟B(tài)使得從組合狀態(tài)出發(fā)的完成轉(zhuǎn)換能夠激發(fā)。文檔來自于網(wǎng)絡(luò)搜索組合狀態(tài)也可以有自己的入口和出口動作。這些狀態(tài)被激活的方式與簡單狀態(tài)每當(dāng)狀態(tài)變成激活的或不再是激活的時方式完全相同。文檔來自于網(wǎng)絡(luò)搜索例如,假設(shè)按下CD播放機上的暫停按鈕會引起播放被中斷。當(dāng)再次按下這個按鈕時,從暫停的位置開始繼續(xù)播放,也就是說,和按下播放按鈕的情況不同,曲目不用重新開始。圖
32、10.11中的狀態(tài)圖模擬了這種行為。文檔來自于網(wǎng)絡(luò)搜索通過下面一些詳細的事件序列可以更好地理解這個圖。假設(shè)CD播放機處于未播放狀態(tài)而且抽屜中有CD的時候,按下了播放按鈕,那么標注為“播放的轉(zhuǎn)換將激發(fā),使標記為“忙碌busy的狀態(tài)成為激活狀態(tài)。因而執(zhí)行該狀態(tài)的入口動作,定位到當(dāng)前曲目的開 頭。但是,這個轉(zhuǎn)換沒有指定忙碌狀態(tài)的哪個子狀態(tài)變成激活的,所以從初始狀態(tài)到正在播放狀態(tài)的轉(zhuǎn)換激發(fā),使正在播放狀態(tài)成為激活狀態(tài)。因此,開始播放當(dāng)前曲目的活動。文檔來自于網(wǎng)絡(luò)搜索如果用戶沒有做任何事情打斷這個過程,在曲目結(jié)束時,忙碌狀態(tài)中從正在播放狀態(tài)到終止?fàn)顟B(tài)的完成轉(zhuǎn)換將激發(fā),這是狀態(tài)的活動終止時的正常行為。接著
33、觸發(fā)從組合狀態(tài)出發(fā)的一個完成轉(zhuǎn)換。假設(shè)還有另外的曲目要播放,將激發(fā)忙碌狀態(tài)上的自轉(zhuǎn)換,曲目計數(shù)器遞增,并再次進入忙碌狀態(tài)。如前所述,這將引起定位到新曲目的開頭并開始播放。文檔來自于網(wǎng)絡(luò)搜索現(xiàn)在,假設(shè)用戶在曲目結(jié)束之前按下了暫停按鈕,這將中斷播放曲目的活動,并引起到達“暫停paused狀態(tài)的轉(zhuǎn)換激發(fā)。當(dāng)用戶再次按下暫停按鈕時,回到正在播放狀態(tài)的 轉(zhuǎn)換激發(fā),并重新開始播放該曲目的活動。然而,在這種情況下,所有的轉(zhuǎn)換都是忙碌狀態(tài)內(nèi)部的,所以不會觸發(fā)定位到曲目開頭的入口動作。因此,播放頭不會移動,播放是從中斷的那點重新開始,如所需要的那樣。文檔來自于網(wǎng)絡(luò)搜索10.8歷史狀態(tài)假設(shè)CD播放機的行為如同圖1
34、0.11所描述的,并且用戶在CD播放機處于暫停狀態(tài)時按下 了播放按鈕,那么這將激發(fā)忙碌狀態(tài)上的標記為“播放的自轉(zhuǎn)換,因而將退出暫停狀態(tài), 再次進入忙碌狀態(tài)。 入口動作將導(dǎo)致找到曲目的開頭,因為自轉(zhuǎn)換只是通向組合狀態(tài)的,因此沿著從初始狀態(tài)出發(fā)的轉(zhuǎn)換前進,使機器停留在正在播放狀態(tài),播放CD。文檔來自于網(wǎng)絡(luò)搜索但是,假設(shè)CD播放機展現(xiàn)出的實際行為不是這樣的,而是在CD播放機暫停時按下播放按鈕重新開始該曲目,但播放機仍然處于暫停狀態(tài)。那么,重新開始播放之前,用戶必須再 次按下暫停按鈕。對此建模的一種方法是將忙碌狀態(tài)上標注為“播放的自轉(zhuǎn)換用兩個自轉(zhuǎn)換代替,一個標注在正在播放狀態(tài)上,一個標注在暫停狀態(tài)上。
35、文檔來自于網(wǎng)絡(luò)搜索然而,如果到組合狀態(tài)的轉(zhuǎn)換能夠“記住上次組合狀態(tài)激活時哪個子狀態(tài)是激活的,并能夠自動返回到那個子狀態(tài),就可能防止重復(fù)同樣的轉(zhuǎn)換。如果CD播放機是在播放,那么按下“播放它應(yīng)該從曲目開始繼續(xù)播放, 但如果播放機暫停, 那么它將一直暫停到再次 按下暫停按鈕。文檔來自于網(wǎng)絡(luò)搜索通過使用如圖10.12所示的歷史狀態(tài)可以到達這個效果。歷史狀態(tài)由圓圈中一個大寫字母“H表示,并且只能出現(xiàn)在組合狀態(tài)之內(nèi)。到達歷史狀態(tài)的轉(zhuǎn)換引起組合狀態(tài)中最近的 激活子狀態(tài)再次成為激活的。于是,如果在CD播放機暫停時按下“播放按鈕,將沿忙碌狀態(tài)上的自轉(zhuǎn)換進行, 終止在歷史狀態(tài)。這將引起一個到上個激活子狀態(tài)的隱含轉(zhuǎn)
36、換,在這個例子中即暫停狀態(tài),如同所需要的那樣。文檔來自于網(wǎng)絡(luò)搜索圖10.12 歷史狀態(tài)在CD播放機暫停時,如果按下了停止按鈕,隨后按下“播放,圖10.12規(guī)定,CD播放機將回復(fù)到正在播放狀態(tài)。如果要求它應(yīng)該仍然是暫停的,即使已被停了下來的播放又要再開始,這可以通過將這個播放轉(zhuǎn)換的末端從忙碌狀態(tài)的邊界延伸到歷史狀態(tài)來建模。文檔來自于網(wǎng)絡(luò)搜索這引發(fā)了一個問題,如果歷史狀態(tài)是忙碌狀態(tài)的第一個激活子狀態(tài),將出現(xiàn)什么情況: 根據(jù)定義,在這種情況下應(yīng)該沒有記憶的歷史。在這種情況下,我們必須指定一個默認狀態(tài)成為激活的。這可以通過從歷史狀態(tài)向需要的默認狀態(tài)畫一個無標注的轉(zhuǎn)換實現(xiàn),在這個例子中,默認的是正在播放
37、狀態(tài)。文檔來自于網(wǎng)絡(luò)搜索10.9 CD播放機總結(jié)圖10.13顯示了一個描述CD播放機的行為的完整的狀態(tài)圖,結(jié)合了本章討論的許多要 點。這個圖源于圖8.10和 8.12的合并。在“未播放狀態(tài)中參加了一個初始狀態(tài),還參加了 另一個歷史狀態(tài),表示在沒有 CD播放時按下停止按鈕沒有作用,不會引起播放機的狀態(tài)改 變。文檔來自于網(wǎng)絡(luò)搜索%ot P ay ins對這個圖進一步的擴充和修改建議作為本章后面的習(xí)題。Busyfind tradi start廠=Play mgi 劃 play)(1L、PausedJstop=*play CDlast trackIjncremOTl iraACosedfew#bidO
38、penI圖10.13 CD播放機完整的狀態(tài)圖10.10實際中的動態(tài)建模本節(jié)舉例說明一個有用的構(gòu)造狀態(tài)圖的過程,并以此說明來自交互圖的信息如何能夠用以導(dǎo)出狀態(tài)圖。使用的例子是下面幾段描述的自動售票機。文檔來自于網(wǎng)絡(luò)搜索售票機可以接受來自乘客的貨幣和其他輸入,并且在成功交易結(jié)束時輸出需要的車票以及要找的零錢。沒有交易在進行時,機器顯示信息“需要準確錢數(shù),或者“可找零錢。顯示的信息決定了下一位顧客為所選的車票或是必須輸入所需要的準確錢數(shù)的貨幣付款,或是在輸入超過所需要的錢數(shù)時機器能夠找零。 文檔來自于網(wǎng)絡(luò)搜索機器的界面由假設(shè)干按鈕組成,每個按鈕對應(yīng)給定的一種車票。如果用戶按下這些按鈕中 的一個,機器
39、就顯示要輸入的錢數(shù),即車票的價錢。隨著用戶向機器輸入貨幣,顯示的數(shù)目就根據(jù)用戶輸入的數(shù)量減少。輸入的錢數(shù)一超過或等于車票的價錢,就發(fā)生下面的兩件事情之一。如果機器最初顯示的信息是“可找零錢,就輸出需要的車票以及所需找的零錢。如果顯示的信息是“需要準確錢數(shù),并且用戶輸入的恰好是所需錢數(shù)的貨幣,將只出售一張 車票;如果用戶輸入了過多的貨幣,所有輸入的貨幣都將返回。文檔來自于網(wǎng)絡(luò)搜索在交易開始,用戶可以選擇在選擇車票種類之前先輸入貨幣。如果在最終選擇一種車票時,已經(jīng)輸入了足夠為該車票付款的貨幣,就像前面的情況一樣輸出車票和找的零錢。如果輸入的錢數(shù)少于所需車票的價錢,機器將顯示剩余的費用并像上面的情況
40、一樣繼續(xù)進行。文檔來自于網(wǎng)絡(luò)搜索在任何情況下,如果在30秒期間沒有收到用戶的輸入,交易將終止,已經(jīng)輸入了多少錢都會返回給顧客?!叭∠粹o也可以使用戶能夠明確地說明終止交易。文檔來自于網(wǎng)絡(luò)搜索狀態(tài)機和事件序列狀態(tài)圖概括了一個對象能夠接收的所有可能的事件序列。然而,要識別為準確建立對象的行為模型所需要的所有狀態(tài),有時相當(dāng)困難。這里介紹的技術(shù)通過一次只考慮一個事件序列,逐步建立起所需狀態(tài)圖的完整描述,防止了這種困難。文檔來自于網(wǎng)絡(luò)搜索從交互圖中可以獲得多個各自獨立的事件序列。到達一個對象的消息, 如果按照對象接收它們的順序組織起來,就構(gòu)成了這樣的一個序列。在該對象的狀態(tài)圖上,必須可能找到對 應(yīng)于各個
41、這樣的事件序列的路徑。 文檔來自于網(wǎng)絡(luò)搜索在構(gòu)造狀態(tài)圖時,我們可以從選取一個序列, 并定義一個只表示該序列的簡單的狀態(tài)圖 開始。然后,將更多的事件序列集成到這個初步的狀態(tài)圖中,用這種方法,可以用逐步的方式建立起一個完整的狀態(tài)圖。文檔來自于網(wǎng)絡(luò)搜索本節(jié)剩下的局部將以售票機的例子說明這個過程。將考慮售票機設(shè)計的一些典型事務(wù)并逐步地建立起一個完整的狀態(tài)圖。將不畫出正式的對象交互圖,因為這些事務(wù)中只涉及一個對象,即售票機本身,而且發(fā)送的消息只是由用戶產(chǎn)生的事件序列。文檔來自于網(wǎng)絡(luò)搜索付款之前選擇車票假設(shè)用戶首先選擇了特定種類的車票,然后相繼輸入了三個硬幣。 這三個硬幣的總值超過了車票的價錢,所以機器輸
42、出車票以及需要找的零錢,并回到空閑狀態(tài),等待下一次交易。在這種情況下,機器接收到的是一個四個事件的序列:一個“車票ticket事件,隨后三個“硬幣coin事件。這些事件中的每個都有相關(guān)的數(shù)據(jù),即所給出的所選車票的價錢 和所輸入的各個硬幣的價值,但是我們將暫時忽略這些細節(jié)。文檔來自于網(wǎng)絡(luò)搜索通過假定每個事件對應(yīng)于兩個狀態(tài)之間的一個轉(zhuǎn)換,可以簡單地為任何單獨的事件序列畫出一個非常簡易的狀態(tài)圖;在實行中,我們在序列的開始和結(jié)束以及每對事件之間放上狀態(tài)。在現(xiàn)在的例子中,我們得到圖10.14所示的狀態(tài)圖。因為這只是一個初步的圖,所以沒有試圖為這些狀態(tài)加上標注。文檔來自于網(wǎng)絡(luò)搜索圖10.14售票機的初步狀
43、態(tài)圖盡管這個狀態(tài)機是所考慮的單個事件序列的精確的模型,但是還需要對它進行一些調(diào) 整,才足以作為售票機的根底。首先,圖10.14只定義了一次交易,然而售票機能夠一個接一個地執(zhí)行重復(fù)的交易。為了對此建模,我們可以合并圖10.14中的第一個和最后一個狀態(tài)。因為這些狀態(tài)代表了沒有正在進行交易的情形,我們將這個新狀態(tài)標記為“空閑Idle 。文檔來自于網(wǎng)絡(luò)搜索其次,在上面例如的交易中,硬幣的數(shù)目實質(zhì)上是任意的。在一次交易中可以輸入任意數(shù)目的硬幣:需要確實切數(shù)目取決于所選車票的價錢和輸入硬幣的價值。需要用某種循環(huán)來表示輸入任意數(shù)目硬幣的可能性。這可以通過將圖10.14中的三個中間的狀態(tài)合成為一個帶有自轉(zhuǎn)換的
44、狀態(tài)實現(xiàn)。文檔來自于網(wǎng)絡(luò)搜索最初交易的狀態(tài)圖的一個改良版本如圖10.15所示,其中并入了這些修改。這個圖中只包含兩個狀態(tài),它是由如上面所闡述的圖10.14最初的五個狀態(tài)導(dǎo)出的。機器從空閑狀態(tài)出發(fā),當(dāng)用戶選擇車票時,沿著通向“付票款狀態(tài)的轉(zhuǎn)換前進。在隨后輸入硬幣的時候,可 能發(fā)生兩件事情之一。 如果輸入的錢幣總量足夠付清所選車票的價錢,那么跟隨的是回到空閑狀態(tài)的轉(zhuǎn)換。但是如果還需要更多的錢,就沿著付款狀態(tài)上的自轉(zhuǎn)換循環(huán),并且必須輸入更多的硬幣才能繼續(xù)處理。文檔來自于網(wǎng)絡(luò)搜索ocinanaiMil)riolftncnhjcoin :aT'jur t廠'$5ueMiand+ran圖1
45、0.15改良的狀態(tài)圖圖10.15使用了前面介紹的一些狀態(tài)圖表示法特征來說明機器在這次交易中的行為。首先,各種消息附上了參數(shù)以傳送車票的價錢和輸入機器的每個硬幣的價值。其次,有兩個從付款狀態(tài)出發(fā)的標注為“硬幣的轉(zhuǎn)換。它們由一個非形式的監(jiān)護條件區(qū)分,該條件檢查是否已經(jīng)輸入了足夠的錢為所選車票付款。最后,在回到空閑狀態(tài)的轉(zhuǎn)換上還顯示了動作,如果已經(jīng)輸入了足夠的錢,機器將執(zhí)行該動作。在這個例子中,我們假定機器能夠輸出需要找 的零錢。文檔來自于網(wǎng)絡(luò)搜索選擇車票之前付款我們現(xiàn)在已經(jīng)處理了一種可能的交易,并構(gòu)造了一個初步的狀態(tài)圖。下一步是考慮第二種交易,并盡可能將它集成到已有的狀態(tài)圖中,并在必要時擴充狀態(tài)圖
46、。文檔來自于網(wǎng)絡(luò)搜索除了首先選擇車票, 售票機的說明還允許用戶先輸入錢,再選擇需要的車票。 對應(yīng)于這個交易的事件序列是以假設(shè)干硬幣事件開始,然后在接收到車票事件時輸出車票和找的零錢, 并結(jié)束交易。我們可以假定,交易從圖10.15中已經(jīng)標識的空閑狀態(tài)開始。然而,第一個事件存在一個問題,因為圖10.15中不包含從空閑狀態(tài)出發(fā)的標注為“硬幣的轉(zhuǎn)換。因此需 要用一個適當(dāng)?shù)霓D(zhuǎn)換擴充狀態(tài)圖,通向一個新狀態(tài)。文檔來自于網(wǎng)絡(luò)搜索同前面的情況中一樣, 可以輸入任意數(shù)目的硬幣,而我們可以利用這個新狀態(tài)上的自轉(zhuǎn)換對此建模。最后,會接收一個車票事件, 而機器將輸出票和找的零錢,并返回到空閑狀態(tài)。圖10.16所示的狀態(tài)
47、圖增加了這些內(nèi)容。文檔來自于網(wǎng)絡(luò)搜索oin(ani(Hrit'icoin(*nQifiti not enough圖 10.16合并第二個交易集成交易至今所考慮的兩個交易互為鏡像。在第一個交易中,在輸入硬幣之前選擇車票類型,而在第二個交易中,輸入所有硬幣之后選擇車票類型。然而,售票機的說明書允許第三種可能性,在選擇車票類型之前先輸入一些硬幣,不過還需要更多的硬幣補足票價。圖10.16并不滿足這種可能性:一旦已經(jīng)輸入硬幣, 選擇車票類型將使?fàn)顟B(tài)機回到空閑狀態(tài),沒有輸入更多硬幣繼續(xù)交易的可能性。文檔來自于網(wǎng)絡(luò)搜索需要的是增加一個標注為“車票的轉(zhuǎn)換,從圖10.16中的“插入硬幣狀態(tài)出發(fā)。這個轉(zhuǎn)
48、換應(yīng)該用一個條件和已有的轉(zhuǎn)換區(qū)分開。必要的條件和在用戶付票款時區(qū)分插入硬幣是否會引起機器回到空閑狀態(tài)的條件相同,即是否已經(jīng)輸入了足夠的錢數(shù)付清所選車票的價 錢。文檔來自于網(wǎng)絡(luò)搜索這個新的轉(zhuǎn)換可以通向一個新狀態(tài):為了滿足售票機的說明,新狀態(tài)將必須允許輸入硬幣直到總計到達票價,隨之將售出車票,機器返回到空閑狀態(tài)。然而,這正好是已有的“付 票款狀態(tài)提供的行為,所以可以定義新的轉(zhuǎn)換到達這個狀態(tài),如圖10.17所示。狀態(tài)的名字也有所改變,以便更準確地反映它們之間的相關(guān)差異,即用戶是否已經(jīng)選擇了車票類型。文檔來自于網(wǎng)絡(luò)搜索1 1coinfamouri)丿«no vgi .'issuel/
49、1Ho Ticket SelectedTicketSelectedtcketfcost) 血t moi才LToeiniafTKiinticoir ararti wt enough圖10.17集成兩個交易從任何給定的事件序列對應(yīng)于穿過狀態(tài)圖的一條連通路徑的意義上來說,圖10.17的狀態(tài)圖概括了在以輸出車票結(jié)束的交易期間用戶能夠產(chǎn)生的所有可能的事件序列。在一個交易中,可以輸入任意數(shù)目的硬幣, 車票類型可以選擇一次, 并且這些事件能夠以任何次序發(fā)生。 文檔來自于網(wǎng)絡(luò)搜索然而,售票機的用戶的行為并不總是如此明智的方式進行的。容易想象,一個用戶選擇了一種車票,在輸入硬幣之前又改變了主意,又選擇了另一種車
50、票。圖10.17的狀態(tài)圖不允許這種可能性。一旦選擇了車票種類,機器就進入"已選車票(ticket selected)狀態(tài),而且并沒有從這個狀態(tài)出發(fā)的車票轉(zhuǎn)換。在用戶實際能做的和狀態(tài)圖所規(guī)定的之間在這里似乎存在一個矛盾。 文檔來自于網(wǎng)絡(luò)搜索解釋這種現(xiàn)象的一種方法是注意盡管用戶實際上可以重復(fù)地按下車票選擇按鈕,但是這未必意味著機器接收了 “車票事件。例如,情況可能是一旦進入了“已選車票狀態(tài),就 使車票選擇按鈕無效,并且只有再次到達空閑狀態(tài)時才重新激活。文檔來自于網(wǎng)絡(luò)搜索如果不是這樣,就需要在狀態(tài)圖中給出額外車票事件的明確說明。這能夠以多種方式實現(xiàn),如果這樣的事件是不被接受的,可能通過引入
51、一個錯誤狀態(tài)實現(xiàn),或者如果是允許的, 用“已選車票狀態(tài)上的一個自轉(zhuǎn)換實現(xiàn)。當(dāng)然,在實際例子中,在這些選項之間的選擇將 由正在建模的售票機的實際行為決定。文檔來自于網(wǎng)絡(luò)搜索圖10.17準確地模擬了售票機的根本行為。為了完成模型,說明能夠終止交易的其他方 式,即由于按下取消按鈕或者由于超時而終止,以及在機器要求輸入恰好等于票價的情況下的其他行為,都是必要的。在完成售票機狀態(tài)圖之前,將先介紹對這些特征建模所需要的符號。文檔來自于網(wǎng)絡(luò)搜索10.11時間事件如果30秒都沒有收到來自用戶的輸入, 售票機將超時:當(dāng)前交易將被終止,輸入的錢將 返回給顧客。超時應(yīng)該作為一個轉(zhuǎn)換建模, 因為它將改變售票機的狀態(tài),
52、 從交易中的一個中 間狀態(tài)回到空閑狀態(tài)。然而,應(yīng)該用什么事件標注這樣一個轉(zhuǎn)換并不明顯:畢竟,要點是這樣的轉(zhuǎn)換必須在沒有檢測到事件的時候精確地激發(fā)。UML定義了專門的 時間事件,可以用于這些情況中。圖10.18顯示了一個轉(zhuǎn)換,在進入“未選擇車票( no ticket selected)狀態(tài)30 秒后將激發(fā)。這可以如此理解,想象每個狀態(tài)的一個隱含活動是執(zhí)行一個計時器,在每次進入該狀態(tài)時復(fù)位。一旦計時器已經(jīng)運行了時間事件所規(guī)定的一段時間,就激發(fā)從狀態(tài)出發(fā)的標注有時間事件的轉(zhuǎn)換。在圖10.18中,注意,每次輸入硬幣時計時器復(fù)位,因為自轉(zhuǎn)換被認為是狀態(tài)的改變,并觸發(fā)狀態(tài)的入口動作。文檔來自于網(wǎng)絡(luò)搜索oo
53、irXamMrit)圖10.18 時間事件在關(guān)鍵字“ after之后,可以給出任何一段時間作為參數(shù)。時間事件的另一種形式由關(guān) 鍵字"when后跟一個指定的時間點組成,這定義了一個在到達規(guī)定時間時將激發(fā)的轉(zhuǎn)換。 文檔來自于網(wǎng)絡(luò)搜索10.12活動狀態(tài)在圖10.17中,兩個轉(zhuǎn)換在交易順利完成后回到空閑狀態(tài)。在每種情況中,都有必要檢查機器是否能夠退回任何需要找的零錢。如果可以,應(yīng)該輸出找的錢和車票,如果不能,應(yīng)該退回輸入的錢。文檔來自于網(wǎng)絡(luò)搜索這個行為可以用一對具有適當(dāng)監(jiān)護條件和動作的轉(zhuǎn)換表示,但這些將不得不在每個回到空閑狀態(tài)的路線上重復(fù)。為了防止這種重復(fù),可以使用活動狀態(tài)(activity
54、 state )簡化狀態(tài)圖的結(jié)構(gòu),如圖10.19所示。文檔來自于網(wǎng)絡(luò)搜索活動狀態(tài)表示對象執(zhí)行某些內(nèi)部處理的一段時間。照此,它在狀態(tài)圖上表示為只包含一個活動的狀態(tài)。在圖10.19中,只要顧客對一個交易的輸入一旦完成,活動狀態(tài)就成為激活 的,對應(yīng)于機器計算它是否能夠返回為完成該交易所需要找的零錢。文檔來自于網(wǎng)絡(luò)搜索圖10.佃活動狀態(tài)活動狀態(tài)表示的內(nèi)部處理通常不能被外部事件中斷,在這些情況下,離開活動狀態(tài)的唯一轉(zhuǎn)換將是完成交易。在圖10.19中,有兩個這樣的轉(zhuǎn)換,通過說明是否有找零頭的監(jiān)護條件區(qū)分。在每個情況下,這些轉(zhuǎn)換還帶有相應(yīng)的動作。文檔來自于網(wǎng)絡(luò)搜索活動狀態(tài)在狀態(tài)圖中應(yīng)該慎用,因為狀態(tài)圖的目的
55、通常是說明對象對外部事件的響應(yīng),而不是對內(nèi)部處理詳細地建模。然而,有時它們很有用,如在圖10.19中,作為簡化狀態(tài)圖結(jié)構(gòu)的方法。 文檔來自于網(wǎng)絡(luò)搜索10.13售票機總結(jié)圖10.20給出了售票機的一個完整的狀態(tài)圖。它合并了前面幾節(jié)指出的各種要點,還顯示出了用戶在交易中間按下取消按鈕的結(jié)果。文檔來自于網(wǎng)絡(luò)搜索為了減少說明交易由于超時或取消而中斷所需的轉(zhuǎn)換的數(shù)目,圖10.20中包括了一個組合狀態(tài),其意圖是對應(yīng)于交易正在進行的時間段。文檔來自于網(wǎng)絡(luò)搜索10.14小結(jié)-狀態(tài)圖提供了可以在交互圖上說明的對象的行為方面的規(guī)約。狀態(tài)圖說明了對象在整個生命期期間能夠檢測到的事件以及對象對這些事件的響應(yīng)。 一般地,對象展示出依賴于狀態(tài)的行為。狀態(tài)的不同由檢測到一個由對象處于什么狀態(tài)而決定可能有不同結(jié)果的事件來區(qū)分。文檔來自于網(wǎng)絡(luò)搜索檢測到一個事件可以引起一個 轉(zhuǎn)換激發(fā),對象從一個狀態(tài)轉(zhuǎn)到另一個狀態(tài)。監(jiān)護條件 能夠用于表示在特定時刻,一組轉(zhuǎn)換中的哪個轉(zhuǎn)換實際上被激發(fā)。動作說明了對象對
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度民辦學(xué)校教師教學(xué)科研獎勵聘用合同4篇
- 2025版高端汽車零部件模具定制合同4篇
- 二零二五年度企業(yè)電子商務(wù)法律風(fēng)險防范合同
- 2025版砂石開采與環(huán)保治理合同3篇
- 二零二五年度人才招聘居間服務(wù)合同范本(航天行業(yè)適用)2篇
- 二零二五年度圖書館建筑裝飾工程合同范本2篇
- 3 關(guān)節(jié)置換術(shù)止血與抗凝的綜合管理
- 二零二五年度裝配式內(nèi)裝工程承包合同范本4篇
- 2025年度臨街商店攤位租賃與垃圾分類處理合同3篇
- 二零二五年度企業(yè)形象宣傳片創(chuàng)意策劃與執(zhí)行合同
- 2023-2024學(xué)年度人教版一年級語文上冊寒假作業(yè)
- 培訓(xùn)如何上好一堂課
- 2024醫(yī)療銷售年度計劃
- 稅務(wù)局個人所得稅綜合所得匯算清繳
- 人教版語文1-6年級古詩詞
- 上學(xué)期高二期末語文試卷(含答案)
- 軟件運維考核指標
- 空氣動力學(xué)仿真技術(shù):格子玻爾茲曼方法(LBM)簡介
- 中學(xué)英語教學(xué)設(shè)計PPT完整全套教學(xué)課件
- 移動商務(wù)內(nèi)容運營(吳洪貴)項目五 運營效果監(jiān)測
- 比較思想政治教育學(xué)
評論
0/150
提交評論