B.3 顺 序 图

B.3.1 顺序图的概念

顺序图是按照时间的先后顺序来描述消息是如何在对象间发送和接收的。顺序图有两个坐标轴,横坐标表示对象,纵坐标表示时间。顺序图又称为序列图或时序图。

顺序图中的对象用一个带有纵向虚线的矩形块来表示,矩形块中写有对象或类的名字,纵向的虚线表示对象的“生命线”。对象之间的交互用对象间的水平消息线来描述,消息线的箭头表示消息的类型,消息的先后顺序就是对象交互的先后顺序。

顺序图主要用来表示用例中行为的顺序,可以通过它来进行一个场景说明,或者是对某一个复杂业务功能或是流程执行先后的说明。也就是说,顺序图通常可以用来描述系统某次调用的运行顺序。

B.3.2 顺序图的基本表达

消息的表示方式如表B.3所示。

表B.3 消息的表示方式

图片

直接用例子来说明顺序图的基本表达方式,假若有A类和B类,A类会调用B类的方法,然后写个客户端来调用A类,现在要使用顺序图来画出客户端的调用顺序。

假设B类的示例代码如下:

860ffed30af049229c8d7d535a84ea9c

A类的示例代码如下:

f76000ac913d46758bb791149e0ee0e6

Client的示例代码如下:

72ef484f05534f00897edbaff97982ea

1.UML2.0的顺序图示例

先来看看在UML2.0当中如何画出这个顺序图,如图B.17所示。

图片

图B.17 UML2.0顺序图示例

对图B.17稍微说明一下。

■ 最外面那个大框框,在UML2.0中称为interaction,就是表示一个交互的这么一个边界,左上角的sd Client.main2是它的名字,是可以修改的。通常情况下,一个interaction应该和一个类中的某一个方法对应,相当于调用的起点,图B.17表示的就是从Client类的main方法开始的顺序图,直白点说就是当Client的main方法被执行或调用的时候,系统地调用顺序。

■ 带虚线的方块就代表对象,self就是表示interaction自身,也就是入口,即Client类的对象。

■ 标号为1的那个从小黑点到对象self的一个调用,就是表示从外部来调用Client类,上面写着调用的方法是main,这条横线加箭头,就表示消息。

■ 虚线上的矩形条表示对象被激活的生命周期,简单点说,就是在这一段对象被其他对象使用。

■ 那个for的块,在UML2.0中表示Combined Fragment(组合片段),也就是用来进行块控制的,比如if-else、for、while、try等。

大家看到这个顺序图的示例,会发现和前面各个模式中画的顺序示意图有很大的不同,的确是这样的。因为UML2.0的顺序图的语义丰富了不少,当然表达的越细致,图就会越复杂。因此,前面每个模式的运行顺序示意图,是采用的UML1.4的版本来绘制的。因为UML1.4相对而言更简单一些,而且我们要表达的也比较粗略,只是想要描述出模式运行起来的大概顺序,并不深入细节。

2.UML1.4的顺序图示例

使用UML1.4画出上面示例的顺序图,如图B.18所示。

图片

图B.18 UML1.4顺序图示例图一

图B.18生命周期下面的大黑叉叉,表示到这个地方销毁本对象实例。

这个图大家看起来可能要简单很多,至于后面的A和B对象画得比Client对象矮,是为了表示出运行到某个时间才创建的对象,当然也可以把它们放到一个水平线上。把上面的顺序图调整一下,可以画出如图B.19所示的顺序图。

图片

图B.19 UML1.4顺序图示例图二

图B.19基本上就是前面画每个模式的运行顺序示意图的大概样子。由于前面画每个模式的运行顺序图的时候,很多都是文字说明,并没有和真实的代码结合,所以都没有直接称为顺序图,而是称呼为顺序示意图,表示不是完整的顺序图,这点大家要了解一下。好在我们是把重点放在对模式运行顺序的理解上,并不是来讲述UML图如何画,所以不必把它们当严格的、完整的UML顺序图来看待。

好了,对于UML的基础知识,这里就简略地介绍这么多,了解这些知识,对于看懂本书所绘制的UML图应该是足够了,如果想要了解更多的UML的知识,请参考专业的UML方面的资料。