简介

通信图表示对象之间的消息往来,是表述时序图中信息交互的另一种UML图,介绍完时序图就要对照学习一下通信图,二者是一体两面的。

通信图和时序图可以相互转换,二者的侧重点不同,通信图侧重哪些对象发送或接收了哪些消息,时序图侧重对象之间消息交互的时间顺序。

通信图建模步骤

- 确定系统需要和哪些外部参与者交互通信

- 确定系统内哪些主要对象之间有发送或接收消息的需求

- 确定外部参与者与系统对象之间、系统内部对象与对象之间的消息内容和消息类型

- 用相应的链将参与者和对象、对象和对象或对象自身连起来

- 确定参与者与对象之间、对象与对象之间的约束条件

通信图主要元素

对象:通信图中交互的主体

- 三种UML表示法:

- 一般表示法:包括对象名、冒号、类名和下划线

- 只包括类名、冒号和下划线:标识该类的所有实例,这种方式称为匿名对象

- 只包括对象名

- 添加对象:

- 添加参与者:在User Case View中添加Actor或在Class Diagram中创建好类并将该类的Stereotype改成Actor,然后将该Actor从拖到通信图中

- 添加普通对象:直接点击工具栏中的图标,在Name处输入“对象名:类名”

链接:让消息在不同的对象间传递

- UML表示法

- 不同对象之间通信路径

- 调用自身属性

- 添加链接:直接点击工具栏中的图标

消息:不同对象之间通信的内容。分为链接消息(Link Message)和数据标记(Data Token)两种

- UML消息表示法

- 不同对象之间或对象自身增加链接消息

- 不同对象之间或对象自身反向增加链接消息

- 不同对象之间的数据标记

- 不同对象之间的反向数据标记

- 消息标签格式:[前置消息号列表]  [监护条件]  消息序列表达式   [返回值 :=] 消息名([参数列表])

- 前置消息号列表

- 消息号:有两种,一种是无层次编号;另一种是嵌套的编号,表示消息的包含层次

- 语法规则:消息号,消息号,……,消息号 /

- 作用:用来同步线程,表示在发送当前消息之前[前置消息号列表]中各消息号指代的消息被处理

- 监护条件

- 语法规则:[条件语句]

- 作用:当条件满足时才进行通信

- 消息序列表达式

- 语法规则:[消息号|name][recurrence]:

- 消息号:参见[前置消息号列表]处解释

- name:同时发送的并发消息

- recurrence:一个条件或循环的执行,有两种选择

- *[循环语句]:循环用*标识,如 *[x = 1...100]

- [条件语句]:这里的条件表示分支,如[x > 0]

- 返回值:操作调用的结果

- 消息名:消息的名字

- 参数列表:所需参数列表

- 示例:

- 简单消息:         1: run()

- 带返回值的消息:      1: p:=query()

- 嵌套消息:         2.2.2: action()

- 循环消息:         1.4 *[x = 1...100]: execute()

- 条件消息:         [x > 0] 3: drive(source, dest)

- 带前置消息号列表的消息:  2.1, 2.2/2.3: test()  #在发送消息2.3之前先发送消息2.1和2.2

- 添加链接消息(Add Link Message):

1. 进入添加链接消息操作框:点击两个对象之间的链接,弹出Link Specification对话框

2. 添加链接消息:右键点击Link Specification选项卡,在弹出的菜单中选择"Insert to: School"或"Insert to: student"

3. 设置链接消息的类型:双击链接消息,进入"Detail"选项卡,选择需要的消息类型

- 添加数据标记(Add Data Token):数据标记主要用于

1. 选中数据标记按钮

其中之一

2. 单击需要返回的链接消息,数据标记就会被添加到这个链接消息上

通信图与时序图的关系

联系

- 都是交互图,都描述了参与者与对象之间、对象与对象之间的消息通信过程

- 都需要消息编号来标识顺序

- 二者可以相互转化

区别

- 侧重点:通信图侧重哪些对象交互了哪些消息;时序图侧重不同对象间交互消息的时间顺序

- 创建和销毁对象:通信图中无法创建和销毁对象;时序图中可以明确标识对象的创建和销毁

- 激活与去激活:通信图无法标识对象的激活与去激活;时序图中可以明确标识对象的激活与去激活

转化

- 时序图转化为通信图:在Rose中打开时序图,然后选择菜单【 Browse】-> Create Collaboration Diagram 或者直接按 F5

- 原时序图

- 转化后的通信图(move后)

- 通信图转化为时序图:在Rose中打开通信图,然后选择菜单【 Browse】-> Create Sequence Diagram 或者直接按 F5

- 原通信图

- 转化后的时序图(move后)

通信图示例

以图书馆新书采购流程为例

通信图注意事项

- 侧重消息的调用顺序,就使用时序图;侧重参与者之间的链接,就使用通信图

- 通信图中表示对象的方法与对象图中表示对象的方法一致

