状态图的基本概念:

状态图是UML中对系统动态方面建模的图之一,它通过建立类对象的声明周期模型来描述对象随时间变化的动态行为。

状态图用于描述模型元素的实例(如对象或交互)的行为。它适用于描述状态和动作的顺序,不仅可以展现一个对象拥有的状态,还可以说明时间如何随着时间的推移来影响这些状态。

状态图的定义:

先来了解一下状态机:

状态机是一种记录下给定时刻状态的设备,他可以根据各种不同的输入对每个给定的变化而改变其状态或引发一个动作,如计算机、各自客户端软件、web上的各种交互页面都是状态机。

1.  状态图的概念

状态图由状态、转换、事件、活动和动作 5 部分组成:

(1)状态指的是对象在其生命周期中的一种状况,处于某个特定状态中的对象必然会满足某些条件、执行某些动作或者是等待某些事件。一个状态的生命周期是一个有限的时间阶段。

(2)转换指的是两个不同状态之间的一种关系,表明对象将在第一个状态中执行一定的动作,并且在满足某个特定条件下由某个事件触发进入第二个状态。

(3)事件指的是发生在时间和空间上的对状态机来讲有意义的那些事情。事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态,如信号、对象额度创建和销毁等。

(4)活动指的是状态机中进行的非原子操作。

(5)动作指的是状态机中可以执行的那些原子操作,所谓原子操作指的是它们在运行的过程中不能被其他消息所中断,必须一直执行下去,最终导致状态的变更或者返回一个值。

状态

状态用于对实体在其生命周期中的各种状况进行建模,一个实体总是在有限的一段时间内保持一个状态。状态由一个带圆角的矩形表示,状态的描述应该包括:名称、入口和出口动作、内部转换和嵌套状态。

转换

在 UML 的状态建模机制中,转换用带箭头的直线表示,一端连接源状态,箭头指向目标状态。转换还可以标注与此转换相关的选项,如事件、监护条件和动作等,如果转换上没有标注触发转换的事件,则表示此转换自动进行。

如图,登录就是源状态,经过验证事件的触发,转换到登录成功状态。

初始状态

每个状态图都应该有一个初始状态,它代表状态图的起始位置。初始状态是一个伪状态(一个和普通状态有连接的假状态),对象不可能保持在初始状态,必须要有一个输出的无触发转换(没有事件触发器的转换)。通常初始状态上的转换是无监护条件的,并且初始状态只能作为转换的源,而不能作为转换的目标。
一个状态图只能有一个初始状态,用一个实心的圆表示。

终止状态

终止状态是一个状态图的终点,一个状态图可以拥有一个或者多个终止状态。
对象可以保持在终止状态,但是终止状态不可能有任何形式的触发转换,它的目的就是为了激发封装状态上的完成转换。

判定

活动图和状态图中都有需要根据给定条件进行判断,然后根据不同的判断结果进行不同的转换的情况。
实际就是工作流在此处按监护条件的取值发生分支,在 UML 中判定用空心菱形表示。

状态图的作用:

状态图的作用主要体现在以下几个方面:

(1)状态图清晰的描述了状态之间的转换顺序,通过状态的转换顺序也就可以清晰的看出事件的执行顺序。如果没有状态图我们就不可避免的要使用大量的文字来描述外部事件的合法顺序。

(2)清晰的事件顺序有利于程序员在开发程序时避免出现事件错序的情况。

(3)状态图清晰的描述了状态转换时所必须的触发事件、监护条件和动作等影响转换的因素,有利于程序员避免程序中非法事件的进入。

(4)状态图通过判定可以更好的描述工作流因为不同的条件发生的分支。

状态图的组成:

状态图的组成要素有状态、转换、事件、判定、同步。

状态是状态图的重要组成部分,他描述了一个类对象生命周期中的一个时间段。

状态可以分为简单状态和组成状态。简单状态指的是不包含其他状态的状态,简单状态没有子结构,但是他可以具有内部转换、进入动作、退出动作等。

除了简单状态和组成状态外,状态还包括状态名、内部活动、内部转换、入口和出口动作、历史状态。

内部活动:

状态可以包含表达式的内部活动。当状态浸入式活动在进入动作完成后就开始。如果活动结束,状态就完成,然后一个从这个状态出发的转换被触发,否则状态等待出发转换以引起状态本身的改变。

历史状态(History States):

历史状态是一个伪状态(Pseudostate),其目的是记住从组合状态中退出时所处的子状态,当再次进入组合状态,可直接进入这个子状态,而不是再次从组合状态的初态开始。

