UML及其应用之通信图
目录
7.2 通信图
- 协作图是一种交互图,强调的是发送和接收消息的对象之间的组织结构,使用协作图来说明系统的动态情况。
- 协作图主要描述协作对象间的交互和链接,显示对象、对象间的链接以及对象间如何发送消息。
- 协作图可以表示类操作的实现。
7.2.1 通信图的概念
1、定义
- 通信图也称为协作图,它描述了系统中,对象间通过消息进行的交互,强调了对象在交互行为中承担的角色。图7-18是一个典型的通信图。
- 通信图和顺序图之间的语义是等价的,只是他们的关注点有所不同而已,可以很容易的完成从顺序图到通信图的转换,在Rose中这个转换还可以自动完成。图7-18所示的通信图就是在Rose中通过对图7-5进行自动转换所产生的结果。
- 从图7-18中不难发现,对象和消息都与图7-5中的对象和消息一样,在这幅图上除了“对象”之间的链(连接线)之外,所有的元素在交互图中都已经标识过。
图7-18从订单生成订货单的通信图
2、通信图的作用
- 通信图常用来描述业务或软件系统中,每个对象在交互发生时承担的角色,即强调了交互发生时,每个对象承担的职责。
- 使用协作图可以显示对象相互协作时充当的角色。如果需要强调时间和序列,最好选择顺序图建模;如果需要强调上下文相关,最好选择协作图建模。
- 协作图用于显示对象之间如何进行交互,以实现特定用例或用例中特定部分的行为。设计员使用协作图和顺序图确定并阐明对象的角色,这些对象执行用例的特定事件流。这些图提供的信息主要用来确定类的职责和接口。
3、通信图的组成元素
- 通信图的组成元素包括对象、消息、链(连接器)。消息表示了对象间的通信,对象通过链连接在一起。
(1)通信图中的事物及解释
(2)通信图中的关系及解释
消息标签:
消息标签的Format:[前缀] [守卫条件] 序列表达式 [返回值 :=] 消息名
- 前缀的语法规则:***,***,…,*** ‘/’
(前缀用来同步线程,意思是在发送当前消息之前指定***的消息被处理.例:1.1a, 1.1b/)
- 守卫条件的语法规则:[条件短句]
说明:条件短句通常用伪代码或真正的程序语言来表示。例:[x>=0]
- 返回值和消息名:返回值表示一个消息的返回结果,消息名指出了消息的名字和所需参数。例:x:=calc ( n )
- 下面是一个完整的消息标签:
7.2.2 通信图的表示
- UML中,表示一个通信图,主要是标识系统中的对象、对象间交互的消息、对象间的链。如图7-19所示,是系统管理员添加书籍的协作图。
- 第一个消息(Additem())表示,管理员要求维护窗口添加书籍;第二个消息(find(String))表示,维护窗口要求:Title对象根据书名获得书的目录;第三个消息(update())表示修改书目下书的数量。
图7-19
1.对象:
- 通信图与顺序图中的对象的概念是一样,只不过在通信图中,无法表示对象的创建和撤销,所以对于对象在图中的位置没有限制。
2.链:
- 表示对象之间的语义关系,链是关联的一个实例。通信图中链的符号和对象图中链所用的符号是一样的,即一条连接两个对象的实线。
3.消息
- 通信图中的消息类型与时序图中的相同,只不过为了说明交互过程中消息的时间顺序,需要给消息添加顺序号。顺序号是在消息的前面加一个整数。每个消息都必须有唯一的顺序号。
4.消息编号:
- 消息的编号有两种,一种是无层次编号(按顺序编号),它简单直观;另一种是嵌套的编号,它更易于表示消息的包含关系.
5.迭代标记和监护条件
(1) 迭代标记
- 迭代标记用*号表示,表示循环,通常还有迭代表达式,用来说明循环规则。
- 虽然在UML2.0中顺序图已不采用迭代标记(用交互片段代替迭代标记的功能),但在通信图中仍然使用迭代标记。
- 迭代是通过在顺序编号前加上一个迭代符“*”和一个可选的迭代表达式来表示。对于迭代表达式,UML没有强制规定什么语法,因此可以使用任何可读的、有意义的表达式来表示。常用的迭代表达式如表7-3所示。
迭代表达式 |
语义 |
[i:=1..n] |
迭代n次 |
[I=1..10] |
I迭代10次 |
[while(表达式)] |
表达式为true时才进行迭代 |
[until(表达式)] |
迭代到表达识为true时,才停止迭代 |
[for each(对象集合)] |
在对象集合上迭代 |
(2) 监护条件
- 监护条件通常是用来表示分支的,也就是表示“如果条件为true,猜发送消息”的语义,在UML中,监护条件是以“【条件表达式】”的格式表示的。
7.2.3 表示循环和分支
- 通信图中,用迭代表示循环,用监护条件表示分支。下面分别讲述迭代标记和监护条件。
- 监护条件通常是用来表示分支的,也就是表示“如果条件为true,就发送消息”的语义,在UML中,监护条件是以“【条件表达式】”的格式表示的。现在来看一下它在交互图中的应用。
- 例如,在图7-18中,消息“1.3:create(prddleryid)”的前面就添加了一个监护条件【peddleryid not exist】,它说明只有当peddleryid不存在时,才调用create方法来创建新的送货单。如果已经存在,那就不必创建,直接调用1.4方法,将订单项中的产品添加到相应的送货单即可。
- 在通信图中使用监护条件一定要有所限制,通常应只列出主要的监护条件,否则会影响其阅读。
- 在图7-20中,coutse类实例c中还用到了构造型《local》,这是因为这个对象是由CourseList 的find方法创建的,是一个局部的对象。而在这张图中,共有五处使用了监护条件,它们的含义如表7-4所示.
图7-20 注册课程
表7-4
监护表达式与消息 |
语义解释 |
[s&c]1.3register(s) |
当s和c都不是空对象时,才执行register方法 |
[(!s)&c]1:studentNotFound |
如果s是空对象,则说明没有指定的学生,返 回studentNotFound消息 |
[s&(!c)]1:courseNotFound |
如果c是空对象,则表示没有找到指定课程, 返回courseNotFound消息 |
[(!s)&(!c)]1:allNotFound |
如果s和c都是空对象,表示都没有找到,返回allNotFound消息 |
[s&c]1:ok |
如果s和c都不是空对象,则返回ok,表示注册成功 |
7.2.4 阅读通信图
下图是图书管理员登录系统的协作图。
图7-21
- (1)由Librarian角色向Login发送UserLogin信息,要求登录系统;
- (2)登录界面(Login)向Maintenance发送发送Input Maintenance的信息,做一些维护工作;
- (3)登录界面(Login)向Query角色发送inputQuery消息,做一些查询工作;
- (4)登录界面(Login向Operation发送inputOperation信息,进行一些输入操作。
7.2.5 通信图与顺序图的区别和联系
协作图和顺序图都表示出了对象间的交互作用,但是它们侧重点不同。
- 顺序图清楚地表示了交互作用中的时间顺序(强调时间),但没有明确表示对象间的关系。
- 协作图清楚地表示了对象间的关系(强调空间),但时间顺序必须从顺序号获得。
- 协作图和顺序图可以相互转化。
(进行协作图和顺序图的比较,请参考后续练习题2)
1、打印操作通信图
actor发送Print消息给Computer,Computer发送Print消息给PrintServer,如果打印机空闲,PrintServer发送Print消息给printer
2、乘坐电梯的通信图
图中存在的事物有:
-
- 参与者
- 按钮对象
- 电梯控制对象
- 命令对象
- 工作队列
- 电梯对象
图中存在的关系有:
- 链接
解释:
参与者需要乘坐电梯,他从系统外部按下按钮,让电梯到达他想去的楼层。此时,电梯系统的操作被启动,电梯控制对象以循环的方式检查所有的电梯,从中选择一个工作队列长度最短的。然后,它创建一个作业命令,并将该命令放入对应电梯的工作队列,接着**队列。电梯对象并发运行,从它的队列中选择一个作业并执行。电梯是一个活动对象,它与它的控制线程并发执行。