当前位置: 首页 > news >正文

【UML用户指南】-17-对基本行为建模-交互

目录

1、消息的可视化表示

2、对象与角色

3、链和连接件

4、消息

5、序列

6、创建、修改和撤销

7、表示法

8、常用建模技术

8.1、对控制流建模

8.1.1、基于时间的控制流

8.1.2、基于结构的控制流


在任何有意义的系统中,对象都不是孤立存在的,它们相互之间通过传递消息进行交互。

交互是一种行为,这种行为由语境中的一组对象为达到某一目的而交换的一组消息构成。

这些角色表示类、接口、构件、结点和用况的原型实例。

可以用两种方式来对一个交互建模:

一种方式着眼于消息是如何按照时间顺序调度的;

另一种方式则着眼于交互中对象间的结构关系,并考虑消息是如何在这个结构的语境中被传递的。

交互图分为

1、顺序图:强调消息的时间顺序

2、通信图/协作图:侧重于发送和接收消息的对象之间的组织结构

1、消息的可视化表示

UML提供了对消息的图形化表示,如图所示。这种可视化的消息表示法强调了消息的最

重要的部分:名称、参数(若有的话)和顺序。在图形上,把消息表示为一条有向直线,

并且通常还包含相应的操作名。

85baadaf34db4c4abb6f834838e7d98f.png

2、对象与角色

参与交互的对象既可以是具体的事物,又可以是原型化的事物。作为具体的事物,一个对

象代表现实世界中的某个东西,例如,p作为类Person的一个实例,代表一个特定的人;而

作为原型化的事物,p可以代表类Person的任何实例【角色】。

可以把对象图看作是对交互的静态方面的表示,它通过说明所有一起工作的对象来设置交

互的场所。交互则通过引入可以沿着连接这些对象的链传递的消息的动态序列来进一步展

示交互。

对象图 + 消息传递 = 交互图

3、链和连接件

链是对象之间的语义连接。一般来说,链是关联的实例。如下图所示,在一个类与另一

个类之间有关联的情况下,这两个类的实例之间就可能有链;在两个对象之间有链存在的

情况下,一个对象就能向另一个对象发送消息。

e359ba09ffbd4b4dba30370066282f45.png

1)图的顶部是一个类图,其中声明了类Person和Company以及这两个类之间的多对多关联 employee-employer。

2)图的中部展示了协作 WorkAssignment的内容:

为某个员工分配某个工作。这个协作包括两个角色以及二者之间的一个连接件。

3)图的底部是该协作的一个实例,其中有分别绑定到角色和连接件的对象和链。底部的一个具体消息表示在该协作中的原型消息的声明。
 

链指明了一个对象向另一个对象(或自身)发送消息的路径。多数时候,指明存在着这样

一个路径就足够了。如果需要更精细地表示路径是如何存在的,可以用下面任意一种约束

来修饰链的有关端点。

 关联(association)  

说明对应的对象对关联是可见的。

 自身(self)     

说明对应的对象因为是本操作的调遣者,所以是可见的。

 全局(global)    

说明对应的对象在全局范围内可见。

 局部(local)     说明对应的对象在局部范围内可见。

 参数(parameter)   说明对应的对象因为是一个参数,所以是可见的。

4、消息

在传送一个消息时,对消息的接收通常会产生一个动作。这个动作可能引发目标对象以及

该对象可以访问的其他对象的状态改变。

动作分类:

  • 调用(call)调用某个对象的一个操作。对象也可以给自己发送消息,引起本地的操作调用。【实心箭头】过程控制
  • 返回(return)给调用者返回一个值。【虚线箭头】
  • 发送(send)向对象发送一个信号。【普通箭头】 单调异步
  • 创建(create)创建一个对象
  • 撤销(destroy)撤销一个对象。对象也可以撤销自身。

ef43497eb51e4cab88a1bc5e1dad4a1c.png

创建和撤销是用衍型显示的

5、序列

当一个对象向另一个对象发送消息(实际上是将某个动作委派给了消息的接收者)时,接

收对象可能接着会向另一个对象发送消息,这个对象又可能发送消息给下一个不同的对象

,如此一直传下去。这个消息流形成了一个序列。任何序列都有开始,每个消息序列都是

从某个进程或线程开始的。而且只要进程或线程还在活动,消息序列也就会继续。一个不

间断的系统(如实时的设备控制),只要它在其上运行的结点没关闭,它就会一直执行。

