狀態(tài)圖
1.什么是狀態(tài)圖
狀態(tài)圖是指描述一個實體基于事件反應(yīng)的動態(tài)行為,顯示了該實體如何根據(jù)當(dāng)前所處的狀態(tài)對不同的事件做出反應(yīng)的。通常我們創(chuàng)建一個UML狀態(tài)圖是為了以下的研究目的:研究類、角色、子系統(tǒng)、或組件的復(fù)雜行為。
2.狀態(tài)圖的建模
建立狀態(tài)圖的步驟如下:
(1)確定上下文環(huán)境。狀態(tài)圖是立足于狀態(tài)遷移而進行行為描述的。因此建立狀態(tài)圖時首先要搞清楚狀態(tài)的主體,確定狀態(tài)的上下文環(huán)境。常見的狀態(tài)主體有:類、用例、多個用例和整個系統(tǒng)。
(2)識別狀態(tài)。狀態(tài)主體會表現(xiàn)出一些穩(wěn)定的狀態(tài),它們需要被識別出來,并且標(biāo)記出其中的初始狀態(tài)和結(jié)束狀態(tài)集。在有些情況下,可能會不存在確定的初始狀態(tài)和結(jié)束狀態(tài)。
(3)建立狀態(tài)轉(zhuǎn)換。根據(jù)需求所描述的系統(tǒng)行為,建立各個穩(wěn)定狀態(tài)之間可能存在的轉(zhuǎn)換。
(4)補充詳細(xì)信息,完善狀態(tài)圖。添加轉(zhuǎn)換的觸發(fā)事件、轉(zhuǎn)換行為和監(jiān)護條件等詳細(xì)信息。
在有些情況下也可能會需要建立狀態(tài)圖的層次結(jié)構(gòu)或者進行其他更加復(fù)雜的工作。
例如,針對ATM系統(tǒng)示例,可以按照下面的步驟建立取錢類的狀態(tài)圖:
(1)明確狀態(tài)圖的主體:取錢類。
(2)識別取錢類可能存在的穩(wěn)定狀態(tài):
?、俳邮杖″X請求狀態(tài)。
②身份驗證狀態(tài)。
?、巯蜚y行信息系統(tǒng)提交取錢信息狀態(tài)。
?、芴幚砣″X交易狀態(tài)。
?、萏幚砩矸蒡炞C錯誤狀態(tài)。
⑥處理取錢成功狀態(tài)。
⑦詢問是否進行其他交易。
其中,接收取錢請求為系統(tǒng)的初始狀態(tài)。
(3)建立狀態(tài)轉(zhuǎn)換??赡艿臓顟B(tài)轉(zhuǎn)換如表所示,其中如果第i行第J列的元素被標(biāo)記為y,則表示第i行的狀態(tài)可以轉(zhuǎn)換為第J列的狀態(tài)。
接收取錢請求 | 身份驗證 | 提交信息 | 處理取錢交易 | 處理身份驗證錯誤 | 取錢交易失敗處理 | 詢問是否進行其他交易 | |
接收取錢請求 | Y | Y | |||||
身份驗證 | Y | Y | |||||
提交信息 | Y | Y | |||||
處理取錢交易 | Y | ||||||
處理身份驗證錯誤 | Y | ||||||
取錢交易失敗處理 | Y | ||||||
詢問是否進行其他交易 | Y |
(4)在已識別狀態(tài)和轉(zhuǎn)換的基礎(chǔ)上,添加詳細(xì)的信息說明,建立狀態(tài)圖。