主题

简介 到页首

大多数情况下,我们使用序列图来阐释用例实现(请参阅工件:用例实现),即,显示对象如何通过交互来执行部分或全部用例的行为。一个或多个序列图可以阐释制定用例的对象交互。典型的组织是:一个序列图用于主要的事件流,一个序列图用于用例的每个独立子流程。

序列图对于设计人员而言尤其重要,因为序列图阐明了对象在流程中的角色,并为确定类职责和接口提供了基础输入信息。

与通信图不同,序列图包括了按时间排定的序列,而不包括对象关系。序列图和通信图表达相似的信息,但显示方式不同。序列图显示了消息的明确序列,当需要对消息的时间排序进行可视化时,序列图更为适用。如果您对交互中的实例之间的结构关系感兴趣,则使用通信图。关于更多信息,请参阅指南:通信图

序列图的内容 到页首

序列图中可含对象和参与者实例,以及描述它们如何交互的消息。该图根据激活情况,描述了所包含的对象中发生的情况,以及对象如何通过相互发送消息进行通信。可为用例的事件流的每一变体制作一个序列图。

附带文本中描述的图。

序列图,描述简单的“电话交换机”中用例拨打本地电话的部分事件流。

对象 到页首

对象显示为一条垂直的虚线,称为“生命线”。生命线代表该对象在特定时间的存在。在生命线的顶端绘有对象符号,并显示对象及其类的名称,两个名称均标有下划线且由冒号分隔:

对象名: 类名

可按以下方式使用序列图中的对象:

  • 生命线可代表对象或对象的类。因此,您可以使用生命线对类和对象行为建模。但是,生命线通常代表某一类的所有对象。
  • 可以不指定对象的类。正常情况下,您首先使用对象来创建序列图,之后再指定对象的类。
  • 可以不命名对象,但如果您想要区别同类的不同对象,则应将它们命名。
  • 同一图中的几条生命线可代表同类的不同对象;但是,如前所述,为区别两个对象,您应命名对象。
  • 代表某一类的生命线可与代表该类的对象的多条生命线同时存在。代表该类的生命线的对象名称可以设置为该类的名称。

参与者 到页首

正常情况下,序列图中的第一条(最左边的)生命线代表了参与者实例,参与者实例将作为交互的调用者。如果同一图中有几个参与者实例,则尝试让它们均处于最左端或最右端的生命线。

消息 到页首

消息是对象之间的通信信息,对象传达信息的同时还期望活动随之发生;在序列图中,消息显示为一个水平的实心箭头,从一个对象的生命线指向另一个对象的生命线。在消息从某个对象传向该对象自身的情况下,箭头可以始于和终于同一生命线。箭头是使用消息的名称及其参数来标注的。也可使用序列号来标注箭头,以显示消息在整个交互中的序列。在序列图中,箭头的实际位置显示了相对序列,所以通常将省略序列号。

可以不指定消息,这意味着消息名称是描述消息整体意思的临时字符串,而不是接收方对象的操作的名称。您可在稍后通过指定消息目标对象的操作,来指定消息。被指定的操作将替换该消息的名称。

脚本 到页首

脚本以文本形式描述序列图中的事件流。

应该将脚本放在生命线的左侧,这样就可以自上至下地查看整个流程(请参阅上图)。您可以将脚本连接到某个消息,这将确保脚本随消息一同移动。

序列图中的分发控制流程 到页首

全部或部分事件流程的集中控制指的是:少数对象通过向其它对象发送消息或从其它对象接收消息来操纵流程。这些控制对象决定了用例中其它对象的激活顺序。剩余对象之间的交互作用非常小,或者完全不存在。

示例

回收机器系统中,用例打印日常报告将明确所退还对象的数目和类型等,并将计数写入收据。报告生成器控制对象决定了总额的抽取与写入顺序。

附带文本中描述的图。

用例打印日常报告的行为结构集中在报告生成器控制对象中。

这是集中行为的示例。控制结构得以集中化的主要原因是,事件流的不同子事件阶段是相互独立的。该方法的主要优点是:每个对象均无需明了下一个对象的计数。要更改子事件阶段的顺序,只需更改控制对象。如果(举例)流程中包含一个新类型的退还项,您也可简单地添加另一个子事件阶段。该结构的另一优点是:由于众多对象中未设立行为顺序,所以您可以很容易地重用其它用例中的各种子事件阶段。

当参与对象相互之间直接通信、而不是通过一个或多个控制对象进行通信时,就形成了分散控制

示例

在用例发送信件中,某人通过邮局向另一个国家或地区寄信。信件首先送到收件人所在的国家或地区。在这个国家或地区,信件送往某个具体的城市。该城市转而将该信件送往收件人的住处。

附带文本中描述的图。

用例发送信件的行为结构是分散的。

用例行为是分散的事件流。子事件阶段是彼此从属的。寄信人称“将这封信寄给某人。”他既不需要也不想知道信件在国家或地区或城市中转送的详细信息。(如果是在国家或地区内寄送邮件,这些行为可能就不会都发生。)

使用的控制类型取决于应用程序。一般来说,您应尝试实现独立的对象,即,将多种任务委托给在性质上最适合执行这些任务的对象。

集中控制的事件流的序列图将是“分叉形”的。另一方面,“阶梯形”序列图阐述的是:控制结构对于参与的对象是分散的。

附带文本中描述的图。

事件流中的集中控制结构将生成“分叉形”序列图。分散控制结构将生成“阶梯形”序列图。

用例实现的行为结构在大多情况下由集中行为和分散行为混合而成。

分散结构适用的情况:

  • 如果子事件阶段是紧密结合的。符合该情况的前提是参与对象:
    • 形成层次结构的一部分或由层次结构组成,例如“国家或地区 - 省/直辖市 - 城市”;
    • 形成信息层次结构,例如“CEO - 分部经理 - 地区经理”;
    • 代表固定的时间顺序进度(子事件阶段的序列将始终按相同的顺序执行),例如“广告 - 订单 - 发货单 - 交付 - 付款”;或
    • 形成概念上的继承层次结构,例如“动物 - 哺乳动物 - 猫”。
  • 如果您想概述功能并随之进行抽象化。对于始终希望使用完整功能的人来说,这是很好的做法,因为在行为结构被集中的情况下,功能就可能变得难以掌握。

集中结构适用的情况:

  • 如果子事件阶段的执行顺序可能有变化。
  • 如果您期望插入新的子事件阶段。
  • 如果你想要使功能的某些部分可作为单独片段来重复使用。


Rational Unified Process   2003.06.15