UML状态机图分析_第1页
UML状态机图分析_第2页
UML状态机图分析_第3页
UML状态机图分析_第4页
UML状态机图分析_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、状态机图状态机图UML建模建模 设计与分析设计与分析-状态机图状态机图 本章本章的的主要介绍状态机的含义、作用、构成及主要介绍状态机的含义、作用、构成及其创建和应用。其创建和应用。学习要点是学习要点是: 理解状态机及其构成。理解状态机及其构成。 掌握状态机图中的基本标记符。掌握状态机图中的基本标记符。 理解转移的概念。理解转移的概念。 掌握事件和动作的含义及使用。掌握事件和动作的含义及使用。 理解子状态机图组合状态。理解子状态机图组合状态。 掌握同步状态、历史状态的使用。掌握同步状态、历史状态的使用。 通常状态通常状态名英文的名英文的首字母要大写,并且最好给首字母要大写,并且最好给状态一个以状

2、态一个以“ing”为结尾的名字。为结尾的名字。(例如例如“Dialing”、“Faxing”)。当然有时也无法起这样的名字当然有时也无法起这样的名字(例如例如“Idle”)。状态机是展示状态与状态转换的图状态机是展示状态与状态转换的图 状态机是一个类的对象所有可能的生命历程的模型。状态机是一个类的对象所有可能的生命历程的模型。当对象探测到一个事件后,它依照当前的状态做出当对象探测到一个事件后,它依照当前的状态做出反应,反应包括执行一个动作和转换到新状态。反应,反应包括执行一个动作和转换到新状态。 什么是状态图 UML状态机图状态机图能够展示这种变化,描述了一个对象所能够展示这种变化,描述了一个

3、对象所处的可能状态以及状态之间的转移,并给出了状态变化序处的可能状态以及状态之间的转移,并给出了状态变化序列的起点和终点。列的起点和终点。 状态机图状态机图也叫也叫状态状态(state),或状态,或状态表(表( statechart)。)。 状态机图状态机图与类图、对象图和用例图有着本质的不同。与类图、对象图和用例图有着本质的不同。前面章节介绍过的这前面章节介绍过的这3种图能够对一个系统或者至少是一种图能够对一个系统或者至少是一组类、对象或用例建立模型。而状态图只是对单个对象建组类、对象或用例建立模型。而状态图只是对单个对象建立模型。立模型。 表征系统变化的方法可以说成是对象改变了自己的表征系

4、统变化的方法可以说成是对象改变了自己的状态状态(state)以响应事件和时间的流逝。例如:以响应事件和时间的流逝。例如: 当你拉下电灯的开关时,电灯改变了它的状态,由当你拉下电灯的开关时,电灯改变了它的状态,由关变为开。关变为开。 当你按下远程遥控器的调频按钮时,电视机的状态当你按下远程遥控器的调频按钮时,电视机的状态由显示一个频道的节目变为显示另一个频道的节目。由显示一个频道的节目变为显示另一个频道的节目。 经过一个适宜的时间后,洗衣机可以由洗涤变为漂洗经过一个适宜的时间后,洗衣机可以由洗涤变为漂洗状态。状态。状态图机与活动图的区别状态机图只建模一个对象的行为,活动图可状态机图只建模一个对象

5、的行为,活动图可以建模多个对象的活动以建模多个对象的活动活动图中也允许建模特定活动中对象的某个活动图中也允许建模特定活动中对象的某个状态状态基本组成状态状态 (State)转移转移 (Transition)事件事件 (Event)活动活动 (Activity)动作动作 (Action)状态机图中的标识符有:状态机图中的标识符有:状态、初始状态、终结状态、转移、判定状态、初始状态、终结状态、转移、判定决策点和同步。决策点和同步。状态机图标记符 下图显示了圆角矩形代表一个状态,状态下图显示了圆角矩形代表一个状态,状态间带箭头的实线代表状态的迁移间带箭头的实线代表状态的迁移(转移转移)。箭头。箭头指

6、向目标状态。图中的实心圆代表状态转移的指向目标状态。图中的实心圆代表状态转移的起点,公牛眼形圆圈代表终点。起点,公牛眼形圆圈代表终点。状 态 状态是指对象某个时刻存在的方式,如休眠、状态是指对象某个时刻存在的方式,如休眠、打印、验证等。打印、验证等。状态的4种形式添加动作的状态,添加动作的状态,状态名与动作中间状态名与动作中间以一条斜线隔开以一条斜线隔开状 态状态是对象执行某项活动或等待某个事件时的状态是对象执行某项活动或等待某个事件时的条件和状况条件和状况状态是给定类的对象的一组属性值状态是给定类的对象的一组属性值,这组属性值这组属性值对所发生的事件具有相同性质的反应。对所发生的事件具有相同

