1、2/68动态建模用来描述系统的动态行为动态行为,显示对象在系统运行期间不同时刻的动态交互动态交互。UML中用状态机图状态机图、活动图活动图、顺序图顺序图、通信通信图图和协作图协作图来建立动态模型。3/68 状态机图状态机图 活动图活动图 顺序图顺序图 通信图通信图4/68 活动图活动图 顺序图顺序图 通信图通信图5/68状态机图通常是对类描述的补充类描述的补充,它说明该类的对象所有可能的状态所有可能的状态,以及哪些事件将导致状态的改变导致状态的改变。状态机图描述了对象的动态行为,是一种对象生存周期对象生存周期的模型。6/681)列出对象具有的所有状态 状态分为起始状态起始状态、结束状态结束状态
2、和中间状态中间状态。一张状态机图可以有一个起始状态和若干个(可以为0)结束状态。2)标识导致状态转换的事件事件 当一个对象接收到某个事件时,会导致从一个状态转换到另一个状态,称为状态迁移状态迁移(transition)。3)为状态和迁移定义状态变量状态变量和动作动作 在状态迁移和/或处于某个状态中时都可能需要执行一些相应的动作,综合这些动作,使得对象完成相应的功能。7/68状态名状态名状态变量状态变量活动活动状态状态迁移迁移起始状态起始状态结束状态结束状态状态机图的基本符号状态机图的基本符号8/68电梯升降的状态机图电梯升降的状态机图Moving updo/moving to floorMov
3、ing downdo/moving to floorIdletimer=0do/increase timerarrivedarrivedgo down(floor)Moving to First floorgo up(floor)timer=time-outarrivedgo up(floor)Onfirst floor9/68一个状态由状态名状态名、状态变量状态变量和活动活动三部分组成。状态变量是状态机图所显示的类的属性类的属性,也可以是临时变量临时变量。活动部分列出了处于该状态时要执行的事事件和动作件和动作。10/68有三个标准事件:entry,exit和do。Entry和exit事件用于
4、指明进入进入和退出退出该状态 时的特定动作。do事件用于指明在该状态中该状态中时执行的动作。活动区中事件的语法如下:event-nameopt (argument list)opt guard-condition opt/activity-expressionopt 其中,事件名事件名可以是包括三个标准事件(entry,exit,do)在内的任何事件,参数表参数表表示该事件所需的参数,警戒条件警戒条件是一布尔表达式,动作动作表达式表达式是该事件将被执行的动作。11/68loginlogin time=current timeentry/type“login”do/get use_namedo/
5、get passwordhelp/display helpexit/login(use_name,password)login状态状态12/68自动售货机状态机图自动售货机状态机图idleCollecting moneyCoins in(amount)/add to balancetest and computeDo:test item and compute changeDo:dispense itemDo:make changeSelect(item)change 0change=013/681.状态迁移状态迁移 引起状态迁移的原因通常有两种:当标在迁移箭头上的事件出现事件出现时会引起状态
6、的迁移。此时,首先执行引起迁移的事件中的动作,然后迁移到新的状态,执行新状态中的内部动作(包括entry、exit、do以及用户定义的动作)。在执行do或用户定义的动作时,可以被外部的事件(将导致该状态的迁移)中断,但entry动作和exit动作是不能被中断的,并且它们总是要执行完的。14/68 当状态机图中相应的迁移上未指明事件时,表示当位于迁移箭头源头的状态中的内部动作(包括entry、exit、do以及用户定义的动作)全部执行完后全部执行完后,该状态迁移被自自动触发动触发。15/68自动售货机状态机图自动售货机状态机图idleCollecting moneyCoins in(amount
7、)/add to balancetest and computeDo:test item and compute changeDo:dispense itemDo:make changeSelect(item)change 0change=016/68状态迁移的语法如下:event-name opt (parameter-list)opt guard-condition opt /effect-listopt其中:事件名及其参数表事件名及其参数表指出触发迁移的事件,参数表的语法与“操作”中定义语法相同。警戒条件警戒条件是一个布尔表达式。如果状态迁移中既有事件特征又有警戒条件,则表示仅当这个事件
8、当这个事件发生发生并且警戒条件为真警戒条件为真时才触发相应的状态迁移;如果状态迁移上只有警戒条件只有警戒条件,则表示当该条件该条件变为真变为真时,触发状态迁移。17/68 effect-list是当该迁移触发时执行的过程表过程表 达式达式,即动作表达式动作表达式。表达式中可引用相应对 象中的属性、操作,或者事件特征中的参数。动作可以包括调用调用、发送发送和其它种类的动作其它种类的动作。一个状态迁移上可以有多个用/符号分隔动作表达式,它们按从左到右的次序依次执行依次执行。不允许有嵌套的或递归的动作表达式。18/68timer=time-out/go down(first floor)电梯升降的状
9、态机图电梯升降的状态机图Moving updo/moving to floorMoving downdo/moving to floorIdletimer=0do/increase timerarrivedarrivedgo down(floor)go up(floor)go up(floor)Onfirst floor19/68事件是指已发生并可能引发某种活动引发某种活动的一件事 类类数字手表类及其状态机图数字手表类及其状态机图inc/hours:=hours+1Digital_Watchmode_button()inc()do/displayminutesSet minutesdo/dis
10、play hoursSet hoursdo/displaycurrent timeDisplaymode_buttonmode_buttoninc/minutes:=minutes+1mode_button状态机图状态机图20/68事件的种类事件类型描述调用事件call event收到一条被一个对象外部同步调用的请求改变事件change event布尔表达式值的改变信号事件signal event收到供对象间异步通信用的一个外部的、被命名的信号(实体)时间事件time event到达一个绝对时间或经过一段相对的时间量21/68IdleinputSenddo/send(input)to corr
11、espondingclassThe signal could be an object of the following classes:Keyboard,Left Mouse Button,Right Mouse Button,Voice Recognitionsignalinputabstractdevice:Devicetime:TimesignalKeyboardcharacter:Charup:Booleandown:BooleansignalVoice Recognitioncommando:stringsignalMouseabstractup:Booleandown:Boole
12、anxPos:intyPos:intsignalRight MouseButtonsignalLeft MouseButton信号类层次信号类层次22/68 状态机图之间状态机图之间可通过动作(如在发送子句中指明接收者)或图间的虚线箭头向其他状态机其他状态机图发送消息。当采用虚线箭头时,状态机图必须画在矩形框中。在图间的消息箭头有两种画法:从表示源对象的状态机图中的从表示源对象的状态机图中的状态迁移状态迁移上上画虚线箭头画虚线箭头到表示目标对到表示目标对象的状态机图的边框上;象的状态机图的边框上;在两个状态机图的在两个状态机图的边框间画虚线箭头边框间画虚线箭头,表示源对象在其执行期间的,表示源
13、对象在其执行期间的某时刻发送该消息。某时刻发送该消息。在状态机图之间发送消息时,在目标对象的状态机图中应画有一个捕获这个消息的相应的迁移相应的迁移。23/68On()Off()Remote ControlPlay()Stop()OffOnOn()Off()Play()Stop()OffOn/StopOn/PlayOff()/Stop()CD PlayerOn()Off()Stop()Play()状态机图之间的消息发送状态机图之间的消息发送24/68 一个简单状态没有子结构,一个组合状态组合状态被分解 成区域,每个区域中包含一或多个直接子状态一或多个直接子状态。下面给出了UML中的主要状态种类
14、简单状态:一个没有子结构的状态 正交状态(并发):一个被分成多个区域被分成多个区域的状态,当该状态活跃时,每个区域中的一个直接子状态并并发地活跃发地活跃 SS25/68 非正交状态(非并发):一个包含一或多个直 接子状态的组合状态,当该组合状态活跃时,在同一时刻组合状态中只有一个子状态只有一个子状态是活跃的 初始状态:当嵌套状态被调用时,表示开始状态开始状态的伪状态 终结状态:一个特定的状态,它的激活表示嵌套状态已完成了活动已完成了活动。S26/68 终止:一个特定的状态,它的激活将终终 止止拥有该状态机的对象的执行 选择:一个伪状态,它实现单个运行到完成单个运行到完成(run-to-comp
15、letion)迁移迁移中的动态分枝27/68 历史状态:一个伪状态,它的激活将还还 原原到组合状态中先前活跃先前活跃的状态 入口点:一个状态机中外部可见的伪状态,它标识作为目标作为目标的内部状态 出口点:一个状态机中外部可见的伪状态,它标识作为源作为源的内部状态HaTbU28/68非正交状态(非并发):一个包含一或多个一或多个直接子状态 的组合状态,当该组合状态活跃时,在同一时刻组合状态中 只有一个子状态只有一个子状态是活跃的。一个状态可以有嵌套的子状态,一个非正交的组合状态可以拥有一或多个直接子状态,当该组合状态活跃时,该组合状态在同一时刻中只有一个子状态是活跃的只有一个子状态是活跃的。例如
16、,汽车中的变速器有中间状态、前进状态和倒退状态,前进状态又有三个排挡子状态:第一、第二、第三,在任一时刻,这三个子状态同时只有一个是活动的,所以前进状态是“非正交”组合状态。29/68非正交(嵌套)状态非正交(嵌套)状态ForwardStopdown shiftup shiftdown shiftup shiftFirstSecondThirdpush Npush Rpush Npush FNeutralReverseTransmission30/68三局二胜比赛的正交状态三局二胜比赛的正交状态Playing rubberA VulnerabilityA winA winA wins rubb
17、erNot vulnerablevulnerableB VulnerabilityB winB winB wins rubberNotvulnerablevulnerable31/68如果某些对象是另一些对象的如果某些对象是另一些对象的聚集对象聚集对象,则,则这些代表这些代表“部分部分”对象的状态图通常是并发对象的状态图通常是并发的,它们都是聚集对象的的,它们都是聚集对象的并发子状态并发子状态。例如例如“汽车汽车”对象是对象是“点火点火”、“变速器变速器”、“刹车刹车”、“油门油门”等对象的等对象的聚集对象聚集对象。transmissionignitionacceleratorcarbrake
18、32/68Carturn key to start Transmission in Neutralrelease keyturn key offOffStartingOnIgnitionAcceleratordepress acceleratorReleaseacceleratoronoffBrake depress brake release brakeonoffTransmissionForwardStopdown shiftup shiftdown shiftup shiftFirstSecondThirdpush Npush Rpush Npush FNeutralReverse汽车汽
19、车-正交状态正交状态33/68可以用复杂迁移复杂迁移表示并发的状态迁移。一个复杂迁移可以有多个多个源状态或目标状态,它们可以把控制分解为并行运行的并发线程并行运行的并发线程,或将 多个并发线程合并成合并成单个线程。一个复杂迁移用一个短而粗的垂直条垂直条(bar)表示,可以从一个或多个状态(称为源状态)用实线箭头指向bar,bar还可以用一个或多个实线箭头指向其它状态(称为目标状态)。迁移的警戒条件警戒条件可写在bar的旁边。只有当对象处处于所有的于所有的源状态中,并且迁移的警戒条件为真警戒条件为真时,迁移才被触发,意味着并发执行的开始或结束。因此,bar实际上在并发活动中起同步的作用同步的作用
20、。34/68cash taken and card takenreadySetting upReady to resetEmittingdo:dispense cashdo:eject card复杂迁移复杂迁移35/68 历史指示器用来记忆内部的状态内部的状态,用里面标有H字母的圆圈字母的圆圈表示。历史指示器作用于标有它的状态区域标有它的状态区域,如果指向历史指示器的迁移被触发,对象就会恢复到该状态区域该状态区域先前活跃的状态先前活跃的状态。它使得对象能在活动被中断或需要逆行时回到先前活跃回到先前活跃的那个状态。历史指示器可以有几个进入它的状态迁移,但没有离开它的状态迁移没有离开它的状态迁移。
21、36/68Restart()Self.Restart()历史历史指示器指示器Create()alternative=stopalternative=stopalternative=try againOut of memory()alternative=continueDisk Error()HDisk errorentry/fix diskdo/show question dialogdo/Ask alternativeMemory lowentry/show question dialogdo/ask alternativeOS runningRestart OSstart install
22、shieldInstallentry/ask installingquestionsdo/install softwareInstall software37/68 状态机图状态机图 顺序图顺序图 通信图通信图38/68 活动图可看作一种活动图可看作一种特殊形式的状态机特殊形式的状态机,用于对,用于对计算计算 流程流程和和工作流工作流建模。活动图的状态表示计算过程中建模。活动图的状态表示计算过程中 所处的各种状态。所处的各种状态。活动图用来描述完成一个操作活动图用来描述完成一个操作所需要的活动所需要的活动,或者是,或者是一个一个用况实例(场景)的活动用况实例(场景)的活动。活动图使用状态机图的
23、符号表示,活动图中的状态称活动图使用状态机图的符号表示,活动图中的状态称为为动作状态动作状态,用,用圆角矩形圆角矩形表示,动作状态之间的表示,动作状态之间的迁移迁移用箭头表示,迁移上可以附加用箭头表示,迁移上可以附加警戒条件警戒条件、发送子句发送子句和和动作表达式动作表达式。与状态机图不同的是,活动图中动作状态之间的迁移与状态机图不同的是,活动图中动作状态之间的迁移不是靠事件触发的,当动作状态中的不是靠事件触发的,当动作状态中的活动完成时活动完成时迁移迁移就被触发。就被触发。39/68Printer.Print(file)free disk spacedisk fullCustomerWind
24、ow.printAllCustomers()ShowMessageBox“Disk full”onscreenShowMessageBox“Printing”onscreenCreate postscriptfileRemoveMessageBox活动图实例活动图实例40/68 一张活动图可划分成若干个矩形区若干个矩形区,每个矩形区为一 个泳道泳道,泳道名放在矩形区的顶端。通常根据责任把活 动组织到不同的泳道中,它能清楚地表明动作在哪里执在哪里执 行行(在哪个对象中),或者表明一个组织的哪部分工作哪部分工作 (一个动作)被执行。一个动作迁移可以分解成二个或多个导致并行动作并行动作的迁移,若干个
25、来自并行活动的迁移也可以合并成一个迁移。值得注意的是,在合并之前并行迁移上的活动必须全部完成必须全部完成。在活动图中用黑体线来黑体线来表示迁移的分解和合并分解和合并。活动图中可以表示对象,对象用对象符号(矩形)对象符号(矩形)表示,它可作为活动的输入或输出输入或输出(用虚线箭头连接),也可展示一个对象受一特定动作的影响(用动作和对象之间的虚线表示)。41/68泳道泳道DisplayerSamplerUpdatingdisplayerInitiateSampler.Run(channel,frequency)MeasuringMeasuredvalue42/68 活动图中可以描述信号的发送和接收
26、 CustomerWindow.PrintAllCustomers()ShowMessageBox“Printing”onscreenCreate postscriptfilePrint(file)RemoveMessageBoxaPrinter:PrinterPrintPrint(file)活动图中的信号发送和接收活动图中的信号发送和接收43/68 活动图还可以用来描述用况 描述用况的活动图描述用况的活动图未付款未付款已付款已付款*对每一订单项对每一订单项有货有货缺货缺货取消并取消并退回订单退回订单收到订单收到订单付款认可付款认可检查检查订单项订单项制作并发放制作并发放提货单提货单更新库存更新库存制作并发放制作并发放缺货单缺货单制作并发放制作并发放采购单采购单
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。