本教程适用于Trufun Plato 系列UML建模产品和Trufun Kant系列集成开发环境。
序列图是用来记录系统需求和整理系统设计的不可或缺的uml框图,它按照交互发生的时间顺序,显示了系统中对象间的交互逻辑。在本教程中,您将了解如何使用以上产品来创建UML2序列图。UML2.x在UML1.x的基础上,对语言进行了更加精确的定义,从而达到了更高层次的自动化,因此是UML发展的一次重要修订。序列图是所有框图里改进最大的一个,序列图改进了定义事务的能力和拓展性,对序列图的符号集合的改变,已经在序列化逻辑建模方面取得巨大的进步。
有关下载使用Trufun Plato 系列UML建模产品和Trufun Kant系列集成开发环境的更多信息,请参见Trufun产品官方网站http://www.trufun.net。
- 序列图的目的:
序列图主要以时间顺序显示对象之间的交互。实际上,它显示了参与交互的对象和所交互信息的顺序。开发人员认为序列图和类图一样,是体现系统对象之间需要实现的交互关系的框图。业务人员利用序列图显示不同的业务对象如何交互,可以很好的交流当前业务如何进行,一个业务级的序列图可被当作一个需求文件来使用,为开发人员描述一个将实现的系统的需求。
在项目的需求阶段,分析师需要通过多个序列图来表达用例的层次和细化用例,以便更清晰的描述业务需求。在项目的设计阶段,架构师和开发者利用序列图,挖掘出系统对象间的交互,使整个系统设计更加精确和细致。在项目的开发阶段,开发人员从序列图中就能看出将要实现的系统的行为是如何表现的。
- 序列图的常用元素:
Trufun产品在右边为序列图提供了图2-1可用元素,其中序列图元素有交互()、生命线(
)、消息(
)、状态不变量(
)、交互使用(
)、组合片段(
)、绑定到生命线(
)。下面我们来一一解释这些元素的含义和用途。
图 2-1 Trufun建模工具序列图可用元素
交互():该元素是UML2.x的一个新增元素,在许多框图中都可以看到,也可以把它看作是一个框架,用来提供框图的图形化边界。在序列图的绘图区表现为图2-2所示。“sd Interaction2”为系统自动生成的交互名称,sd为序列图的标记,我们可以自己定义Interaction2部分,修改为自己熟悉的交互名称,以便更好的理解系统。在该交互中,我们可以建生命线和消息,以及其他元素。边界的大小可以根据框图内容来调整。
图2-2 Trufun中标准uml2序列图交互显示
生命线():序列图里必须的元素,生命线是对一个参与者的描述,表示建模的角色或对象实例,也就是说,生命线一般是来自用例图中的角色或者类图中的类对象。生命线名字放置在方格里,有一条虚线从方格的底边中心自上而下,表示生命线的长度。生命线名称下带下划线意味着序列图中的生命线代表一个类的特定实体。生命线在序列图中显示如图2-3(前者为角色,后者为类)。Trufun里面来自角色的生命线会在名称前显示角色图标。生命线的命名规则为:实体名:类名。
图2-3 Trufun中标准uml2序列图生命线显示
Trufun工具中支持中文生命线名称的显示,基于对后续代码和开发的支持,Trufun提供别名显示功能来使序列图中的生命线名称显示中文,而保证生命线的名称为英文命名,以便后续的统一开发使用,别名设置如图2-4。如果采用中文别名显示的话,则生命线名称只显示中文别名,不显示类型,如上图2-3最后一个生命线就是第一个中文别名的显示。
图2-4 trufun生命线中文名称显示设置
消息():序列图中的消息是从一个生命线到另一个生命线的信息传递。消息可以是信号或调用操作,收到消息实例被认为是事件的实例。消息包括发送者、接收者和动作。发送者:发送者是发送消息的类元角色。接收者:接收者是接受消息的类元角色。动作:动作为调用、信号、发送者的局部操作或简单动作,如创建和销毁。动作带有参量表、接收者表达式已经对激活的操作或信号的引用。它还包括消息执行的迭代和条件说明。
序列图的第一个消息总是从顶端开始,一般从图的左边生命线开始发起,后面继发的消息陆续按照顺序向下排列,生命线也会随之延长。消息/方法名字放置在带箭头的线上面。正在被传递给接收对象的消息,表示接收对象的类实现的一个操作/方法。如下图2-5
图2-5 trufun生命线之间的消息发送
消息除了调用外,还有返回消息,返回消息是可选择的;一个返回消息画作一个带开放箭头的虚线,向后指向来源的生命线,在这条虚线上面,你放置操作的返回值,如上图2-5所示。Trufun工具通过属性“返回”按钮的选择来实现是否需要返回消息。返回消息的使用依赖建模的具体/抽象程度,如果需要较好的具体化,返回消息是有用的;否则,主动消息就足够了。
在Trufun工具中,提供属性操作修改消息为同步消息或者异步消息。同步消息图形显示为实心箭头,异步消息图形显示为单线箭头,如下图2-6所示。
图2-6 trufun工具中同步消息和异步消息的图形显示
消息也可以是对象自己传递给自己的,在Trufun中,实现消息自己传递的操作也很简单,选择消息对象,从要传递的对象相应生命线开始点击,然后沿着该条生命线向下点击结束,会自动生成一个自传递消息,如下图2-7所示。
图2-7 trufun工具中自身消息绘制
图2-8 trufun工具序列图中对象之间的消息和生命线
状态不变量():当对象之间进行交互建模时,有时候,必须满足一个条件,消息才会传递给另外的对象。状态不变量则为序列图定义了这样的条件(一个条件,当给定状态激活时,它必须为真。如果不为真,模型就发生了错误)。Trufun中,状态不变量放在交互中的一条生命线上,发生说明之间的间隔相当于一个状态,约束条件在生命线下一次事件发生处计算和判断。图形显示如2-9
图2-9 trufun工具状态不变量的表示
组合片断():交互中的一个构造,它由一个操作符关键字和一个或多个交互操作域组成,每个操作域时交互的一个片断,是序列图中一个嵌入的区域。UML2.x在UML1.x的基础上,增加了序列图的精确性,组合片断就是为了弥补UML1.x的无法解决序列图中的复杂逻辑问题添加的一个新元素。在uml2.x标准中,序列图可以被分解成多个组合片断,这些组合片断可以表示在序列图的同一个对象或者多个对象之间,组合片断用来把一套消息组合在一起,在序列图中显示条件分支。
Trufun工具中实现了UML2.x规范指明的组合片断的所有交互类型。新建一个组合片段,trufun会显示如图2-10的对话框。我们可以通过“交互操作符”下拉框来选择以上我们需要的类型。
图2-10 trufun组合片断新建对话框
- alt:判断条件,可包含多个操作域,数量通过操作域数量来控制,它支持“if then else”逻辑,每一个操作与之间都是一个判断,如下图2-11所示为两个操作域的判断组合片断。 表示一个序列图从顶部开始,按照顺序执行到组合片断这里,因为受到条件的约束,将按照条件执行判断中的相关域。当然判断条件也和我们编程一样,有时候不需要else的约束。
- assert:断言包含一个片断。
- break:跳转,中断,包含一个含有监护条件的子片断,如果监护条件为"true",子片断执行,而包含子片断的交互的剩余部分不会执行。 跳转最常用来做模型异常处理。
- consider:包含一个子片断和一个消息类型列表。只有列表中的消息类型可以出现在子片断中。这表示其他类型可以出现在实际系统中,但是交互会忽略它们。它和ignore构造相反。
- critical:临界区域包含一个子片断。
- ignore:包含一个子片断和一个消息类型列表。只有列表中的消息类型可以出现在子片断中。
- loop:循环。包含一个含有监护条件的子片断。经常我们在编程的时候需要循环,那么建模中我们也需要循环的序列,同opt,alt的表示一样,条件放在片断名称下面的方框中,框架的其他部分用来进行序列消息的循环
- neg:否定。含有一个子片断。该片断定义了不可以发生的执行序列。
- opt:可选(optional)。含一个含有监护条件的子片断。如果监护条件为真,则子片断执行,否则不执行。 相当于我们的“if then”判断,也就是该片断满足条件则执行,否则跳过。
- par:并行。并行构造包含两个或更多并发执行的子片断。现代计算机系统在复杂性和有时执行并发任务方面不断进步。当完成一个复杂任务需要的处理时间比希望的长的时候,一些系统采用并行处理进程的各部分。
- seq:弱排序(week sequencing)构造包含两个或更多个子片断。
- strict:严格排序(strict sequencing)构造包含两个或更多个子片断。
下面举几个交互类型的例子。
图2-11 trufun工具中组合片断示例图
交互使用():一个交互的定义中对另一个交互的引用,也就是序列的重用。该部分是UML2.x的一个重要创新,交互使用通过复用简单的序列图组织产生复杂的序列,这样我们就可以把完整的复杂的序列抽象为一个概念。交互使用框架名为ref,交互使用是一个交互的主体内对一个交互的带参数的引用。就象任何模块化引用(比如过程)一样,它允许在许多不同的上下文中重用一个定义。当一个交互使用被执行时,它的效果等同于使用作为交互使用一部分提供参量执行被引用的交互。如下图2-12所示。
图2-12 trufun序列图交互使用图例
绑定到生命线():是Trufun产品针对组合片断和交互使用元素添加的一个辅助功能,在trufun中新建组合片断和交互使用都是在一个生命线上,如果需要在多个生命线之间使用这些元素,就需要用该功能,从组合片断或者交互使用开始,连线到需要的几个生命线进行绑定,就可以实现多生命线之间的交互和组合。