7、性质的反应。对象在任何时候都会处于某种状态中,所有对象在任何时候都会处于某种状态中,所有对象都有状态。对象都有状态。对象所处的状态决定了它如何响应所检测到对象所处的状态决定了它如何响应所检测到的事件或所接收的消息。的事件或所接收的消息。通常,事件使对象从一个状态转向另一个状通常,事件使对象从一个状态转向另一个状态(即状态的转移)态(即状态的转移)开始状态开始状态结束状态结束状态一般状态一般状态复合状态复合状态历史状态历史状态状 态简单(一般)状态状态名状态名进入进入/退出动作退出动作在进入和退出状态时所执行的动作。在进入和退出状态时所执行的动作。 entry/动作动作 exit/动作动作内部转

8、换内部转换在不使状态发生变更的情况下进行的转移。在不使状态发生变更的情况下进行的转移。事件名事件名监护条件监护条件/动作动作 延迟事件延迟事件延迟到下一状态中处理的事件延迟到下一状态中处理的事件表示:事件表示:事件/defer子状态子状态嵌套在另外一个状态中的状态嵌套在另外一个状态中的状态组合状态 包含子状态的状态称为组合状态(包含子状态的状态称为组合状态(Composite State) 将子状态机单独定义,对其进行命名(通常以大写字母将子状态机单独定义,对其进行命名(通常以大写字母开头),然后在需要使用的地方来引用它开头),然后在需要使用的地方来引用它例例顺序状态 如果一个组成状态的子状态

9、对应的对象在其生命周期内的任何时刻都只能处于一个子状态,也就是说状态机图中多个子状态是互斥的,不能同时存在,这种子状态被称为顺序状态或互斥状态或不相交状态。在顺序状态中最多只能有一个初态和一个终态。并发子状态 有时组成状态有两个或多个并发的子状态,此时称组成状态的子状态为并发子状态。 如果并发子状态中有一个子状态机比其它并发子状态先到达终态,先到的将等待,直到所有子状态到达终态。并发子状态同步状态 同步状态是连接两个并发状态区域的特殊状态。 组合状态图区域之间是独立的,如果要求对并发区域之间的控制进行同步,就需要同步状态。历史状态 历史状态用于在复杂的组合中标记转移过后需要返回的状态。 UML

10、状态机图中历史状态分为浅历史状态(历史状态)和深历史状态(详细历史状态)两种。例当从状态“结账”和“显示购物车”返回子状态“显示索引信息”时,将进入的是离开时的历史状态。也就是说,转到购物或结账区之后,再回到“浏览目录”的页面时,其中的内容是不变的,仍然保留原来的信息。子状态机引用状态 子状态机引用状态是表示激活其他子状态机的状态。声明子状态机引用状态时,使用关键字include来标记。如子状态机不是通过初态和终态进入和退出子状态机,可以用桩状态来实现。桩状态分为入口桩和出口桩,表示非默认的入口和出口。转 移用来显示从一个状态到另一个状态的处理流。转换定义了处于此状态的对象对外界发生的事件所做

11、出的反应。转移有多种,如自转移、内部转移、自动转移和复合转移等。转 移自转移复合转移自动转移内部转移转 移转移的组成源状态转换激发前对象所处的状态目标状态转换完成后,对象所处的状态触发事件引起转换的事件监护条件布尔表达式,真则触发事件有效动作转换被激活时,对应的动作被执行转换转移的区别进入和退出转换:当进入一个状态时,执行某个动作;或当退出某个状态时,执行什么动作。这时就可以使用进入和退出转换来表示内部转换:用来处理一些不离开该状态的事件事件事件是发生在时间和空间上可以定位,并值得注意的事情。如果某一事情的发生造成了影响,那么在状态模型中它是一个事件 在OO中,事件是对一个可观察的事情的规格说

12、明,这种事情的发生可以引发状态的转换事件可能有参数来辨别每个实例,就像类用属性来辨别每个对象 通常事件后跟一个监护条件,监护条件为假,事件不能触发。 如turnOn有水事件种类信号事件调用事件改变事件时间事件延迟事件事件种类1)信号事件所谓信号,是指由一个对象异步地发送、并由另外一个对象接收的一个已命名的对象。一个对象对一个信号实例的接收导致一个信号事件信号可以在类图中被声明为类元,并用关键字signal表示,信号的参数被声明为属性。 信号的等级组织事件种类2)调用事件 对操作调用的接收调用事件一般是同步的事件种类3)时间事件指定事件后,经过一段时间或到了指定时间,导致的一个时间事件。如aft