系统中的每个进程和线程都定义了一个清晰的控制流。

在每一个流中,消息是按时间顺序排列的。为了在图形上更好地可视化一个消息的序列,可以显式地对消息在序列开始后的次序建模,

每个消息的前面加上一个用冒号隔开的序号作为前缀。

通信图展示一个协作中角色之间的消息流。如下图所示,消息沿着协作中的连接流动。

通常可以用带填充箭头的实线来表示过程式的或嵌套的控制流,

其中消息findAt的序号为2.1,表示它是嵌套在第2个消息里的第1个消息。

1)过程式序列:【调用方式】
 

4e7cfdc9acc04b458a4507aaf4c459cb.png

可以用枝杈形箭头表示的单调控制流来描述非过程式控制的每一步。

在下图中,消息assertCall的序号为2,表明它是序列中第二个消息。

2)单调序列:【发送方式】


3cc601c4256b4c9b8308b39c653f0289.png

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、基于时间的控制流

1c1d296ad95e4f54a291cda3da73f880.png

展示了在一个发行和订阅机构语境中进行交互的一组角色(观察者设计模式的一个实例)。图中包括 3个角色:p(StockQuotePublisher 的实例)、s1 和 s2(都是StockQuoteSubscriber的实例)。该图是一个顺序图,强调消息的时间顺序。

8.1.2、基于结构的控制流

ff394849efd5458381c5b09b63fd641a.png

相关文章:

【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 …...

数组:移除元素

参考资料&#xff1a;代码随想录 本题思路&#xff1a;通过快慢指针将两次循环减少到一次 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)——通信杂谈(完结)

上回书说到雷达和香农的信息论&#xff0c;今天来进行完结。 数字幅值调制或幅值键控&#xff08;ASK&#xff09;调制方式是指载波信号的幅值随数字基带信号而变化&#xff0c;因此可以实现将基带信号搬移到载波频段。2ASK是利用代表数字信息0或1的基带矩形脉冲去键控一个连续…...

设计模式原则——里氏替换原则

设计模式原则 设计模式示例代码库地址&#xff1a; https://gitee.com/Jasonpupil/designPatterns 里氏替换原则 继承必须确保父类所拥有的性质在子类中依然成立 与开闭原则不同的是开闭原则可以改变父类原有的功能&#xff0c;里氏替换原则不能修改父类的原有的性质&#…...

详解 ClickHouse 的 SQL 操作

传统关系型数据库&#xff08;以 MySQL 为例&#xff09;的 SQL 语句&#xff0c;ClickHouse 基本都支持 一、插入 --语法&#xff1a; insert into table_name values(xxxxxx),(yyyyyyy),...;insert into table_name select xxxxx from table_name2 where yyyyy;二、更新和删…...

WPF与Winform,你的选择是?

概述 在桌面应用的发展历程中&#xff0c;Winform和WPF作为微软推出的两大框架&#xff0c;各自承载着不同的设计理念和技术特色。Winform以其稳定、成熟的技术基础&#xff0c;长期占据着企业级应用开发的重要地位。而WPF&#xff0c;作为后来者&#xff0c;以其现代化的UI设计…...

基于SpringBoot的实习管理系统设计与实现

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; SpringBoot框架&#xff0c;B/S模式 工具&#xff1a; MyEclipse&#xff0c;Tomcat 系统展示 …...

编程用什么电脑不卡的:深度解析与推荐

编程用什么电脑不卡的&#xff1a;深度解析与推荐 在编程的世界里&#xff0c;一台流畅不卡的电脑无疑是每个开发者的得力助手。然而&#xff0c;面对市场上琳琅满目的电脑品牌和型号&#xff0c;如何选择一台适合编程的电脑却成为了一个令人困惑的问题。本文将从四个方面、五…...

优先级队列模拟实现

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

记一次服务器崩溃事件

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

神经网络 #数据挖掘 #Python

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

营销复盘秘籍,6步法让你的活动效果翻倍

在营销的世界中&#xff0c;每一次活动都是一次探险&#xff0c;而复盘就是探险后的宝藏图&#xff0c;指引我们发现问题、提炼经验、优化策略。 想要学习如何复盘&#xff0c;只要了解以下复盘六大步骤&#xff0c;即可不断总结&#xff0c;逐渐走向卓越。 第一步&#xff1…...

Linux下命令行文件创建删除、目录创建删除

