版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
軟件工程第12章動態(tài)建模1軟件工程第12章動態(tài)建模1動態(tài)建模
動態(tài)建模用來描述系統(tǒng)的動態(tài)行為,顯示對象在系統(tǒng)運行期間不同時刻的動態(tài)交互。UML中用狀態(tài)機圖、活動圖、順序圖、通信圖和協(xié)作圖來建立動態(tài)模型。2動態(tài)建模動態(tài)建模用來描述系統(tǒng)的動態(tài)行為,顯示對象在系統(tǒng)運行內(nèi)容摘要狀態(tài)機圖活動圖順序圖通信圖3內(nèi)容摘要狀態(tài)機圖3內(nèi)容摘要狀態(tài)機圖活動圖順序圖通信圖4內(nèi)容摘要狀態(tài)機圖4狀態(tài)機圖狀態(tài)機圖通常是對類描述的補充,它說明該類的對象所有可能的狀態(tài),以及哪些事件將導致狀態(tài)的改變。狀態(tài)機圖描述了對象的動態(tài)行為,是一種對象生存周期的模型。5狀態(tài)機圖狀態(tài)機圖通常是對類描述的補充,它說明該類的對象所有可畫狀態(tài)機圖的步驟1)列出對象具有的所有狀態(tài)狀態(tài)分為起始狀態(tài)、結(jié)束狀態(tài)和中間狀態(tài)。一張狀態(tài)機圖可以有一個起始狀態(tài)和若干個(可以為0)結(jié)束狀態(tài)。2)標識導致狀態(tài)轉(zhuǎn)換的事件當一個對象接收到某個事件時,會導致從一個狀態(tài)轉(zhuǎn)換到另一個狀態(tài),稱為狀態(tài)遷移(transition)。3)為狀態(tài)和遷移定義狀態(tài)變量和動作在狀態(tài)遷移和/或處于某個狀態(tài)中時都可能需要執(zhí)行一些相應(yīng)的動作,綜合這些動作,使得對象完成相應(yīng)的功能。6畫狀態(tài)機圖的步驟1)列出對象具有的所有狀態(tài)6狀態(tài)名狀態(tài)變量活動狀態(tài)遷移起始狀態(tài)結(jié)束狀態(tài)狀態(tài)機圖的基本符號7狀態(tài)名狀態(tài)變量活動狀態(tài)遷移起始狀態(tài)結(jié)束狀態(tài)狀態(tài)機圖的基本符號電梯升降的狀態(tài)機圖Movingupdo/movingtofloorMovingdowndo/movingtofloorIdletimer=0do/increasetimerarrivedarrivedgodown(floor)MovingtoFirstfloorgoup(floor)[timer=time-out]arrivedgoup(floor)Onfirstfloor8電梯升降的狀態(tài)機圖Movingupdo/movingto狀態(tài)一個狀態(tài)由狀態(tài)名、狀態(tài)變量和活動三部分組成。狀態(tài)變量是狀態(tài)機圖所顯示的類的屬性,也可以是臨時變量?;顒硬糠至谐隽颂幱谠摖顟B(tài)時要執(zhí)行的事件和動作。9狀態(tài)一個狀態(tài)由狀態(tài)名、狀態(tài)變量和活動三部分組成。9有三個標準事件:entry,exit和do。Entry和exit事件用于指明進入和退出該狀態(tài)時的特定動作。do事件用于指明在該狀態(tài)中時執(zhí)行的動作?;顒訁^(qū)中事件的語法如下:
event-nameopt
(argumentlist)opt[guard-condition]opt
/activity-expressionopt其中,事件名可以是包括三個標準事件(entry,exit,do)在內(nèi)的任何事件,參數(shù)表表示該事件所需的參數(shù),警戒條件是一布爾表達式,動作表達式是該事件將被執(zhí)行的動作。10有三個標準事件:entry,exit和do。10loginlogintime=currenttimeentry/type“l(fā)ogin”do/getuse_namedo/getpasswordhelp/displayhelpexit/login(use_name,password)login狀態(tài)11loginlogintime=currenttimeen自動售貨機狀態(tài)機圖idleCollectingmoneyCoinsin(amount)/addtobalancetestandcomputeDo:testitemandcomputechangeDo:dispenseitemDo:makechangeSelect(item)[change<0][itemempty]Coinsin(amount)/SetbalanceCancel/refundCoins[change>0][change=0]12自動售貨機狀態(tài)機圖idleCollectingmoneyC狀態(tài)遷移1.
狀態(tài)遷移引起狀態(tài)遷移的原因通常有兩種:當標在遷移箭頭上的事件出現(xiàn)時會引起狀態(tài)的遷移。此時,首先執(zhí)行引起遷移的事件中的動作,然后遷移到新的狀態(tài),執(zhí)行新狀態(tài)中的內(nèi)部動作(包括entry、exit、do以及用戶定義的動作)。在執(zhí)行do或用戶定義的動作時,可以被外部的事件(將導致該狀態(tài)的遷移)中斷,但entry動作和exit動作是不能被中斷的,并且它們總是要執(zhí)行完的。
13狀態(tài)遷移1.
狀態(tài)遷移13當狀態(tài)機圖中相應(yīng)的遷移上未指明事件時,表示當位于遷移箭頭源頭的狀態(tài)中的內(nèi)部動作(包括entry、exit、do以及用戶定義的動作)全部執(zhí)行完后,該狀態(tài)遷移被自動觸發(fā)。14當狀態(tài)機圖中相應(yīng)的遷移上未指明事件時,表示當位于遷移箭頭源頭自動售貨機狀態(tài)機圖idleCollectingmoneyCoinsin(amount)/addtobalancetestandcomputeDo:testitemandcomputechangeDo:dispenseitemDo:makechangeSelect(item)[change<0][itemempty]Coinsin(amount)/SetbalanceCancel/refundCoins[change>0][change=0]15自動售貨機狀態(tài)機圖idleCollectingmoneyC狀態(tài)遷移的語法如下:event-nameopt
(parameter-list)opt
[guard-condition]opt
/effect-listopt其中:事件名及其參數(shù)表指出觸發(fā)遷移的事件,參數(shù)表的語法與“操作”中定義語法相同。警戒條件是一個布爾表達式。如果狀態(tài)遷移中既有事件特征又有警戒條件,則表示僅當這個事件發(fā)生并且警戒條件為真時才觸發(fā)相應(yīng)的狀態(tài)遷移;如果狀態(tài)遷移上只有警戒條件,則表示當該條件變?yōu)檎鏁r,觸發(fā)狀態(tài)遷移。16狀態(tài)遷移的語法如下:16effect-list是當該遷移觸發(fā)時執(zhí)行的過程表達式,即動作表達式。表達式中可引用相應(yīng)對象中的屬性、操作,或者事件特征中的參數(shù)。動作可以包括調(diào)用、發(fā)送和其它種類的動作。一個狀態(tài)遷移上可以有多個用′/′符號分隔動作表達式,它們按從左到右的次序依次執(zhí)行。不允許有嵌套的或遞歸的動作表達式。17effect-list是當該遷移觸發(fā)時執(zhí)行的過程表[timer=time-out]/godown(firstfloor)電梯升降的狀態(tài)機圖Movingupdo/movingtofloorMovingdowndo/movingtofloorIdletimer=0do/increasetimerarrivedarrivedgodown(floor)goup(floor)goup(floor)Onfirstfloor18[timer=time-out]/godown(firs事件事件是指已發(fā)生并可能引發(fā)某種活動的一件事
類數(shù)字手表類及其狀態(tài)機圖inc/hours:=hours+1Digital_Watchmode_button()inc()do/displayminutesSetminutesdo/displayhoursSethoursdo/displaycurrenttimeDisplaymode_buttonmode_buttoninc/minutes:=minutes+1mode_button狀態(tài)機圖19事件事件是指已發(fā)生并可能引發(fā)某種活動的一件事類數(shù)字手表類及事件的種類事件類型描述調(diào)用事件callevent收到一條被一個對象外部同步調(diào)用的請求改變事件changeevent布爾表達式值的改變信號事件signalevent收到供對象間異步通信用的一個外部的、被命名的信號(實體)時間事件timeevent到達一個絕對時間或經(jīng)過一段相對的時間量20事件的種類事件類型描述調(diào)用事件收到一條被一個對象外部同步調(diào)用IdleinputSenddo/send(input)tocorrespondingclassThesignalcouldbeanobjectofthefollowingclasses:Keyboard,LeftMouseButton,RightMouseButton,VoiceRecognition《signal》input{abstract}device:Devicetime:Time《signal》Keyboardcharacter:Charup:Booleandown:Boolean《signal》VoiceRecognitioncommando:string《signal》Mouse{abstract}up:Booleandown:BooleanxPos:intyPos:int《signal》RightMouseButton《signal》LeftMouseButton信號類層次21IdleinputSenddo/send(input)Th狀態(tài)機圖之間發(fā)送的消息
狀態(tài)機圖之間可通過動作(如在發(fā)送子句中指明接收者)或圖間的虛線箭頭向其他狀態(tài)機圖發(fā)送消息。當采用虛線箭頭時,狀態(tài)機圖必須畫在矩形框中。在圖間的消息箭頭有兩種畫法:從表示源對象的狀態(tài)機圖中的狀態(tài)遷移上畫虛線箭頭到表示目標對象的狀態(tài)機圖的邊框上;在兩個狀態(tài)機圖的邊框間畫虛線箭頭,表示源對象在其執(zhí)行期間的某時刻發(fā)送該消息。在狀態(tài)機圖之間發(fā)送消息時,在目標對象的狀態(tài)機圖中應(yīng)畫有一個捕獲這個消息的相應(yīng)的遷移。22狀態(tài)機圖之間發(fā)送的消息狀態(tài)機圖之間可通過動作(如在發(fā)送On()Off()RemoteControlPlay()Stop()OffOnOn()Off()Play()Stop()OffOn/StopOn/PlayOff()/Stop()CDPlayerOn()Off()Stop()Play()狀態(tài)機圖之間的消息發(fā)送23On()Off()RemoteControlPlay()S組合狀態(tài)一個簡單狀態(tài)沒有子結(jié)構(gòu),一個組合狀態(tài)被分解成區(qū)域,每個區(qū)域中包含一或多個直接子狀態(tài)。下面給出了UML中的主要狀態(tài)種類簡單狀態(tài):一個沒有子結(jié)構(gòu)的狀態(tài)正交狀態(tài)(并發(fā)):一個被分成多個區(qū)域的狀態(tài),當該狀態(tài)活躍時,每個區(qū)域中的一個直接子狀態(tài)并發(fā)地活躍
SS24組合狀態(tài)一個簡單狀態(tài)沒有子結(jié)構(gòu),一個組合狀態(tài)被分解非正交狀態(tài)(非并發(fā)):一個包含一或多個直接子狀態(tài)的組合狀態(tài),當該組合狀態(tài)活躍時,在同一時刻組合狀態(tài)中只有一個子狀態(tài)是活躍的初始狀態(tài):當嵌套狀態(tài)被調(diào)用時,表示開始狀態(tài)的偽狀態(tài)終結(jié)狀態(tài):一個特定的狀態(tài),它的激活表示嵌套狀態(tài)已完成了活動。S●●25非正交狀態(tài)(非并發(fā)):一個包含一或多個直接子狀態(tài)終止:一個特定的狀態(tài),它的激活將終止擁有該狀態(tài)機的對象的執(zhí)行
選擇:一個偽狀態(tài),它實現(xiàn)單個運行到完成(run-to-completion)遷移中的動態(tài)分枝26終止:一個特定的狀態(tài),它的激活將終止擁有該狀態(tài)機的對歷史狀態(tài):一個偽狀態(tài),它的激活將還原到組合狀態(tài)中先前活躍的狀態(tài)入口點:一個狀態(tài)機中外部可見的偽狀態(tài),它標識作為目標的內(nèi)部狀態(tài)出口點:一個狀態(tài)機中外部可見的偽狀態(tài),它標識作為源的內(nèi)部狀態(tài)HaTbU27歷史狀態(tài):一個偽狀態(tài),它的激活將還原到組合狀態(tài)非正交狀態(tài)非正交狀態(tài)(非并發(fā)):一個包含一或多個直接子狀態(tài)的組合狀態(tài),當該組合狀態(tài)活躍時,在同一時刻組合狀態(tài)中只有一個子狀態(tài)是活躍的。一個狀態(tài)可以有嵌套的子狀態(tài),一個非正交的組合狀態(tài)可以擁有一或多個直接子狀態(tài),當該組合狀態(tài)活躍時,該組合狀態(tài)在同一時刻中只有一個子狀態(tài)是活躍的。例如,汽車中的變速器有中間狀態(tài)、前進狀態(tài)和倒退狀態(tài),前進狀態(tài)又有三個排擋子狀態(tài):第一、第二、第三,在任一時刻,這三個子狀態(tài)同時只有一個是活動的,所以前進狀態(tài)是“非正交”組合狀態(tài)。28非正交狀態(tài)非正交狀態(tài)(非并發(fā)):一個包含一或多個直接子狀態(tài)非正交(嵌套)狀態(tài)ForwardStopdownshiftupshiftdownshiftupshiftFirstSecondThirdpushNpushRpushNpushFNeutralReverseTransmission29非正交(嵌套)狀態(tài)ForwardStopdownshift正交狀態(tài)三局二勝比賽的正交狀態(tài)PlayingrubberAVulnerabilityAwinAwinAwinsrubberNotvulnerablevulnerableBVulnerabilityBwinBwinBwinsrubberNotvulnerablevulnerable30正交狀態(tài)三局二勝比賽的正交狀態(tài)PlayingrubberA如果某些對象是另一些對象的聚集對象,則這些代表“部分”對象的狀態(tài)圖通常是并發(fā)的,它們都是聚集對象的并發(fā)子狀態(tài)。例如“汽車”對象是“點火”、“變速器”、“剎車”、“油門”等對象的聚集對象。transmissionignitionacceleratorcarbrake31如果某些對象是另一些對象的聚集對象,則這些代表“部分”對象的Carturnkeytostart[TransmissioninNeutral]releasekeyturnkeyoffOffStartingOnIgnitionAcceleratordepressacceleratorReleaseacceleratoronoffBrakedepressbrakereleasebrakeonoffTransmissionForwardStopdownshiftupshiftdownshiftupshiftFirstSecondThirdpushNpushRpushNpushFNeutralReverse[汽車]---正交狀態(tài)32Carturnkeytostart[Transmis可以用復雜遷移表示并發(fā)的狀態(tài)遷移。一個復雜遷移可以有多個源狀態(tài)或目標狀態(tài),它們可以把控制分解為并行運行的并發(fā)線程,或?qū)⒍鄠€并發(fā)線程合并成單個線程。一個復雜遷移用一個短而粗的垂直條(bar)表示,可以從一個或多個狀態(tài)(稱為源狀態(tài))用實線箭頭指向bar,bar還可以用一個或多個實線箭頭指向其它狀態(tài)(稱為目標狀態(tài))。遷移的警戒條件可寫在bar的旁邊。只有當對象處于所有的源狀態(tài)中,并且遷移的警戒條件為真時,遷移才被觸發(fā),意味著并發(fā)執(zhí)行的開始或結(jié)束。因此,bar實際上在并發(fā)活動中起同步的作用。33可以用復雜遷移表示并發(fā)的狀態(tài)遷移。33cashtakenandcardtakenreadySettingupReadytoresetEmittingdo:dispensecashdo:ejectcard復雜遷移34cashtakenandreadySettingup歷史指示器
歷史指示器用來記憶內(nèi)部的狀態(tài),用里面標有H字母的圓圈表示。歷史指示器作用于標有它的狀態(tài)區(qū)域,如果指向歷史指示器的遷移被觸發(fā),對象就會恢復到該狀態(tài)區(qū)域先前活躍的狀態(tài)。它使得對象能在活動被中斷或需要逆行時回到先前活躍的那個狀態(tài)。歷史指示器可以有幾個進入它的狀態(tài)遷移,但沒有離開它的狀態(tài)遷移。35歷史指示器歷史指示器用來記憶內(nèi)部的狀態(tài),用里面標有H字母的Restart()^Self.Restart()歷史指示器Create()[alternative=stop][alternative=stop][alternative=tryagain]Outofmemory()[alternative=continue]DiskError()HDiskerrorentry/fixdiskdo/showquestiondialogdo/AskalternativeMemorylowentry/showquestiondialogdo/askalternativeOSrunningRestartOSstartinstallshieldInstallentry/askinstallingquestionsdo/installsoftwareInstallsoftware36Restart()^Self.Restart()歷史Crea內(nèi)容摘要狀態(tài)機圖活動圖順序圖通信圖37內(nèi)容摘要狀態(tài)機圖37活動圖活動圖可看作一種特殊形式的狀態(tài)機,用于對計算流程和工作流建模?;顒訄D的狀態(tài)表示計算過程中所處的各種狀態(tài)?;顒訄D用來描述完成一個操作所需要的活動,或者是一個用況實例(場景)的活動。活動圖使用狀態(tài)機圖的符號表示,活動圖中的狀態(tài)稱為動作狀態(tài),用圓角矩形表示,動作狀態(tài)之間的遷移用箭頭表示,遷移上可以附加警戒條件、發(fā)送子句和動作表達式。與狀態(tài)機圖不同的是,活動圖中動作狀態(tài)之間的遷移不是靠事件觸發(fā)的,當動作狀態(tài)中的活動完成時遷移就被觸發(fā)。38活動圖活動圖可看作一種特殊形式的狀態(tài)機,用于對計算流程和^Printer.Print(file)[freediskspace][diskfull]CustomerWindow.printAllCustomers()ShowMessageBox“Diskfull”onscreenShowMessageBox“Printing”onscreenCreatepostscriptfileRemoveMessageBox活動圖實例39^Printer.Print(file)[freedi一張活動圖可劃分成若干個矩形區(qū),每個矩形區(qū)為一個泳道,泳道名放在矩形區(qū)的頂端。通常根據(jù)責任把活動組織到不同的泳道中,它能清楚地表明動作在哪里執(zhí)行(在哪個對象中),或者表明一個組織的哪部分工作(一個動作)被執(zhí)行。一個動作遷移可以分解成二個或多個導致并行動作的遷移,若干個來自并行活動的遷移也可以合并成一個遷移。值得注意的是,在合并之前并行遷移上的活動必須全部完成。在活動圖中用黑體線來表示遷移的分解和合并。活動圖中可以表示對象,對象用對象符號(矩形)表示,它可作為活動的輸入或輸出(用虛線箭頭連接),也可展示一個對象受一特定動作的影響(用動作和對象之間的虛線表示)。
40一張活動圖可劃分成若干個矩形區(qū),每個矩形區(qū)為一泳道DisplayerSamplerUpdatingdisplayerInitiateSampler.Run(channel,frequency)MeasuringMeasuredvalue41泳道DisplayerSamplerUpdatingInit活動圖中可以描述信號的發(fā)送和接收
CustomerWindow.PrintAllCustomers()ShowMessageBox“Printing”onscreenCreatepostscriptfilePrint(file)RemoveMessageBoxaPrinter:PrinterPrintPrint(file)活動圖中的信號發(fā)送和接收42活動圖中可以描述信號的發(fā)送和接收CustomerWindo活動圖還可以用來描述用況描述用況的活動圖[未付款][已付款]*[對每一訂單項][有貨][缺貨]取消并退回訂單收到訂單付款認可檢查訂單項制作并發(fā)放提貨單更新庫存制作并發(fā)放缺貨單制作并發(fā)放采購單43活動圖還可以用來描述用況描述用況的活動圖[未付款][已付款軟件工程第12章動態(tài)建模44軟件工程第12章動態(tài)建模1動態(tài)建模
動態(tài)建模用來描述系統(tǒng)的動態(tài)行為,顯示對象在系統(tǒng)運行期間不同時刻的動態(tài)交互。UML中用狀態(tài)機圖、活動圖、順序圖、通信圖和協(xié)作圖來建立動態(tài)模型。45動態(tài)建模動態(tài)建模用來描述系統(tǒng)的動態(tài)行為,顯示對象在系統(tǒng)運行內(nèi)容摘要狀態(tài)機圖活動圖順序圖通信圖46內(nèi)容摘要狀態(tài)機圖3內(nèi)容摘要狀態(tài)機圖活動圖順序圖通信圖47內(nèi)容摘要狀態(tài)機圖4狀態(tài)機圖狀態(tài)機圖通常是對類描述的補充,它說明該類的對象所有可能的狀態(tài),以及哪些事件將導致狀態(tài)的改變。狀態(tài)機圖描述了對象的動態(tài)行為,是一種對象生存周期的模型。48狀態(tài)機圖狀態(tài)機圖通常是對類描述的補充,它說明該類的對象所有可畫狀態(tài)機圖的步驟1)列出對象具有的所有狀態(tài)狀態(tài)分為起始狀態(tài)、結(jié)束狀態(tài)和中間狀態(tài)。一張狀態(tài)機圖可以有一個起始狀態(tài)和若干個(可以為0)結(jié)束狀態(tài)。2)標識導致狀態(tài)轉(zhuǎn)換的事件當一個對象接收到某個事件時,會導致從一個狀態(tài)轉(zhuǎn)換到另一個狀態(tài),稱為狀態(tài)遷移(transition)。3)為狀態(tài)和遷移定義狀態(tài)變量和動作在狀態(tài)遷移和/或處于某個狀態(tài)中時都可能需要執(zhí)行一些相應(yīng)的動作,綜合這些動作,使得對象完成相應(yīng)的功能。49畫狀態(tài)機圖的步驟1)列出對象具有的所有狀態(tài)6狀態(tài)名狀態(tài)變量活動狀態(tài)遷移起始狀態(tài)結(jié)束狀態(tài)狀態(tài)機圖的基本符號50狀態(tài)名狀態(tài)變量活動狀態(tài)遷移起始狀態(tài)結(jié)束狀態(tài)狀態(tài)機圖的基本符號電梯升降的狀態(tài)機圖Movingupdo/movingtofloorMovingdowndo/movingtofloorIdletimer=0do/increasetimerarrivedarrivedgodown(floor)MovingtoFirstfloorgoup(floor)[timer=time-out]arrivedgoup(floor)Onfirstfloor51電梯升降的狀態(tài)機圖Movingupdo/movingto狀態(tài)一個狀態(tài)由狀態(tài)名、狀態(tài)變量和活動三部分組成。狀態(tài)變量是狀態(tài)機圖所顯示的類的屬性,也可以是臨時變量?;顒硬糠至谐隽颂幱谠摖顟B(tài)時要執(zhí)行的事件和動作。52狀態(tài)一個狀態(tài)由狀態(tài)名、狀態(tài)變量和活動三部分組成。9有三個標準事件:entry,exit和do。Entry和exit事件用于指明進入和退出該狀態(tài)時的特定動作。do事件用于指明在該狀態(tài)中時執(zhí)行的動作?;顒訁^(qū)中事件的語法如下:
event-nameopt
(argumentlist)opt[guard-condition]opt
/activity-expressionopt其中,事件名可以是包括三個標準事件(entry,exit,do)在內(nèi)的任何事件,參數(shù)表表示該事件所需的參數(shù),警戒條件是一布爾表達式,動作表達式是該事件將被執(zhí)行的動作。53有三個標準事件:entry,exit和do。10loginlogintime=currenttimeentry/type“l(fā)ogin”do/getuse_namedo/getpasswordhelp/displayhelpexit/login(use_name,password)login狀態(tài)54loginlogintime=currenttimeen自動售貨機狀態(tài)機圖idleCollectingmoneyCoinsin(amount)/addtobalancetestandcomputeDo:testitemandcomputechangeDo:dispenseitemDo:makechangeSelect(item)[change<0][itemempty]Coinsin(amount)/SetbalanceCancel/refundCoins[change>0][change=0]55自動售貨機狀態(tài)機圖idleCollectingmoneyC狀態(tài)遷移1.
狀態(tài)遷移引起狀態(tài)遷移的原因通常有兩種:當標在遷移箭頭上的事件出現(xiàn)時會引起狀態(tài)的遷移。此時,首先執(zhí)行引起遷移的事件中的動作,然后遷移到新的狀態(tài),執(zhí)行新狀態(tài)中的內(nèi)部動作(包括entry、exit、do以及用戶定義的動作)。在執(zhí)行do或用戶定義的動作時,可以被外部的事件(將導致該狀態(tài)的遷移)中斷,但entry動作和exit動作是不能被中斷的,并且它們總是要執(zhí)行完的。
56狀態(tài)遷移1.
狀態(tài)遷移13當狀態(tài)機圖中相應(yīng)的遷移上未指明事件時,表示當位于遷移箭頭源頭的狀態(tài)中的內(nèi)部動作(包括entry、exit、do以及用戶定義的動作)全部執(zhí)行完后,該狀態(tài)遷移被自動觸發(fā)。57當狀態(tài)機圖中相應(yīng)的遷移上未指明事件時,表示當位于遷移箭頭源頭自動售貨機狀態(tài)機圖idleCollectingmoneyCoinsin(amount)/addtobalancetestandcomputeDo:testitemandcomputechangeDo:dispenseitemDo:makechangeSelect(item)[change<0][itemempty]Coinsin(amount)/SetbalanceCancel/refundCoins[change>0][change=0]58自動售貨機狀態(tài)機圖idleCollectingmoneyC狀態(tài)遷移的語法如下:event-nameopt
(parameter-list)opt
[guard-condition]opt
/effect-listopt其中:事件名及其參數(shù)表指出觸發(fā)遷移的事件,參數(shù)表的語法與“操作”中定義語法相同。警戒條件是一個布爾表達式。如果狀態(tài)遷移中既有事件特征又有警戒條件,則表示僅當這個事件發(fā)生并且警戒條件為真時才觸發(fā)相應(yīng)的狀態(tài)遷移;如果狀態(tài)遷移上只有警戒條件,則表示當該條件變?yōu)檎鏁r,觸發(fā)狀態(tài)遷移。59狀態(tài)遷移的語法如下:16effect-list是當該遷移觸發(fā)時執(zhí)行的過程表達式,即動作表達式。表達式中可引用相應(yīng)對象中的屬性、操作,或者事件特征中的參數(shù)。動作可以包括調(diào)用、發(fā)送和其它種類的動作。一個狀態(tài)遷移上可以有多個用′/′符號分隔動作表達式,它們按從左到右的次序依次執(zhí)行。不允許有嵌套的或遞歸的動作表達式。60effect-list是當該遷移觸發(fā)時執(zhí)行的過程表[timer=time-out]/godown(firstfloor)電梯升降的狀態(tài)機圖Movingupdo/movingtofloorMovingdowndo/movingtofloorIdletimer=0do/increasetimerarrivedarrivedgodown(floor)goup(floor)goup(floor)Onfirstfloor61[timer=time-out]/godown(firs事件事件是指已發(fā)生并可能引發(fā)某種活動的一件事
類數(shù)字手表類及其狀態(tài)機圖inc/hours:=hours+1Digital_Watchmode_button()inc()do/displayminutesSetminutesdo/displayhoursSethoursdo/displaycurrenttimeDisplaymode_buttonmode_buttoninc/minutes:=minutes+1mode_button狀態(tài)機圖62事件事件是指已發(fā)生并可能引發(fā)某種活動的一件事類數(shù)字手表類及事件的種類事件類型描述調(diào)用事件callevent收到一條被一個對象外部同步調(diào)用的請求改變事件changeevent布爾表達式值的改變信號事件signalevent收到供對象間異步通信用的一個外部的、被命名的信號(實體)時間事件timeevent到達一個絕對時間或經(jīng)過一段相對的時間量63事件的種類事件類型描述調(diào)用事件收到一條被一個對象外部同步調(diào)用IdleinputSenddo/send(input)tocorrespondingclassThesignalcouldbeanobjectofthefollowingclasses:Keyboard,LeftMouseButton,RightMouseButton,VoiceRecognition《signal》input{abstract}device:Devicetime:Time《signal》Keyboardcharacter:Charup:Booleandown:Boolean《signal》VoiceRecognitioncommando:string《signal》Mouse{abstract}up:Booleandown:BooleanxPos:intyPos:int《signal》RightMouseButton《signal》LeftMouseButton信號類層次64IdleinputSenddo/send(input)Th狀態(tài)機圖之間發(fā)送的消息
狀態(tài)機圖之間可通過動作(如在發(fā)送子句中指明接收者)或圖間的虛線箭頭向其他狀態(tài)機圖發(fā)送消息。當采用虛線箭頭時,狀態(tài)機圖必須畫在矩形框中。在圖間的消息箭頭有兩種畫法:從表示源對象的狀態(tài)機圖中的狀態(tài)遷移上畫虛線箭頭到表示目標對象的狀態(tài)機圖的邊框上;在兩個狀態(tài)機圖的邊框間畫虛線箭頭,表示源對象在其執(zhí)行期間的某時刻發(fā)送該消息。在狀態(tài)機圖之間發(fā)送消息時,在目標對象的狀態(tài)機圖中應(yīng)畫有一個捕獲這個消息的相應(yīng)的遷移。65狀態(tài)機圖之間發(fā)送的消息狀態(tài)機圖之間可通過動作(如在發(fā)送On()Off()RemoteControlPlay()Stop()OffOnOn()Off()Play()Stop()OffOn/StopOn/PlayOff()/Stop()CDPlayerOn()Off()Stop()Play()狀態(tài)機圖之間的消息發(fā)送66On()Off()RemoteControlPlay()S組合狀態(tài)一個簡單狀態(tài)沒有子結(jié)構(gòu),一個組合狀態(tài)被分解成區(qū)域,每個區(qū)域中包含一或多個直接子狀態(tài)。下面給出了UML中的主要狀態(tài)種類簡單狀態(tài):一個沒有子結(jié)構(gòu)的狀態(tài)正交狀態(tài)(并發(fā)):一個被分成多個區(qū)域的狀態(tài),當該狀態(tài)活躍時,每個區(qū)域中的一個直接子狀態(tài)并發(fā)地活躍
SS67組合狀態(tài)一個簡單狀態(tài)沒有子結(jié)構(gòu),一個組合狀態(tài)被分解非正交狀態(tài)(非并發(fā)):一個包含一或多個直接子狀態(tài)的組合狀態(tài),當該組合狀態(tài)活躍時,在同一時刻組合狀態(tài)中只有一個子狀態(tài)是活躍的初始狀態(tài):當嵌套狀態(tài)被調(diào)用時,表示開始狀態(tài)的偽狀態(tài)終結(jié)狀態(tài):一個特定的狀態(tài),它的激活表示嵌套狀態(tài)已完成了活動。S●●68非正交狀態(tài)(非并發(fā)):一個包含一或多個直接子狀態(tài)終止:一個特定的狀態(tài),它的激活將終止擁有該狀態(tài)機的對象的執(zhí)行
選擇:一個偽狀態(tài),它實現(xiàn)單個運行到完成(run-to-completion)遷移中的動態(tài)分枝69終止:一個特定的狀態(tài),它的激活將終止擁有該狀態(tài)機的對歷史狀態(tài):一個偽狀態(tài),它的激活將還原到組合狀態(tài)中先前活躍的狀態(tài)入口點:一個狀態(tài)機中外部可見的偽狀態(tài),它標識作為目標的內(nèi)部狀態(tài)出口點:一個狀態(tài)機中外部可見的偽狀態(tài),它標識作為源的內(nèi)部狀態(tài)HaTbU70歷史狀態(tài):一個偽狀態(tài),它的激活將還原到組合狀態(tài)非正交狀態(tài)非正交狀態(tài)(非并發(fā)):一個包含一或多個直接子狀態(tài)的組合狀態(tài),當該組合狀態(tài)活躍時,在同一時刻組合狀態(tài)中只有一個子狀態(tài)是活躍的。一個狀態(tài)可以有嵌套的子狀態(tài),一個非正交的組合狀態(tài)可以擁有一或多個直接子狀態(tài),當該組合狀態(tài)活躍時,該組合狀態(tài)在同一時刻中只有一個子狀態(tài)是活躍的。例如,汽車中的變速器有中間狀態(tài)、前進狀態(tài)和倒退狀態(tài),前進狀態(tài)又有三個排擋子狀態(tài):第一、第二、第三,在任一時刻,這三個子狀態(tài)同時只有一個是活動的,所以前進狀態(tài)是“非正交”組合狀態(tài)。71非正交狀態(tài)非正交狀態(tài)(非并發(fā)):一個包含一或多個直接子狀態(tài)非正交(嵌套)狀態(tài)ForwardStopdownshiftupshiftdownshiftupshiftFirstSecondThirdpushNpushRpushNpushFNeutralReverseTransmission72非正交(嵌套)狀態(tài)ForwardStopdownshift正交狀態(tài)三局二勝比賽的正交狀態(tài)PlayingrubberAVulnerabilityAwinAwinAwinsrubberNotvulnerablevulnerableBVulnerabilityBwinBwinBwinsrubberNotvulnerablevulnerable73正交狀態(tài)三局二勝比賽的正交狀態(tài)PlayingrubberA如果某些對象是另一些對象的聚集對象,則這些代表“部分”對象的狀態(tài)圖通常是并發(fā)的,它們都是聚集對象的并發(fā)子狀態(tài)。例如“汽車”對象是“點火”、“變速器”、“剎車”、“油門”等對象的聚集對象。transmissionignitionacceleratorcarbrake74如果某些對象是另一些對象的聚集對象,則這些代表“部分”對象的Carturnkeytostart[TransmissioninNeutral]releasekeyturnkeyoffOffStartingOnIgnitionAcceleratordepressacceleratorReleaseacceleratoronoffBrakedepressbrakereleasebrakeonoffTransmissionForwardStopdownshiftupshiftdownshiftupshiftFirstSecondThirdpushNpushRpushNpushFNeutralReverse[汽車]---正交狀態(tài)75Carturnkeytostart[Transmis可以用復雜遷移表示并發(fā)的狀態(tài)遷移。一個復雜遷移可以有多個源狀態(tài)或目標狀態(tài),它們可以把控制分解為并行運行的并發(fā)線程,或?qū)⒍鄠€并發(fā)線程合并成單個線程。一個復雜遷移用一個短而粗的垂直條(bar)表示,可以從一個或多個狀態(tài)(稱為源狀態(tài))用實線箭頭指向bar,bar還可以用一個或多個實線箭頭指向其它狀態(tài)(稱為目標狀態(tài))。遷移的警戒條件可寫在bar的旁邊。只有當對象處于所有的源狀態(tài)中,并且遷移的警戒條件為真時,遷移才被觸發(fā),意味著并發(fā)執(zhí)行的開始或結(jié)束。因此,bar實際上在并發(fā)活動中起同步的作用。76可以用復雜遷移表示并發(fā)的狀態(tài)遷移。33cashtakenandcardtakenreadySettingupReadytoresetEmittingdo:dispensecashdo:ejectcard復雜遷移77cashtakenandreadySettingup歷史指示器
歷史指示器用來記憶內(nèi)部的狀態(tài),用里面標有H字母的圓圈表示。歷史指示器作用于標有它的狀態(tài)區(qū)域,如果指向歷史指示器的遷移被觸發(fā),對象就會恢復到該狀態(tài)區(qū)域先前活躍的狀態(tài)。它使得對象能在活動被中斷或需要逆行時回到先前活躍的那個狀態(tài)。歷史指示器可以有幾個進入它的狀態(tài)遷移,但沒有離開它的狀態(tài)遷移。78歷史指示器歷史指示器用來記憶內(nèi)部的狀態(tài),用里面標有H字母的Restart()^Self.Restart()歷史指示器Create()[alternative=stop][alternative=stop][alt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026上半年重慶市中新互聯(lián)互通投資基金管理有限公司招聘2人筆試參考題庫及答案解析
- 2026年閩南師范大學引進高層次人才招聘97人備考題庫參考答案詳解
- 北京市密云區(qū)衛(wèi)生健康委員會關(guān)于2025年第五次公開招聘事業(yè)單位工作人員的備考題庫及一套完整答案詳解
- 四川省經(jīng)濟和備考題庫化廳直屬事業(yè)單位2025年公開考核招聘工作人員備考題庫及1套參考答案詳解
- 2026年長春汽車職業(yè)技術(shù)大學公開招聘59人備考題庫參考答案詳解
- 2026年江門市高新技術(shù)工業(yè)園集團有限公司公開招聘備考題庫附答案詳解
- 2026上海復旦大學附屬腫瘤醫(yī)院泌尿外科大學科團隊招聘筆試備考試題及答案解析
- 2026四川成都市成華區(qū)婦幼保健院招聘7人筆試模擬試題及答案解析
- 2026年畢節(jié)幼兒師范高等專科學校單招職業(yè)技能筆試參考題庫帶答案解析
- 2026福建南平市公路應(yīng)急保障中心招聘1人筆試備考題庫及答案解析
- 第四單元地理信息技術(shù)的應(yīng)用課件 【高效課堂+精研精講】高中地理魯教版(2019)必修第一冊
- 魯科版高中化學必修一教案全冊
- 提高隧道初支平整度合格率
- 2023年版測量結(jié)果的計量溯源性要求
- 建筑能耗與碳排放研究報告
- GB 29415-2013耐火電纜槽盒
- 中國古代經(jīng)濟試題
- 軟件定義汽車:產(chǎn)業(yè)生態(tài)創(chuàng)新白皮書
- 磷石膏抹灰專項施工方案
- 水電水利工程施工質(zhì)量管理培訓講義
- ArcMap制圖-地圖版面設(shè)計實驗報告
評論
0/150
提交評論