13、er(5妙),after(A推出后5妙)事件种类4)改变事件用布尔表达式描述的指派条件变为真,就导致一个改变事件。无论表达式的值何时由假变为真,事件都发生变为真时,事件发生一次,即使之后变为假,产生的事件仍将保持,直到它被处理为止用when (bull express)表示事件种类5)延迟事件延迟事件是在当前状态不处理、推迟或排队等到对象转移到另一个状态再处理的事件。延迟事件使用关键字defer来标识,语法形式为:延迟事件/defer.转移的细节:事件和动作 可以对状态转移线添加一些细节。可以指明引起可以对状态转移线添加一些细节。可以指明引起转移发生的事件转移发生的事件(触发器事件触发器事件)

14、和引起状态变化所需执和引起状态变化所需执行的计算行的计算(动作动作)。添加的事件和动作写在转移线上,。添加的事件和动作写在转移线上,触发器事件和动作名之间用反斜杠隔开触发器事件和动作名之间用反斜杠隔开。有时一个事。有时一个事件会引起没有相关动作的状态转移,或者有时一个转件会引起没有相关动作的状态转移,或者有时一个转移是由于某个状态完成了它的活动所引起移是由于某个状态完成了它的活动所引起(而不是由而不是由于事件引起于事件引起)。这种类型的状态转移被称为无触发器。这种类型的状态转移被称为无触发器转移。转移。 图形用户界面图形用户界面(GUI)是一个可以说明状态转移细是一个可以说明状态转移细节的例子

15、。在这里,假设节的例子。在这里,假设GUI可以处于以下可以处于以下3种状态种状态之一:之一: Initializing(初始化初始化)。 Working(工作工作)。 Shut Down(关闭关闭)。 当打开当打开PC电源的时候,自启动发生。因此电源的时候,自启动发生。因此Turning the PC on(打开打开PC)是一个触发器事件,它导是一个触发器事件,它导致了致了GUI的状态转移到的状态转移到Initializing状态,而状态,而Bootup(自自启动启动)是一个在转移过程中执行的动作。是一个在转移过程中执行的动作。 由于由于Initializing状态中活动的完成,状态中活动的完

16、成,GUI将转移将转移进入进入Working状态。当你对状态。当你对PC选择选择ShutDown(关闭机关闭机器器)时,就生成了一个引起转移到时,就生成了一个引起转移到Shuting Down状态状态的触发器事件,最后的触发器事件,最后PC自己切断电源,整个过程结自己切断电源,整个过程结束。下面的状态图捕获了束。下面的状态图捕获了GUI的这些状态和转移。的这些状态和转移。转移的细节:监视条件 上面对上面对GUI的状态变迁还有考虑不全之处。首先,的状态变迁还有考虑不全之处。首先,如果你离开,你的计算机将无人照管或者你漫无目的如果你离开,你的计算机将无人照管或者你漫无目的坐在一旁,不打字或不碰鼠标

17、,那么过一段时间屏幕坐在一旁,不打字或不碰鼠标,那么过一段时间屏幕保护程序就会运行。用状态转移的术语来说,就是如保护程序就会运行。用状态转移的术语来说,就是如果果GUI在足够的时间内没有接收到用户的输入,那么在足够的时间内没有接收到用户的输入,那么它将从它将从Working状态转移到另一种状态状态转移到另一种状态Screensaving(屏幕保护屏幕保护)状态。状态。 进入屏幕保护状态取决于指定的时间间隔。比如进入屏幕保护状态取决于指定的时间间隔。比如是是15分钟。分钟。15分钟的时间间隔是一个保护条件分钟的时间间隔是一个保护条件当当满足这个条件时,转移才能发生。满足这个条件时,转移才能发生。

18、 在前面的例子中,引起从在前面的例子中,引起从Screensaving转移到转移到working的触发器事件可能是一个击键操作、一次鼠的触发器事件可能是一个击键操作、一次鼠标移动或者一次鼠标点击。任何这种类型的事件实标移动或者一次鼠标点击。任何这种类型的事件实际上是一个从用户到际上是一个从用户到GUI的消息。因为对象之间正的消息。因为对象之间正是通过相互发送消息进行通信,因此这是一个重要是通过相互发送消息进行通信,因此这是一个重要概念。在这种情况下,触发器事件是从一个对象概念。在这种情况下,触发器事件是从一个对象(用用户户)消息和信号到另一个对象到另一个对象(GUI)的消息。的消息。 在接收对

