Loading

[转]UML之通信图

原文链接:UML之通信图——博客园
原文链接:浅析UML之通信图(协作图,合作图)——CSDN
原文链接:UML及其应用之通信图——CSDN
原文链接:软件工程专题:UML通信图——知乎

概念

通信图(协作图)是表现对象交互关系的图,它展现了多个对象在协同工作达成共同目标的过程中互相通信的情况,通过对象和对象之间的链、发送的消息来显示参与交互的对象。

  • 首先通信图一样是一种交互图,它描述的是对象和对象之间的关系,即一个类操作的实现。简而言之就是,对象和对象之间的调用关系,体现的是一种组织关系。
  • 通信图中的元素主要有对象、消息和链三种。对象和链分别作为通信图中的类元角色和关联角色出现,链上可以有消息在对象间传递。
  • 从结构方面来看,通信图包含了一个对象的集合并且定义了它们之间的行为方面的关系,表达了一些系统的静态内容。
  • 从行为方面来看,通信图包含了在各个对象之间进行传递交换的一系列的消息集合,以完成协作的目的。

在视频中的协作图collaboration diagram描述的是与对象结构相关的信息。现在逐渐的被“通信图”这一种说法取代。百度上说是:“UML2.0以后不再用协作图说法,而是明确定义为“通信图”,即Communication Diagram,而“协作”作为一个结构事物用于表达静态结构和动态行为的概念组合,表达不同事物相互协作完成一个复杂功能。故UML 2.0以后通信图不再是协作图,没有专门的“协作图”,只有“协作”。

通信图是一种描述协作在某一语境下的空间组织结构的图形化方式,在使用其进行建模时,主要具有以下三个作用:

  • 通过描绘对象之间消息的传递情况来反映具体使用语境的逻辑表达。
  • 显示对象及其交互关系的空间组织结构。
  • 表达一个操作的实现。

组成元素

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

对象

  • 通信图中的对象与顺序图中对象的概念相同,都是表示类的实例
  • 通信图只关注相互有交互作用的对象和对象关系,而忽略其他对象
  • 由于通信图中不表示对象的创建与销毁,因此,对象在通信图中的位置没有限制
  • 与顺序图中对象的表示法不同的是,通信图中的无法显示对象的生命线

通信图中的链与对象图中的链在语义以及表示法上都相同,都是两个(或多个)对象之间的独立连接,是关联的实例。链同时也是通信图中关联角色的实例,其生命受限于协作的生命。

链连接的两个对象之间允许在交互执行过程中进行消息传递和交互。UML也允许对象自身与自身之间建立一条链。链可以通过对自己命名来进行区分和说明,也可以仅仅做连接而不进行命名。

消息

通信图的消息需要附加在对象之间的链上,链用于传输或实现消息的传递。
通信图中的消息通过在链的上方或下方添加一个短箭头来表示(箭头指示消息的流向,从消息的发出者指向接收者),通常需要使用阿拉伯数字作为序号来表示通信图中发送消息的顺序。
标签对消息作说明,其中,顺序号指出消息的发生顺序,并且指明了消息的嵌套关系;冒号后面是消息的名字

消息分类

通信图是通过一系列的消息来描述系统的动态行为。消息可以分为四种类型:

  • 简单消息:指示消息类型未知或不重要的消息,可默认都使用简单消息替代。
  • 同步消息:表示前一个消息处理完成后才能处理下一个消息。
  • 异步消息:表示处理流不需要等到消息完成或传递反馈后才继续执行。
  • 反身消息:对象自身内部的消息处理。

消息编号

消息的编号有两种,一种是无层次编号(按顺序编号),它简单直观;另一种是嵌套的编号,它更易于表示消息的包含关系.

消息标签

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

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

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

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

下面是一个完整的消息标签:

迭代标记

  • 迭代标记用*号表示,表示循环,通常还有迭代表达式,用来说明循环规则
  • 虽然在UML2.0中顺序图已不采用迭代标记(用交互片段代替迭代标记的功能),但在通信图中仍然使用迭代标记
  • 迭代是通过在顺序编号前加上一个迭代符“*”和一个可选的迭代表达式来表示。对于迭代表达式,UML没有强制规定什么语法,因此可以使用任何可读的、有意义的表达式来表示。

常用的迭代表达式如表所示:

迭代表达式 语义
[i:=1..n] 迭代n次
[I=1..10] I迭代10次
[while(表达式)] 表达式为true时才进行迭代
[until(表达式)] 迭代到表达识为true时,才停止迭代
[foreach(对象集合)] 在对象集合上迭代

监护条件

监护条件通常是用来表示分支的,也就是表示“如果条件为true,猜发送消息”的语义,在UML中,监护条件是以“【条件表达式】”的格式表示的

下图中,消息“1.3:create(prddleryid)”的前面就添加了一个监护条件【peddleryid not exist】,它说明只有当peddleryid不存在时,才调用create方法来创建新的送货单。如果已经存在,那就不必创建,直接调用1.4方法,将订单项中的产品添加到相应的送货单即可。
原文链接:https://blog.csdn.net/qq494370/article/details/106081539

在通信图中使用监护条件一定要有所限制,通常应只列出主要的监护条件,否则会影响其阅读。

通信图与顺序图的异同点

通信图与顺序图的共同点主要有如下3点:

  • 主要元素相同。两种图中的主要元素都是对象与消息,且都支持所有的消息类型。
  • 表达语义相同。两种图都是对系统中的交互建模,描述了系统中某个用例或操作的执行过程,二者的语义是等价的。
  • 对象责任相同。两种图中的对象都担任了发送者与接收者的角色并承担了发送与接收消息的责任。通过对象之间消息的传递来实现系统的功能

两种图之间的不同点也有如下3点:

  • 通信图偏重于将对象的交互映射到连接它们的链上,这有助于验证类图中对应的类之间关联关系的正确性或建立新的关联关系的必要性。然而顺序图偏重描述交互中消息传递的逻辑顺序。因此通信图更适用于展示系统中的对象结构,而顺序图则擅长表现交互中消息的顺序
  • 顺序图可以显式地表现出对象创建与撤销的过程,而在通信图中,只能通过消息的描述隐式地表现这一点。
  • 顺序图还可以表示对象的激活情况,而对于通信图来说,由于缺少表示时间的信息,除了对消息进行解释,无法清晰地表示对象的激活情况。

通信图与顺序图对比

通信图建模技术

按组织对控制流建模:

  • 识别交互的语境,即交互所处的环境。
  • 识别出图中应该存在的对象。
  • 识别可能有消息传递的对象并设置链。
  • 设置对象间的消息。
  • 如果需要更多约束,如时间或空间的约束,可以使用其他的约束来修饰这些消息。

案例(1)添加新书

案例(2)学位初评
教务人员通过学号在学位初评系统查询学生的初评情况。学位初评系统分别在成绩管理系统、奖罚管理系统、毕业设计管理系统查询成绩、奖罚、毕业设计情况。并根据情况生成学位初评结果,通过信息打印模块打印初评情况。

posted @ 2020-06-28 23:03  二次元攻城狮  阅读(2113)  评论(0编辑  收藏  举报