版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章状态机图UML建模设计与分析-状态机图本章的主要介绍状态机的含义、作用、构成及其创建和应用。学习要点是:●理解状态机及其构成。●掌握状态机图中的基本标记符。●理解转移的概念。●掌握事件和动作的含义及使用。●理解子状态机图组合状态。●掌握同步状态、历史状态的使用。
通常状态名英文的首字母要大写,并且最好给状态一个以“ing”为结尾的名字。(例如“Dialing”、“Faxing”)。当然有时也无法起这样的名字(例如“Idle”)。状态机是展示状态与状态转换的图状态机是一个类的对象所有可能的生命历程的模型。当对象探测到一个事件后,它依照当前的状态做出反应,反应包括执行一个动作和转换到新状态。什么是状态图UML状态机图能够展示这种变化,描述了一个对象所处的可能状态以及状态之间的转移,并给出了状态变化序列的起点和终点。
状态机图也叫状态(state),或状态表(statechart)。
状态机图与类图、对象图和用例图有着本质的不同。前面章节介绍过的这3种图能够对一个系统或者至少是一组类、对象或用例建立模型。而状态图只是对单个对象建立模型。
表征系统变化的方法可以说成是对象改变了自己的状态(state)以响应事件和时间的流逝。例如:当你拉下电灯的开关时,电灯改变了它的状态,由关变为开。当你按下远程遥控器的调频按钮时,电视机的状态由显示一个频道的节目变为显示另一个频道的节目。
经过一个适宜的时间后,洗衣机可以由洗涤变为漂洗状态。状态图机与活动图的区别状态机图只建模一个对象的行为,活动图可以建模多个对象的活动活动图中也允许建模特定活动中对象的某个状态基本组成状态(State)转移(Transition)事件(Event)活动(Activity)动作(Action)状态机图中的标识符有:状态、初始状态、终结状态、转移、判定决策点和同步。状态机图标记符下图显示了圆角矩形代表一个状态,状态间带箭头的实线代表状态的迁移(转移)。箭头指向目标状态。图中的实心圆代表状态转移的起点,公牛眼形圆圈代表终点。状态
状态是指对象某个时刻存在的方式,如休眠、打印、验证等。状态的4种形式添加动作的状态,状态名与动作中间以一条斜线隔开状态状态是对象执行某项活动或等待某个事件时的条件和状况状态是给定类的对象的一组属性值,这组属性值对所发生的事件具有相同性质的反应。对象在任何时候都会处于某种状态中,所有对象都有状态。对象所处的状态决定了它如何响应所检测到的事件或所接收的消息。通常,事件使对象从一个状态转向另一个状态(即状态的转移)开始状态结束状态一般状态复合状态历史状态状态简单(一般)状态状态名进入/退出动作在进入和退出状态时所执行的动作。entry/动作exit/动作内部转换在不使状态发生变更的情况下进行的转移。事件名[监护条件]/动作延迟事件延迟到下一状态中处理的事件表示:事件/defer子状态嵌套在另外一个状态中的状态组合状态包含子状态的状态称为组合状态(CompositeState)
将子状态机单独定义,对其进行命名(通常以大写字母开头),然后在需要使用的地方来引用它例顺序状态如果一个组成状态的子状态对应的对象在其生命周期内的任何时刻都只能处于一个子状态,也就是说状态机图中多个子状态是互斥的,不能同时存在,这种子状态被称为顺序状态或互斥状态或不相交状态。在顺序状态中最多只能有一个初态和一个终态。并发子状态
有时组成状态有两个或多个并发的子状态,此时称组成状态的子状态为并发子状态。
如果并发子状态中有一个子状态机比其它并发子状态先到达终态,先到的将等待,直到所有子状态到达终态。并发子状态同步状态同步状态是连接两个并发状态区域的特殊状态。
组合状态图区域之间是独立的,如果要求对并发区域之间的控制进行同步,就需要同步状态。历史状态历史状态用于在复杂的组合中标记转移过后需要返回的状态。UML状态机图中历史状态分为浅历史状态(历史状态)和深历史状态(详细历史状态)两种。例当从状态“结账”和“显示购物车”返回子状态“显示索引信息”时,将进入的是离开时的历史状态。也就是说,转到购物或结账区之后,再回到“浏览目录”的页面时,其中的内容是不变的,仍然保留原来的信息。子状态机引用状态
子状态机引用状态是表示激活其他子状态机的状态。声明子状态机引用状态时,使用关键字include来标记。如子状态机不是通过初态和终态进入和退出子状态机,可以用桩状态来实现。桩状态分为入口桩和出口桩,表示非默认的入口和出口。转移用来显示从一个状态到另一个状态的处理流。转换定义了处于此状态的对象对外界发生的事件所做出的反应。转移有多种,如自转移、内部转移、自动转移和复合转移等。转移自转移复合转移自动转移内部转移转移转移的组成源状态转换激发前对象所处的状态目标状态转换完成后,对象所处的状态触发事件引起转换的事件监护条件布尔表达式,真则触发事件有效动作转换被激活时,对应的动作被执行转换转移的区别进入和退出转换:当进入一个状态时,执行某个动作;或当退出某个状态时,执行什么动作。这时就可以使用进入和退出转换来表示内部转换:用来处理一些不离开该状态的事件事件事件是发生在时间和空间上可以定位,并值得注意的事情。如果某一事情的发生造成了影响,那么在状态模型中它是一个事件在OO中,事件是对一个可观察的事情的规格说明,这种事情的发生可以引发状态的转换事件可能有参数来辨别每个实例,就像类用属性来辨别每个对象通常事件后跟一个监护条件,监护条件为假,事件不能触发。如turnOn[有水]事件种类信号事件调用事件改变事件时间事件延迟事件事件种类1)信号事件所谓信号,是指由一个对象异步地发送、并由另外一个对象接收的一个已命名的对象。一个对象对一个信号实例的接收导致一个信号事件信号可以在类图中被声明为类元,并用关键字《signal》表示,信号的参数被声明为属性。信号的等级组织事件种类2)调用事件对操作调用的接收调用事件一般是同步的事件种类3)时间事件指定事件后,经过一段时间或到了指定时间,导致的一个时间事件。如after(5妙),after(A推出后5妙)事件种类4)改变事件用布尔表达式描述的指派条件变为真,就导致一个改变事件。无论表达式的值何时由假变为真,事件都发生变为真时,事件发生一次,即使之后变为假,产生的事件仍将保持,直到它被处理为止用when(bullexpress)表示事件种类5)延迟事件延迟事件是在当前状态不处理、推迟或排队等到对象转移到另一个状态再处理的事件。延迟事件使用关键字defer来标识,语法形式为:延迟事件/defer.转移的细节:事件和动作可以对状态转移线添加一些细节。可以指明引起转移发生的事件(触发器事件)和引起状态变化所需执行的计算(动作)。添加的事件和动作写在转移线上,触发器事件和动作名之间用反斜杠隔开。有时一个事件会引起没有相关动作的状态转移,或者有时一个转移是由于某个状态完成了它的活动所引起(而不是由于事件引起)。这种类型的状态转移被称为无触发器转移。
图形用户界面(GUI)是一个可以说明状态转移细节的例子。在这里,假设GUI可以处于以下3种状态之一:Initializing(初始化)。
Working(工作)。
ShutDown(关闭)。当打开PC电源的时候,自启动发生。因此TurningthePCon(打开PC)是一个触发器事件,它导致了GUI的状态转移到Initializing状态,而Bootup(自启动)是一个在转移过程中执行的动作。
由于Initializing状态中活动的完成,GUI将转移进入Working状态。当你对PC选择ShutDown(关闭机器)时,就生成了一个引起转移到ShutingDown状态的触发器事件,最后PC自己切断电源,整个过程结束。下面的状态图捕获了GUI的这些状态和转移。转移的细节:监视条件上面对GUI的状态变迁还有考虑不全之处。首先,如果你离开,你的计算机将无人照管或者你漫无目的坐在一旁,不打字或不碰鼠标,那么过一段时间屏幕保护程序就会运行。用状态转移的术语来说,就是如果GUI在足够的时间内没有接收到用户的输入,那么它将从Working状态转移到另一种状态——Screensaving(屏幕保护)状态。
进入屏幕保护状态取决于指定的时间间隔。比如是15分钟。15分钟的时间间隔是一个保护条件——当满足这个条件时,转移才能发生。
在前面的例子中,引起从Screensaving转移到working的触发器事件可能是一个击键操作、一次鼠标移动或者一次鼠标点击。任何这种类型的事件实际上是一个从用户到GUI的消息。因为对象之间正是通过相互发送消息进行通信,因此这是一个重要概念。在这种情况下,触发器事件是从一个对象(用户)消息和信号到另一个对象(GUI)的消息。在接收对象的状态图中,能够触发一个状态转移的消息叫做信号(signal)。在面向对象领域里,发送一个信号就等同于创建一个信号类的实例并将这个信号实例传送给接收对象。信号也有自己的属性。如果将信号看成是一个类,那么可以建立信号之间继承层次的类图。用来操纵电视机的遥控器是信号发送者的一个好例子,并且提供给我们建立信号类层次模型的机会。这个例子也提供了学习使用构造型的好机会。记住构造型是UML的自扩展方式。UML没有专门为状态机建模一般需以下步骤标识出需要进一步建模的实体标识出实体的开始状态和结束状态选定实体中一组有意义的对状态有影响的属性,结合事件动作条件以决定该对象的状态确定与实体相关的事件用被适当的事件触发的转换将这些状态连接起来识别各状态的进入推出动作如果必要,则建立复合状态状态机图应用对对象生命周期建模:主要描述对象能够响应的事件、对这些事件的响以及过去对当前行为的影响对反应型对象建模:这个对象可能处于的稳定状态,从一个状态到另一个状态之间的转换所需的触发事件,以及每个状态改变时发生的动作状态机图既可以用来表示一个业务领域的知识,也可以用来描述设计阶段对象的状态变迁订单处理订单处理(复合)
状态图能帮助分析员、设计员和开发人员理解系统中对象的行为。类图和对应的对象图只展示出系统的静态方面。它们展示的是系统静态层次和关联,并能告诉你系统的行为是什么。但它们不能说明这些行为的动态细节。
为什么状态机图很重要?开发人员尤其要知道对象是如何表现自己的行为的,因为他们要用软件实施这些行为。仅仅实施对象是不够的,开发人员还必须让对象做该做的事情。状态机图可以确保开发人员能够清楚的了解对象应该做什么,而不用自己去猜测它。如果有了一幅展示对象行为的清晰图景,那么开发小组构造出的系统满足需求的可能性就会大大增加。小结
系统中的对象改变自身的状态以响应事件和时间流逝,UML状态机图就能捕获这些状态变化。状态图的焦点是一个对象的状态变化。状态用一个圆角矩形表示,状态转移用带箭头的实线表示,它指向目标状态。状态图标中要写明状态名,并且可以添加动作。转移可能作为对触发事件的响应而发生的,并且需要一个活动。转移也可能因为状态中的活动的完成而引起,这种方式发生的转移叫做无触发器转移。最后,转移还可能起因于一个特定条件(守卫条件)的满足而引起。有时候状态可以包含子状态。子状态可能是顺序的(一个接着一个地发生)或者是并发的(同时发生)。包含子状态的状态被称为组成状态。历史状态是说明一个组成状态在对象转移出该组成状态之后还能够记住的子状态。历史状态可能是浅的也可能是深的。这个术语和嵌套的子状态有关。浅的历史状态只记忆了最顶层的子状态。而深的历史状态能够记忆所有层次的子状态。当一个对象向另一个对象发送稍息时,就触发了第2个对象的状态图中的某个转移,这个消息就被称为信号。使用扩展的构造型《Signal》的类图标,可以建立信号的继承层次。
UML必须包括状态机图,因为它能帮助分析员、设
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年浙江宁波市奉化区卫生健康系统招聘编外工作人员38人笔试核心备考题库及答案解析
- 2024黑龙江牡丹江市阳明区面向社会补充招聘公益性岗位人员13人笔试核心备考题库及答案解析
- 2024年度特色盘扣购销合同
- 2024年度企业云计算平台建设与运营合同
- 2024年留学事务委托合同范本
- 2024年度企业总经理人事聘用协议书
- 《运动疗法结合超声波及磁疗治疗早期膝关节骨性关节炎的临床观察》
- 2024年度市场推广合同:互联网平台推广合作2篇
- 2024联营股本借款合同范本
- 2024广东省事业单位劳动合同范本
- 汽车电子技术毕业论文
- C#编码规范(中文)
- 数字信号处理习题集大题及答案课件
- HXN5型机车常见故障处理指导书
- 蔬菜病害的识别与防治
- 浅谈高中英语教学中学生创造性思维的培养
- 药店商品分类目录(中西成药类、中药饮片、食品类、剂型)
- 配电设备的日常管理及维护保养(PPT41页)
- 网络教研——开辟校本教研新模式
- 教材自编传统节日校本课程
- 楼宇自控系统调试方案
评论
0/150
提交评论