10.状态机图state machine diagram

  状态机图是常见的描写叙述一个系统行为的技术。

在面向对象的方法中,为单个类绘制一个状态机图来展示单个对象的生命周期行为。

见图10.1

图中显示了管理我不同平常的安全系统的控制类的一个状态机图。它从控制对象被创建时的状态開始:等待状态wait state。

图中暗示这个为初始伪状态initial pseudostate,尽管不是状态但又一个箭头指向初始状态。

  图中显示控制器可处于3个状态:wait、lock和open。该图还提供规则表示状态间的改变,以转移的形式transition:连接状态的线。

  转移表示从一个状态到还有一个状态。每一个转移有一个由三部分组成的标签:触发信号trigger-signature [守卫条件guard]/活动activity。

这些部分都是可选的。

触发信号常常是一单个事件event触发一个潜在的状态改变。guard假设





有的话,是一个布尔条件,必须是true这个转移才会进行。活动activity是一些在转移过程中进行的行为(behavior executed during the transition)。能够是随意的行为描写叙述behavioral expression。

  假设没有触发信号。表示该转移马上进行。这常常会在活动状态activity state里见到。

在一个状态中出现一个事件时,你仅仅能进行一个转移。假设你对同一事件进行多个转移,守卫条件必须相互排斥mutually exclusive。假设一个事件出现但没有转移有效,则事件被忽略。

终于状态表示状态机完毕,暗示删除控制对象。

记住状态机仅仅能显示对象直接观察或激活的东西。





【内部活动】internal activities

  状态能够回应事件但不转移can react to events without transitions,使用内部活动internal activity:将事件、守卫、活动放到状态盒子内部去。

见图10.2

一个内部互动类似于一个自我转移self-transition:一个循环回到同样状态的转移。

  上图也显示了两个特殊活动:entry或exit。

entry活动是在你进入一个状态的时候运行;exit活动是在离开的时候运行。

而内部活动不处罚entry或exit活动。这是内部活动和自我转移的差别。

  

【活动状态】

  我之前描写叙述的状态中,对象是安静的quiet并等待下个事件来做一些事情。然而。你也可让对象在某些状态里做一些不间断的ongoing工作。

见图10.3

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWRmYW5zb25n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

图中的搜素状态就是这样一个活动状态:连续的活动是用do/标记的,后面是do-activity。搜索一旦完毕。不论什么没有一个活动的转移都会运行。

假设cancel时间出如今活动中,则do-activity会被中止。

  do活动和一般活动都表示进行一些行为。

关键的不同是一般的活动马上出现且不会被一般的事件打断。而do活动会花费有限的事件且可被打断。

  uml1中用action动作表示一般的活动。而用活动actitity仅仅表示do活动。





【超状态superstate】

  你常常会发现一些状态共享同样的转移和内部活动。你能够把它们弄成子状态,并将共享的行为移到一个超状态。例如以下图,假设你不用子状态的话,你将为这3个状态都绘制一个cancel转移。

见图10.4.

【并发状态concurrent state】

  状态可被分成多个互补的状态图来同一时候进行。

见图10.5

图中还显示了历史伪状态history pseudostate。

这表示当clock开启后,radio/CD回到clock关掉时的状态。

而历史伪状态的箭头表示没有历史的时候第一次处于哪个状态。





【实现状态图】

  可用3种方式实现:嵌套的switch、状态模式、状态表。

  状态模式中创建了一个状态类的层级来处理状态的行为。图中的每一个状态都有一个状态子类。控制器有相应每一个事件的方法。

见图10.7

状态表方法将状态图的信息作为数据。

  见图10.1





【何时用】

  状态机擅长表示一个对象在几个用例中的行为。不擅长描写叙述引入多个对象协作的行为。比方交互图(4章)擅长描写叙述一个用例里几个对象的行为,而活动图(11章)擅长显示多个对象或用例的多个活动的时序。

