聊聊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中定义为“状态机”,用来表示对象的状态转换。
在我的理解层面上来说,状态图就是用来分析一个对象的生命周期状态转换的。
面向对象的分析,不仅仅是要分析一个对象的关联对象和自身属性,还需要对它的生命周期进行分析。
从出生到灭亡,会经历哪些状态?
这些状态是怎么转换的?什么事件触发了它的转换?
这些就可以用状态图表示。
相比较大段的文字,状态图更容易让人清晰的理解,也更容易让我们聚焦到一些关键的用例和事件。
主要组成要素
状态
一个圆边的矩形,用来表示状态,里面写的是状态的名字。
当绘制嵌套的状态图时,状态的这个矩形框可以视为“边界”。
开始
标准的开始长这样:
结束
标准的结束长这样:
转换
转换就是带箭头的线:
触发事件或者动作写在线上。
上图很清楚的看到,转换包括从一个状态到另外一个状态,也包括自循环。
复合状态图
父子状态图我比较少用,因为大部分情况下,我会分成两张图进行绘制。
不过,如果你觉得可以表达清楚,画在一张图上也是可以的。
比如这种,子状态与父状态没啥关联的父子状态图:
ReadAmount这个状态有个子状态:Select Amount。
有兴趣的小伙伴可以尝试着分析下面的这张状态图:
如果你想要强调触发进入和结束子状态的事件,可以使用入口点和出口点两个元素。
使用注意
状态图总的来说不复杂也容易理解。
但并不是所有的对象都需要进行状态图建模的。
如果你的对象行为比较简单,总共也就不到4个状态,状态之间的转换也很单纯,那么不建议你花很大的精力去进行状态图建模。
比如简单的电商会员升级:一个会员的状态由新手->白金->铂金->黑金,最后注销,基本上就通过消费额作为条件,那么用状态表进行表述反而可能更简单。
如果你发现你在描述一个对象的状态转换时,需要用很大的篇幅,那么可以尝试着用状态图来理清思路。
比如:商品订单:创建(未付款)->未发货(货到付款/已付款)->已发货->……
这里面的状态转换可能对比会员升级就复杂多了。
我个人的建议是,状态图配合状态表一起使用。
你在需求规格中,贴一张未经解释了状态图,可能会产生歧义。
如果再附上一张状态表,会很清楚的表达图的意思。
状态图与活动图
不知道我的理解是否狭隘,因为我找了一些资料,发现很多人用状态图干更多的事情,比如用它来替代“活动图”。
的确,这两者之间有一些共通点,都是表示一种“转换”、“流”。
但是个人觉得,侧重点是不同的。
“状态图”更侧重于生命周期的状态转换,关注转换的触发。
而“活动图”更侧重于活动的执行,关注流动。
具体的内容我会在下一篇《聊聊UML(9)行为图-活动图》,来聊聊我对这个问题的看法。
小婧是一名行走在实践路上的资深业务分析师(BA),如果想与我同行,就请关注我吧!
以上是关于聊聊UML行为图-状态图的主要内容,如果未能解决你的问题,请参考以下文章