一個高階的UML狀態圖,例如圖2描述的這樣,應該表示實體的完整的生命周期,包括"出生"和最后的"死亡"。 低階的圖未必包含初始狀態和最終狀態,特別是那些建模一個實體的生命周期的"中間狀態"的圖。
變換和動作
變換是從一種狀態到另一種狀態的序列,它可能是通過一個事件觸發的。簡而言之就是被建模的實體的內部或外部的行為。 對一個類來說,變換一般是將會導致狀態的重要改變的操作調用的結果,因此我們需要了解一點,并不是所有的方法調用都會導致變換產生的,這一點非常重要。 一個動作就是某個東西,對類來說就是一個操作,被建模的實體所調用的操作。
用實現語言的命名規則命名軟件動作
圖1中的動作遵循Java操作的命名規則( Vermeulen et. 2000),因為系統使用Java做為實現語言,如果我們的目標是兩外一種語言,那么我們也需要遵循適當的命名規則。
用敘述性文字命名角色動作
UML狀態圖可用于建模非軟件實體的生命周期,特別是UML圖上的角色。 例如學生角色就可能有諸如Accepted、Full Time、Part Time、Graduated、Masters、Doctoral、和Post - Doctoral等狀態,以顯示各人的不同行為。 當你在建,F實世界的角色時,與軟件中Student類不同的是,狀態間的變換最好是使用敘述性文字來描述,例如drop seminar和pay fees,而不是dropSeminar ()和payFees (),因為現實生活中的人是做事情,而不是執行操作。
只有對所有的入口變換都合適時才注明入口動作
在圖1中你可以看到Closed To Enrollment狀態的入口中操作notifyInstructor ()都是經由entry/動作標記來調用的。 這暗示著每次進入狀態時都需要調用該操作,如果你不希望每次都發生,那么就把動作關聯到特定的入口變換。 例如,addStudent ()動作是在student enrolled變換到Open For Enrollment變換發生,而在到opened變換則不會發生,這是因為每次你在進入該狀態并不需要增加一個學生。
只有對所有的出口變換適合時才注明出口動作
出口動作,用exit/標記來表示,工作方式類似于入口動作。
只有當你想終止并再進入該狀態時才建模遞歸變換
一個遞歸的變換是那些兩個端點都擁有相同狀態的變換。 一個重要的暗示是實體從狀態出來,又回到原有的狀態,因此,那些由于entry/或exit/動作標記而被調用的任何一種操作都可能被自動調用。 圖1的Open For Enrollment狀態就是這種遞歸變換的例子,因此當前班級大小就在入口處被記錄下來。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/