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

1.概述

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

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

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

2. 状态图的使用

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

2.1.状态图中的元素

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

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

下图中分别表示有结束状态没有结束状态的两种简单状态图:
在这里插入图片描述

2.2.状态图的使用案例

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

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

将上述的文字转换成状态图,如下图所示。
在这里插入图片描述

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

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


使用案例:
在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划分成了就绪态和运行态,如下图所示:
在这里插入图片描述

3.总结

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

我们在画状态图时,只需要记住4种不同的元素的含义及使用方法即可。

  • 12
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
UML(Unified Modeling Language,统一建模语言)是一种广泛应用于软件工程领域的图形化建模语言,可以用来描述系统中的各种结构和行为。其中,状态图UML中的一种图表,用于描述对象的状态以及状态之间的转换。 状态图是一种特殊的图表,它主要由状态、转移以及事件组成。状态表示了系统或者对象的当前情境,而转移则定义了状态之间的变迁,在特定事件发生时,系统或对象将从一个状态转移到另一个状态。 而有限状态机(Finite State Machine,FSM)是状态图的一种具体实现方式,它用有限个状态以及状态之间的转移来描述对象的行为。有限状态机的特点在于,每个状态都是离散且互斥的,对象只能处于其中一个状态,并在不同事件触发后,根据转移规则执行状态转换。 有限状态机的应用广泛,可以用来描述各种系统,例如自动售货机、电梯控制系统等。它们通常包括多个状态,如待机、运行、出错等,并且根据不同的输入事件和条件,可以在这些状态之间进行转换。 有限状态机的建模方法可以帮助开发人员更好地理解和设计系统的行为。通过将系统的行为转化为状态和转移来描述,有限状态机提供了清晰的视图,使得开发人员可以更好地实现和测试系统。 总之,UML状态图和有限状态机是软件工程领域中常用的建模工具,可以帮助开发人员更好地理解和描述系统的状态和行为,进而实现系统的要求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挥之以墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值