在上图的状态图中,正常的状态顺序是:【Washing】- >【Rinsing】->【Spinning】。

如果是从状态【Rinsing】突然停电(Power Cut)退出,,洗衣机停止工作进入状态【Power Off】,当电力恢复时直接进入状态【Rinsing】。

转换:

转换用于表示一个状态机的两个状态之间的一种关系,即一个在某初始状态的对象通过执行指定的动作并符合一定的条件下进入第二种状态。

在这个状态的变化中,转换被称作激发。在激发之前的状态叫做源状态,在激发之后的状态叫做目标状态。简单转换只有一个源状态和一个目标状态。复杂转换有不止一个源状态和(或)有不止一个目标状态。

1.外部转换

外部转换是最普通最常见的一种转换。如图来看:

还是这张图,登录就是初始状态,验证是指定的动作,登录成功是目标状态。

2.内部转换:

内部转换只有源状态,没有目标状态,不会激发入口和出口动作,因此内部转换激发的结果不改变本来的状态。如果一个内部转换带有动作,它也要被执行。内部转换常用于对不改变状态的插入动作建立模型。要注意的是内部转换的激发可能会掩盖使用相同事件的外部转换。

3.完成转换:

完成转换没有明确标明触发器事件的转换是由状态中活动的完成引起的。完成转换也可以带一个监护条件,这个监护条件在状态中的活动完成时被赋值,而不是活动完成后被赋值。

4.监护条件:

转换可能具有一个监护条件,监护条件是一个布尔表达式,它是触发转换必须满足的条件。当一个触发器事件被触发时,监护条件被赋值。如果表达式的值为真,转换可以激发;如果表达式的值为假,转换不能激发;如果没有转换适合激发,事件会被忽略,这种情况并非错误。如果转换没有监护条件,监护条件就被认为是真,而且一旦触发器事件发生,转换就激活。
从一个状态引出的多个转换可以有同样的触发器事件。若此事件发生,所有监护条件都被测试,测试的结果如果有超过一个的值为真,也只有一个转换会激发。如果没有给定优先权,则选择哪个转换来激发是不确定的。

5.触发器事件:

触发器事件就是能够引起状态转换的事件。如果此事件有参数,这些参数可以被转换所用,也可以被监护条件和动作的表达式所用。触发器事件可以是信号、调用和时间段等。
对应与触发器事件,没有明确的触发器事件的转换称作结束转换(或无触发器转换),是在结束时被状态中的任一内部活动隐式触发的。

6.动作:

动作( action )通常是一个简短的计算处理过程或一组可执行语句。动作也可以是一个动作序列,即一系列简单的动作。动作可以给另一个对象发送消息、调用一个操作、设置返回值、创建和销毁对象。
动作是原子性的,所以动作是不可中断的,动作和动作序列的执行不会被同时发生的其他动作影响或终止。动作的执行时间非常短,所以动作的执行过程不能再插入其他事件。如果在动作的执行期间接收到事件,那么这些事件都会被保存,直到动作结束,这时事件一般已经得到值。

判定:

判定用来表示一个事件依据不同的监护条件有不同的影响。在实际建模的过程中,如果遇到需要使用判定的情况,通常用监护条件来覆盖每种可能,使得一个事件的发生能保证触发一个转换。
判定在活动图和状态图中都有很重要的作用。转换路径因为判定而分为多个分支,可以将一个分支的输出部分与另外一个分支的输入部分连接而组成一棵树,树的每个路径代表一个不同的转换。树为建模提供了很大的方便。
在活动图中,判定可以覆盖所有的可能,保证一些转换被激发。否则,活动图就会因为输出转换不再重新激发而被冻结。

同步:

同步条是为了说明并发工作流的分支与汇合。状态图和活动图中都可能用到同步。在 UML 中,同步用一条线段来表示。     

事件:

在状态机中,一个事件的出现可以触发状态的改变。它发生在时间和空间上的一点,没有持续时间。如接受到从一个对象到另一个对象的调用或信号、某些值的改变或一个时间段的终结。
事件可以分成明确或隐含的几种,主要包括:信号事件、调用事件、改变事件和时间事件等。

组成状态:

1. 顺序组成状态

如果一个组成状态的多个子状态之间是互斥的,不能同时存在的,这种组成状态称为顺序组成状态。
一个顺序组成状态最多可以有一个初始状态和一个终态,同时也最多可以由一个浅( shallow )历史状态和一个深( deep )历史状态。

2.并发组成状态:

在一个组成状态中,可能有两个或者多个并发的子状态机,我们称这样的组成状态为并发组成状态。每个并发子状态还可以进一步分解为顺序组成状态。
一个并发组成状态可能没有初始状态,终态,或者历史状态。但是嵌套在它们里的任何顺序组成状态可包含这些伪状态。

UML学习笔记之状态图相关推荐

  1. UML学习笔记(六)【状态图】

    2019独角兽企业重金招聘Python工程师标准>>> 状态图包含:状态与状态之间的转换.状态内部活动.超状态.并发状态 状态图的基本模型(初始状态.内部活动.转换.结束状态) 闹钟 ...

  2. UML学习笔记(一):UML简介

    统一建模语言(Unified Modeling Language,UML) 一些术语: 系统(system)指的是硬件和软件的结合体,它能提供业务问题的解决方案. 系统开发(system develo ...

  3. UML学习笔记---了解UML,UML相关知识,相关概念

    6.uml统一建模语言;   面向对象分析和设计(OOA/D)   up过程与瀑布模型;   a.软件职责分配; -------------------------------------- 1.um ...

  4. Thinking in UML 学习笔记(一)——建立对象模型

    一.面向对象的本质 面向对象的本质是抽象,当系统达到了超越其处理能力的程度,我们可以抽象出我们能够处理的范围来提成抽象级别,这样就可以构建更大.更复杂的系统. 现实世界和对象世界之间存在着一道沟壑,这 ...

  5. Thinking in UML 学习笔记(四)——UML活动图来看核心

    在UML活动图的性质是一个流程图,它需要描述为完成活动的特定目标的描述来完成,这些交互运行顺序. UML有两个级别的活动图,的用例场景的叙述性描述,还有的对象用来描述交互的描述. 工具.它不是我们的分 ...

  6. UML学习笔记(4)——类图之间的关系

    为什么80%的码农都做不了架构师?>>>    在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Associa ...

  7. UML学习笔记--导航

    UML基础概述 UML与需求分析 UML类图与对象图 UML活动图 UML状态机图 UML顺序图和通信图 UML用例图 UML部署图和构件图 UML包图 UML与需求分析进阶 UML全家福 考勤管理系 ...

  8. UML学习笔记(三):运用面向对象思想

    类的可视化表示 如果WashingMachine(洗衣机)类是Household Appliances(家用电器)包的一部分,那么这个类的名字为:Household Appliances::Washi ...

  9. UML学习笔记——顺序图(时序图)

    文章目录 顺序图(时序图) 顺序图的引入 顺序图的概念 顺序图的组成 ①对象( Object) ②生命线( Lifeline ) ③激活(Activation) (控制焦点focus of contr ...

最新文章

  1. 【ACM】POJ 1852
  2. 徐波所长专访 | 人工智能:从“作坊式”走向“工业化”新时代
  3. SAP Query达到select * where 的效果 2011-04-29
  4. 中业科技机器人价格_协作机器人售价持续走低 本土厂商该如何发力
  5. php对称字符串,PHP实现简单的对称加密和解密方法 - str_split
  6. Wireshark对HTTPS数据的解密
  7. vc 通过句柄修改窗口大小_漫画:对象是如何被找到的?句柄 OR 直接指针?
  8. 通过改变innerHTML的内容,动态增加选择项
  9. [: -ge: unary operator expected 错误
  10. 秒杀系统架构分析与实战(14155字,26图)
  11. 半导体封装测试英语词汇量的软件,半导体英语
  12. 辨析:方差 和 均方误差 的联系和区别
  13. 拿下多家主机厂数百万前装定点,禾赛科技激光雷达量产进程加速
  14. 关于算法学习的总结和感悟
  15. 多线程学习--案例-子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次
  16. 新研究起底人类和机器注意力机制的区别|一周AI最火论文
  17. Postgresql默认用户名与密码
  18. spring组合注解
  19. 基于Arria10的H.264 4K高性能编解码器模块视频演示
  20. 如何在没有iTunes的情况下恢复已遭停用的iPhone资料?

热门文章

  1. 使用VBA调用jar传递参数,并获取返回值
  2. 出行即服务MaaS精华主题汇总(至2022年12月06日)
  3. 虚拟运营商:互联网企业与基础电信运营商的博弈
  4. 本质矩阵E求解及运动状态恢复
  5. 软件测试基础 - 测试方法
  6. 74HC165D驱动 2021-05-08
  7. 微信小程序-自定义导航组件
  8. 解决富文本tinymce/tinymce-vue 汉化不彻底的问题,上传图片仍然是英文的问题
  9. 阿尔山采用区块链,打造供应链金融产业生态
  10. 正经科普:DDos高防ip详解