状态图目录:

一、状态图简介(Brief introduction)

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

1、状态(States)

2、转移(Transitions)

3、动作(State Actions)

4、自身转移(Self-Transitions)

5、组合状态(Compound States)

6、进入节点(Entry Point)

7、退出节点(Exit Point)

8、历史状态(History States)

9、并发区域(Concurrent Regions)

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

四、总结(Summary)

一、状态图简介(Brief introduction)

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

状态有Opened、Closed、Locked。

事件有 Open、Close、Lock和Unlock。

注意:

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

2、             转移(Transition)有警备条件(guard condition),比如只有doorWay->isEmpty 条件满足时,才会响应事件。

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

1、状态(States)

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

状态用圆角矩形表示

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

2、转移(Transitions)

转移(Transitions)是两个状态之间的一种关系,表示对象将在源状态(Source State)中执行一定的动作,并在某个特定事件发生而且某个特定的警界条件满足时进入目标状态(Target State)

事件标记(Trigger):是转移的诱因,可以是一个信号,事件、条件变化(a change in some condition)和时间表达式。

警界条件(Guard Condition):当警界条件满足时,事件才会引发转移(Transition)。

结果(Effect):对象状态转移后的结果。

3、动作(State Actions)

动作(Actions)是一个可执行的原子操作,也就是说动作是不可中断的,其执行时间是可忽略不计的。

在上例中,对象状态转移后的结果显示在转移线上,如果目标状态有许多转移,而且每个转移有相同的结果,这时把转移后的结果(Effect)展示在目标状态中(Target State)更好一些,可以定义进入动作(Entry Action )和退出动作(Exit Action),如下图

4、自身转移(Self-Transitions)

状态可以有返回自身状态的转移,称之为自身转移(Self-Transitions)

2S后,Poll input事件执行,转移到自己状态【Waiting】

5、组合状态(Compound States)

嵌套在另外一个状态中的状态称之为子状态(sub-state),一个含有子状态的状态被称作组合状态(Compound States). 如下图,【Check PIN】是组合状态,【Enter PIN】是子状态。

也可用以下方式进行描述

如上图,状态机【Check PIN】的细节被分割到另外一个图中了。

6、进入节点(Entry Point)

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

7、退出节点(Exit Point)

 

8、历史状态(History States)

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

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

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

9、并发区域(Concurrent Regions)

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

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

按照blink518的建议(“出货中”是属于条件分支应该使用Decision),改成如下图也是很好的做法:

订单成立状态主要有:

订单成立

订单取消(Guard:会员订单-缴款期限已过期)

备货中(Guard:已付款、订单成立、库存量足够)

出货中(Effect:扣除商品可接单量及移除购物车中的购买资料)

出货确认(Guard:实际配达日及发票代码、号码均不为空值)

出货完毕(Guard:实际配达日不为空)

出货失败

订单成立(Guard:出货完毕,已付款、鉴赏期结束日期 小于等于 [系统日期])

分析:

1、购物车生成订单进入状态【订单成立】

2、系统检测订单已经付款并且库存量足够,则进入状态【备货中】

3、物流发货,进入状态【发货中】,状态转移为【发货中】后,需要做的操作有“扣除商品可接单量及移除购物车中的购买资料”

4、发货完毕后,状态分为【出货确认】和状态【出货失败】,如果状态是【出货失败】,则【结束】,如果状态为【出货确认】,则进入下一步。

5、配货人员填写实际配达日期,进入状态【出货完毕】。

6、如果”已付款、鉴赏期结束日期 小于等于 [系统日期]”,则【订单成立】。

 

四、总结(Summary)

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

版权

作者:灵动生活

出处:http://www.cnblogs.com/ywqu

转载于:https://www.cnblogs.com/haore147/p/3888339.html

