求知 文章 文库 Lib 视频 iProcess 课程 角色 咨询 工具 讲座 Modeler   Code  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 

uml2.5教程
uml2.5 图概述
UML 类和对象图概述
UML 类概述
UML 类
uml 接口
uml 数据类型
uml 属性
uml 操作
uml 复合结构图
uml 包图
uml 组件图
uml 部署图
uml 用例图
uml 信息流程图
uml 活动图
uml 状态机图
uml 序列图
uml 通信图
uml 时序图
UML交互概述图
UML配置文件图
 
 
UML通信图概述
原文作者:Kirill Fakhroutdinov
22 次浏览
 
 捐助

通信图(在UML 1.x中称为协作图)是一种用自由形式排列的有序消息显示对象和/或部分(表示为生命线)之间交互的UML交互图。

通信图对应于(即,可以转换成/转换成或替换成)简单的序列图,而没有结构化机制,例如交互使用和组合片段。还假设不会发生消息超越(即,接收的顺序不同于给定消息集的发送顺序)或者消息超越是不相关的。

在一个UML通信图中绘制了以下节点和边线:框架、生命线、消息。下图显示了通信图的这些主要元素。

UML通信图的主要元素

框架

通信图可以显示在矩形框架内,名称在左上角的分隔的空间中

通信图标题类型没有特定的长格式名称。可以使用长形式名称交互(通常用于交互图)。

通信图buyitem的交互框架

通信图也没有特定的简称。可以使用简短的名称sd(通常用于交互图)。这个sd有点混乱,因为它看起来像序列图的缩写。

通信图buyitem的sd框架

生命线

生命线是命名元素的专门化,它代表交互中的个体参与者。虽然零件和结构特征的多重性可能大于1,但生命线仅代表一个交互实体。

如果引用的可连接元素是多值的(即多重性> 1),那么生命线可以有一个表达式(选择器),该表达式指定该生命线表示哪个特定部分。如果省略选择器,这意味着选择多值可连接元素的任意代表。

生命线显示为矩形(对应于序列图中的“head”)。序列图中的生命线确实有代表生命线的“tail”,而通信图中的生命线没有线,只有“head”。

识别生命线的信息以以下格式显示在矩形内:

lifeline-ident ::= ([ connectable-element-name [ '[' selector ']' ] ] [: class-name ] [decomposition] ) | 'self'
selector ::= expression
decomposition ::= ‘ref’ interaction-ident [ 'strict' ]

其中类名是由所表示的可连接元素引用的类型。请注意,尽管语法允许,lifeline-ident不能为空。

生命线头部的形状基于生命线所代表的部分的分类器。通常头部是一个白色矩形,在冒号后包含类名。

类User的匿名生命线

生命线 “数据”类库存

用选择器[k]选择等级为X的生命线“X”。

 

如果名称是关键字self,则生命线代表包含拥有生命线的交互的分类器的对象。 即使包括self, 封闭端口 也可以单独显示。

消息

通信图中的消息显示为一行,该行上方带有序列表达式和箭头。箭头指示通信方向。

如果s1等于s2,则类A的实例向类B的实例发送remove()消息

序列表达式

序列表达式是序列项的点分隔列表,后面跟着冒号(“:”)和消息名:

sequence-expression ::= sequence-term '.' . . . ':' message-name

例如,3b.2.2:m5

包含序列表达式3b.2.2和消息名m5。

每个序列项代表整个交互中的一个程序嵌套级别。每个序列项都有以下语法:

sequence-term ::= [ integer [ name ] ] [ recurrence ]

整数表示消息在下一个更高级别的过程调用(激活)中的顺序。在一个整数项上不同的消息在嵌套层次上是连续的。

例如,

  • 序列2的消息跟随序列1的消息,

  • 2.1跟随2
  • 5.3遵循激活5中的5.2
  • 1.2.4遵循激活1.2中的消息1.2.3。

实例A向实例B发送draw()消息,然后实例B向实例C发送paint()

重复定义了根据指定条件执行的零个或多个消息的有条件或迭代执行。

recurrence ::= branch | loop
branch ::= '[' guard ']'
loop ::= '*' [ '||' ] [ '['iteration-clause ']' ]

保护指定消息在给定嵌套深度发送(执行)的条件。UML没有指定保护语法,所以它可以用伪代码、某种编程语言或其他语言来表示。

例如

2.3b [x>y]:绘制()-如果x大于y,将执行消息绘制()。
1.1.1 [s1.equals(s2)]: remove() -如果s1等于s2,将执行消息remove()。

类的实例将发送消息
如果x > y,将()绘制到C的实例

迭代指定给定嵌套深度的消息序列。UML没有指定迭代子句语法,所以它可以用伪代码、某种编程语言或其他语言来表示。迭代子句可以省略,在这种情况下,迭代条件是未指定的。

*迭代符号指定迭代中的消息将顺序执行。*||(星号后跟双垂直线)迭代符号指定消息的并发(并行)执行。

例如,

  • 4.2c *[i=1..12]: search(t[i]) --search() 将被执行12次,一次接一次
  • 4.2c *||[i=1..12]: search(t[i]) - 12 search()消息将同时发送,
  • 2.2 *: notify() - message notify() 将重复一些未指定的次数。

甲类实例将一个接一个地向乙类实例发送search()消息

甲类实例将向乙类实例发送n条并发搜索()消息

嵌套控件结构中的内部级别不会重复递归。每一层结构都在封闭上下文中指定了自己的迭代。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



22 次浏览
 捐助
 

每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号