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