聊聊UML行为图-状态图

Posted 与小婧同行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊聊UML行为图-状态图相关的知识,希望对你有一定的参考价值。


结束了前面的“静态图”,我们从今天开始来聊聊“行为图”。

“行为图”包括两个非常重要的图:状态图和活动图。

这两个图应该是BA或者产品用的最多的图了。

今天先来看看“状态图”。

什么是状态图

UML 2.5:

The StateMachines package defines a set of concepts that can be used for modeling discrete event-driven Behaviors using a finite state-machine formalism. In addition to expressing the Behavior of parts of a system (e.g., the Behavior of Classifier instances), state machines can also be used to express the valid interaction sequences.



严格意义上来讲,在UML中定义为“状态机”,用来表示对象的状态转换。

在我的理解层面上来说,状态图就是用来分析一个对象的生命周期状态转换的。

聊聊UML(8)行为图-状态图

面向对象的分析,不仅仅是要分析一个对象的关联对象和自身属性,还需要对它的生命周期进行分析。


从出生到灭亡,会经历哪些状态?

这些状态是怎么转换的?什么事件触发了它的转换?

这些就可以用状态图表示。

相比较大段的文字,状态图更容易让人清晰的理解,也更容易让我们聚焦到一些关键的用例和事件。

主要组成要素

状态

一个圆边的矩形,用来表示状态,里面写的是状态的名字。

当绘制嵌套的状态图时,状态的这个矩形框可以视为“边界”。


聊聊UML(8)行为图-状态图




开始

标准的开始长这样:

聊聊UML(8)行为图-状态图

结束

标准的结束长这样:

聊聊UML(8)行为图-状态图

转换

转换就是带箭头的线:

聊聊UML(8)行为图-状态图


触发事件或者动作写在线上。

上图很清楚的看到,转换包括从一个状态到另外一个状态,也包括自循环。


复合状态图


父子状态图我比较少用,因为大部分情况下,我会分成两张图进行绘制。

不过,如果你觉得可以表达清楚,画在一张图上也是可以的。

比如这种,子状态与父状态没啥关联的父子状态图:

聊聊UML(8)行为图-状态图


ReadAmount这个状态有个子状态:Select Amount。


有兴趣的小伙伴可以尝试着分析下面的这张状态图:

聊聊UML(8)行为图-状态图


如果你想要强调触发进入和结束子状态的事件,可以使用入口点和出口点两个元素。

聊聊UML(8)行为图-状态图

聊聊UML(8)行为图-状态图



聊聊UML(8)行为图-状态图




使用注意

状态图总的来说不复杂也容易理解。

但并不是所有的对象都需要进行状态图建模的。

如果你的对象行为比较简单,总共也就不到4个状态,状态之间的转换也很单纯,那么不建议你花很大的精力去进行状态图建模。

比如简单的电商会员升级:一个会员的状态由新手->白金->铂金->黑金,最后注销,基本上就通过消费额作为条件,那么用状态表进行表述反而可能更简单。

如果你发现你在描述一个对象的状态转换时,需要用很大的篇幅,那么可以尝试着用状态图来理清思路。

比如:商品订单:创建(未付款)->未发货(货到付款/已付款)->已发货->……

这里面的状态转换可能对比会员升级就复杂多了。


我个人的建议是,状态图配合状态表一起使用。

你在需求规格中,贴一张未经解释了状态图,可能会产生歧义。

如果再附上一张状态表,会很清楚的表达图的意思。


状态图与活动图

不知道我的理解是否狭隘,因为我找了一些资料,发现很多人用状态图干更多的事情,比如用它来替代“活动图”。


的确,这两者之间有一些共通点,都是表示一种“转换”、“流”。

但是个人觉得,侧重点是不同的。

“状态图”更侧重于生命周期的状态转换,关注转换的触发。

而“活动图”更侧重于活动的执行,关注流动。


具体的内容我会在下一篇《聊聊UML(9)行为图-活动图》,来聊聊我对这个问题的看法。



小婧是一名行走在实践路上的资深业务分析师(BA),如果想与我同行,就请关注我吧!


以上是关于聊聊UML行为图-状态图的主要内容,如果未能解决你的问题,请参考以下文章

uml系列——行为图:活动&状态

UML图--行为图(活动图和状态图)

uml-状态图学习

UML中状态机图概念

聊聊UML行为图-活动图

UML之状态机图