Python设计模式 - UML - 通信图(Communication Diagram)
简介
通信图表示对象之间的消息往来,是表述时序图中信息交互的另一种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后)

通信图示例
以图书馆新书采购流程为例

通信图注意事项
- 侧重消息的调用顺序,就使用时序图;侧重参与者之间的链接,就使用通信图
- 通信图中表示对象的方法与对象图中表示对象的方法一致
- 通信图交互过程中可能会创建新对象、销毁已有对象、创建并销毁新对象
- 通信图中的消息较为复杂,需要区分嵌套、条件及循环等消息的应用场景,尤其是多级消息号的使用
Python设计模式 - UML - 通信图(Communication Diagram)的更多相关文章
- Python设计模式 - UML - 类图(Class Diagram)
简介 类图是面向对象分析和设计的核心,用来描述系统各个模块中类与类之间.接口与接口之间.类与接口之间的关系,以及每个类的属性.操作等特性,一般在详细设计过程中实施. 类图本身就是现实世界的抽象,是对系 ...
- Python设计模式 - UML - 时序图(Sequence Diagram)
简介 时序图表示参与者与对象之间.对象与对象之间的动态交互过程及时序关系. 时序图详细而直观地展示了对象随时间变化的状态.调用关系和消息时序,时序图中的主要元素有:参与者(Actor), 对象(Obj ...
- Python设计模式 - UML - 定时图(Timing Diagram)
简介 定时图也是一种交互图,用来描述对象或实体随时间变化的状态或值,及其相应的时间或期限约束.定时图应用较广,并不局限于软件工程领域. 定时图侧重与时间线相关的值或状态的改变,这些改变可能来自于收到消 ...
- Python设计模式 - UML - 组件图(Component Diagram)
简介 组件图又称构建图,用于显示系统各组件及各组件关系的物理视图. 组件图通常包括组件.接口.关系.端口和连接器,用来显示程序代码中相应的模块.源文件或源文件集合之间的依赖和泛化关系. 组件图中的组件 ...
- Python设计模式 - UML - 包图(Package Diagram)
简介 包图是对各个包及包之间关系的描述,展现系统中模块与模块之间的依赖关系.一个包图可以由任何一种UML图组成,可容纳的元素有类.接口.组件.用例和其他包等.包是UML中非常常用的元素,主要作用是分类 ...
- Python设计模式 - UML - 活动图(Activity Diagram)
简介 活动图描述从一个活动到另一个活动的执行顺序.约束条件.引用对象及状态结果等方面的控制流,适用于对业务用例.工作流程或程序实现建模. 活动图建模步骤 - 确定活动图的范围和边界,对哪些工作流.哪些 ...
- Python设计模式 - UML - 状态图(State Machine Diagram)
简介 状态图主要用于描述对象在其生命周期中各种状态.状态之间的转换过程.触发状态转换的各种事件(条件)及执行的动作. 状态图构建步骤 - 找出适合用状态图描述的类.确定类中需要做状态图的重要对象 - ...
- Python设计模式 - UML - 对象图(Object Diagram)
简介 对象图和类图的基本概念是类似的,可以看作类图在系统某一时刻的镜像,显示了该时刻系统中参与交互的各个对象以及它们之间的关系. 对象图的元素包括对象.链接.包,元素之间的关系和类图相似. 对象图建模 ...
- Python设计模式 - UML - 总览
说到设计模式就不得不涉及建模思想,说到建模思想自然而然会应用UML,目前业界开源的UML工具很多,用起来也非常便捷.近几年来随着软件应用领域开发模式转向快速迭代试错,UML在敏捷开发,尤其是web及m ...
随机推荐
- JAVA Override和Overload的含义去区别
java中的继承,方法覆盖(重写)override与方法的重载overload的区别 1.方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现,重写(Overr ...
- springMvc接收ajax数组参数,以及jquery复选框选中、反选、全选、全不选
一.复选框选中.反选.全选.全不选 html代码: <input type='checkbox' name='menuCheckBox' value='10' >苹果 <input ...
- 深度优先搜索DFS(一)
实例一 0/1背包问题: 有n件物品,每件物品的重量为w[i],价值为c[i].现在需要选出若干件物品放入一个容量为V的背包中,使得在选入背包的物品重量和不超过容量V的前提下,让背包中的物品 ...
- [UE4]让Spline具象化
接上一个实例 一.在TestSpline蓝图,切换到蓝图构造函数Constrction Script事件中,添加如下代码: 二.别忘记个Add Spline Mesh Component设置Stati ...
- Java经典代码片段——使用NIO进行快速的文件拷贝
public static void fileCopy(File in, File out) throws IOException { FileChannel inChannel = new File ...
- 软链接ln -s 总结
ln -s 软链接知识总结 1.软连建立:ln -s 源文件 软链接文件 2.误区:软链接是创建的,就意味着软链接文件不可以在创建之前存在 3.类比:win快捷方式 4.删除:rm就可以,但源文件 ...
- yml文件搞一波
引用https://www.cnblogs.com/zslli/p/8717483.html https://www.cnblogs.com/baoyi/p/SpringBoot_YML.html 划 ...
- Flask对数据库的操作-----
首先得做好做基本的框架 # -*- encoding: utf-8 -*- from flask import Flask,render_template #导入第三方连接库sql点金术 from f ...
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍
这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~同时CSDN总是屏蔽这篇文章,再加上最近 ...
- vue.js响应式原理解析与实现
vue.js响应式原理解析与实现 从很久之前就已经接触过了angularjs了,当时就已经了解到,angularjs是通过脏检查来实现数据监测以及页面更新渲染.之后,再接触了vue.js,当时也一度很 ...