课件

11.2 顺序图建模.pdf

绘制顺序图

  1. 在顺序图的顶端绘制矩形框,定义参与交互的类/对象的名字
  2. 在每个对象下面绘制竖直虚线,表示该对象的生命线
  3. 在对象间添加箭头表示各种类型的消息,跟踪对象间的控制流转换
  4. 生命线上可以添加竖直的矩形,定义该对象的激活期,表明该对象在哪一个时间段正在执行某一项操作
  5. 根据需要添加框的组合和关联,表示复杂的控制结构

顺序图建模过程

顺序图建模实例:
image.png
首先我们画出参与这次交互的所有的参与者的对象,包括来自外部的参与者Customer、来自系统内部的订单Order、和菜单管理员Menu Manager。画出这三个对象的生命线,标出参与这些对象之间交互的消息,用箭头表示。

顺序图的起始是一个没有发起对象的消息Hunger,这里每个消息代表的操作都属于操作的接收方,即相当于发起消息的这一方要调用消息接收那一方对象的一个操作。

沿横轴方向表示的是参与这次操作的对象,沿纵轴方向表示的是一个时间轴,自上而下发生的次序、由早到晚。

图中还添加了一个循环控制结构Loop,循环的条件是直到用户点菜完毕。还有一些嵌套发生的在订单上的交互消息,包括检查某一个菜是不是还有、它要给自己添加一个新的菜单项,这样的操作是指向自身的自返消息。

最下边我们还有一个添加外部引用的完成订单、付款、这样的一个框,该框内容的定义来自另一个顺序图。

组合框

UML2.0中引入了组合框的概念,来表达更为复杂的控制结构。通过把顺序图中的一部分交互内容放入框中,并在左上角注明该控制结构的类型,在方括号中加上控制条件的定义,就能够表达选择、循环、并发等更为复杂的控制逻辑,如下图:
image.png

  • 左图左上角标明是 opt 结构的时候,表明这是一个单条件的选择结构,当条件满足时执行框中的交互活动;
  • 中间的图当左上角标签为 alt 的时候,表示选择执行线上或者线下的交互活动,线上线下都有各自的控制条件,只有当控制条件满足时,才能够执行相应部分的内容;当把标签 alt 换成 par 时,表示这是一个并发执行的控制逻辑,即虚线上下的部分将并发完成;
  • 右边的图表示的是一个循环控制结构,当条件满足时,框中的内容将循环执行;

由此可见,框是一种表达能力很强的建模机制,通过引入框能够更好的去表达某一个控制单元的反复执行、选择执行和并发执行。

顺序图间的关联

当一个顺序图的交互过程过于复杂、步骤繁多的时候,或者当我们需要引用其它的外部图表的时候,可以采用 ref(reference)来标注的框图的外部引用:
image.png
比如在这个图中,验证帐户、密码和取款流程单独定义为一个外部的顺序图,然后在整个的取款顺序图中引用这两个片断,从而简化我们的取款过程顺序图的定义。

在定义框这一种建模机制之前采用不完整的箭头和加标注的方式来表达类似的场景。

对象的创建与撒销

大多数情况下,对象的生命周期是贯穿一个场景执行的始终的,但是也有两种情况需要对对象的创建和撤销进行特殊的处理。

image.png
比如在图中我们看到 new 标明一个新建对象的消息,在它的末端我们添加了一个新的表示对象的方框,这种情况下表示这个对象是在场景中建立出来的,它出现的位置要比其它的对象相对较低。

而对象的撤销是指在对象的生命线底部用一个 X 表示这个对象在场景还没有执行完的时候就要被撤销,在 Java 中没有明确的撤销对象的操作是要通过垃圾回收机制来处理,因此图中表示的只是一个对象生命周期结束的一个逻辑。

例子:银行系统交易验证的交互流程
image.png
这过程中首先创建一个交易对象,交易对象创建之后它又将创建一个交易的协调器,然后交易协调器负责创建一个信用交易检查器以及担保交易检查器两个新的对象,完成本次交易的验证之后,这两个新创建的交易检查器对象将被撤销,验证成功之后再对交易的协调器进行循环的处理,是不是所有的交易都已经做完,当和本次交易的相关的所有检查都做完之后,返回验证的结果,然后交易的协调器也将被撤销,再返回之后本次交易结束,交易也将被撤销。这就是一个在交互过程中动态创建和撤销相应对象的过程。

思考题:有缺陷的顺序图

下图是电话通信的简单交互过程的顺序图:
image.png
这个顺序图有什么问题?(留意 UML 的语法以及场景的可行性)

集中、分布控制

由于顺序图它是在对系统的控制流程进行建模,因此通过分析顺序图的控制流的布局就可以推断出这个系统采用的是集中控制还是分布控制。
image.png
比如左图,它最左边的对象发出很多的命令给其他的对象,所有对象的返回结果也交由左边的这个对象来响应和处理,因此可以看出这种布局的顺序图是采用集中控制的方式,而右面的图可以看出左边的对象它将消息下发给后边的对象来完成,对象之间层层嵌套,因此它的控制流是分布到各个后续的对象身上完成的,是一种典型的分布式控制流程的布局。

例1:集中控制的计价系统顺序图
image.png
图中可以看出,几乎所有的控制命令都是从订单这一对象发出的,它一直属于活动期,而且它要等待与所有对象交互的命令返回结果,再进行下一步的交互流程。每一个订单项 Order Line 以及每一种所购的商品 aProduct 以及相应的 aCustomer 都是直接和 Order 对象相交互。

例2:分布控制的计价系统顺序图
image.png
同一个控制流程我们可以采用完全不同的控制策略,如上图,这里分布控制的计价系统的顺序图,是由订单把计算价格的命令发给每一订单条 Order Line ,由 Order Line 自行和每一个产品及相应的 Customer 发生交互,这样每一条目的价格是分开计算的,最后只是汇总一下,因此,它是采用分布控制的机架系统,Order Line 承担了一部分控制功能,Order Line 减轻了 Order 的控制指责。是我们建议的分布式的顺序控制布局。