系統(tǒng)分析狀態(tài)圖_第1頁
系統(tǒng)分析狀態(tài)圖_第2頁
系統(tǒng)分析狀態(tài)圖_第3頁
系統(tǒng)分析狀態(tài)圖_第4頁
系統(tǒng)分析狀態(tài)圖_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2024/8/2111什么是狀態(tài)圖?狀態(tài)圖描述了一個對象或交互過程在它的生命周期中對一系列外界激勵所呈現出的不同狀態(tài)以及它相應的響應和活動狀態(tài)機用狀態(tài)和瞬時過程的變化圖形來表示一個對象對外界激勵下的響應,狀態(tài)機一般附著在一個對象或具體的方法上狀態(tài)圖描述了一個狀態(tài)機,在我們考慮的范圍內,它們是同一件事UML中關于狀態(tài)圖的定義和描述主要是采用DavidHare提出的狀態(tài)圖方法并加上了面向對象的含義2024/8/2122狀態(tài)圖的構成狀態(tài)圖由一組表示狀態(tài)和遷移組成。一個簡單的編輯器可以被看作為一個有限狀態(tài)機,它具有狀態(tài)Empty,Waitingforacommand,和Waitingfortext.事件Loadfile,Inserttext,Insertcharacter,Saveandquit引發(fā)狀態(tài)機中的狀態(tài)的遷移2024/8/2133什么是狀態(tài)?狀態(tài)表示的是一個對象或交互過程中的一個特定階段:滿足了某一個條件,進行某項活動或等待某個事件的發(fā)生,狀態(tài)對應一段有限的時間。狀態(tài)對應于一組對象屬性的值狀態(tài)由一個帶圓角的矩形表示兩個特殊狀態(tài):初始狀態(tài):一個小實心黑圓終止狀態(tài):一個套有小實心黑圓得圓2024/8/2144什么是遷移?一個遷移表示由事件、條件或事件觸發(fā)后狀態(tài)的改變狀態(tài)間的遷移用一根帶箭頭的直線來表示。2024/8/2155.動作可以在狀態(tài)內使用動作表示其行為動作是選取一段輸入且產生一組輸出并最終可改變系統(tǒng)的狀態(tài)動作的執(zhí)行只需要一小段時間且執(zhí)行不可中斷動作可發(fā)生在以下3個位置:當一條遷移被選中時當進入一個狀態(tài)時(entry)當退出一個狀態(tài)時(exit)2024/8/2162024/8/2176.活動一個狀態(tài)可關聯到一個活動,該活動的執(zhí)行與駐留在這一狀態(tài)上的對象的生命周期一樣長動作與活動的區(qū)別:動作的執(zhí)行時間短且不可中斷,而一個活動的執(zhí)行需要一段時間且其執(zhí)行是可以中斷的,其中斷的時機就是該狀態(tài)的一個遷移被時活動使用“do標識”2024/8/2182024/8/2192024/8/21102024/8/21112024/8/21127.內部遷移內部遷移指一個未離開該狀態(tài)的遷移。通過事件觸發(fā)內部遷移,并可出現與這些事件相關聯的動作2024/8/21138.嵌套狀態(tài)圖嵌套簡化了復雜性,可用于取代內部遷移2024/8/21142024/8/2115打電話的狀態(tài)圖2024/8/21169.建模技巧/1狀態(tài)機最經常被用以對一個對象的生命周期中的行為進行建模,特別是在對象具有依賴于狀態(tài)的行為的時候可以具有狀態(tài)機的包括類,子系統(tǒng),用例和接口

(確定實現接口的對象必須滿足的狀態(tài))2024/8/21179.建模技巧/2在實時系統(tǒng)中,狀態(tài)機可以用于進程(capsules)和協議(確定實現協議的對象需要滿足的狀態(tài))并不是所有的對象都需要狀態(tài)機.

如果對象的行為是簡單的,比如說它只是簡單的存儲和獲取數據,對象的行為是狀態(tài)不變的(state-invariant),那么其狀態(tài)機就沒有多少意義對對象的生命周期的建模涉及到三件事情:描述對象需要響應的事件對這些事件的響應過去對當前行為的影響對對象的生命周期的建模也涉及到決定對象響應事件的次序,這種響應始于對象的創(chuàng)建時刻,繼續(xù)直到其銷毀2024/8/21189.建模技巧/3為了對對象的生命周期進行建模:確定狀態(tài)機的背景,是類,用例,還是整個系統(tǒng)如果背景是類或者是一個用例,收集鄰近的類,包括父類或者通過關聯或依賴關系能夠到達的類,這些鄰居是動作的可能的目標,或者是保安條件中包含的內容如果背景是整個系統(tǒng),將焦點放在系統(tǒng)的某一個行為上,然后考慮對象在該方面的生命周期。整個系統(tǒng)的生命周期太大了。建立對象的初始和最終狀態(tài),如果對于初始和最終狀態(tài)有前置條件或后置條件,也要定義它們2024/8/2119確定對象能夠響應的事件,它們可以從對象的接口中找到,在實時系統(tǒng)中,它們可以從對象的協議中找到從初始狀態(tài)到最終狀態(tài),畫出對象的最高層的狀態(tài),將這些狀態(tài)用轉移連接起來,這些連接由特定的事件觸發(fā)確定進入和退出動作通過使用子狀態(tài)能夠擴展和簡化狀態(tài)機2024/8/21209.建模技巧/4檢查是否狀態(tài)機中所有的事件觸發(fā)轉換與由對象實現的接口所期望的事件匹配所有的對象接口期望的事件都包含在狀態(tài)機中在實時系統(tǒng)中,對進程的協議進行同樣的檢查。確定那些明確希望忽略事件的地方(例如延遲事件)2024/8/2121是否狀態(tài)機中的所有的動作得到了包含的對象的關系、方法和操作支持在狀態(tài)圖中進行跟蹤檢查,將它與期待的事件和響應的順序進行比較,搜索那些到達不了的狀態(tài)和“死鎖”狀態(tài)在調整狀態(tài)機圖時,確保語義不變2024/8/21229.建模技巧/5在有選擇的情形下,盡量使用狀態(tài)機的可視化語義而不是寫詳細的轉移說明。例如,不要在一個轉移上列出多個信號,然后用文字說明依據不同的信號來管理不同的控制流;代之以單獨的轉移,由單獨的信號觸發(fā)。2024/8/21239.建模技巧/6狀態(tài)命名根據在一個狀態(tài)中等待或發(fā)生的情況來確定。記住,狀態(tài)不是一個“時間點”,它是狀態(tài)機等待什么事發(fā)生的一段時間。例如‘waitingForEnd’

