资讯专栏INFORMATION COLUMN

什么是状态机图?UML State Diagram

chemzqm / 3650人阅读

摘要:或有时称为状态图,状态机或状态图显示实体的不同状态。简单状态机图表示法进入和退出行动在州中指定的进入和退出操作。以下状态机图表对具有两个并发子状态的拍卖进行建模处理出价并授权付款限额。

实体的行为不仅是其输入的直接结果,而且还取决于其先前的状态。实体的过去历史可以最好地通过有限状态机图或传统上称为自动机来建模。UML State Machine Diagrams(或有时称为状态图,状态机或状态图)显示实体的不同状态。状态机图还可以显示实体如何通过从一种状态更改为另一种状态来响应各种事件。状态机图是用于模拟系统动态​​特性的UML图。

学习UML更快,更好,更容易

您是否正在寻找一种免费的UML工具来更快,更轻松,更快速地学习UML?Visual Paradigm Community Edition是一个支持所有UML图类型的UML软件。它是一款屡获殊荣的国际UML建模师,但它易于使用,直观且完全免费。

免费下载

为什么是状态机图?

状态机图通常用于描述对象的状态依赖行为。对象取决于它所处的状态,对同一事件的响应不同。状态机图通常应用于对象,但可以应用于对其他实体具有行为的任何元素,例如:参与者,用例,方法,子系统等等,它们通常与交互图(通常是序列图)一起使用)。

例如:

考虑一下银行账户中有100,000美元。撤销功能的行为是:balance:= balance - withdrawAmount; 但退出后的余额不低于0美元; 无论您从银行取款多少次都是如此。在这种情况下,提取不会影响属性值的抽象,因此对象的总体行为保持不变。

但是,如果提款后账户余额变为负数,则提款功能的行为将会大不相同。这是因为银行账户的状态从正变为负; 在技​​术术语中,从正状态到负状态的转换被触发。

属性值的抽象是系统的属性,而不是全局适用的规则。例如,如果银行更改业务规则以允许银行存款余额透支2000美元,则银行账户的状态将被重新定义,条件是提款后的余额不得低于2000美元的赤字。

注意:

状态机图描述了所有事件(以及单个对象的状态和转换)

序列图描述了涉及所有对象的单个交互的事件

状态机图的基本概念 什么是国家?

Rumbaugh定义:

“状态是对象的属性值和链接的抽象。根据影响对象粗略行为的属性,将值集合在一起成为状态。”

州记谱法

状态机符号的特征

无论类型如何,一般都有几种状态:

一个州占用一段时间。

状态通常与满足某些条件的实体的属性值的抽象相关联。

实体改变其状态不仅是当前输入的直接结果,而且还取决于其输入的一些过去历史。

状态是对象生命周期中的约束或情境,其中约束成立,对象执行活动或等待事件。

状态机图是由以下内容组成的图:

国家(简单州或复合州)

连接状态的状态转换

例:

国家特征

状态表示某些时间点的物体条件。

可以将对象(或系统)视为从一个状态移动到另一个状态

满足某些条件的模型元素生命周期中的一个点,其中某些特定操作正在执行或某些事件等待

初始和最终国家

状态机图的初始状态,称为初始伪状态,用实心圆表示。从这种状态的转变将显示第一个真实状态

状态机图的最终状态显示为同心圆。开环状态机表示可以在系统终止之前终止的对象,而闭环状态机图不具有最终状态; 如果是这种情况,则对象将一直存在,直到整个系统终止。

例:

活动

事件签名被描述为事件名称(逗号分隔参数列表)。事件出现在状态的内部过渡隔室中或状态之间的过渡上。事件可以是以下四种类型之一:

信号事件 - 对应于异步消息或信号的到达

呼叫事件 - 对应于程序调用到达操作

时间事件 - 在指定时间过后发生时间事件

更改事件 - 只要满足指定条件,就会发生更改事件

事件的特征

表示导致对象从一种状态转换到另一种状态的事件。

内部或外部事件触发一些活动,这些活动会改变系统及其某些部分的状态

事件传递信息,由对象操作详细说明。对象实现事件

设计涉及检查状态机图中的事件并考虑系统对象如何支持这些事件

过渡

过渡线描绘了从一个状态到另一个状态的移动。每个过渡行都标有导致过渡的事件

将系统视为一组状态和状态之间的转换对于描述复杂行为非常有用

了解状态转换是系统分析和设计的一部分

过渡是从一个州到另一个州的运动

国家之间的过渡发生如下:

元素处于源状态

发生事件

执行动作

元素进入目标状态

当不同的事件导致状态终止或者在转换上存在保护条件时,发生多个转换

没有事件和动作的转换称为自动转换

操作

Action是可执行的原子计算,包括操作调用,另一个对象的创建或销毁,或者向对象发送信号。动作与转换相关联,并且在此期间动作不可中断 - 例如,进入,退出

活动

活动与状态相关联,这是一种非原子或正在进行的计算。活动可能会完成或无限期地继续。活动将由导致从定义活动的状态转换的事件终止

行动和活动的特征

国家可以触发行动

状态可以具有第二隔间,其包含在实体处于给定状态时执行的动作或活动

动作是原子执行,因此不会中断

五个动作触发器:On Entry,Do,On Event,On Exit和Include