- 通信图交互过程中可能会创建新对象、销毁已有对象、创建并销毁新对象

- 通信图中的消息较为复杂,需要区分嵌套、条件及循环等消息的应用场景,尤其是多级消息号的使用

plc与python之间实现通信的结构框图_Python设计模式 - UML - 通信图(Communication Diagram)...相关推荐

  1. 快速读懂UML类图,搞懂类之间的6大关系,轻松绘制UML类图

    快速读懂UML类图,搞懂类之间的6大关系,轻松绘制UML类图 前言 一.UML类图简介 二.类之间的六大关系及UML类图 1.依赖关系及UML类图表示 2.泛化关系及UML类图表示 3.实现关系及UM ...

  2. python n个list如何组成矩阵_python和c++通信示例

    先贴一个大牛写的python与C++的通信的经典文章:如何实现 C/C++ 与 Python 的通信? 里面讲到了不少方法来实现C++和python之间的通信,我看了之后深有感触,但里面的例程序大多都 ...

  3. python创建数据库并对表结构备份_Python 数据库表操作之多表结构的创建与分析...

    一.多表结构的创建与分析 分析步骤: #1.先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id) #2.再站在 ...

  4. python中三种分支结构的_python二分支结构

    Python 基础 分支与循环 2020/4/21 1 目录 程序基本结构 分支结构 循环结构 布尔表达式 练习 总结 2020/4/21 2 程序设计基本结构 任何算法(程序)都可以由顺序..... ...

  5. python中三种分支结构的_python 运算符与分支结构

    s = 'hello' #字符串的重叠 s = 'hello' * 2 #字符串的拼接 s = 'hello' + 'world' print(s)#统计字符个数 print(len(s)) ?#提取 ...

  6. 用python绘制用例图源代码_Python设计模式 - UML - 用例图

    简介 用例图主要是从用户的角度出发对软件产品的功能及执行者进行描述的. 用例图是从需求分析到软件交付的第一步,图示化展示参与者与参与者之间.参与者与用例之间.用例与用例之间的关系,帮助开发人员更好的理 ...

  7. python中代理模式分为几种_Python设计模式之代理模式实例详解

    本文实例讲述了Python设计模式之代理模式.分享给大家供大家参考,具体如下: 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 #!/usr/bin/env py ...

  8. UML类图(Class Diagram)中类与类之间的关系及表示方式

    类之间大体分为5种关系: 1,依赖关系(Dependency) 单向,表示一个类依赖于另一个类的定义,其中一个类的变化将影响另外一个类,是一种"use a"关系 如果A依赖于B,则 ...

  9. python把四个图画在一个窗口_python plt多个图在同一窗口显示方法

    python plt多个图在同一窗口显示代码 python 读取并显示图片,用plt 同时显示多幅图像 ##plt 同时显示多幅图像 import matplotlib.pyplot as plt p ...

最新文章

  1. [BizTalk] 短消息处理流程
  2. gcd的二进制优化笔记
  3. C语言学习之时钟函数clock()函数
  4. 如何保存一个函数_如何表达一个“分段函数”之学习Matlab Function模块
  5. 第八十七期:爬了知乎“沙雕问题”,笑死个人!
  6. 第一章:Understanding web performance-理解web性能
  7. 计算机考试没考好的检讨书,考试没考好检讨书4篇
  8. 《Troubleshooting Windows 7 Inside Out》文摘-1
  9. VisualVM初次使用BTrace功能方法步骤
  10. RoR介绍:一个Java程序员的开发体验
  11. 如何提高FPGA工作频率?影响FPGA运行速度的几大因素
  12. 新猿木子李:0基础学python培训教程 什么是前端
  13. StereoNet: Guided Hierarchical Refinement for Real-Time Edge-Aware Depth Prediction(ECCV 2018)
  14. Linux基础命令---lp打印文件
  15. 电容ESR表(一) 电容ESR表的特点、测量原理、电路分析
  16. 基于Echarts+HTML5可视化数据大屏展示—大数据统计展示大屏
  17. 调查显示我国4成人每周休闲不足10小时-休闲-带薪休假-上网
  18. 学习Masonry框架 - iOS
  19. 【Leetcode】914. X of a Kind in a Deck of Cards
  20. Java面试题集(第七部分)(151-180)

热门文章

  1. webpack3.0 压缩css 但是不在html中引用,webpack怎样压缩css?
  2. 安卓获取mysql数据封装方法_android SQLite数据库封装
  3. 《深入理解分布式事务》第十章 最大努力通知型分布式事务原理
  4. GYM 101617 F
  5. 大数据平台网站日志分析系统
  6. SQL Server 数据文件的页面分部情况
  7. 一道面试题及其扩展,求好解法
  8. 前端开发--面试题整理(JS篇)
  9. ModuleNotFoundError No module named urllib2
  10. idea更新maven依赖包