您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > 南理工泰科院UML课件06
第6章状态图计算机科学与技术主要内容•状态图的基本概念•状态图的基本组成•状态及状态转换•状态机建模技术•状态图示例状态图的例子远程网络教学系统中学生下载课件的状态图状态图的例子PhoneCallIdleActiveTimeoutdo/playmessageDialTonedo/playdialtoneafter(15sec.)Dialingafter(15sec.)dialdigit(n)Invaliddo/playmessagedialdigit(n)[invalid]dialdigit(n)[incomplete]TalkingBusydo/playbusytoneConnectingdialdigit(n)[valid]/connectbusyRingingdo/playringingtoneconnectedcalleeanswers/enablespeechcallerhangsup/disconnectliftreceiver/getdialtonedeinstallcancelserviceinstallafter(60sec.)状态图的基本概念•状态机(statemachine)是一种行为建模元素。一个状态机描述了一种对象或一种交互在其生命期中响应各种事件而经历的一系列状态转换,以及对事件的反应效果,如动作和活动。–状态机用于描述一个对象在其生存期间的动态行为,表现对象响应事件所经历的状态序列以及伴随的动作。–状态机是用于描述状态与状态转换的。状态图的基本概念•状态图(StatechartDiagram)本质上就是一个状态机,状态图是用来显示状态机的图,一个状态机可以用多张状态图描述。•状态图描述了一个实体基于事件反应的动态行为,显示了实体如何让根据当前所处的状态对不同的事件做出反应的。状态图的基本组成•在UML中状态图由表示状态的节点和表示状态之间转换的带箭头的直线组成,并且状态的转换由事件触发。•状态图包括三种基本组成元素:–状态(state)–转换(transition)–事件(event)状态HasbalanceNobalanceDebt简单状态的表示,圆角矩形加命名•状态(state)是指在对象的生命周期中满足某些条件、执行某些活动或等待某些事件时的一个条件或状况。–对象在任何时候都会处于某种状态中,所有对象都有状态–对象所处的状态决定了它如何响应所检测到的事件或所接收的消息。清醒-(被批评)-生气醉酒-(被批评)-无反应–通常,事件使对象从一个状态转向另一个状态(即状态的转换)状态•初态startstate–显示状态图中状态机执行(execution)的开始–一个状态机只能有一个初态,因为每一个执行都是从相同的地方开始的。如果一个状态机用多张状态图描述,则多张图用一个初态,Rose中只允许画一个初态,其它地方拖动使用–复合状态中可以使用新的初态–表示为一个实心圆,而且只有输出,没有输入。•终态endstate–表示最后的或者终端状态;–终态数目可以不确定,也可以没有。–表示为一个“牛眼”符号。转换•一个状态转换transition是从一个源状态到一个目标状态之间的一个有向关系。•事件用来指示是什么导致了模型中状态的改变。•条件说明状态转移必须要满足的前提。条件一般为一个布尔表达式。•动作说明了当事件发生时发生了什么行为。–可执行的原子计算–不可中断,其执行时间可忽略不计–当转换被引发时,它对应的动作被执行。它一般是一个简短的处理过程。转换银行账号的状态转换HasbalanceDebtconsume(q)[qbalance]/balance=balance-qsave(q)[qabs(balance)]/balance=balance+q自转换HasbalanceDebtconsume(q)[balance-qMaxDebt]/balance=balance-qsave(q)/balance=balance+q转换NobalanceHasbalancesave(q)/balance=balance+qDebtconsume(q)[balance–qmaxDebt]/balance=balance-qconsume(q)[balance==q]/balance=balance-qconsume(q)[qbalance&&balance–qmaxDebt]/balance=balance-qsave(q)[qabs(balance)]/balance=balance+qsave(q)[q==abs(balance)]/balance=balance+qremoveconsume(q)[qbanlance]/balance=balance-qsave(q)[qabs(balance)]/balance=balance+q状态转换Right-mouse-down(location)[locationinwindow]/object:=pick-object(location);object.highlight();showContextMenu(location)一些状态转换具有较复杂的行为:事件•事件表示在某一特定的时间或空间出现的能够引发状态改变的一种运动变化。•事件是一个激励的出现,它定义一个触发子(Trigger)触发对象改变其状态,任何影响对象的事物都可以是事件。•在建模时约定,事件是瞬间发生的,没有时间延续。事件发生不可再分割,原子性的。•两个事件之间可能有前后次序,也可能没有次序,即可并发concurrent。•事件也包括出现错误或异常的情形。例如:超时,交易终止等。事件学生大学学习过程状态图事件•常见的事件有以下4种:–调用事件callevent–改变事件changeevent–信号事件signalevent–时间事件timeevent调用事件•调用事件callevent是对象接收到对于某操作的一个调用请求。•被调用的操作应该是当前对象的操作,而请求来自何方,状态机并不关心。一个操作调用事件期望的结果往往是事件的接受者触发一个转换,从而执行相应的操作。•调用事件应指定被调用操作的名称及实参,实参可省略。改变事件•改变事件changeevent就是一个改变导致某个布尔表达式表示的条件为真。改变事件的意图是要轮循计算这个表达式,无论何时只要表达式的值由假变为真,改变事件就发生了。•触发器必须指定一个布尔表达式,一般用“when”开头。例如:–when(roomtemperatureheatingsetpoint)//当房间温度低于加热器设定温度时,改变事件发生–when(roomtemperaturecoolingsetpoint)//当房间温度高于制冷器设定温度时,改变事件发生–when(batterypowerlowerlimit)//当电池电力小于低界时,改变事件发生改变事件•监护条件与改变事件的区别:–监护条件只是在引起转换的触发器事件触发时和事件接收者对事件进行处理时被赋值一次。–修改事件则可以被多次赋值直到条件为真,多次赋值满足条件后转换也会被激发。信号事件•信号事件signalevent是接受到异步信号的一种消息事件。•信号signal是对象之间进行异步通信的手段。•信号间可以有泛化,信号可以是其他信号的子信号,它们继承父信号的属性,并可以触发包含信号类型的转换。接收到input信号这一事件发生信号事件•一种车库电动门的例子:电机驱动,上下移动,向上移动开门,向下关门,当门完全打开或者完全关闭时,电机自动停转。•depress是事件,dooropen/closed是事件。•用户需要几个键的开关来控制电动门?一键控制depress。closedopeningopenclosingdepress/motorupdepress/motordowndooropen/motoroffdoorclosed/motoroffdepress/motorupdepress/motordownElecDoor时间事件•确定一个时间点,在此点发生的事件称为时间事件timeevent。这种事件的表示需要指定一个事件表达式,如对象进入某状态之后经过一段时间,即相对时间;或者到达一个绝对时间。–表示一个相对时间可用“after”开头,例如“after(15sec.)”。–表示一个绝对时间可用“at”或“when”开头,例如“at2008-4-1when(11:35)”。小练习•电水壶:on和off两个状态,初态off,烧坏则转换到终态。trunOn事件发生时,判断水壶是否有水,若没有水,则仍处于off状态,若有水,则turnOn事件引起烧水活动,使状态从off转入on,水开,则从on转入off状态状态的内部•一个状态可表示内部活动、内部转换和复合状态。•内部活动:在一个状态内部的动作或活动,当对象处于该状态,这些动作或活动就执行。•内部活动包括:-入口行为entrybehavior。当转入该状态时自动执行的行为,在所有转换行为之后、在内部状态活动之前执行。表示为“entry/dosth”。一次转入仅执行一次。-出口行为exitbehavior。当转出该状态时自动执行的行为,它在内部状态活动执行之后、在转换行为之前执行。表示为“exit/dosth”。一次转出仅执行一次。-状态活动doactivity。表示处于该状态的对象正在进行的行为,它在入口行为之后、出口行为之前执行。表示为“do/dosth”。在此状态中可执行多次。状态的内部•内部转换。内部转换没有目标状态,不会导致状态改变。每个内部转换都可说明事件、条件和动作。如果条件不同,一个事件可出现多次。•延迟事件。当一个事件发生时,它并没有立即触发状态转换,也没有丢失,只是这个事件的识别和处理被推迟了,这需要某种内部事件队列的机制。entry/password.reset()exit/password.test()do/suppressechodigit/handlecharacterclear/password.reset()help/displayhelpprint/deferEnterPassword入口行为出口行为状态活动内部转换延迟事件状态的内部活动、内部转换、延迟事件状态的内部使用“入口行为entry”来表示各状态内部马达的动作,延伸了4个状态的内涵,简化了状态之间的转换。entry/motoroffclosedentry/motorupopeningentry/motoroffopenentry/motordownclosingdepressdepressdooropendoorcloseddepressdepressElecDoor复合状态•复合状态是含有一组子状态的状态。•一个复合状态可能是单个区间,也可能有多个区间。一个区间中包含一组状态和相关的转换。•如果一个复合状态只有单个区间,则表示为一个嵌套的状态图。Dialingentry/startdialtoneexit/stopdialtoneStartentry/number.append(n)PartialDialdigit(n)[number.isComplete()]digit(n)一个单区间的复合状态单区间中的各子状态之间是互斥的即一个对象不能同时处于同区间的两个子状态之中如果一个对象处于一个复合状态,就一定处于其某个子状态之中复合状态CourseAttemptStudyingLab1labdoneLab2labdoneTermProjectprojectdoneFinalTestpassFailedfailedPassed含有三个区间的复合状态各区间之间是正交的,可并行;一个对象可同时处于多个区间的某个子状态之中。复合状态的状态转换复合状态的状态转换规则:•转入一个复合状态等价于转入其中始态。•转出一个复合状态等价于该转换作用于其中每个子状态。•特例:用一个无触发转换(无事件和条件的转换)转出一个复合状态时,有以下两种情形:–如果复合状态
本文标题:南理工泰科院UML课件06
链接地址:https://www.777doc.com/doc-2597713 .html