活动捕获可能持续很长时间的复杂行为 - 活动可能被事件中断,在这种情况下,当对象到达某个状态时,它不会完成。

简单状态机图表示法

进入和退出行动

在州中指定的进入和退出操作。每次进入/退出时都必须如此。如果不是,则必须对各个过渡弧使用操作

使用符号进入状态时执行的进入操作:进入/操作

退出使用符号退出状态时执行的操作:退出/操作

示例 - 进入/退出操作(检查书籍状态)

此示例说明了从类派生的状态机图 - “BookCopy”:

注意:

此状态机图显示BookCopy类中对象myBkCopy的状态

输入操作:只要通过转换输入给定状态,就会执行任何标记为与输入操作相关联的操作

退出操作:只要通过转换离开状态,就会执行任何标记为链接到退出操作的操作

子状态

简单状态是没有子结构的状态。具有子状态(嵌套状态)的状态称为复合状态。子状态可以嵌套到任何级别。嵌套状态机可以具有至多一个初始状态和一个最终状态。通过显示某些状态仅在特定上下文(封闭状态)内可能,子状态用于简化复杂的平面状态机。

子状态示例 - 加热器

State Machine Diagrams通常用于派生测试用例,下面列出了可能的测试方法:

空闲状态接收太热事件

空闲状态接收太酷事件

冷却/启动状态接收Compressor Running事件

冷却/就绪状态接收风扇运行事件

冷却/运行状态接收OK事件

冷却/运行状态接收故障事件

失败状态接收失败清除事件

加热状态接收OK事件

加热状态接收失败事件

历史国家

除非另有说明,否则当转换进入复合状态时,嵌套状态机的操作将在初始状态重新开始(除非转换直接针对子状态)。历史状态允许状态机重新进入在离开复合状态之前处于活动状态的最后一个子状态。历史状态使用的示例如下图所示。

并行国家

如上所述,状态机图中的状态可以嵌套。相关状态可以组合在一起形成单个复合状态。当活动涉及并发子活动时,必须将状态嵌套在其他状态中。以下状态机图表对具有两个并发子状态的拍卖进行建模:处理出价并授权付款限额。

并发状态机图示例 - 拍卖过程

在此示例中,首次进入Auction的状态机需要在开始时将fork分成两个多带带的开始线程。每个子状态都有一个退出状态来标记线程的结尾。除非出现异常退出(已取消或已拒绝),否则在两个子状态退出时都会退出复合状态。

尝试现在绘制UML状态机图

您已经了解了状态机图是什么以及如何绘制状态机图。现在是时候绘制一个自己的状态机图。获取免费的UML软件Visual Paradigm Community Edition,并使用免费的State Machine Diagram工具创建自己的State Machine Diagram。它易于使用且直观。

免费下载

相关链接

什么是统一建模语言?

专业的UML图工具

自由状态机图示例

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

烤箱

数码时钟

正交状态

复合国

加热器

烤面包机

售票系统

电话

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104997.html

相关文章

  • 《设计模式》1.绪论

    摘要:设计模式是一套被反复使用的多数人知晓的经过分类编目的代码设计经验的总结。使用设计模式是为了重用代码让代码更容易被他人理解保证代码可靠性。由此可见,其实设计模式就是从大型软件架构出发便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。 点击进入我的博客 1.1 设计模式概述 什么是设计模式 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。设计模式是一套被反复使用的、...

    bovenson 评论0 收藏0
  • 代码失控与状态机(上)

    摘要:代码只是状态机图的相关元素的一种表现形式,它与节点式或表格式的状态机图并无本质不同。如上,状态机是防止代码失控的一剂良药,制备完善的状态机图就是防止代码失控的一种有效手段。 前言 前几天和某某同学吃饭席间,他聊到每当要修改老项目中自己写的代码时就痛苦不堪,问我是不是也有同感。我觉得这应该是不少程序猿的心声,之所以会这样,大致有两个主因: 项目的整体设计很糟糕,只管往上堆砌各种功能、补...

    cucumber 评论0 收藏0
  • React组件模型启示录

    摘要:另一种关于组件的常见说法,是组件是为了重用。这件事情是前端特有的,受限制于的结构。这一节的题目叫做混乱的组件通讯,我们来仔细掰扯一下细节,因为组件模型虽然很常说但是对通讯过程没有约定。 这个话题很难写。 但是反过来说,爱因斯坦有句名言:如果你不能把一个问题向一个六岁孩子解释清楚,那么你不真的明白它。 所以解释清楚一个问题的关键,不是去扩大化,而是相反,最小化。 Lets begin. ...

    eternalshallow 评论0 收藏0
  • 白洁血战Node.js并发编程 01 状态

    摘要:状态机状态机是模型层面的概念,与编程语言无关。状态机具有良好的可实现性和可测试性。在代码里,这是一个,但是我们在状态机模型中要把他理解为事件。 这一篇是这个系列的开篇,没有任何高级内容,就讲讲状态机。 状态机 状态机是模型层面的概念,与编程语言无关。它的目的是为对象行为建模,属于设计范畴。它的基础概念是状态(state)和事件(event)。 对象的内部结构描述为一组状态S1, S2,...

    fjcgreat 评论0 收藏0

发表评论

0条评论

chemzqm

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<