就比‘end’好;

‘timingSomeActivity’

就比‘timeout’好.不要把狀態(tài)命名成動作2024/8/21249.建模技巧/7一致性命名。給狀態(tài)機中的每一個狀態(tài)和轉換一個唯一的名字;這將使源代碼級的調試更容易小心使用狀態(tài)變量(控制行為的屬性)2024/8/21259.建模技巧/8如果一個圖上5±2狀態(tài),考慮使用子狀態(tài)。一般而言,在通常的情況下十個狀態(tài)可能沒有問題,但是兩個狀態(tài)之間卻有四十個轉換肯定需要重新考慮。我們需要保證狀態(tài)圖是容易理解的根據觸發(fā)事件和/或在轉換上發(fā)生的情況來命名轉換。在選擇名字時,也需要從可理解性的角度出發(fā)2024/8/21269.建模技巧/9當你看到一個選擇點,你需要問一下是否能夠將選擇條件的責任分配給另外一個組件。在這種情況下,發(fā)送者或者其它活動者進行決策,并將帶有決策信息的信號發(fā)送給另外一個對象,該信號的名字要帶有決策信息,例如信號的名字為isFull和isEmpty,而不應該是value和checkingmessagedata)2024/8/21279.建模技巧/10選擇點的命名:在選擇點處的回答問題的命名要采用描述性的方法例如,‘isThereStillLife’或者'isItTimeToComplain'選擇點名字是唯一的:對任何對象,盡力保證選擇點的名字是唯一的(同樣,保持轉換的名字是唯一的)轉換的表達不能過長:如果過長,需要考慮用函數,或者將公共的代碼片斷用函數表示,轉換必須讀起來象高層的偽代碼,例如,如果轉換上的代碼長于25行,可能就太長了2024/8/21289.建模技巧/11動作根據它們的任務命名注意entry和exit動作,很容易發(fā)生修改后,忘了修改它們退出動作可以提供安全特性,例如從‘heaterOn’到heateroff狀態(tài)之間的退出動作,該動作就用以確保狀態(tài)轉換2024/8/21299.建模技巧/12子狀態(tài)必須包含兩個或以上狀態(tài),除非狀態(tài)機是抽象的并將被包含的元素的子類所修飾選擇點必須被用于在動作或轉換的條件邏輯的場合。選擇點容易被看到,而在代碼中表達的條件邏輯是隱藏的,容易被忽略2024/8/21309.建模技巧/13避免下列保安條件:如果一個事件能觸發(fā)多個轉換,沒有一個控制確定對哪一個保安條件首先進行判斷,這樣的情況下,結果是不可預測的多個保安條件都可能是真的,但是只有一個轉換可以遵循,路徑的選擇可能是無法預測的保安條件不是可視化的,很難看到它們的存在2024/8/21319.建模技巧/14不要使狀態(tài)機象流程圖

這種狀態(tài)可能意味著你對一個可能實際上不存在的抽象情形進行了建模:

使用了一個主動類對最好采用被動(或數據)類的行為進行建模采用緊密耦合的數據類和主動類對一個數據類進行建模(例如,數據類被用于傳遞類型信息,但是主動類包含了絕大部分的數據,這些數據本來應該是與數據類相聯系的).

2024/8/2132這種對狀態(tài)機錯誤的應用可以通過以下癥狀來判斷:

消息發(fā)送給自己只是為了重用代碼非常少的狀態(tài),很多的選擇點在狀態(tài)機中沒有一個循環(huán),這種狀態(tài)機在過程控制應用或者控制事件序列是有效的;在分析階段中,它們的出現代表了狀態(tài)機被弱化成流程圖當問題找到后:

使主動類變小從而將職責分得更清楚將更多的行為移到與問題主動類相關的數據類中將更多的行為移到主動類功能中

構造更富有意義的信號而不是依賴于數據2024/8/2133小組作業(yè)航班從Tentative(暫定)開始。有人制定時刻表,確定是否包含這個航班。如果計劃批準,則航班轉入Scheduled狀態(tài)。航班時刻表發(fā)布到Internet上離起飛時間小于60天,該航班開始開始售票,進入Open狀態(tài)可以從航班中增加和刪除旅客,但售出最后一張票,航班就滿了。如果有人退票,則再次開始售票飛機起飛10分鐘前,航班停止售票如果飛機還沒有到達,則航班延遲。若延遲超過4小時,則航班取消。若乘客不足50人,則也把航班取消。如果航班取消,則航空公司要為乘客尋找另一航班。如果飛機到達,則其起飛和著陸,完成這個航班航班從Tentative(暫定)開始。有人制定時刻表,確定是否包含這個航班。如果計劃批準,則航班轉入Scheduled狀態(tài)。航班時刻表發(fā)布到Internet

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論