UML图
UML图 – 时序图
时序图(序列图,顺序图)(Sequence Diagram)显示对象之间的关系, 强调对象之间消息的时间顺序, 显示对象之间的交互. 时序图中包括的建模元素主要有:对象(Actor)、生命线(Lifeline)、执行发生(Execution Occurrence)、消息(Message)….
顺序图(Sequence Diagram) = 生命线(Lifeline) + 消息(Message)
时序图将交互关系表示为一个二维图. 其中,纵轴是时间轴,时间沿竖线向下延伸. 横轴代表了在协作中各独立的对象
时序图元素
对象 (Object)
对象包括三种命名方式:
第一种方式包括对象名和类名;
第二中方式只显示类名不显示对象名,即表示他是一个匿名对象;
第三种方式只显示对象名不显示类明.
生命线 (Lifeline)
生命线在顺序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间.
互动条 (Activation Bar)/控制焦点 (Focus of Control)/激活(Activation)
也称为执行发生(Execution Occurrence), 用来表示对象的某个行为的执行状态, 它表示时间段的符号, 在这个时间段内对象将执行相应的操作, 用虚线上的小矩形条来表示
消息 (Message)
对象的行为也称为消息(Message),通常当一个对象调用另一个对象中的行为时,即完成了一次消息传递.
消息一般分为同步消息(Synchronous Message), 异步消息(Asynchronous Message), 返回消息(Return Message).
同步消息=调用消息(Synchronous Message): 消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。
异步消息(Asynchronous Message): 消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。
返回消息(Return Message): 返回消息表示从过程调用返回
自关联消息(Self-Message): 表示方法的自身调用以及一个对象内的一个方法调用另外一个方法。
交互框(Interaction Frame):
指途中的一块区域(Region)或片段(Fragment),包含一个操作符(或称为标签),并包含一个警戒
- Alternative fragment(denoted “alt”)与 if…then…else对应
- Option fragment (denoted “opt”) 与 Switch对应
- Parallel fragment (denoted “par”) 表示同时发生
- Loop fragment(denoted “loop”) 与 for 或者 Foreach对应
例子:
— 使用场景 : 汽车租赁公司;
— 使用的对象 : Customer (客户), Worker (工作人员), Order (请求), Record (记录), Car (汽车);
— 工作流程 : ① 客户 向 工人 提出租车要求, ② 工人 检查 请求, ③ 客户 付款, ④ 工人 填写 记录, ⑤ 工人 取车;
时序图 :
对象的创建和撤销
对象位置 :
— 顶部 : 时序图中对象的默认位置是在时序图顶部, 这表明对象在交互开始之间就已经存在;
— 中间 : 如果对象在时序图中间部分, 说明对象时在交互过程中创建的;
交互过程中创建对象的方法 :
— 消息指向对象 : 消息是构造方法, 箭头指向对象所代表的的矩形;
— 消息指向激活条 : 消息是构造方法, 箭头指向对象下面的激活条;
撤销对象 : 如果想要在时序图中撤销一个对象, 因为如果同时有几个对象, 如果不进行特殊操作其生命周期将会一样长;
— 效果图 : 下图中将 Customer 和 Order 对象撤消了, 因为它们基本没有参与后期的交互;
时序图建模技术
时序图使用时机 : 对动态行为建模, 强调时间展开信息的次序的时候, 使用时序图;
时序图管理策略 :
— 单一控制流 : 一个单独的时序图只能显示一个控制流;
— 多个时序图 : 完整的控制流很复杂, 可以绘制多个时序图, 一个主干时序图, 多个分支时序图, 使用包对这些时序图进行管理;
时序图建模策略 :
— 设置交互语境 : 交互所在的环境, 包括哪些对象, 属于什么系统, 子系统, 相关的操作 类 用例等;
— 对象排列顺序 : 根据对象重要性, 从左到右排列在时序图中;
— 对象生命线 : 对象通常存在于交互的整个过程, 也可以在交互过程中被创建和撤销;
— 消息排列 : 引发交互信息之后, 消息按照时间顺序从上向下画出, 先发出的消息 在 后发出的消息上面;
— 激活期设置 : 可以将实际操作发生的 时间点 消息 明确的显示出来;
— 时间空间约束 : 每个消息都可以附加合适的时间 和 空间约束;
— 前置后置条件 : 每条消息可以附加 前置 或 后置 条件;