uml精粹——10.状态机图的更多相关文章

  1. uml精粹——11.活动图(及整个读书笔记分享)

    11.活动图activity diagram   活动图是描写叙述过程化逻辑procedural logic.业务过程business process和工作流work flow的技术. 他和流程图fl ...

  2. UML精粹3 - 类图,序列图,CRC

    类图Class diagram 类图描述系统中的对象类型,以及它们之间的各种静态关系.类图也展示类的性质和操作,以及应用于对象连接方式的约束.UML中的特性feature,涵盖了性质property和 ...

  3. UML精粹5 - 状态图,活动图,通信图,组合结构,组件图,协作,交互概述图,时间图

    状态机图state machine diagram 下面是状态图的一个例子(一个城堡中的秘密保险箱的控制面板). 转换transition包括3个部分:trigger-signature [guard ...

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

    系列文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系(include.extend) [UML]UML系列——类图Class [UML]UML系列——类 ...

  5. UML之状态机图

    状态机图 基本概念: 状态机图,UML 1.x规范中称状态图,是一个展示状态机的图. 状态机图基本上就是一个状态机中元素的投影,这也就意味着状态机图包括状态机的所有特征.状态机图显示了一个对象如何根据 ...

  6. 【UML】-NO.43.EBook.5.UML.1.003-【UML 大战需求分析】- 状态机图(State Machine Diagram)

    1.0.0 Summary Tittle:[UML]-NO.43.EBook.1.UML.1.003-[UML 大战需求分析]- 状态机图(State Machine Diagram) Style:D ...

  7. UML状态机图【图3】--☆

    UML状态机图 基本概述    状态机图描述的是围绕某一事物状态变化的图.它也是三大流程分析利器之一.它和活动图的区别在于,活动图是描述事物发生的流程,是多个角色参与的,而状态机描述的是事物的状态变化 ...

  8. UML: 状态机图

    摘自http://www.umlonline.org/school/viewthread.php?tid=39 活动图将流程分解为一个一个的活动,通过活动的先后顺序来展示流程:而状态机图从某个物品的状 ...

  9. UML状态图和活动图

    UML状态图和活动图 统一建模语言UML(Unified Modeling Language)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对 ...

随机推荐

  1. python爬虫基础03-requests库

    优雅到骨子里的Requests 本文地址:https://www.jianshu.com/p/678489e022c8 简介 上一篇文章介绍了Python的网络请求库urllib和urllib3的使用 ...

  2. 安装tesserocr的步骤和报错RuntimeError: Failed to init API, possibly an invalid tessdata path解决办法

    1,首先下载合适的tesseract-ocr的版本 2,然后安装到这一步注意要勾选这一项来安装OCR识别支持的语言包,这样OCR就可以识别多国语言,然后就可以一直点击下一步完成安装. 3,安装tess ...

  3. PAT Basic 1027

    1027 打印沙漏 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号:各行 ...

  4. Handler处理器和自定义Opener

    Handler处理器 和 自定义Opener opener是 urllib2.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的opener(也就是模块帮我们构 ...

  5. eval() 函数 解析json对象

    eval在js中用来运行以js源码组成的字符串. 可以用来改变全局或者局部变量,例如: var globalEval = eval; //定义全局eval函数别名 var a ='global', b ...

  6. kendo Grid 列添加自定义模板

    columns: [ {field: "行为",template: "<a href='#= 行为#'>#= 行为#</a>"}, {f ...

  7. Laya Timer原理 & 源码解析

    Laya Timer原理 & 源码解析 @author ixenos 2019-03-18 16:26:38 一.原理 1.将所有Handler注册到池中 1.普通Handler在handle ...

  8. Zuma (区间DP)

    Genos recently installed the game Zuma on his phone. In Zuma there exists a line of n gemstones, the ...

  9. TOJ 5065: 最长连续子序列

    5065: 最长连续子序列   Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal Submit: 140   ...

  10. Educational Codeforces Round 31

    A. Book Reading time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...