UML _ 通信/协作图
交互图是描述对象之间的关系和对象之间的信息传递的图,是多种图的统称。交互图通常用来描述一个用例的动态行为。
交互图类型
- Sequence Diagram 顺序图
- Communication Diagram 通信图 (UML1中的协作图Collaboration Diagram)
- Timing Diagram 定时图
- Interaction Overview Diagram 交互概述图
顺序图展示了对象之间如何相互协作来完成某一项功能,强调各个对象按照时间顺序进行交互的过程。
通信图也描述了对象之间如何相互协作来完成某一项功能,但侧重于强调参与交互的对象的组织关系。
概述
定义
通信图(Communication Diagram)是用于描述一组对象在协作过程中如何互相通信的模型图(交互图基本功能),强调对象在交互中承担的角色,侧重于展示对象之间的关系。(通信图特点)
注意:
- UML 1中,称为协作图(Collaboration Diagram) 。UML 2中,更名为通信图。
作用
-
对 用例 来说,通过描述对象之间消息的传递情况来反映具体使用语境的逻辑表达
就是将用例的不同情况表达出来(一个使用情境的逻辑可能是一个用例的一部分或是一条控制流) -
对 对象 来说,显示对象及其交互关系的空间组织结构
(侧重对象之间的关系) -
对 类 来说,表现一个类操作的实现(不常用)
(类操作中使用到的参数、局部变量、返回值等)
通信图的组成
- 对象(Object)
- 链(Link)
- 消息(Message)
-
通信图中的对象,与顺序图中的对象的概念相同,都是类的实例。
-
通信图中的消息,也与顺序图中的消息的概念相同,是从一个对象向其他对象发送信号,或由一个对象调用另一个对象的操作。
-
通信图中的链,与对象图中的链的概念相同,是关联的实例,表示对象之间的结构关系。
通信图与顺序图的异同
相同点:
-
表达语义相同。
两种图都属于交互图,用于描述系统中某个用例或操作的执行过程中对象之间的交互,二者的语义是等价的。 -
对象责任相同。
两种图中的对象都担任了发送者与接收者的角色,并承担了发送与接收消息的责任。
不同点:
-
顺序图描述了对象交互的时间顺序,明确表现了对象的激活期和生存期,
但没有直观
表达对象之间的关系。 -
通信图描述了对象在交互中承担的角色,
但无法表现
对象的激活期和生存期;
对象在交互中的时间顺序不够直观
,必须从消息的编号获得。
(通信图编号必须有,不能省略)
简而言之:
-
顺序图强调消息的时间顺序,通信图强调参与交互的对象的组织关系。
-
顺序图和通信图在语义上是等价的,可以很容易地完成两者的相互转换。
通信图的组成
通信图由三部分组成:
- 对象(Object)
- 链(Link)
- 消息(Message)
对象(Object)
通信图中的对象,可以是系统参与者或任何有效的系统对象。
注意:
- 对象的基本表示形式,与顺序图中的对象表示形式相同。
- 对象在通信图中的位置没有限制。
多对象
通信图中的对象,还存在多对象的形式。(顺序图没有)
定义: 多对象是多个对象组成的集合,通常是同一个类的对象。
使用场景:如果消息同时发给多个对象,则用多对象表示。
链(Link)
通信图中的链,与对象图中的链的概念相同,是关联的实例,表示对象之间的语义关系。
作用:
链用于连接对象并传递消息。
注意:
- 若两个对象需要发生交互,必须先建立链。
- 消息要附着在链上。
自身链
UML也允许对象自身与自身之间建立一条链,这称为自身链。
链的可见性
一个对象是否能够对另一个对象可见的修饰机制。
可见性的表示:带字母的黑色小实心矩形
消息(Message)
通信图中对象之间的交互,是通过发送消息来完成的。
注意:
通信图的消息必须附加在对象之间的链上。
通过链连接的两个对象之间,才允许在交互执行过程中进行消息传递。
表示:
通过在链的上方或下方添加一个短箭头来表示。
组成
通信图中的消息,与顺序图中的消息表示方法相同,也是包括编号、名称和类型三个组成部分。
但为了表明消息的时间顺序,通信图必须添加消息编号。
消息编号的形式也分为顺序编号和嵌套编号两种。
语法格式
通信图的消息名称,也具有跟顺序图的消息一样的语法格式:
[守卫条件][序列表达式][返回值:=]消息名([参数列表])
与顺序图的异同
相同点:
主要元素相同。两种图中的主要元素都是对象与消息,且都支持所有的消息类型。
不同点:
顺序图不同于通信图的特征:
- 各个对象在顺序图的顶部从左到右依次排列;
- 对象有生命线和激活,可以表示出对象的激活和去激活状态,也可表示出对象创建和销毁的相对时间;
- 消息的编号可以不显示。
通信图不同于顺序图的特征:
- 对象在通信图中的位置没有限制;
- 通信图有 链;
- 通信图必须显示消息编号。
通信图的应用
通信图与顺序图一样,通常根据系统的用例创建,侧重按对象的组织结构对控制流建模。
通信图的建模过程
通信图与顺序图在语义上是等价的,其建模过程也是非常相似的。
对于包含复杂控制流的用例,通信图的建模过程:
-
分析用例的控制流
识别交互情境,确定基本工作流和备选工作流; -
建立包
以便于对复杂控制流的多个通信图进行组织管理; -
创建通信图
对于基本工作流创建主干通信图,对于每个备选工作流分别创建分支通信图; -
绘制通信图
为每个工作流逐步绘制通信图。
绘制通信图的基本步骤
-
识别对象:
是对象不是类
根据交互情境的工作流,确定有哪些对象,在通信图中松散地分布各个对象; -
确定元素之间的结构关系:
按照消息传递的过程,在有消息传递的对象之间设置链,并根据需要调整对象的位置,尽量避免链的交叉; -
确定消息:
按照消息传递的过程,依次在链上添加消息。
建模示例
一、分析用例的控制流
用例:查看学生成绩
参与者:教师
控制流:
- 教师希望通过系统查询某名学生的学科成绩。
- 教师通过用户界面录入学生的学号以及学科科目。
- 用户界面根据学生的学号向数据访问层请求学生信息。
- 数据访问层根据学生的学号获取学生信息。
-
- 4A:如果系统没有该学生的信息,数据访问层返回学生信息为空,系统提示教师该学生不存在。
- 数据访问层根据获取的学生信息和学科科目获取该名学生的成绩信息。
- 数据访问层将学生信息和成绩信息提供给用户界面。
-
- 6A:如果该名学生没有学科成绩,数据访问层返回学科成绩为空,系统提示教师没有该学生的成绩。
- 用户界面将学生信息和成绩信息显示出来。
二、建立包
“查看学生成绩”用例包含基本工作流和两个备选工作流,因此需要建立包来对三个通信图进行组织管理。
同一用例的通信图与顺序图通常位于一个包中,使用之前创建名为“教师查看学生成绩交互图”的包即可。
三、创建通信图
在包中,先对于基本工作流创建主干通信图;
对于两个备选工作流稍后再分别创建分支通信图。
四、绘制通信图
首先,为基本工作流绘制“教师查看学生成绩通信图”。
(1)识别对象
通过分析基本工作流来识别对象,这与顺序图的分析过程相同,同样识别出5个对象;在通信图中松散地分布各个对象。
对象
教师
用户界面
数据访问层
学生信息
成绩信息
(2)确定元素之间的结构关系
(3)确定消息
备选工作流4A通信图
其次,为备选工作流4A绘制“教师查看学生成绩通信图A”。
备选工作流6A通信图
最后,为备选工作流6A绘制“教师查看学生成绩通信图B”。
实例2
实例:图书馆还书处理的交互图
● 用例:还书
●参与者:管理员,借阅者
●操作流:
① 管理员进入图书借阅界面,用例开始。
②系统要求输入所还图书的条码。
③系统显示所还图书的图书、读者、借阅等信息。
④确认还书。
⑤系统回到上一界面,等待处理下一业务。
② 识别参与交互过程的对象;
③ 绘制还书处理类图
④ 绘制顺序图
⑤绘制通信图
StarUML注意事项
拖动消息排版的时候,排箭头,不要拖动文字