本文和大家重点讨论一下UML序列图的相关内容,UML序列图主要用于按照交互发生的一系列顺序,显示对象之间的这些交互。很象类图,开发者一般认为UML序列图只对他们有意义。
UML序列图的目的
UML序列图主要用于按照交互发生的一系列顺序,显示对象之间的这些交互。很象类图,开发者一般认为UML序列图只对他们有意义。然而,一个组织的业务人员会发现,UML序列图显示不同的业务对象如何交互,对于交流当前业务如何进行很有用。除记录组织的当前事件外,一个业务级的UML序列图能被当作一个需求文件使用,为实现一个未来系统传递需求。在项目的需求阶段,分析师能通过提供一个更加正式层次的表达,把用例带入下一层次。那种情况下,用例常常被细化为一个或者更多的UML序列图。
组织的技术人员能发现,UML序列图在记录一个未来系统的行为应该如何表现中,非常有用。在设计阶段,架构师和开发者能使用图,挖掘出系统对象间的交互,这样充实整个系统设计。
UML序列图的主要用途之一,是把用例表达的需求,转化为进一步、更加正式层次的精细表达。用例常常被细化为一个或者更多的UML序列图。UML序列图除了在设计新系统方面的用途外,它们还能用来记录一个存在系统(称它为“遗产”)的对象现在如何交互。当把这个系统移交给另一个人或组织时,这个文档很有用。
符号
既然这是我基于UML2的UML图系列文章的***篇,我们需要首先讨论对UML2图符号的一个补充,即一个叫做框架的符号元件。在UML2中,框架元件用于作为许多其他的图元件的一个基础,但是大多数人***次接触框架元件的情况,是作为图的图形化边界。当为图提供图形化边界时,一个框架元件为图的标签提供一致的位置。在UML图中框架元件是可选择的;就如你能在图1和2中见到的,图的标签被放在左上角,在我将调用框架的“namebox”中,一种卷角长方形,而且实际的UML图在较大的封闭长方形内部定义。
图1:空的UML2框架元件
除了提供一个图形化边框之外,用于图中的框架元件也有描述交互的重要的功能,例如UML序列图。在UML序列图上一个序列接收和发送消息(又称交互),能通过连接消息和框架元件边界,建立模型(如图2所见到)。这将会在后面“超越基础”的段落中被更详细地介绍。
图2:一个接收和发送消息的UML序列图
注意在图2中,对于UML序列图,图的标签由文字“sd”开始。当使用一个框架元件封闭一个图时,图的标签需要按照以下的格式:
图类型图名称
UML规范给图类型提供特定的文本值。(举例来说,sd代表UML序列图,activity代表活动图,usecase代表用例图)。
基础
UML序列图的主要目的是定义事件序列,产生一些希望的输出。重点不是消息本身,而是消息产生的顺序;不过,大多数UML序列图会表示一个系统的对象之间传递的什么消息,以及它们发生的顺序。图按照水平和垂直的维度传递信息:垂直维度从上而下表示消息/调用发生的时间序列,而且水平维度从左到右表示消息发送到的对象实例。
生命线
当画一个UML序列图的时候,放置生命线符号元件,横跨图的顶部。生命线表示序列中,建模的角色或对象实例。1生命线画作一个方格,一条虚线从上而下,通过底部边界的中心(图3)。生命线名字放置在方格里。
图3:用于一个实体名为freshman的生命线的Student类的一个例子
UML的生命线命名标准按照如下格式:
实体名:类名
在如图3所示的例子中,生命线表示类Student的实体,它的实体名称是freshman。这里注意一点,生命线名称带下划线。当使用下划线时,意味着UML序列图中的生命线代表一个类的特定实体,不是特定种类的实体(例如,角色)。在将来的一篇文章中,我们将会了解结构化建模。现在,仅仅评述UML序列图,可能包含角色(例如买方和卖方),而不需要叙述谁扮演那些角色(例如Bill和Fred)。这准许不同语境的图重复使用。简单拖放,UML序列图的实例名称有下划线,而角色名称没有。
图3中我们生命线例子是一个命名的对象,但是不是所有的生命线都代表命名的对象。相反的,一个生命线能用来表现一个匿名的或未命名的实体。当在一个UML序列图上,为一个未命名的实例建模时,生命线的名字采用和一个命名实例相同的模式;但是生命线名字的位置留下空白,而不是提供一个例图名字。再次参考图3,如果生命线正在表现Student类的一个匿名例图,生命线会是:“Student”。同时,因为UML序列图在项目设计阶段中使用,有一个未指定的对象是完全合法:举例来说,“freshman”。
【编辑推荐】