新聞中心
本節(jié)接著向大家介紹一下UML狀態(tài)圖方面的內(nèi)容,希望通過本節(jié)學(xué)習(xí),你對UML狀態(tài)圖的基礎(chǔ)知識有一定的認識,下面讓我們繼續(xù)來看一下UML狀態(tài)圖的詳細介紹吧。

創(chuàng)新互聯(lián)建站是一家專業(yè)提供柳林企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計制作、做網(wǎng)站、H5建站、小程序制作等業(yè)務(wù)。10年已為柳林眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進行中。
為復(fù)雜的實體創(chuàng)建一個分層的UML狀態(tài)圖
雖然這種表現(xiàn)子狀態(tài)的方法是非常好使的,不過最終的圖可能變得相當(dāng)復(fù)雜--我們只要設(shè)想一下如果BeingTaught狀態(tài)也有子狀態(tài)的話,圖2會變成什么樣就知道了。一個替代的方法是創(chuàng)建一個分層的UML狀態(tài)圖。例如,圖3表示高階視圖,而圖1描述了一個細節(jié)視圖。這種方法的好處是如果需要的話,馬上就能建立一張詳圖來研究BeingTaught狀態(tài)。
圖⒊Seminar的高階狀態(tài)圖。
***階的狀態(tài)圖總有初始態(tài)和最終態(tài)
一個高階的UML狀態(tài)圖,例如圖2描述的這樣,應(yīng)該表示實體的完整的生命周期,包括"出生"和***的"死亡"。低階的圖未必包含初始狀態(tài)和最終狀態(tài),特別是那些建模一個實體的生命周期的"中間狀態(tài)"的圖。
變換和動作
變換是從一種狀態(tài)到另一種狀態(tài)的序列,他可能是通過一個事件觸發(fā)的。簡而言之就是被建模的實體的內(nèi)部或外部的行為。對一個類來說,變換一般是將會導(dǎo)致狀態(tài)的重要改動的操作調(diào)用的結(jié)果,因此我們需要了解一點,并不是所有的方法調(diào)用都會導(dǎo)致變換產(chǎn)生的,這一點非常重要。一個動作就是某個東西,對類來說就是個操作,被建模的實體所調(diào)用的操作。
用實現(xiàn)語言的命名規(guī)則命名軟件動作
圖1中的動作遵循Java操作的命名規(guī)則(Vermeulenet.2000),因為系統(tǒng)使用用敘述性文字命名角色動作
UML狀態(tài)圖可用于建模非軟件實體的生命周期,特別是UML圖上的角色。例如學(xué)生角色就可能有諸如Accepted、FullTime、PartTime、Graduated、Masters、Doctoral、和Post-Doctoral等狀態(tài),以顯示各人的不同行為。當(dāng)你在建?,F(xiàn)實世界的角色時,和軟件中Student類不同的是,狀態(tài)間的變換***是使用敘述性文字來描述,例如dropseminar和payfees,而不是dropSeminar()和payFees(),因為現(xiàn)實生活中的人是做事情,而不是執(zhí)行操作。
只有對所有的入口變換都合適時才注明入口動作
在圖1中你能看到ClosedToEnrollment狀態(tài)的入口中操作notifyInstructor()都是經(jīng)由entry/動作標(biāo)記來調(diào)用的。這暗示著每次進入狀態(tài)時都需要調(diào)用該操作,如果你不希望每次都發(fā)生,那么就把動作關(guān)聯(lián)到特定的入口變換。例如,addStudent()動作是在studentenrolled變換到OpenForEnrollment變換發(fā)生,而在到opened變換則不會發(fā)生,這是因為每次你在進入該狀態(tài)并不必增加一個學(xué)生。
只有對所有的出口變換適合時才注明出口動作
出口動作,用exit/標(biāo)記來表示,工作方式類似于入口動作。
只有當(dāng)你想終止并再進入該狀態(tài)時才建模遞歸變換
UML狀態(tài)圖中一個遞歸的變換是那些兩個端點都擁有相同狀態(tài)的變換。一個重要的暗示是實體從狀態(tài)出來,又回到原有的狀態(tài),因此,那些由于entry/或exit/動作標(biāo)記而被調(diào)用的所有一種操作都可能被自動調(diào)用。圖1的OpenForEnrollment狀態(tài)就是這種遞歸變換的例子,因此當(dāng)前班級大小就在入口處被記錄下來。#p#
用過去式命名轉(zhuǎn)換事件
圖1中的轉(zhuǎn)換事件,例如seminarsplit和cancelled,是使用過去式命名的,反映了這樣一個事實:變換是事件的結(jié)果--因為事件發(fā)生在變換之前,因此應(yīng)該用過去式命名。
把轉(zhuǎn)換標(biāo)記放在接近源狀態(tài)的地方
雖然圖1比較復(fù)雜,變換標(biāo)記盡可能放在靠近來源的地方,例如seminarsplit和studentenrolled。Furthermore,thelabelswerejustified(leftandrightrespectively)tohelpvisuallyplacethemclosetothesourcestate.
以轉(zhuǎn)換方向為基礎(chǔ)放置變換標(biāo)記
為了更易于判斷哪個標(biāo)記和變換是一起的,按照如下的規(guī)則來放置變換標(biāo)記:
在變換線條上的從左到右。
在變換線條下的從右到左。
變換線條右邊的往下。
變換線條左邊的往上。
警戒點
一個警戒點是為了穿過一個轉(zhuǎn)換而必須為真的一個條件。
警戒點不應(yīng)該重疊
UML狀態(tài)圖離開狀態(tài)的相似變換上的警戒點必須彼此一致。舉例來說,x<0,x=0,及x>0的警戒點是一致的,而x<=0和x>=0的警戒點就不是一致的,因為他們重疊了,他并沒有明確的指出當(dāng)x為0時將發(fā)生什么。在圖1中,你能看到警界點的一致性,從填寫注冊表活動出發(fā)的該學(xué)生劃線變換上的警戒點沒有重疊,決策點上的警戒點也相同。
為可視化的定位警戒點而引入接合點。
在圖2中你能看到從BeingTaught觸發(fā)studentdropped事件存在兩個變換,而圖3中僅有一個,變換被合并了,因此我們需要一個接合點(填滿的圓)。這種方法的好處是目前圖上的兩個警戒點更彼此接近了,更容易看出警戒點是否重疊。
警戒點不必配套
一個狀態(tài)的變換警戒點有可能是不完整的。例如,一個bankaccount對象可能從Open狀態(tài)變換到NeedsAuthorization狀態(tài),這時需要一個大額存款"largedeposit"的警戒點??墒牵粋€帶有"smalldeposit"的警戒點的deposit變換可能并不必建模,他是被隱含的,我們遵循了AM的實踐--簡單的描述模型和僅僅包括相關(guān)的信息。
一致的命名警戒點
圖1包含了諸如seatavailable和noseatavailable的警戒點,兩個警戒點的描述是一致的。然而,諸如seatsleft、noseatleft、noseatsleft、noseatsavailable、seatunavailable之類的描述就是不一致,而且難于理解的。本節(jié)關(guān)于UML建模風(fēng)格之UML狀態(tài)圖介紹到這里。
網(wǎng)頁名稱:UML狀態(tài)圖創(chuàng)建過程中需要注意問題
轉(zhuǎn)載來于:http://www.fisionsoft.com.cn/article/dhiogjo.html


咨詢
建站咨詢
