UML状态机图

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

状态机图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 / 57
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功