在Linux命令行下&#xff0c;文件和目录的创建与删除是通过一系列基础命令完成的&#xff0c;这些命令对于日常的系统管理和文件操作至关重要。 下面将详细介绍这些命令的功能和使用方法。 普通文件的创建与删除 创建文件 touch命令&#xff1a;主要用于创建一个空文件&…...

从LED驱动到继电器控制:深入解析NPN与PNP三极管在电路设计中的选型避坑指南

从LED驱动到继电器控制&#xff1a;深入解析NPN与PNP三极管在电路设计中的选型避坑指南 在电子电路设计中&#xff0c;三极管作为基础却关键的元件&#xff0c;其选型直接影响着电路的可靠性和性能。特别是当我们需要驱动LED、继电器或电机等负载时&#xff0c;NPN与PNP三极管的…...

忘记压缩包密码怎么办?5分钟学会用ArchivePasswordTestTool找回密码

忘记压缩包密码怎么办&#xff1f;5分钟学会用ArchivePasswordTestTool找回密码 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾经…...

把旧路由器改造成远程ADB调试服务器:OpenWrt安装adb与公网访问指南

旧路由器变身远程ADB调试服务器&#xff1a;OpenWrt实战指南 在移动应用开发过程中&#xff0c;频繁连接USB数据线进行调试不仅效率低下&#xff0c;更限制了开发者的工作灵活性。想象一下&#xff0c;当你需要同时调试多台设备&#xff0c;或者在不同网络环境下快速切换测试场…...

Wwise与Godot音频集成:专业游戏音频中间件在开源引擎中的实现

1. 项目概述&#xff1a;连接两大巨头的桥梁如果你是一位游戏音频设计师&#xff0c;或者是一位对游戏音频实现有追求的开发者&#xff0c;那么“Wwise”和“Godot”这两个名字对你来说一定不陌生。Wwise是业界顶级的交互式音频中间件&#xff0c;以其强大的音频逻辑编排、动态…...

硅基量子点激光器单片集成:技术路线、挑战与应用前景

1. 项目概述&#xff1a;为什么单片集成是硅光芯片的“圣杯”&#xff1f;在硅光芯片这个领域里待了十几年&#xff0c;我见过太多“看起来很美”的技术路线&#xff0c;但真正能走到大规模量产、成本可控这一步的&#xff0c;凤毛麟角。其中&#xff0c;一个长期困扰业界的核心…...

AI任务管理新范式:结构化描述如何提升人机协作效率

1. 项目概述&#xff1a;一个为AI而生的任务管理范式最近在GitHub上看到一个挺有意思的项目&#xff0c;叫todo-for-ai/todo-for-ai。初看名字&#xff0c;你可能会觉得这又是一个普通的待办事项应用&#xff0c;只不过加了个“AI”的噱头。但当我深入探究其设计哲学和实现细节…...

Java后端开发德州扑克小酒馆小程序架构与源码解析

德州扑克小酒馆小程序的核心价值&#xff0c;在于依托休闲娱乐场景实现小酒馆线下引流&#xff0c;其Java后端的架构设计与源码实现&#xff0c;直接决定小程序的稳定性、可扩展性与合规性。 一、架构设计核心原则&#xff08;贴合场景&#xff0c;合规优先&#xff09; 德州…...

开发者会话管理工具:提升多任务开发效率的利器

1. 项目概述&#xff1a;一个为开发者打造的会话管理利器在开发日常中&#xff0c;我们常常会同时打开多个终端窗口、IDE项目、数据库连接或者远程服务器会话。一天下来&#xff0c;桌面上可能散落着十几个终端标签页&#xff0c;每个都承载着不同的上下文&#xff1a;一个在跑…...

Boss-Key:Windows用户必备的窗口隐私保护神器,告别尴尬瞬间

Boss-Key&#xff1a;Windows用户必备的窗口隐私保护神器&#xff0c;告别尴尬瞬间 【免费下载链接】Boss-Key 老板来了&#xff1f;快用Boss-Key老板键一键隐藏静音当前窗口&#xff01;上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 你是不…...

嵌入式游戏开发实战:在4x8 LED点阵上用CircuitPython复刻FlappyBird

1. 项目概述&#xff1a;在4x8的像素矩阵上“复活”FlappyBird如果你玩过嵌入式开发&#xff0c;尤其是用那些小巧的微控制器板子&#xff0c;可能会觉得游戏开发离它们很远——资源有限&#xff0c;没有图形库&#xff0c;怎么搞&#xff1f;但恰恰是这种限制&#xff0c;最能…...