状态机图教程 (UML State Diagram)

状态机图用于模拟各个类对象,用例和整个系统的动态行为。换句话说,当一个状态机创建它所附着的对象,该对象成为状态机的所有者时,例如,状态机附加的对象可以是类,用例甚至整个系统。

什么是UML中的状态机图?

状态机图是一种行为,它指定对象在其生命周期中响应事件所经历的状态序列。状态机用于指定必须响应异步刺激或其当前行为取决于其过去的对象的行为。状态机用于模拟对象,用例甚至整个系统的行为,尤其是反应系统,它们必须响应来自系统外部的参与者的信号。

在UML中,状态机除了传统的起始图表符号之外还引入了两个新概念:

- 复合和嵌套状态

- 正交区域

在图形上,状态呈现为具有圆角的矩形。转换呈现为实线直线。

试试吧!



寻找在线状态机图工具?只需单击下面的“绘制”按钮即可在线创建状态机图。Visual Paradigm Online是免费*且直观的。在开始之前,您还可以通过此State Machine Diagram教程了解State Machine Diagram。

现在画画


状态机图表符号 (State Diagram Notations)

状态

状态是对象生命期间的条件,它可以满足执行某些活动的某些条件,或者等待接收某些事件。

一个状态有五个部分:

1. 状态名 - 状态名称

2. 进入 - 进入状态的行动

3. 做活动 - 在进入状态时执行的行动

4. 退出状态 - 在离开状态下执行的操作

5. Deferrable Trigger - 在该状态下未处理的事件列表,而是被推迟并排队等待另一个状态的对象处理

对象在有限的时间内保持状态。例如,家中的加热器可能处于以下四种状态中的任何一种:空闲,冷却,加热,启动和活动。

过渡

- 转换是两个状态之间的关系,指示处于第一状态的对象将执行某些动作并且当指定事件发生并且满足指定条件时进入第二状态。

- 过渡火灾意味着发生状态变化。在转换触发之前,对象处于源状态; 它发射后,据说处于目标状态。

- 过渡分为五个部分:

    - 来源状态 - 受过渡影响的状态

    - 事件触发器 - 一种可以触发源状态以满足保护条件的激励,

    - 保护条件 - 在接收事件触发器触发转换时计算的布尔表达式,

    - 操作 - 可执行的原子计算,可以直接作用于拥有状态机的对象,并间接作用于对象可见的其他对象,

    - 目标状态 - 转换完成后处于活动状态。


来源状态和目标状态

源状态 (Source State):受转换影响的状态;如果对象处于源状态,则当对象接收到转换的触发事件并且满足保护条件(如果有)时,可以触发传出转换。

目标状态 (Target State):过渡完成后处于活动状态。

事件 (Events)

事件是在某个时间点发生的离散信号。它也被称为刺激和对象的一种输入。以下是事件的特征:

- 可能会导致状态发生变化

- 可以触发操作 - 操作可以是内部操作或外部操作

- 可能有相关的条件

- 信号事件可用于在状态机之间进行通信

警卫条件 (Guard Condition)

- 状态过渡标签 - 事件[警卫条件]

- Condition是一个布尔函数

    - 条件在状态机上是可选的

    - 条件适用于有限的时间段

- 发生事件时,条件必须为true才能发生状态转换。如果condition为false,则不会发生状态转换。

动作 (Action)

由于状态转换的瞬间执行动作。状态转换标签可以表示为以下格式

- 活动/行动

- 事件[条件] /行动

- 进入/退出行动

决策节点 (Decision Node)

决策节点用于表示测试条件,以确保控制流或对象流仅沿一条路径下降。

Fork节点是伪状态,用于将进入的转换分成两个或多个终止于正交目标顶点的转换。从fork顶点传出的段不得有保护或触发器,并且它必须只有一个传入和至少两个传出转换。

Join节点是伪状态,用于合并从不同正交区域中的源顶点发出的若干转换。进入连接顶点的过渡不能有保护或触发,它必须至少有两个传入过渡和一个传出过渡。

合并节点 (Merge Node)用于将使用决策节点创建的不同决策路径重新组合在一起。

