UML建模風(fēng)格 UML狀態(tài)圖表現(xiàn)形式解析
本節(jié)和大家一起學(xué)習(xí)一下UML建模風(fēng)格中的UML狀態(tài)圖,為了便于大家理解本節(jié)通過具體的圖例講解,希望通過本節(jié)的介紹大家對UML狀態(tài)圖的相關(guān)知識有大致的了解。下面讓我們一起來看一下具體介紹吧。
UML建模風(fēng)格之UML狀態(tài)圖
UML狀態(tài)圖描述一個實體基于事件反應(yīng)的動態(tài)行為,顯示了該實體怎么根據(jù)當(dāng)前所處的狀態(tài)對不同的時間做出反應(yīng)的。通常我們創(chuàng)建一個UML狀態(tài)圖是為了以下的研究目的:研究類、角色、子系統(tǒng)、或組件的復(fù)雜行為。建模實時系統(tǒng)。
通用準(zhǔn)則
當(dāng)行為的改動和狀態(tài)有關(guān)時才創(chuàng)建狀態(tài)圖。
敏捷建模(AM)(Ambler2002)的原則--最大化項目干系人的投資--建議你只有當(dāng)模型能夠提供正面價值的時候才創(chuàng)建模型。如果一個實體,比如一個類或組件,表示的行為的順序和當(dāng)前的狀態(tài)無關(guān),那么畫一個UML狀態(tài)圖可能是沒有什么用處的。例如一個SurfaceAddress類就非常簡單,表示了那些你將會在系統(tǒng)中顯示和操作的數(shù)據(jù),因此一個UML狀態(tài)圖就沒有所有相關(guān)之處。而一個Seminar對象就非常的復(fù)雜,學(xué)生注冊這樣一個事件將會根據(jù)他的當(dāng)前狀態(tài)有不同的反應(yīng),就像你在圖1中看到的。
圖⒈班級注冊的一個UML狀態(tài)圖。
把初始狀態(tài)放置在左上角。
如你在圖1所見的,初始狀態(tài)被建模成一個實心圈,把初始狀態(tài)放在左上角反映西方人的閱讀文化的習(xí)慣。
把最終狀態(tài)放置在右下角。
如你在圖1所見,最終狀態(tài)被建模為一個帶邊界的實心圓。把最終狀態(tài)放右下角反映了西方的文化的從左到右,從上到下的閱讀習(xí)慣。
狀態(tài)指南
UML狀態(tài)圖中狀態(tài)是個實體的行為模式的某個階段。狀態(tài)的表示是通過實體的屬性值。例如,在圖1中,當(dāng)seminar被標(biāo)記為open,并且存在空位的時候,seminar就處于OpenForEnrollment的狀態(tài)。
狀態(tài)名稱要簡單但應(yīng)具有描述性。
象OpenForEnrollment和Proposed這種的狀態(tài)名稱非常容易理解,從而提高了圖⒈的溝通價值。理論上狀態(tài)名稱應(yīng)該是目前時,不過用過去式寫成的諸如Proposed的名稱要比用目前時寫成的諸如IsProposed的名稱好的多。
避免"黑洞"狀態(tài)。
黑洞狀態(tài)是那種只有變換進(jìn)來但沒有所有變換發(fā)出的狀態(tài),這種情況要么由于該狀態(tài)是個最終狀態(tài),要么就是你已錯過了一個或多個變換變換。
避免"奇跡"狀態(tài)。
奇跡狀態(tài)是那種只有變換發(fā)出但沒有所有變換進(jìn)來的狀態(tài),這種情況要么由于該狀態(tài)是個起點,要么就是你已錯過了一個或多個變換變換。
子狀態(tài)建模指南
為復(fù)雜的目標(biāo)建模子狀態(tài)。
圖1中展示的UML狀態(tài)圖是不完整的,因為他沒有建模Seminar的post-enrollment(注冊后)狀態(tài)。圖2建模了一個Seminar的完整的生命周期,把圖1描述為一個新的包括子狀態(tài)集合的Enrollment的復(fù)合狀態(tài),也稱作超狀態(tài)。注意按理說你會像圖1的模型那樣處理標(biāo)記,但為了簡化起見在原先變換上的標(biāo)記都沒有包括在內(nèi)。當(dāng)一個現(xiàn)有狀態(tài)表現(xiàn)出復(fù)雜的行為時,建模子狀態(tài)就是有意義的,從而促使你來研究他的子狀態(tài)。當(dāng)幾個現(xiàn)有狀態(tài)共用一個通用的入口條件或出口條件(Douglass1999)時,引入超狀態(tài)是有意義的,在圖1中你能看到所有的狀態(tài)共用一個通用的closed變換,以到達(dá)最終狀態(tài)。
圖⒉Seminar的完整生命周期
把通用的子狀態(tài)變換放在一起
和圖1中每一個子狀態(tài)都擁有一個cancelled變換不同,在圖2中你能看到cancelled變換僅用于描述Enrollment超狀態(tài),這使圖像得到簡化。如果子狀態(tài)都共享一個入口變換或出口變換,都能使用一個同樣的方法。變換上的警戒點和動作(如果有)也應(yīng)該使相等的。請期待下節(jié)UML建模風(fēng)格之UML狀態(tài)圖介紹。
【編輯推薦】
- UML基礎(chǔ)專題之UML狀態(tài)圖與活動圖
- SVG與UML圖詳解
- 在回歸測試中UML狀態(tài)圖切片的應(yīng)用
- 術(shù)語匯編 UML統(tǒng)一建模語言簡介
- 技術(shù)分享 嵌入式建模中UML狀態(tài)圖的形式化方法