UML及其应用之通信图

目录

 

7.2 通信图

7.2.1 通信图的概念

1、定义

2、通信图的作用

3、通信图的组成元素

7.2.2 通信图的表示

1.对象:

2.链:

3.消息

4.消息编号:

5.迭代标记和监护条件

7.2.3 表示循环和分支

7.2.4 阅读通信图

7.2.5 通信图与顺序图的区别和联系

1、打印操作通信图

2、乘坐电梯的通信图


7.2 通信图

  • 协作图是一种交互图,强调的是发送和接收消息的对象之间的组织结构,使用协作图来说明系统的动态情况。
  • 协作图主要描述协作对象间的交互和链接,显示对象、对象间的链接以及对象间如何发送消息。
  • 协作图可以表示类操作的实现。

 

7.2.1 通信图的概念

1、定义

  • 通信图也称为协作图,它描述了系统中,对象间通过消息进行的交互,强调了对象在交互行为中承担的角色。图7-18是一个典型的通信图。
  • 通信图和顺序图之间的语义是等价的,只是他们的关注点有所不同而已,可以很容易的完成从顺序图到通信图的转换,在Rose中这个转换还可以自动完成。图7-18所示的通信图就是在Rose中通过对图7-5进行自动转换所产生的结果。
  • 从图7-18中不难发现,对象和消息都与图7-5中的对象和消息一样,在这幅图上除了“对象”之间的链(连接线)之外,所有的元素在交互图中都已经标识过。

UML及其应用之通信图_第1张图片

图7-18从订单生成订货单的通信图

2、通信图的作用

  • 通信图常用来描述业务或软件系统中,每个对象在交互发生时承担的角色,即强调了交互发生时,每个对象承担的职责。
  • 使用协作图可以显示对象相互协作时充当的角色。如果需要强调时间和序列,最好选择顺序图建模;如果需要强调上下文相关,最好选择协作图建模。
  • 协作图用于显示对象之间如何进行交互,以实现特定用例或用例中特定部分的行为。设计员使用协作图和顺序图确定并阐明对象的角色,这些对象执行用例的特定事件流。这些图提供的信息主要用来确定类的职责和接口。

3、通信图的组成元素

  • 通信图的组成元素包括对象、消息、链(连接器)。消息表示了对象间的通信,对象通过链连接在一起。

 

(1)通信图中的事物及解释

UML及其应用之通信图_第2张图片

(2)通信图中的关系及解释

消息标签:

消息标签的Format:[前缀]  [守卫条件]  序列表达式   [返回值 :=] 消息名

  •  前缀的语法规则:序列号,序列号,…,序列号 ‘/’

(前缀用来同步线程,意思是在发送当前消息之前指定序列号的消息被处理.例:1.1a, 1.1b/)

  • 守卫条件的语法规则:[条件短句]       

说明:条件短句通常用伪代码或真正的程序语言来表示。例:[x>=0]

  • 返回值和消息名:返回值表示一个消息的返回结果,消息名指出了消息的名字和所需参数。例:x:=calc ( n )
  • 下面是一个完整的消息标签:

 

7.2.2 通信图的表示

  • UML中,表示一个通信图,主要是标识系统中的对象、对象间交互的消息、对象间的链。如图7-19所示,是系统管理员添加书籍的协作图。
  • 第一个消息(Additem())表示,管理员要求维护窗口添加书籍;第二个消息(find(String))表示,维护窗口要求:Title对象根据书名获得书的目录;第三个消息(update())表示修改书目下书的数量。

UML及其应用之通信图_第3张图片

图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方法,将订单项中的产品添加到相应的送货单即可。

UML及其应用之通信图_第4张图片

  • 在通信图中使用监护条件一定要有所限制,通常应只列出主要的监护条件,否则会影响其阅读。
  • 在图7-20中,coutse类实例c中还用到了构造型《local》,这是因为这个对象是由CourseList 的find方法创建的,是一个局部的对象。而在这张图中,共有五处使用了监护条件,它们的含义如表7-4所示.

UML及其应用之通信图_第5张图片

图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 阅读通信图

下图是图书管理员登录系统的协作图。

UML及其应用之通信图_第6张图片

图7-21

  • (1)由Librarian角色向Login发送UserLogin信息,要求登录系统;
  • (2)登录界面(Login)向Maintenance发送发送Input Maintenance的信息,做一些维护工作;
  • (3)登录界面(Login)向Query角色发送inputQuery消息,做一些查询工作;
  • (4)登录界面(Login向Operation发送inputOperation信息,进行一些输入操作。

7.2.5 通信图与顺序图的区别和联系

协作图和顺序图都表示出了对象间的交互作用,但是它们侧重点不同。

  • 顺序图清楚地表示了交互作用中的时间顺序(强调时间),但没有明确表示对象间的关系。
  • 协作图清楚地表示了对象间的关系(强调空间),但时间顺序必须从顺序号获得。
  • 协作图和顺序图可以相互转化。

     (进行协作图和顺序图的比较,请参考后续练习题2)

1、打印操作通信图

UML及其应用之通信图_第7张图片

actor发送Print消息给Computer,Computer发送Print消息给PrintServer,如果打印机空闲,PrintServer发送Print消息给printer

2、乘坐电梯的通信图

UML及其应用之通信图_第8张图片

图中存在的事物有:

    • 参与者
    • 按钮对象
    • 电梯控制对象
    • 命令对象
    • 工作队列
    • 电梯对象

图中存在的关系有

  • 链接

解释:

参与者需要乘坐电梯,他从系统外部按下按钮,让电梯到达他想去的楼层。此时,电梯系统的操作被启动,电梯控制对象以循环的方式检查所有的电梯,从中选择一个工作队列长度最短的。然后,它创建一个作业命令,并将该命令放入对应电梯的工作队列,接着激活队列。电梯对象并发运行,从它的队列中选择一个作业并执行。电梯是一个活动对象,它与它的控制线程并发执行。

 

你可能感兴趣的:(UML)