UML建模之状态图(Statechart Diagram)相关推荐

  1. 最全UML建模之状态图详解

    一.状态图简介(Brief introduction) 状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应.通常 ...

  2. [UML]UML系列——状态机图statechart diagram

    [UML]UML系列--状态机图statechart diagram 原文:[UML]UML系列--状态机图statechart diagram 系列文章 [UML]UML系列--用例图Use Cas ...

  3. 【UML】状态图Statechart diagram(转)

    前言 UML由动态图和静态图组成,状态图就是属于动态图中较为重要的一张图. 定义 用来描述一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态之间的转移. 目的 研究类.角色.子系统.或组件的 ...

  4. UML 状态图 statechart diagram

    1. 什么是状态图 状态图是一个类对象所可能经历的所有历程的模型图.状态图由对象的各个状态和连接这些状态的转换组成.说明对象在它的生命期中响应事件所经历的状态序列,以及它们对那些事件的响应. 2. 状 ...

  5. UML建模之类图(Class Diagram,UML图)

    看了下,挺好! 本文针对类之间常用的关系进行了简单的描述,主要有: 1)关联关系 2)泛化 3)依赖 4)聚合 5)组合 更详细的信息,参考 http://smartlife.blog.51cto.c ...

  6. UML 建模步骤 用例图 类图 对象图 包图 顺序图/时序图 状态图 活动图 协作图

    统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明.可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言. UML是面向对象设计的建 ...

  7. UML建模系列文章总结

    一.为什么要学习UML 二.UML的历史 三.UML的特点 四.UML中的视图 五.UML建模工具 六.UML的应用领域 七.UML的构成 1.需求阶段如何书写Use Case 2.设计阶段如何画用例 ...

  8. UML建模系列文章总结 (转载)

    一.为什么要学习UML 二.UML的历史 三.UML的特点 四.UML中的视图 五.UML建模工具 六.UML的应用领域 七.UML的构成 1.需求阶段如何书写Use Case 2.设计阶段如何画用例 ...

  9. 【UML 建模】UML建模语言入门-视图,事物,关系,通用机制

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 一. UML视图 1. Ration ...

最新文章

  1. 如何解决工业缺陷检测小样本问题?
  2. win7右键新建文件夹不见了
  3. 代码大全--防御试编程
  4. wxWidgets:wxScrollWinEvent类用法
  5. sql server 备份计划
  6. 【LeetCode笔记 - 每日一题】373. 查找和最小的 K 对数字(Java、堆、优先队列)
  7. 为什么腾讯视频下载不了_腾讯视频如何设置背景
  8. SQL Server数据库占用过多内存的解决方法
  9. 图论;单源最短路径;拓扑排序+松弛(有向无回路);Bellman-Ford(回路,负权回路)Dijkstra(无负权,可回路);可以用最小堆实现算法的优化;
  10. OpenJudge计算概论-字符串最大跨距
  11. 如何监测土壤pH值和水分含量
  12. 单片机计数器代码(四位共阴数码管)
  13. 爬虫项目开发与实践,附东方财富7x24小时实时信息代码
  14. shell笔记(C语言中文网)
  15. 英飞凌TC397移植FreeRTOS
  16. 预约上门App平台的接单方式
  17. 从Google表格中的字符串中提取多个特定长度的数字子串的解决思路
  18. 小伙子不讲武德,竟用Python爬取了B站上1.4w条马老师视频数据来分析
  19. CSS实现“大于号”或“小于号”箭头
  20. python基金筛选_手把手教你用python选基金

热门文章

  1. 谈谈Tensorflow的dropout
  2. 希尔排序是一种稳定的排序算法_十大经典排序算法——希尔排序
  3. jsonobject转map对象_解析JSON中JSONObject的高级使用
  4. Pinyin4j 的使用 Pinyin4jUtils工具类
  5. docker简介以及优缺点
  6. .NetCore中三种注入方式的思考
  7. 解决mac管理员变成普通成员
  8. django请求生命周期
  9. 17.vue移动端项目二
  10. 吴恩达深度学习笔记 2.6~2.9 logistic中的梯度下降