介绍
- 时序图用于描述按时间顺序排列的对象之间的交互模式;它按照参与交互的对象所具有的“生命线”和它们相互发送的消息来显示这些对象
- 时序图描述了在参与交互的对象中所发生的事件(从激活的角度来说明),以及这些对象如何通过相互发送消息进行通信。可以为用例事件流的各种不同形式制作时序图。
- 使用时序图来描述用例实现是一种从现实世界到对象世界的映射方法,它对我们确定对象职责和接口有着显著的作用。而对象的核心就是职责和接口。
- 时序图强调消息事件的发生顺序,更方便于阐述事件流的过程;但是时序图却难以表达对象之间的关系
- 类的三个层次
- 概念层——业务建模阶段——业务实体对象——业务模型时序图
- 说明层——概念建模阶段——分析类对象——概念模型时序图
- 实现层——设计建模阶段——设计类对象——设计模型时序图
业务模型时序图
业务模型时序图用于为领域模型中的业务实体交互建模,其目标是实现业务用例。
-
图展示业务实体如何实现网上购物过程的时序图。这个时序图对这些业务实体对象如何参与业务提供了非常直观的描述,从图中我们可以非常容易地分辨出对象的职责、生命周期和会话过程。对业务模型时序图的理解将有助于我们了解业务架构
-
时序图中常用的UML元素解释
对象:表示参与交互的对象。每个对象都带有一条生命周期线,对象被激活(创建或者被引用)时,生命周期线上会出现一个长条(会话),表示对象的存在。
生命周期线:生命周期线表示对象的存在,当对象被激活(创建或者被引用)时,生命周期线上出现会话,表示对象参与了这个会话。
-
消息
介绍:由一个对象的生命周期线指向另一个对象的生命周期线。如果消息指到空白的生命周期线,将创建一个新的会话;如果消息指到已有的会话,表示该对象延续已有会话。 与实际的编程环境相似,消息有许多不同的类型
-
类型
-
简单消息:适用于大多数情况。它不强调消息的类型,仅表示一个交互。一般情况下使用简单消息就足够了
-
返回消息:返回消息为源消息的返回体,而非新的消息。一般来说不需要为每个源消息都绘制返回消息,一方面因为默认情况下源消息都有返回,另一方面太多的返回消息会使图变得更复杂
-
同步消息:表示发出消息的对象将停止所有后续动作一起等到接收消息方响应
-
限时消息:是同步消息的一种特殊情况。源消息对象发出消息后将等待响应一段时间,在限定时间内还没有响应时,源消息对象将取消阻塞状态而执行后续操作
-
异步消息:源消息对象发出消息后不等待响应
-
会话:会话表示一次交互,在会话过程中所有对象共享一个上下文环境。例如事务上下文、安全上下文等。
销毁: 销毁绘制在生命周期线上,表示对象生命周期的终止。虽然示例图中绘制了,但销毁也没有必要强调。
-
绘制业务模型时序图时要注意
- 第一,时序图以达成业务目标为准则;
- 第二,这个阶段处于业务阶段,使用的描述语言应当采用业务术语;
- 第三,时序图表达的内容会对将来的分析设计带来帮助,但是相对于编码实现来讲由于太粗略而不能够作为依据
概念模型时序图
概念阶段的时序图采用分析类来绘制,代表了系统原型,所以这个阶段的时序图已经带有计算机理解
-
它将业务模型场景用分析类重新绘制一遍,这样,既保留了实际业务需求,又得到了计算机实现的基本理念
请注意其中的计算机实现理念的引入
这时的时序图依稀已经有了实现的影子。实际上,分析类所展示出来的已经是系统实现的原型
设计模型时序图
设计模型时序图使用设计类作为对象绘制。目标是实现概念模型中的某个事件流,一般以一个完整交互为单位,消息细致到方法级别
显然,在实际工作中我们很难为所有的交互都绘制时序图,那将是一个巨大的工作量
所以笔者建议在设计模型阶段,只需要用框架中的关键类描述典型的交互场景即可,不需要为每一个交互都绘制时序图
为了保证软件实现满足需求,省略了大量设计模型时序图的同时,要求有更多的概念模型时序图,这样才能保留足够的信息来说明需求与实现之间的过渡
-
所有的类和方法都与实际编程无异,已经可以看作是伪代码了
小结
- 时序图的三种应用场合是在建模过程中经常使用的动态视图
- 在任何时候需要表达对象间的交互时,或者想分析对象的职责和接口时都可以使用时序图
- 在建立软件架构时,为了说明架构中的关键对象交互场景,或者为了说明应用程序如何使用架构的编程模型,也可以使用时序图来说明。这些时序图可以作为架构文档的一部分,也可用作编程规范和指南使用
- 在非正式建模工作中,例如一时不能确定如何设计接口,或者不能确定设计是否合理时都可以用时序图帮助分析。时序图是十分有用的工具,掌握并随时使用它是很好的分析设计习惯