1.基本概念
序列图(Sequence Diagram)是对象之间基于时间顺序的动态交互,它显示出了随着时间的变化对象之间是如何进行通讯的。序列图的主要用途之一是从一定程度上更加详细地描述用例表达的需求,并将其转化为进一步的更加正式层次的精细表达。
序列图的含义
序列图用于表现一个交互,该交互是一个协作中各种类元角色间的一组消息交换,侧重于强调时间顺序。
所谓交互(Interaction)是指在具体语境中由为实现某个目标的一组对象之间进行交互的一组消息所构成的行为。UML提供的交互机制通常被用来对两种情况进行建模,分别是为系统的动态方面进行建模和为系统的控制过程进行建模。
面向动态行为方面进行建模时,该机制通过描述一组相关联、彼此相互作用的对象之间的动作序列和配合关系,以及这些对象之间传递、接收的消息来描述系统为实现自身的某个功能而展开的一组动态行为。
面向控制流进行建模时,可以针对一个用例、一个业务操作过程或系统操作过程,也可以针对整个系统。描述这类控制问题的着眼点是消息在系统内如何按照时间顺序被发送、接收和处理。
在UML的表示中,序列图将交互关系表达为一个二维图。其中,纵向是时间轴,时间沿竖线向下延伸。横向代表了在协作中个独立对象的角色。角色使用声明线表示,当对象存在时,生命线用一条虚线表示,此时对象不处于激活状态;当对象的过程处于激活状态时,生命线是一个双道线。序列图中的消息使用从一个对象的生命线到另一个对象生命线的箭头表示,箭头以时间顺序在途中从上到下排列。
示例:
2.在软件工程的阶段
在于需求分析阶段
属于动态视图
属于动态模型
对象间传递的图形化方式,对象图之后
3.在项目开发里的作用
序列图作为一种描述在给定语境中消息是如何在对象间传递的图形化方式,在使用其进行建模时,主要可以将其用途分为以下三个方面:
- 确认和丰富一个使用语境的逻辑表达。一个系统的使用情境就是系统潜在的使用方式的描述,也就是它的名称所要描述的。一个使用情境的逻辑可能是一个用例的一部分,或是一条控制流。
- 细化用例的表达。把用例表达的需求转化为进一步的、更加正式层次的精细表达。用例图常常被细化为一个或者多个序列图。
- 有效地描述如何分配各个类的职责以及各类具有相应职责的原因。可以根据对象之间的交互关系来定义类的职责。各个类之间的交互关系构成一个特定的用例。
序列图的组成
4.组成元素
4.1.对象
序列图中的对象和对象图中对象的概念一样,都是类的实例。序列图中的对象可以是系统的参与者或者任何有效的系统对象。
对象的表示形式也和对象图中对象的表示方式一样,使用包围名称的矩形框来标记,所显示的对象及其类的名称带有下划线,二者用冒号隔开,使用“对象名:类名”的形式,对象的下部有一条被称为“生命线”的垂直虚线。
如果对象的开始位置位于序列图的顶部,那就意味着序列图在开始交互的时候该对象就已经存在了,如果对象的位置不在顶部,则表明对象在交互的过程中将被创建。
在序列图中,可以通过以下几种方式使用对象:
- 使用对象生命线来建立类与对象行为的模型,这也是序列图的主要目的
- 不指定对象的类,先用对象创建序列图,随后再指定它们所属的类,这样额可以描述系统的一个场景。
- 区分同一个类的不同对象之间如何交互时,首先应给对象命名,然后描述同一类对象的交互。也就是说,同一序列图中的几条生命线可以表示同一个类的不同对象,两个对象是根据对象名称进行区分的。
- 表示类的生命线可以与表示该类对象的生命线平行存在。可以将表示类的生命线对象的名称设置为类的名称。
4.2.生命线
生命线是一条垂直的虚线,用来表示序列图中的对象在一段时间内的存在。每个对象底部中心的位置都带有生命线。生命线是一个时间线,从序列图的顶部一直延伸到底部,所用时间取决于交互持续的时间,也就是说生命线表现了对象存在的时段。
对象与生命线结合在一起成为对象的生命线。对象存在的时段包括兑现在拥有控制线程时或被动对象在控制线程通过时存在。
生命线的箭头代表对象之间的消息传递,指向生命线箭头表示对象接收信息,通常,由一个操作来完成,箭尾表示对象发送信息,由一个操作激活。生命线质检箭头排列的集合顺序代表了消息的时间顺序。
4.3.激活
序列图可以描述对象的激活,激活是对象操作的执行,它表示一个对象直接或通过从属操作完成的过程。它对执行的持续时间和执行与其调用者之间的控制关系进行建模。在传统的计算机语言上,激活对应栈帧的值。
激活在序列图中用一个细长的矩形框表示,它的顶端与激活时间对齐,而底端与完成时间对齐。被执行的操作根据风格不同表示成一个附在激活符号旁或在左边空白处的文字标号。进入消息的符号也可表示操作。在这种情况下,激活上的符号可以被忽略。如果控制流是过程性的,那么激活符号的顶部位于用来激发活动的进入消息箭头的头部,而符号的底部位于返回消息箭头的尾部。
4.3.消息
消息是从一个对象(发送者)向另一个或几个其他对象(接收者)发送信号,或由一个对象(发送者或调用者)调用另一个对象(接收者)的操作。他可以有不同的实现方式,比如过程调用、活动线程间的内部通信、时间的发生等。
从消息的定义可以看出,消息由三部分组成,分别是发送者、接收者和活动。所谓发送者是发出消息的类元角色。接收者是接收到消息的类元角色,介绍消息的一方也被认为是时间的实例。接收者有两种不同的调用处理方式可以选用,通常由接受者的模式决定。
一种方式是操作作为方法实现,当信号来到时它将被激活。过程执行完成后,调用者收回控制权,并可以收回返回值;
另一种方式是主动对象,操作调用可能导致调用事件,它触发一个状态机转换;活动为调用、信号、发送者的局部操作或原始活动,如创建或销毁等。
在序列图中,消息的表示形式为从一个对象(发送者)的生命线指向另一个对象(目标)的生命线的箭头。
消息的五种类型:
5. 序列图中项目的相关概念
- 创建对象:
创建一个对象指的是发送者发送一个实例化消息后实例化对象的结果。在创建对象的消息操作中,可以有参数,用于新生对象实例的初始化。
在序列图中,创建对象操作的执行使用消息的箭头表示,箭头指向被创建对象的框。对象创建之后就会具有生命线,就像序列图中任何其他对象一样。
- 销毁对象:
销毁对象指的是将对象销毁并回收其拥有的资源,它通常是一个明确的动作,也可以是其他动作、约束或垃圾回收机制的结果。销毁一个对象将导致对象的所有组成部分被销毁,但是不会销毁一般关联或者聚集关系连接的对象,尽管它们之间包含的该对象的链接也将将被消除。
在序列图中,对象被销毁是通过在对象的生命线上画一个大“×”来表示的,在销毁新创建的对象或者序列图中的任何其他对象时,都可以使用。他的位置是在对象被销毁的信息上,或者在对象自我终结的地方。
- 分支:
分支指的是从同一点触发多个消息并指向不同的对象,根据条件是否互斥,可以有条件和并行两种结构。
引起一个对象的消息产生分支可以有很多种情况,在复杂的业务处理过程中,要根据不同的条件进入不同的处理流程中,这通常被称作添加分支,另一种情况是当执行到某一点的时候需要向两个或两个以上的对象发送消息,消息是并行的,这是被称为并行分支。 - 从属流:
从属流是指从对象根据不同的条件执行了不同的生命线分支。如用户在保存或删除一个文件时,向文件系统发送一条消息,文件系统会根据保存或删除消息条件的不同执行不同的生命线。