一、概述
交互图是用来表达系统的各个对象之间如何交互,如何合作完成某个行为的动态模型工具,它与用例图、状态图、活动图等共同构成了系统的行为视图。
交互图主要用于对用例图中的控制流进行建模,它包括序列图和协作图,其中,序列图按时间次序描述系统中各对象如何通过消息交互,协作图从空间上描述收发消息的对象的结构关系。
二、序列图
序列图是一种交互图,描述了系统中各个对象之间传递消息的时间次序,用来表示用例的行为顺序,从而为对象类图中概括对象的行为、划分对象类的职责提供依据。它依赖与用例图,如果说用例图是对用户需求的第一次抽象,那通过序列图,用户的需求就会变得更加具体,系统中各个对象的行为和角色也更加清晰。
序列图也称为时序图,包括对象、生命线、消息和激活。其中激活表示该对象被占用以完成某个任务,撤销表示对象处于空闲等待消息状态。在UML中,矩形表示对象是激活的,称为激活期或控制期。对象完成任务后被撤销,一般发生在一个消息离开对象生命线的时候。
同步消息代表一个通过操作调用的嵌套的控制流,该操作调用要求操作同步。同步消息的接收方必须是一个被动对象,即它是一个需要通过消息的驱动才能执行动作的对象。异步消息代表一个非同步的信号请求,该信号异步要求一个操作。异步消息的发送方和接收方是并行工作的。异步消息的接收方必须是一个主动对象,它不需要消息驱动就可以执行对象的动作。
一个对象可以在交互中动态创建。动态创建的对象生命线起始位置低于正常的对象。一个对象可以在交互中销毁。当一个对象已经完成了自己的全部动作或活动后,可以在对象生命线的末端使用删除标志来销毁,对象可以自己销毁自己(析构函数)。
自调用指一个对象调用自己。当指定的事件已经出现或者操作已完成时,接收方立即发送一个异步消息给发送方,通知发送方可以继续进行后续的动作,这就是回调机制。回调发送的是一个异步消息,收发双方并行进行各自的活动,并且并非任何异步消息都要有相对应的回调消息,而返回消息则是与同步消息匹配的,同步消息的发送方必须等待接收方响应后才能继续后续的动作。
三、协作图
协作图强调以消息传递为纽带的一组对象之间的组织结构,用于描述系统的行为如何由系统的各对象合作完成的。
序列图和协作图都可以用来表示系统的动态行为,前者侧重强调消息的时间顺序,即对象间的通信模式;后者侧重强调对象间的静态连接关系,即对象间的协作。
协作图没有时间维,所以消息和并发线程的时间顺序必须用序号表示。协作图描述了两个方面:对交互作用的对象的静态结构描述,包括相关的对象的关系、属性和操作;为完成工作在对象间交换的消息的时间顺序的描述。第一个方面称为协作所提供的“上下文”,第二个方面称为协作关系的“交互作用”。
四、交互图建模
序列图建模基本步骤:
(1) 确定交互的上下文。
(2) 找出参与交互的对象类的角色,并横向排列在序列图的顶部。最重要的或启动交互的对象放在最左边,依次向右排列,动态创建的对象应放在被创建的时间点位置。
(3) 对每个对象设置一条垂直向下的生命线。
(4) 从初始化交互的消息开始,自顶向下在生命线上放置消息,注意各类不同消息的表示法。
(5) 在生命线上绘制对象的激活期,包括动态对象的创建和销毁。
(6) 根据消息之间的关系,确定循环结构及其循环参数和出口条件。
协作图建模的基本步骤:
(1) 确定交互的上下文。
(2) 找出参与交互的对象类的角色,把它们作为图形的节点安置在协作图中。最重要的对象放在*。
(3) 设置对象的初始性质。
(4) 给出对象间的关联,注意必要的修饰,如构造型<<global>><<local>>等。
(5) 从初始化交互的消息开始,按交互顺序放置其它消息,注意消息的序号不可缺少。
(6) 处理特殊的情况,如循环、主动对象、异步消息、多对象等。
序列图和协作图都是交互图,但它们间并不完全相同,表现为:
(1) 序列图和协作图都能等价地表现系统运行中对象的交互行为。
(2) 序列图表达了时间的消息序列,体现了系统行为的顺序。
(3) 协作图表达了系统中对象间的关联和消息的相互作用,体现了系统的静态结构。
(4) 序列图适合按时间次序建立系统的控制流模型,协作图适合按对象组织建立系统的控制流模型。
参考文献:
[1] 唐学忠等著. UML面向对象分析与建模. 电子工业出版社. 2008
[2] 蔡敏等著. UML基础与ROSE建模教程. 人民邮电出版社. 2006
[3] Carlo Ghezzi等著. 施平安译. 软件工程基础(第2版) 清华大学出版社. 2003
[4] 参考网站: