【UML建模】状态图(State Machine Diagram)

这篇具有很好参考价值的文章主要介绍了【UML建模】状态图(State Machine Diagram)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.概述

状态图,又称为状态机图,是一种用于描述对象的生命周期和状态转换的UML图示,它是一种行为图,用于描述对象的状态和状态之间的转换。这里的对象大多数情况是指的类生成的对象,但是有时候也会代表对象、参与者、用例、子系统等

通过状态图可以建立对象状态流转的统一语言,从而让项目成员可以通过更简单、更直观的理解系统的行为和交互(可以想象一下不使用状态图时,通过一大堆的文字对状态的变化进行描述,沟通会变得困难,而且还容易导致各成员对状态的理解不一致),同时,清晰的状态图有利于研发人员更好的设计和实现系统功能。

状态图通常会和活动图、时序图结合使用,以不同的视角来对这两种图示中对象状态流转的内容进行补充。

2. 状态图的使用

对于有一定开发经验的同学来说,状态图真的是非常简单的一种图例,它的画法与我们在日常开发中的思考方式是高度重合的,所以基本上一看到一个状态图,马上就可以理解它想表达的含义。

2.1.状态图中的元素

状态图中最常用的元素有4个,分别是:

  • 开始:状态开始标记,用实心圆形表示。
  • 结束:状态结束标记,用一个空心圆形中间嵌入一个实心原型表示。
  • 状态:对象在某个时间上的状态,用圆角矩形表示。
  • 转移:导致状态发生变化的事件,用实线箭线表示,箭头指向变化后的状态,在实线上用文字表示事件。

下图中分别表示有结束状态没有结束状态的两种简单状态图:
【UML建模】状态图(State Machine Diagram)

2.2.状态图的使用案例

以一个CRM的实际流程为例:抽象一个线索对象,通过不同的事件触发线索的状态变化:

  • 录入/导入线索:此时线索为待分配状态
  • 分配线索:线索状态为已分配且处于待跟进状态
  • 跟进线索:跟进过程中都属于跟进中状态
  • 线索无效/线索转化:线索的生命周期结束,处于跟进结束状态

将上述的文字转换成状态图,如下图所示。
【UML建模】状态图(State Machine Diagram)

2.3.组合状态及其使用案例

组合状态是状态图中的一种特殊状态,它是由多个简单状态和转换嵌套组成的复合状态,描述的是对象的更复杂的状态和行为。在状态图中,符合状态表示的一个大的圆角矩形框里面包含了多个小的圆角矩形框,模型如下图所示:
【UML建模】状态图(State Machine Diagram)


使用案例:
在Java的并发编程中有一个线程的状态转换机制,这就是一个非常经典的状态模型,里面几乎包含了状态图中所有常用的元素(包括符合状态)。

在Java中有6种,分别是NEW , RUNNABLE , WAITING , TIMED_WAITING , BLOCKED , TERMINATED ,定义在Thread.class中,其代码如下:

public enum State {
    /** 
     * 线程已创建但未启动。
     */
    NEW,
    
	/** 
     * 线程已在虚拟机中启动,等待操作系统调度后就可以运行。
     */
    RUNNABLE,
    
	/** 
     * 等待监视器锁,也就是等待进入synchronized块。
     */
    BLOCKED,
    
	/** 
     * 线程阻塞,等待其它线程将它唤醒,等待的方法包括Object.wait(),LockSupport.park()Thread.join()
     * 另外一个线程唤醒它需要使用对应的唤醒方法,Object.notify()或Object.notifyAll(),LockSupport.unPark()
     * Thread.join()会阻塞到执行join方法的线程运行结束后,才唤醒当前线程。
     */
    WAITING,

	/** 
     * 与WAITING类似,只是在Waiting的几个方法中传入等待时间的参数,没有显示的唤醒情况下,运行时间超出设置的等待时间也会唤醒。
     * 此外还有Thread.sleep(long);
     */
    TIMED_WAITING,

    /**
     * 线程执行完毕后的状态
     */
    TERMINATED;
}

其中的RUNNABLE 状态表示的是线程就绪可运行,但是线程实际是否运行,还需要操作系统为其分配CPU的时间片,所以又进一步将RUNNABLE划分成了就绪态和运行态,如下图所示:
【UML建模】状态图(State Machine Diagram)

3.总结

