【UML用户指南】-17-对基本行为建模-交互
目录
1、消息的可视化表示
2、对象与角色
3、链和连接件
4、消息
5、序列
6、创建、修改和撤销
7、表示法
8、常用建模技术
8.1、对控制流建模
8.1.1、基于时间的控制流
8.1.2、基于结构的控制流
在任何有意义的系统中,对象都不是孤立存在的,它们相互之间通过传递消息进行交互。
交互是一种行为,这种行为由语境中的一组对象为达到某一目的而交换的一组消息构成。
这些角色表示类、接口、构件、结点和用况的原型实例。
可以用两种方式来对一个交互建模:
一种方式着眼于消息是如何按照时间顺序调度的;
另一种方式则着眼于交互中对象间的结构关系,并考虑消息是如何在这个结构的语境中被传递的。
交互图分为
1、顺序图:强调消息的时间顺序
2、通信图/协作图:侧重于发送和接收消息的对象之间的组织结构
1、消息的可视化表示
UML提供了对消息的图形化表示,如图所示。这种可视化的消息表示法强调了消息的最
重要的部分:名称、参数(若有的话)和顺序。在图形上,把消息表示为一条有向直线,
并且通常还包含相应的操作名。
2、对象与角色
参与交互的对象既可以是具体的事物,又可以是原型化的事物。作为具体的事物,一个对
象代表现实世界中的某个东西,例如,p作为类Person的一个实例,代表一个特定的人;而
作为原型化的事物,p可以代表类Person的任何实例【角色】。
可以把对象图看作是对交互的静态方面的表示,它通过说明所有一起工作的对象来设置交
互的场所。交互则通过引入可以沿着连接这些对象的链传递的消息的动态序列来进一步展
示交互。
对象图 + 消息传递 = 交互图
3、链和连接件
链是对象之间的语义连接。一般来说,链是关联的实例。如下图所示,在一个类与另一
个类之间有关联的情况下,这两个类的实例之间就可能有链;在两个对象之间有链存在的
情况下,一个对象就能向另一个对象发送消息。
1)图的顶部是一个类图,其中声明了类Person和Company以及这两个类之间的多对多关联 employee-employer。
2)图的中部展示了协作 WorkAssignment的内容:
为某个员工分配某个工作。这个协作包括两个角色以及二者之间的一个连接件。
3)图的底部是该协作的一个实例,其中有分别绑定到角色和连接件的对象和链。底部的一个具体消息表示在该协作中的原型消息的声明。
链指明了一个对象向另一个对象(或自身)发送消息的路径。多数时候,指明存在着这样
一个路径就足够了。如果需要更精细地表示路径是如何存在的,可以用下面任意一种约束
来修饰链的有关端点。
关联(association)
说明对应的对象对关联是可见的。
自身(self)
说明对应的对象因为是本操作的调遣者,所以是可见的。
全局(global)
说明对应的对象在全局范围内可见。
局部(local) 说明对应的对象在局部范围内可见。
参数(parameter) 说明对应的对象因为是一个参数,所以是可见的。
4、消息
在传送一个消息时,对消息的接收通常会产生一个动作。这个动作可能引发目标对象以及
该对象可以访问的其他对象的状态改变。
动作分类:
- 调用(call)调用某个对象的一个操作。对象也可以给自己发送消息,引起本地的操作调用。【实心箭头】过程控制
- 返回(return)给调用者返回一个值。【虚线箭头】
- 发送(send)向对象发送一个信号。【普通箭头】 单调异步
- 创建(create)创建一个对象
- 撤销(destroy)撤销一个对象。对象也可以撤销自身。
创建和撤销是用衍型显示的
5、序列
当一个对象向另一个对象发送消息(实际上是将某个动作委派给了消息的接收者)时,接
收对象可能接着会向另一个对象发送消息,这个对象又可能发送消息给下一个不同的对象
,如此一直传下去。这个消息流形成了一个序列。任何序列都有开始,每个消息序列都是
从某个进程或线程开始的。而且只要进程或线程还在活动,消息序列也就会继续。一个不
间断的系统(如实时的设备控制),只要它在其上运行的结点没关闭,它就会一直执行。
系统中的每个进程和线程都定义了一个清晰的控制流。
在每一个流中,消息是按时间顺序排列的。为了在图形上更好地可视化一个消息的序列,可以显式地对消息在序列开始后的次序建模,
每个消息的前面加上一个用冒号隔开的序号作为前缀。
通信图展示一个协作中角色之间的消息流。如下图所示,消息沿着协作中的连接流动。
通常可以用带填充箭头的实线来表示过程式的或嵌套的控制流,
其中消息findAt的序号为2.1,表示它是嵌套在第2个消息里的第1个消息。
1)过程式序列:【调用方式】
可以用枝杈形箭头表示的单调控制流来描述非过程式控制的每一步。
在下图中,消息assertCall的序号为2,表明它是序列中第二个消息。
2)单调序列:【发送方式】
1)对包含多重控制流的交互建模时,指明发送某一特定消息的进程或线程是很重要的。在UML
中,可以把位于该序列根部的进程或线程的名称加到消息的序号之前,以此区分不同的控
制流。例如,表达式:
D5 : ejectHach(3)
表明作为序列中第五个消息的操作ejectHatch(具有实参3)以进程或线程D为根。
2)下面的表达式所示,具有实参“Rachelle”的操作find的返回值是p。这是一个嵌套的
序列,表明第二个消息嵌套于第三个消息中,而第三个消息又嵌套于第一个消息中。在同
一张图中,p还可以在其他的消息中作为实际参数使用。
1.3.2 : p := find (“Rachelle”)
6、创建、修改和撤销
在某些交互中对象可以被创建(由create消息来说明)和撤销(由destroy消息来说明)。
链也是一样:对象之间的关系可以建立(come)和消失(go)。
为了指明一个对象或链在一个交互过程中是否出现和/或消失,可以在通信图中为它的角色附加一个注解。
在交互过程中,对象的属性值、状态和角色是经常改变的。可以通过在顺序图的生命线上
显示对象的状态或者值来反映对象的改变。
在顺序图中,对象或角色的生命期、创建与撤销都通过其生命线的垂直延伸而显式地表示
出来。在通信图中,必须使用注解表示创建和撤销。如果展示对象的生命期是重要的,就
使用顺序图。
7、表示法
在为交互建模时,通常既包括角色(每个角色代表交互实例中的对象),又包括消息(每
个消息都代表对象之间的通信活动,并导致某些动作发生)。
可以采用两种方式来可视化地表示交互中所涉及的角色和消息:一种方式是强调消息的时
间顺序,另一种方式是强调发送和接收消息的角色的结构组织。在UML中,第一种表示法称
为顺序图;第二种表示法称为通信图。顺序图和通信图都属于交互图。(UML还有一种名为
定时图的特殊交互图,它展示角色之间交换消息的准确时间。
顺序图允许对一个对象的生命线建模。一个对象的生命线代表该对象在某一特定时间内的存在,并可能覆盖该对象的创建和撤销。通信图允许对交互的对象之间可能存在的结构上的链建模。
8、常用建模技术
8.1、对控制流建模
8.1.1、基于时间的控制流
展示了在一个发行和订阅机构语境中进行交互的一组角色(观察者设计模式的一个实例)。图中包括 3个角色:p(StockQuotePublisher 的实例)、s1 和 s2(都是StockQuoteSubscriber的实例)。该图是一个顺序图,强调消息的时间顺序。
8.1.2、基于结构的控制流
相关文章:

【UML用户指南】-17-对基本行为建模-交互
目录 1、消息的可视化表示 2、对象与角色 3、链和连接件 4、消息 5、序列 6、创建、修改和撤销 7、表示法 8、常用建模技术 8.1、对控制流建模 8.1.1、基于时间的控制流 8.1.2、基于结构的控制流 在任何有意义的系统中,对象都不是孤立存在的,…...
Java中的类加载器与热部署技术详解
Java中的类加载器与热部署技术详解 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在软件开发中,特别是在大型应用和服务的开发过程中,类…...

【事件总线】EventBus
文章目录 概述如何使用如何发布消息如何进行消息监听 来源 概述 事件总线是对发布-订阅模式(观察者)的一种实现,是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。 …...

LeetCode 热题100 --双指针
双指针 b站UP主蜜糖:由于数据特征的有序性(大小或者正负),所以可以证明当前节点一定是优于过往节点,从而可以通过数据的维度数量的指针,逐步的迭代收敛最终找到最优解。 283.移动零 相关标签 :…...

从《深入设计模式》一书中学到的编程智慧
软件设计原则 优秀设计的特征 在开始学习实际的模式前,让我们来看看软件架构的设计过程,了解一下需要达成目标与需要尽量避免的陷阱。 代码复用 无论是开发何种软件产品,成本和时间都最重要的两个维度。较短的开发时间意味着可比竞争对…...
Redis 基本配置
Redis的配置文件通常位于 /etc/redis/redis.conf。以下是一些常见的Redis配置选项和它们的说明: 基本配置 1. 绑定地址 bind 127.0.0.1默认情况下,Redis只监听本地接口。如果需要远程访问,可以修改成bind 0.0.0.0,不过这会带来…...

【C++庖丁解牛】函数栈帧的创建与销毁
🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1. 寄存器2. ebp和esp是如…...
Java基础16(集合框架 List ArrayList容器类 ArrayList底层源码解析及扩容机制)
目录 一、什么是集合? 二、集合接口 三、List集合 四、ArrayList容器类 1. 常用方法 1.1 增加 1.2 查找 int size() E get(int index) int indexOf(Object c) boolean contains(Object c) boolean isEmpty() List SubList(int fromindex,int …...
数组:移除元素
参考资料:代码随想录 本题思路:通过快慢指针将两次循环减少到一次 class Solution {public int removeElement(int[] nums, int val) {//0 1 2 2 2 2 3int fast 0;int slow 0;while(fast < nums.length){if(nums[fast] ! val){nums[slow] nums[f…...
胡说八道(24.6.22)——通信杂谈(完结)
上回书说到雷达和香农的信息论,今天来进行完结。 数字幅值调制或幅值键控(ASK)调制方式是指载波信号的幅值随数字基带信号而变化,因此可以实现将基带信号搬移到载波频段。2ASK是利用代表数字信息0或1的基带矩形脉冲去键控一个连续…...

设计模式原则——里氏替换原则
设计模式原则 设计模式示例代码库地址: https://gitee.com/Jasonpupil/designPatterns 里氏替换原则 继承必须确保父类所拥有的性质在子类中依然成立 与开闭原则不同的是开闭原则可以改变父类原有的功能,里氏替换原则不能修改父类的原有的性质&#…...
详解 ClickHouse 的 SQL 操作
传统关系型数据库(以 MySQL 为例)的 SQL 语句,ClickHouse 基本都支持 一、插入 --语法: insert into table_name values(xxxxxx),(yyyyyyy),...;insert into table_name select xxxxx from table_name2 where yyyyy;二、更新和删…...
WPF与Winform,你的选择是?
概述 在桌面应用的发展历程中,Winform和WPF作为微软推出的两大框架,各自承载着不同的设计理念和技术特色。Winform以其稳定、成熟的技术基础,长期占据着企业级应用开发的重要地位。而WPF,作为后来者,以其现代化的UI设计…...

基于SpringBoot的实习管理系统设计与实现
你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言: Java 数据库: MySQL 技术: SpringBoot框架,B/S模式 工具: MyEclipse,Tomcat 系统展示 …...
编程用什么电脑不卡的:深度解析与推荐
编程用什么电脑不卡的:深度解析与推荐 在编程的世界里,一台流畅不卡的电脑无疑是每个开发者的得力助手。然而,面对市场上琳琅满目的电脑品牌和型号,如何选择一台适合编程的电脑却成为了一个令人困惑的问题。本文将从四个方面、五…...

优先级队列模拟实现
目录 1.堆的概念 2.堆性质堆中的某个元素小于或大于他的左右孩子 3.小根堆实例 4.堆创建 4.1调整思路 4.2向下调整思路 4.3代码实现(大根堆) 5.堆的删除 6.堆的插入 7.常用接口 7.1PriorityQueue和PriorityBlockingQueue 1.堆的概念 如果有一…...

记一次服务器崩溃事件
今天在安装Jenkins的时候,进行到插件安装这一步,本来一切顺利,结果最后安装完成之后一直进不去网页,显示连接超时,网上搜索了一圈也没发现什么相似的情况,当我疑惑的时候回到Linux控制台,发现命…...

神经网络 #数据挖掘 #Python
神经网络是一种受生物神经元系统启发的人工计算模型,用于模仿人脑的学习和决策过程。它由大量互相连接的节点(称为神经元)组成,这些节点处理和传递信息。神经网络通常包含输入层、隐藏层(可有多个)和输出层…...

营销复盘秘籍,6步法让你的活动效果翻倍
在营销的世界中,每一次活动都是一次探险,而复盘就是探险后的宝藏图,指引我们发现问题、提炼经验、优化策略。 想要学习如何复盘,只要了解以下复盘六大步骤,即可不断总结,逐渐走向卓越。 第一步࿱…...
Linux下命令行文件创建删除、目录创建删除
在Linux命令行下,文件和目录的创建与删除是通过一系列基础命令完成的,这些命令对于日常的系统管理和文件操作至关重要。 下面将详细介绍这些命令的功能和使用方法。 普通文件的创建与删除 创建文件 touch命令:主要用于创建一个空文件&…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...