您好,登錄后才能下訂單哦!
小編給大家分享一下UML狀態圖創建過程中需要注意什么問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
為復雜的實體創建一個分層的UML狀態圖
雖然這種表現子狀態的方法是非常好使的,不過最終的圖可能變得相當復雜--我們只要設想一下如果BeingTaught狀態也有子狀態的話,圖2會變成什么樣就知道了。一個替代的方法是創建一個分層的UML狀態圖。例如,圖3表示高階視圖,而圖1描述了一個細節視圖。這種方法的好處是如果需要的話,馬上就能建立一張詳圖來研究BeingTaught狀態。
圖⒊Seminar的高階狀態圖。
***階的狀態圖總有初始態和最終態
一個高階的UML狀態圖,例如圖2描述的這樣,應該表示實體的完整的生命周期,包括"出生"和***的"死亡"。低階的圖未必包含初始狀態和最終狀態,特別是那些建模一個實體的生命周期的"中間狀態"的圖。
變換和動作
變換是從一種狀態到另一種狀態的序列,他可能是通過一個事件觸發的。簡而言之就是被建模的實體的內部或外部的行為。對一個類來說,變換一般是將會導致狀態的重要改動的操作調用的結果,因此我們需要了解一點,并不是所有的方法調用都會導致變換產生的,這一點非常重要。一個動作就是某個東西,對類來說就是個操作,被建模的實體所調用的操作。
用實現語言的命名規則命名軟件動作
圖1中的動作遵循Java操作的命名規則(Vermeulenet.2000),因為系統使用用敘述性文字命名角色動作
UML狀態圖可用于建模非軟件實體的生命周期,特別是UML圖上的角色。例如學生角色就可能有諸如Accepted、FullTime、PartTime、Graduated、Masters、Doctoral、和Post-Doctoral等狀態,以顯示各人的不同行為。當你在建模現實世界的角色時,和軟件中Student類不同的是,狀態間的變換***是使用敘述性文字來描述,例如dropseminar和payfees,而不是dropSeminar()和payFees(),因為現實生活中的人是做事情,而不是執行操作。
只有對所有的入口變換都合適時才注明入口動作
在圖1中你能看到ClosedToEnrollment狀態的入口中操作notifyInstructor()都是經由entry/動作標記來調用的。這暗示著每次進入狀態時都需要調用該操作,如果你不希望每次都發生,那么就把動作關聯到特定的入口變換。例如,addStudent()動作是在studentenrolled變換到OpenForEnrollment變換發生,而在到opened變換則不會發生,這是因為每次你在進入該狀態并不必增加一個學生。
只有對所有的出口變換適合時才注明出口動作
出口動作,用exit/標記來表示,工作方式類似于入口動作。
只有當你想終止并再進入該狀態時才建模遞歸變換
UML狀態圖中一個遞歸的變換是那些兩個端點都擁有相同狀態的變換。一個重要的暗示是實體從狀態出來,又回到原有的狀態,因此,那些由于entry/或exit/動作標記而被調用的所有一種操作都可能被自動調用。圖1的OpenForEnrollment狀態就是這種遞歸變換的例子,因此當前班級大小就在入口處被記錄下來。
用過去式命名轉換事件
圖1中的轉換事件,例如seminarsplit和cancelled,是使用過去式命名的,反映了這樣一個事實:變換是事件的結果--因為事件發生在變換之前,因此應該用過去式命名。
把轉換標記放在接近源狀態的地方
雖然圖1比較復雜,變換標記盡可能放在靠近來源的地方,例如seminarsplit和studentenrolled。Furthermore,thelabelswerejustified(leftandrightrespectively)tohelpvisuallyplacethemclosetothesourcestate.
以轉換方向為基礎放置變換標記
為了更易于判斷哪個標記和變換是一起的,按照如下的規則來放置變換標記:
在變換線條上的從左到右。
在變換線條下的從右到左。
變換線條右邊的往下。
變換線條左邊的往上。
警戒點
一個警戒點是為了穿過一個轉換而必須為真的一個條件。
警戒點不應該重疊
UML狀態圖離開狀態的相似變換上的警戒點必須彼此一致。舉例來說,x<0,x=0,及x>0的警戒點是一致的,而x<=0和x>=0的警戒點就不是一致的,因為他們重疊了,他并沒有明確的指出當x為0時將發生什么。在圖1中,你能看到警界點的一致性,從填寫注冊表活動出發的該學生劃線變換上的警戒點沒有重疊,決策點上的警戒點也相同。
為可視化的定位警戒點而引入接合點。
在圖2中你能看到從BeingTaught觸發studentdropped事件存在兩個變換,而圖3中僅有一個,變換被合并了,因此我們需要一個接合點(填滿的圓)。這種方法的好處是目前圖上的兩個警戒點更彼此接近了,更容易看出警戒點是否重疊。
警戒點不必配套
一個狀態的變換警戒點有可能是不完整的。例如,一個bankaccount對象可能從Open狀態變換到NeedsAuthorization狀態,這時需要一個大額存款"largedeposit"的警戒點。可是,一個帶有"smalldeposit"的警戒點的deposit變換可能并不必建模,他是被隱含的,我們遵循了AM的實踐--簡單的描述模型和僅僅包括相關的信息。
一致的命名警戒點
圖1包含了諸如seatavailable和noseatavailable的警戒點,兩個警戒點的描述是一致的。然而,諸如seatsleft、noseatleft、noseatsleft、noseatsavailable、seatunavailable之類的描述就是不一致,而且難于理解的。
以上是“UML狀態圖創建過程中需要注意什么問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。