选择 (Choice) 是一种伪状态,当达到该状态时,导致动态评估其传出转换的触发器的保护。这实现了动态条件分支。它允许将转换分成多个传出路径,以便决定采用哪条路径。

示例:状态机图的选择节点

Terminate是伪状态,表示状态机的生命线已经结束。终止伪状态由十字表示。

与最终状态不同,终止伪状态意味着由于上下文对象被终止而终止状态机。除了与导致终止状态的转换相关联的操作之外,状态机不执行任何状态的退出,也不执行任何退出操作。


复合状态 (composite State)

简单状态是没有子结构的状态。复合状态可以进一步细分为子状态(在状态内或单独的图中)。具有子状态(嵌套状态)的状态称为复合状态

子状态可以嵌套到任何级别。

嵌套状态机可以具有至多一个初始状态和一个最终状态。

通过显示某些状态仅在特定上下文(封闭状态)内可能,子状态用于简化复杂的平面状态机。

复合状态与子机状态 (Composite State vs Sub-machine State)

除了复合状态,还有另一个称为子机状态的符号,它在语义上等同于复合状态。

正交状态 (Orthogonal State)

复合状态具有两个或更多个区域被称为正交。与复合状态不同,子机状态旨在对状态进行分组,因此您可以重用它们。正交状态分为由虚线分隔的两个或更多个区域:

每个区域的一个状态在任何时间点始终是活动的,即同时的基板

进入:转换到正交状态的边界激活所有区域的初始状态

退出:必须在所有区域达到最终状态才能触发完成事件

注意:

您可以使用并行和同步节点来指定不同的子状态。Concurrent Substates是独立的,可以在不同的时间完成。

历史状态 - 浅/深

历史状态允许状态机重新进入在离开复合状态之前处于活动状态的最后一个子状态。历史状态使用的示例如下图所示:

何时绘制状态机图?

您可以在以下情况下使用状态机:

- 在业务建模期间,您可以创建状态机来为用例场景建模。

- 在分析和设计过程中,您可以对事件驱动的对象建模,这些对象会响应对象上下文之外的事件。

- 在分析和设计过程中,您可以使用多个状态机图来显示同一状态机及其行为的不同方面。

如何绘制状态机图?

可以通过以下步骤开发用例模型。

1. 识别具有复杂行为的实体或标识参与其生命周期将被指定的行为的类

2. 模型状态 - 确定实体的初始状态和最终状态

3. 模型转换

4. 模型事件 - 识别影响实体的事件

5. 从初始状态开始,跟踪事件的影响并确定中间状态

6. 确定状态的任何进入和退出操作

7. 必要时使用子状态扩展状态

8. 如果实体是一个类,请检查该类的操作和关系是否支持该状态中的操作,如果不扩展该类

9. 根据需要进行细化和精心制作

你也可以:

- 为抽象目的绘制用于逻辑分类状态的子状态

状态机图示例

下面的数字时钟状态机图示例显示了简单数字时钟的接口:

附加类的状态机图:

用于建模DigitalClock行为的状态图:

下面提供了一些更多的State Machine Diagram示例。

状态机图示例:烤面包机

状态机图示例:烤箱

状态机图示例:计算机测试

此示例通过使用两个区域表示两组并发子状态。

状态机器图例子:人生

此示例通过使用两个区域表示两组并发子状态。


状态机图示例

可在在线状态机图软件中编辑的自由状态机图示例和模板:Visual Paradigm Online。使用模板作为起点来创建自己的状态机图。

烤箱

数码时钟

正交状态

复合状态

加热器

烤面包机

售票系统

电话

e)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 目录 一. 背景 二. 概念 1.1 状态机模型的概念 2.2 组成要素 3.3 三个特征 4.4 执行逻辑 5....
    独钓寒江雪_520阅读 20,458评论 4 46
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,477评论 1 11
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,932评论 6 13
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,766评论 0 38
  • 状态机是无论科研探索还是科技应用方面都非常重要的一种分析工具。几乎在所有涉及到随时间演化的问题中,都可以找到状态机...
    Esmool阅读 4,381评论 0 26