UML状态机图介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
UML状态机图
1.状态机图的作用
状态机图是用来为对象的状态及造成状态改变的事件建模。
UML的状态机图主要用于建立对象类或对象的动态行为模型,表现一个对象所经历的状态序列,引起状态或活动转移的事件,以及因状态或活动转移而伴随的动作。
状态机图也可用于描述Use Case,以及全系统的动态行为。
状态机图表示一个模型元素在其生命期间的情况:从该模型元素的开始状态起,响应事件,执行某些动作,引起转移到新状态,又在新状态下响应事件,执行动作,引起转移到另一个状态,如此继续,直到终结状态。
2.状态机图的基本元素
状态机图的基本元素包括:状态、转移、事件、伪状态和复合状态。
状态图由状态(state,圆角矩形)与转换(transition,连接状态的箭头)组成。
引起状态改变的触发器(trigger)或者事件(event)沿着转换箭头标示。
如图所示灯光有2个状态:off与on。
当lift switch或者lower switch事件被触发时,灯光状态会改变。
图表1 状态图的基本元素
状态图通常有初始伪状态(initial pseudostate)和最终状态(final state),分别表示状态机的开始和结束。
初始状态用实心圆表示,终止状态用牛眼表示。
图表2状态图中的初始伪状态与最终状态
2.1状态(state)
状态是指在对象生命周期中满足某些条件、执行某些活动或等待某些事件的一个条件和状况。
一个状态通常包括名称、进入/退出活动、内部转换、子状态和延迟事件等五个部分组成。
图表3 带分栏的状态
在状态图的下面部分可以标识内部活动,包括事件和动作(event/action)。
Entry和exit事件是标准的,任何一个进入状态的转换都将会调用entry动作,任何一个退出状态的转换都将会调用exit动作,而且也可以添加自己的事件。
与do行为不同,进入和退出行为是无法被中断的。
图表4状态的内部行为
例如,咖啡机正在煮咖啡的状态(Brewing),并且可以把行为写在状态内。
图表5状态中"d o"的行为细节
内部转换(Internal transition)是对事件做出响应,并执行一个特定的活动,但并不引起状态变化或进入转换、离开转换,用来处理一些不离开该状态的事件。
内部转换的表示方法rigger[guard]/behavior,并且被列在状态内。
2.2转换(transition)
转换以箭头显示,描述状态从源状态到目标状态的改变。
转换描述(transition description)描述引起状态改变的情况。
完整的转换描述表示法是触发器[监护条件]/转换行为(trigger[guard]/behavior),每个元素都是可以选择的。
图表6状态图为触发器、监护条件和转换行为之一建模
触发器(trigger)是能够引起转换的事件,在图表5处理用户输入的系统里,keystroke触发器可引发系统状态从Gathering input改变到Processing input。
监护条件(guard)是允许或封锁转换的一个Boolean条件。
如果条件为真,接受该转换;否则,封锁该转换,停留在原状态。
示例中,在按键盘键后,触发器运行,如果该输入少于要求的长度,guard可以用来封锁该转换。
转换行为(transition behavior)是转换发生时所执行的连续活动。
例如,状态从Gathering input改变到Processing input时执行submit input的动作。
图5也显示状态可以转换成自身,即self-transition。
2.3伪状态(Pseudo State)
伪状态指在一个状态机中具有状态的形式,同时具有特殊行为的顶点。
它是一个瞬时状态,用于构造转换的细节。
当伪状态处于活动时,状态机还没有完成从运行到完成的步骤,也不会处理事件。
伪状态用来连接转换段,到一个伪状态的转换意味着会自动转换到另一个状态而不需要事件来触发。
伪状态包括:初始状态、入口点、出口点、选择和合并、结合和分叉、连接、终止和历史状态。
入口点是状态内的一个外部可见的伪状态,外部转换可以将它作为目标。
包含入口点的状态将成为转换的有效目标状态,在UML中,用状态符号边框的空心圆表示。
出口点也是状态内的一个外部可见的伪状态,外部转换可以将它作为源,它代表状态内的一个终态,在UML中,用状态符号边框的十字交叉圆表示。
图表7入口点与出口点
选择伪状态用来强调由Boolean条件决定接下来执行哪个转换,根据节点后的警戒条件动态计算选择转换路径,在UML中,用菱形表示,其输出必须包含警戒条件且不能有触发器。
合并表示两个或者多个可选的控制路径汇合在一起,在UML中用菱形表示。
图表8选择伪状态
分叉和结合伪状态表示分叉成并行状态,然后再结合在一起。
在UML中,用一段粗线表示。
图表9分叉与结合伪状态
连接是状态机中表示整体转换为部分的一种伪状态。
在UML中,连接用小的实心圆表示。
图表10连接伪状态
历史伪状态,用于表示退出所属的复合状态后,它会记录复合状态之前处于活动的子状态。
历史伪状态包括浅度历史伪状态和深度历史伪状态。
浅度历史伪状态用带字母H的圆表示,深度历史伪状态用带字母H和*的圆表示。
2.4复合状态
UML中的复合状态(composite state)允许并发(concurrent)的状态,即处在某个状态的对象同时在做一个或多个事情。
每个组成状态包含一个或多个状态图的状态,每个图属于一个区域,各区域以虚线分隔,区域内的状态被称为组成状态的子状态。
图表11复合状态包含一个或多个状态图
3.状态机图的例子
图表7表示CD播放器的状态图,包括了不同的状态及转换。
通过分析这个例子,观察触发器与监护条件如何用来为不同类型的状态改变建模。
如果指定了触发器,但是没有监护条件。
当触发器被触动时,接受转换。
当press stop发生时,CD播放器从Playing状态变为Stopped状态。
如果指定了触发器和监护条件,当触发器被触动,并且监护条件为真时,接受转换。
在press play发生,并且播放器中有光盘时,CD播放器才会从Stopped 状态转换到Playing状态。
也可以使用监护条件显示转换之间的选择,监护条件为真时,接受转换。
如CD播放器读完一张光盘后,如果没有其他光盘,则转换为Stopped状态;如果有其他光盘,则转换为Playing状态;其中有其他光盘,包含了转换行为change disk。
图表12CD播放器状态图。