第二章目录•2.1统一建模语言(UML)•2.2UML状态机•2.3状态机与外部环境的接口•2.4层次化的状态机第七章目录•2.1统一建模语言(UML)•2.2UML状态机•2.3状态机与外部环境的接口•2.4层次化的状态机统一建模语言(UML)•统一建模语言UML是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括从需求分析到规格定义,再到构造和配置。•UML有大量的模型,这些模型依次组成信息系统开发模型的某些部分,比如系统需求等。这些模型包括:用例图、活动图、状态图、顺序图、协同图等。而本章所讲的状态机理论仅仅是UML的一个子集,它适用于嵌入式应用开发,且在设计阶段使用的最为广泛。第二章目录•2.1统一建模语言(UML)•2.2UML状态机•2.3状态机与外部环境的接口•2.4层次化的状态机状态机的概念•状态机是具有基于状态的动态行为的机器/系统。它是一个动态系统,对时间和状态产生的事件做出反应。一个状态机包含一组有限多的状态和一组转换的集合。其中,状态描述运算中不同的阶段,而转换所描述的是如何使运算从一个状态变化到另一个状态。状态机的概念案例:一个简单的洗衣机控制器状态机的概念洗衣机有一个开关用于设备启动,当洗衣机处于启动状态时,洗衣机的动作为停止、向左旋转和向右旋转。控制器必须确保机器处于旋转状态时,每旋转两次改变一下方向。而且,如果洗衣机的门被打开时,洗衣机必须关闭。最后,还有一个红灯来显示“正在洗衣”。状态机有以下四个状态:Stand_by当电源还没被打开时;Stopped当电源被打开,但洗衣机还没有运行时;Left当电源被打开,并且洗衣机处于向左旋转模式;Right当电源被打开,并且洗衣机处于向右旋转模式;状态机的概念洗衣机可以通过执行转换来改变状态,例如当门被打开时,状态从Left转换到Stand_by;当电源被打开时,状态从Stand_by转换到Stopped状态机的概念然而,大部分的嵌入式应用还需要一些不那么显而易见的内部控制。在洗衣机的例子中,每旋转两次后都需要改变旋转方向,也就是说,当洗衣机开始旋转时,先向一个方向转两次,然后向相反方向转两次。为了实现这些控制,洗衣机必须能够区分不同的状态:还没转过、转了一次、转了两次。而关于每次旋转的状态,并不是那么显而易见的。然而,若要在控制器里表达出这些,至少还需要引入另外的两个状态。Left_1当完成一次向左旋转时;Right_1当完成一次向右旋转时;状态机的概念洗衣机控制器:状态机的概念状态机的运算规则定义了一系列状态的序列:s0,s1,……si,……sj,……这里,s0是初始状态,而每一对状态如si,sj,会有一条实现从状态si到状态sj转换。从洗衣机的简单例子里,你可能会得到结论,认为这套运算方法非常简单,而且很容易概括出有关要素。然而,实际的系统往往非常庞大,也并不太容易被描述,而使用visualSTATE工具链,就可以很容易地处理和检查那些包含复杂运算的状态机模型描述,比如,它能检测出是否所有的运算都拥有特别的属性。状态图状态图是一幅表示状态机的图,是表示系统行为的一种技术。它由状态、转换、同步状态以及大量类似状态的称作伪状态的事物组成。其中,状态用圆角矩形表示,它是对象的一种存在条件,是一个可以持续很长一段时间的存在状态,该条件可与其他的存在条件相区别。可区别性可以用如下的手段来衡量:在进入、离开或位于该状态时,对象的行为;当处于该状态时,所接受的事件;后续状态的可达到性;状态图转化是对象处于某一具体状态时,对事件的响应的具体化。同步状态是状态的最高点,它有助于构建与状态的同步。伪状态是状态中的最高点,只能瞬态访问,而状态却可以长时间的访问。状态图是有向的,由通过转换连接起来的状态最高点(比如状态、同步状态和伪状态)组成。•注意:有时候,状态机和状态图两个概念表示相同内容,没有太大的区别。第二章目录•2.1统一建模语言(UML)•2.2UML状态机•2.3状态机与外部环境的接口•2.4层次化的状态机事件•当系统已经准备好对事件做出响应时,来自外部事件的发生就有可能引起系统状态发生转换。每个转换都有一个关联事件,而每个事件可以与几个转换相关。当某个事件发生时,所有与之关联的转换就得以执行。•洗衣机控制器许多事件与动作相关联:启动电源、打开门、开始/结束洗衣和做一次旋转动作,它们被成为:ON,DOOR,WASH,STOP和ROTATION。事件•为了描述一个事件与某个特定转换的关联关系,只要很简单地把事件的名称写在转换的边上,例如:在图中,事件WASH触发了一个转换,系统从状态Stopped到状态Left。动作•动作是在外部环境中可以被观察到的转换结果(输出),每一次转换除了完成系统状态切换外,还可以执行几个在外部可以观察到的动作。•动作可以带有一个或多个参数,并且可以有返回值。参数值可以在定义转换时被设置成:常量、变量或从输入事件中得到参数。•在洗衣机的例子里,仅有的动作就是打开或关闭红灯,用来显示洗衣机是否正在运行。动作为了描述某个转换执行一个动作,我们可以把动作名称放在转换边上。为了区分事件名称和动作名称,我们可以用符号“/”来分开他们,例如ON/Light表示了如图所示的转换:转到状态Stopped,并且执行动作Light第二章目录•2.1统一建模语言(UML)•2.2UML状态机•2.3状态机与外部环境的接口•2.4层次化的状态机层次化的状态机•本节将描述如何以一种层次化的结构来描述状态机,这种非常重要的结构原理可以使开发者很容易•为了说明这个概念,我们来看看如何用洗衣机控制器来建立一个层次化结构的状态机地掌握庞大复杂应用的系统架构。层次化的状态机•洗衣机控制器的系统状态总是处于三者之一:状态Stand_by、状态Stopped和状态Washing。在状态Washing时,还有一些与旋转有关的局部细节,然而从总体来看,这只是与状态Washing有关的内部细节。在这个抽象层次来看,洗衣机控制器是非常简单的层次化的状态机•现在让我们进一步观察一下状态Washing,这个状态有一些内部结构控制着旋转方向。层次化的状态机•然而,当机器处于状态Washing时,它实际上处于四个子状态中的某个状态:Left,Left_1,Right或Right_1。这四个状态之间的(内部)转换控制着旋转,因此就有了第二层(下层)的状态机。只要上层状态机离开状态Washing,底层状态机就看不见了,因为它们只与状态Washing有关。•在更庞大更复杂的应用中,我们可以划分出许多层次,来得到一个清晰易懂的系统框架。还有许多层次划分的技巧,能帮助你提高系统分析能力,我们将在后面的章节中进一步加以阐述。本章总结通过前面知识的学习,我们知道正确的状态机是应用visualSTATE平台的基础。在这一章中,我们学习了UML状态机的理论基础,知道了状态机的基本概念以及状态图的画法,深入学习了状态机中事件和状态的定义,以及它们之间的区别与联系,了解了层次化状态机的定义及其在处理复杂问题时的重要意义。思考题•简述UML的具体意义。•简述状态机的四要素。•根据本章中洗衣机功能的描述,画出关于它的层次化的状态机。