总的来说,状态图可以作为我们日常开发中处理对象的周期以及状态流转的指导,相对于其他的行为型uml图例(活动图,时序图)而言,状态图是比较简单的,可以作为前两种图例在状态这个视角上的补充。

我们在画状态图时,只需要记住4种不同的元素的含义及使用方法即可。文章来源地址https://www.toymoban.com/news/detail-426819.html

到了这里,关于【UML建模】状态图(State Machine Diagram)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UML-状态机图(状态图)

    状态机图 描述了一个对象在其生命周期内所经历的各种状态,以及引起对象状态变化的原因。 状态机用于对一个模型元素建立行为模型,该模型元素通常是一个类/对象,也可以是一个 Use Case ,甚至是整个系统。 初始状态:使用一个实心圆表示。 一般状态:使用圆角矩形表

    2024年01月17日
    浏览(36)
  • 【博士每天一篇论文-技术综述】Machine Learning With Echo State Networks 一篇系统讲解ESN知识的五星文章

    阅读时间:2023-11-21 年份:2020 作者:徐元超,曼尼托巴大学 期刊: 无 引用量:无 这篇文章是一篇技术报告,从递归神经网络(RNNs)引入到回声状态网络(ESNs)。说明了RNNs的局限性,并引入了储层计算和ESN的概念。非常系统详细的介绍了ESN的数学模型、属性(echo state pr

    2024年01月22日
    浏览(44)
  • 01 UML概述

    (1) 规约系统的制品 –UML适用于对所有重要的分析、设 计和实现决策进行详细描述 (2) 构造系统的制品 –UML描述的模型可与各种编程语言直接相关联 (1)可用于对象方法和构件方法; (2)可用于 ●所有应用领域(例如,航空航天、财政、通讯等) ●不同的实现平台(例如,J2EE、

    2024年02月09日
    浏览(38)
  • 什么是统一建模语言(UML)UML与UML类图的基本概念

    UML(统一建模语言)是一种通用的建模语言,用于描述软件系统的结构、行为和交互。它提供了一组符号和规则,用于创建可视化的图形模型,帮助开发人员、设计师和利益相关者之间进行沟通和理解。 UML起源于20世纪90年代初,由James Rumbaugh、Grady Booch和Ivar Jacobson等知名软件

    2024年02月16日
    浏览(60)
  • 【设计模式】二、UML 类图概述

    UML类图:类(对象)本身的组成和类(对象)之间的各种静态关系 依赖、泛化(继承)、实现、关联、聚合与组合 类中用到了对方,那么他们之间就存在依赖关系 类中用到了对方 如果是类的成员属性 如果是方法的返回类型 是方法接收的参数类型 方法中使用到 泛化关系实际上就

    2024年02月09日
    浏览(39)
  • UML-状态图

    目录 状态图 状态图的图符 状态机 状态 ​转换 电话机状态图 活动图和状态图区别: 状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应。通常我们创建一个UML状态图是为了以下的研究目的:研究类、

    2024年02月13日
    浏览(29)
  • 状态模式(State)

    状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,使其看起来修改了自身所属的类。其别名为状态对象(Objects for States)。 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(state

    2024年02月14日
    浏览(45)
  • 状态模式(State)

    状态 是一种行为设计模式,让你能 在 一个对象的内部状态变化时改变其行为 ,使其 看上去就像改变了自身所属的类一样 。 1. 问题 状态模式与有限状态机的概念紧密相关 。 其主要思想是程序在任意时刻仅可处于几种有限的状态中 。在任何一个特定状态中, 程序的行为都

    2024年02月12日
    浏览(60)
  • Flink State 状态管理

    状态在Flink中叫做State,用来保存中间计算结果或者缓存数据。要做到比较好的状态管理,需要考虑以下几点内容: 状态数据的存储和访问 在Task内部,如何高效地保存状态数据和使用状态数据。 状态数据的备份和恢复 作业失败是无法避免的,那么就要考虑如何高效地将状态

    2024年01月17日
    浏览(47)
  • 【UML建模案例】小型网上书店系统

    最近上半年的浙江软考已经取消,于是开始高强度系统复习Java面向对象的各个知识点,顺便将UML的系统性学习提上日程。 这里先附上本项目的.eap工程文件(须用Enterprise Architect打开)、生成的Java代码以及参考教材存放的github仓库地址 https://github.com/2820881540/online_book_store_system

    2024年02月06日
    浏览(143)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包