一、状态图简介(Brief introduction)

状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应。通常我们创建一个UML状态图是为了以下的研究目的:研究类、角色、子系统、或组件的复杂行为。

状态图(Statechart Diagram)主要用于描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列,引起状态转移的事件(Event),以及因状态转移而伴随的动作(Action)。一般可以用状态机对一个对象的生命周期建模,状态图用于显示状态机(State Machine Diagram),重点在与描述状态图的控制流。
如下图例子,状态机描述了门对象的生存期间的状态序列,引起转移的事件,以及因状态转移而伴随的动作(Action).

门一般状态有开的、关的、锁的三种状态。。

事件有 打开、关闭、锁门和开锁。

注意:

1、             并不是所有的事件都会引起状态的转移,比如当门是处于【开的】状态时,就不能进行【锁门】事件。

2、             转移(Transition)有警备条件,比如只有关门的条件需要没有障碍物才能满足时,才会响应事件,如果有障碍物无法关上门则不会改变们的状态为关闭状态。

二、状态图元素(State Diagram Elements)


本文全部状态图都有Trufun UML建模工具提供
依次对应的是:
1、状态机
2、区域
3、状态(States)
4、组合状态
5、进入节点(Entry Point)
6、退出节点(Exit Point)
7、入口点引用
8、出口点引用
9、初始状态
10、终态
11、选择
12、分叉
13、结合
14、结合状态
15、终止
16、简略历史
17、详细历史
18、转换

 1、状态(States)

指在对象的生命周期中的某个条件或者状况,在此期间对象将满足某些条件、执行某些活动活活等待某些事件。所有对象都有状态,状态是对象执行了一系列活动的结果,当某个事件发生后,对象的状态将发生变化。

状态用圆角矩形表示

初态和终态(Initial and Final States)
初态用实心圆点表示,终态用圆形内嵌圆点表示。

2、转移(Transitions)

转移(Transitions)是两个状态之间的一种关系,表示对象将在源状态(Source State)中执行一定的动作,并在某个特定事件发生而且某个特定的警界条件满足时进入目标状态(Target State)
 
      触发器:是转移的诱因,可以是一个信号,事件、条件变化(a change in some condition)和时间表达式。
      监护条件:当警界条件满足时,事件才会引发转移(Transition)。
      效果(Effect):对象状态转移后的效果。

3、状态动作(State Actions)

状态动作(Actions)是一个可执行的原子操作,也就是说动作是不可中断的,其执行时间是可忽略不计的。
在上例中,对象状态转移后的结果显示在转移线上,如果目标状态有许多转移,而且每个转移有相同的结果,这时把转移后的结果(Effect)展示在目标状态中(Target State)更好一些,可以定义进入动作(Entry Action )和退出动作(Exit Action),如下图

4、自身转移(Self-Transitions)

状态可以有返回自身状态的转移,称之为自身转移(Self-Transitions)
 
根据状态转移的触发器和条件,进行自身转移。

5、组合状态(Compound States)

嵌套在另外一个状态中的状态称之为子状态(sub-state),一个含有子状态的状态被称作组合状态(Compound States). 如下图,【Check PIN】是组合状态,【Enter PIN】是子状态。
 
在trufun UML工具中,状态图还提供了区域元素,可以实现组合状态的多种情况组合。

6、入口点引用(Entry Point)

如下图所示,由于一些原因并不会执行初始化,而是直接通过一个节点进入状态【Ready】,则此节点称之为入口点(Entry Point)

7、出口点引用(Exit Point)

同理,有入口点,当然也有出口点

8、历史状态(History States)

历史状态是一个伪状态(Pseudostate),其目的是记住从组合状态中退出时所处的子状态,当再次进入组合状态,可直接进入这个子状态,而不是再次从组合状态的初态开始。
 
在上图的状态图中,正常的状态顺序是:【Washing】- >【Rinsing】->【Spinning】。
如果是从状态【Rinsing】突然停电(Power Cut)退出,,洗衣机停止工作进入状态【Power Off】,当电力恢复时直接进入状态【Running】。
 在Trufun中提供了简略历史和详细历史两个历史状态的元素,简略历史可以是整个组合状态的初态,详细历史可以是组合状态里面中断时执行的一个状态。

9、并发区域(Concurrent Regions)

状态图可以分为区域,而区域又包括退出或者当前执行的子状态。说明组合状态在某一时刻可以同时达到多个子状态。如下图刹车系统,同时进入前刹车【Applying Front Brakes】状态和后刹车【Applying Rear Brakes】状态。

三、状态图案例分析(State Diagram Example Analysis)

订单成立状态 主要有:
下单成功
备货中(Guard:已付款、订单成立、库存量足够)
出货中(Effect:扣除商品可接单量及移除购物车中的购买资料)
出货确认(Guard:实际配达日及发票代码、号码均不为空值)
出货完毕(Guard:实际配达日不为空)
出货失败
订单完成(Guard:出货完毕,已付款、鉴赏期结束日期 小于等于 [系统日期])
  分析:
1、购物车生成订单进入状态【下单成功】,成生一个正式的订单
2、系统检测订单已经付款并且库存量足够,则进入状态【备货中】
3、物流发货,进入状态【发货中】,状态转移为【发货中】后,需要做的操作有“扣除商品可接单量及移除购物车中的购买资料”
4、发货完毕后,状态分为【出货确认】和状态【出货失败】,如果状态是【出货失败】,则【结束】,如果状态为【出货确认】,则进入下一步。
5、配货人员填写实际配达日期,进入状态【出货完毕】。
6、如果”已付款、鉴赏期结束日期 小于等于 [系统日期]”,则【订单成立】。

四、总结(Summary)

状态图重点在于描述对象的状态及其状态之间的转移,状态图的基本元素主要有:状态、转移、动作、自身转移、组合状态、进入节点、退出节点、历史状态、并发区域等,状态中的事件分为调用事件(Call)、变化事件(Change)、时间事件(Time)和信号事件(Singal)。最后以实例对状态对进行了分析。

最全UML建模之状态图详解相关推荐

  1. 【软件分析】软件分析、设计与建模迭代式详解

    软件分析.设计与建模迭代式详解 1.introduction 1.1 OOA/D 1.2 Iterative, Evolutionary, and Agile 2.Case Study and Req ...

  2. 数学建模——主成分分析算法详解Python代码

    数学建模--主成分分析算法详解Python代码 import matplotlib.pyplot as plt #加载matplotlib用于数据的可视化 from sklearn.decomposi ...

  3. 数学建模——支持向量机模型详解Python代码

    数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...

  4. 数学建模——线性规划模型详解Python代码

    数学建模--线性规划模型详解Python代码 标准形式为: min z=2X1+3X2+x s.t x1+4x2+2x3>=8 3x1+2x2>=6 x1,x2,x3>=0 上述线性 ...

  5. 全面的Spring Boot配置文件详解

    全面的Spring Boot配置文件详解 Spring Boot在工作中是用到的越来越广泛了,简单方便,有了它,效率提高不知道多少倍.Spring Boot配置文件对Spring Boot来说就是入门 ...

  6. c语言的指针详解ppt,最全的C语言指针详解.ppt

    最全的C语言指针详解.ppt 第6章 指针,6.1 指针定义与使用 6.2 指针与函数 6.3 指针与数组 6.4 指针与字符串 6.5 指针数组与多级指针 6.6 指针与动态内存分配 6.7 指针的 ...

  7. 简述mysql完全备份过程_【SQL】MySQL之使用mysqldump全备份及恢复过程详解_MySQL

    mysqldump bitsCN.com [SQL]MySQL之使用mysqldump全备份及恢复过程详解 [目标]使用mysqldump做全备,结合mysql自带的binlog功能实现增量备份 为了 ...

  8. 号称全网最全CAD组合键功能详解

    左手键盘右手鼠标,一向都是大家熟悉的使用CAD的操作方式. 就算不信手拈来也基本了然于心. 然而如果现在问你,命令行隐藏了,应该怎么调用出来,你可以第一时间反应过来是什么组合键吗? 暂时忘记没关系,希 ...

  9. 视频教程-沐风老师3DMAX室内建模挤出法详解-3Dmax

    沐风老师3DMAX室内建模挤出法详解 沐风课堂创始人,专栏作家,独立媒体人,资深互联网从业者. 沐风老师 ¥12.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP ...

最新文章

  1. Nature综述:微生物的衰老与寿命
  2. WIRW:淡水分子微生物生态学综述
  3. 实时语义分割--ICNet for Real-Time Semantic Segmentation on High-Resolution Images
  4. 智源研究院发布“智能信息检索与挖掘”重大方向,打造北京学派,联合攻关“个人智能信息助手”关键科学问题...
  5. SpriteBuilder实际操作中如何确定合适Breaking force的值
  6. java 导入包报错_Intellij IDEA 导入个推jar包 报错java.lang.NoClassDefFoundError
  7. 数据集合 oracle,oracle集合
  8. 吓尿了!手机充完电不拔充电器后果这么严重
  9. 数据的属性及“数据的特征”
  10. mysql左联一对多_MySQL左连接多对一行
  11. 8——对象的作用域,生存期,……
  12. 【渝粤教育】电大中专幼儿园课程论作业 题库
  13. ARM64体系结构与编程之cache必修课(上)
  14. 2021年中国气体分离设备行业运营情况分析:气体分离及液化设备产量14.85万台[图]
  15. 「Android - SoundPool使用」
  16. 微信小程序云开发 数据库
  17. 7-2 前序序列创建二叉树
  18. 记忆拼图游戏设计及完整代码
  19. jodconverter下载地址
  20. css html5布局方式_创建新HTML5 / CSS3单页布局–艺术主题

热门文章

  1. JZOJ-senior-5953. 【NOIP2018模拟11.5A组】生死之境
  2. Float Point Exception
  3. 蹂躏DF彻底之二让ce正常附加扫描
  4. Vue+Echarts监控大屏实例十五:智慧物流监控模板实例下
  5. 爱,恒久忍耐永不止息
  6. 【成立公司】5.营业执照和组织机构代码证
  7. 如何准备阿里的社招技术面试
  8. 大促之前全链路压测原理
  9. 天欧黄汉知:基于模型的智能驾驶性能开发和测试方法
  10. 常见的八种基本排序的代码