19、象的状态图中,能够触发一个状态转在接收对象的状态图中,能够触发一个状态转移的消息叫做信号移的消息叫做信号(signal)。在面向对象领域里,发在面向对象领域里,发送一个信号就等同于创建一个信号类的实例并将这送一个信号就等同于创建一个信号类的实例并将这个信号实例传送给接收对象。信号也有自己的属性。个信号实例传送给接收对象。信号也有自己的属性。如果将信号看成是一个类,那么可以建立信号之间如果将信号看成是一个类,那么可以建立信号之间继承层次的类图。继承层次的类图。 用来操纵电视机的遥控器是信号发送者的一个用来操纵电视机的遥控器是信号发送者的一个好例子,并且提供给我们建立信号类层次模型的机好例子,并且

20、提供给我们建立信号类层次模型的机会。这个例子也提供了学习使用构造型的好机会。会。这个例子也提供了学习使用构造型的好机会。记住构造型是记住构造型是UML的自扩展方式。的自扩展方式。UML没有专门为没有专门为状态机建模一般需以下步骤标识出需要进一步建模的实体标识出实体的开始状态和结束状态选定实体中一组有意义的对状态有影响的属性,结合事件动作条件以决定该对象的状态确定与实体相关的事件用被适当的事件触发的转换将这些状态连接起来识别各状态的进入推出动作如果必要,则建立复合状态状态机图应用对对象生命周期建模:主要描述对象能够响应的事件、对这些事件的响以及过去对当前行为的影响对反应型对象建模:这个对象可能处

21、于的稳定状态,从一个状态到另一个状态之间的转换所需的触发事件,以及每个状态改变时发生的动作状态机图既可以用来表示一个业务领域的知识,也可以用来描述设计阶段对象的状态变迁订单处理订单处理(复合) 状态图能帮助分析员、设计员和开发人员理解系状态图能帮助分析员、设计员和开发人员理解系统中对象的行为。类图和对应的对象图只展示出系统统中对象的行为。类图和对应的对象图只展示出系统的静态方面。它们展示的是系统静态层次和关联,并的静态方面。它们展示的是系统静态层次和关联,并能告诉你系统的行为是什么。但它们不能说明这些行能告诉你系统的行为是什么。但它们不能说明这些行为的动态细节。为的动态细节。 为什么状态机图很

22、重要? 开发人员尤其要知道对象是如何表现自己的行开发人员尤其要知道对象是如何表现自己的行为的,因为他们要用软件实施这些行为。仅仅实施为的,因为他们要用软件实施这些行为。仅仅实施对象是不够的,开发人员还必须让对象做该做的事对象是不够的,开发人员还必须让对象做该做的事情。状态机图可以确保开发人员能够清楚的了解对情。状态机图可以确保开发人员能够清楚的了解对象应该做什么象应该做什么,而不用自己去猜测它。如果有了一,而不用自己去猜测它。如果有了一幅展示对象行为的清晰图景,那么开发小组构造出幅展示对象行为的清晰图景,那么开发小组构造出的系统满足需求的可能性就会大大增加的系统满足需求的可能性就会大大增加。小

23、 结 系统中的对象改变自身的状态以响应事件和时系统中的对象改变自身的状态以响应事件和时间流逝,间流逝,UML状态机图状态机图就能捕获这些状态变化就能捕获这些状态变化。状。状态图的焦点是一个态图的焦点是一个对象的状态变化对象的状态变化。状态用一个圆。状态用一个圆角矩形表示,状态转移用带箭头的实线表示,它指角矩形表示,状态转移用带箭头的实线表示,它指向目标状态。向目标状态。 状态图标中要写明状态名,并且状态图标中要写明状态名,并且可以添加动作。可以添加动作。转移转移可能作为对触发事件的响应而发生的,并且需要可能作为对触发事件的响应而发生的,并且需要一个活动。转移也可能因为状态中的活动的完成而引一个

24、活动。转移也可能因为状态中的活动的完成而引起,这种方式发生的转移叫做无触发器转移。最后,起,这种方式发生的转移叫做无触发器转移。最后,转移还可能起因于一个特定条件转移还可能起因于一个特定条件(守卫条件守卫条件)的满足而的满足而引起。引起。 有时候状态可以包含子状态。子状态可能是顺序有时候状态可以包含子状态。子状态可能是顺序的的(一个接着一个一个接着一个地发生地发生)或者是并发的或者是并发的(同时发生同时发生)。包含子状态的状态被称为组成状态。历史状态是说明包含子状态的状态被称为组成状态。历史状态是说明一个组成状态在对象转移出该组成状态之后还能够记一个组成状态在对象转移出该组成状态之后还能够记住的子状态。历史状态可能是浅的也可能是深的。这住的子状态。历史状态可能是浅的也可能是深的。这个术语和嵌套的子状态有关。浅的历史状态只记忆了个术语和嵌套的子状态有关。浅的历史状

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论