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

UML之组合与聚合

关联和链接关系在很多情况下是对称的,即被关联的两个类都有以自己为源端对方为目标端的角色存在,而且角色与源端类的属性是等价的,即在关联一端的关联端(角色)等价于另外一端的属性。例如,在下图中,我们可以认为author:Person是类Book的一个属性,而myBooks:Person是类Person的一个属性。

关于关联的详细信息,可参阅《UML之关联》一文。

如果希望表达一种非对称的关系,可以使用“组合”或“聚合”关系进行建模。UML使用实心菱形(组合)或空心菱形(聚合)表达这种关系,菱形放置在关联线上并靠近关系中的占主导地位的元素。

1.组合

组合表达整体与部分的关系,表示组合的实心菱形放置于表示整体的元素的那一端,如下图所示。

在上图表示的组合关系中,靠近Cover的一端给出了多重性值2,而靠近Book的一端未给出多重性,此时它的多重性值将默认为1。这张图描画的模型表明封面(Cover)是书(Book)的一部分,并且一本书包含有两个封面(封面和封底)。

使用组合关系时,“整体”的生命周期将决定“部分”的生命周期。例如在上例建模的场景下,如果我们删除(或者在现实世界中我们焚毁)一本书(Book),则封面(Cover)也将被删除(或焚毁)。

“整体”端一侧的多重性值只能是[1]或者[0..1](注意:在组合关系建模时多重性不需要前后的中括号[ ],参见上图)。例如在上例中,首先一个封面(Cover)不能被用于多本书(Book);其次,如果封面(Cover)不可以从书(Book)中移除,则菱形所在一侧的多重性值只能为[1],如果允许封面(Cover)从书(Book)中移除,则菱形所在一侧的多重性值只能为[0..1]。

“部分”端一侧的多重性允许是任意的合法值,上例中的封面(Cover)是两个,即封面和封底。上述多重性也可以使用独立的组合关系替代,即在Book与Cover之间分别为封面与封底建立组合关系,如下图所示。

组合作为关联的一种类型,理论上关联的所有修饰符都可以应用于组合,不过通常不需要给出组合的名称,而在理解或描述组合时允许有类似以下的说法:

  • 一本书由两个封面组成。
  • 一本书有两个部分是封面。
  • 一个封面是一本书的一部分。

组合是一种非对称的关系:一本书(Book)可以有封面(Cover)作为它的一部分,而一个封面(Cover)不能将同一本书(Book)作为它的一部分。

组合具有传递性,这意味着如果类C是类B的一部分,而类B是类A的一部分,则类C也是类A的一部分。例如某个类(Class)由名称(Name)和属性(Attribute)组成,而属性(Attribute)又有它的组成部分。如果删除类(Class),则不只是名称(Name)和属性(Attribute)会被删除,组成属性(Attribute)的Name、Type、Mult也将被删除。

使用类似上图的树形结构在描述组合或聚合关系非常常见,例如对材料清单、元模型或过程分解建模时都可以使用树形结构。

2.聚合

聚合是组合的一种较弱形式,或者说是关联的一种较强形式。

相对于组合,聚合的目标端可以与多个源端建立关联,即目标端是可以“共享”的。例如在下图中,一本书(Book)可以有多名作为作者(author)的人(Person),而一个人(Person)也可能是多本书(Book)的作者(author)。

此外,组合的“整体“决定了”部分“的生命周期,而聚合不存在这种约束。当聚合的”整体“消失时,”部分“依旧存在,它并不随”整体”而消失。例如当一本书(Book)被销毁时(甚至所有已印刷的书都被销毁时),作为这本书(Book)作者(author)的人(Person)依然健在;反之,当作为作者(author)的一个人(Person)死亡后,并不会影响这本书(Book)的完整性。

可以看到,聚合的语义与常规关联的语义几乎相同。当我们使用聚合时,通常可以直接使用关联来替代它。如果需要强调类似部分的关系而它又不像组合那样紧密与强烈时,则可以选择使用聚合。

最后,特别补充一点,从UML技术角度来说,关联有一个名为AggregationKind的属性,普通关联其值为None,对于组合其值为Composite,对于聚合,其值为Shared。

组合与聚合 – 光头颜说ITicon-default.png?t=O83Ahttps://gtyan.com/archives/356

UML之图框架标题类型之谬-CSDN博客

UML之类与类图-CSDN博客

UML之修饰符-CSDN博客

UML之类型-CSDN博客

UML之包与包图-CSDN博客

UML之包的导入与访问-CSDN博客

UML之模型、包及包的版型(构造型)_包体系结构-CSDN博客

UML之属性与参数的多重性-CSDN博客

UML之集合类型-CSDN博客

UML之关联-CSDN博客

UML规约2.5.1下载icon-default.png?t=O83Ahttps://download.csdn.net/download/mboy2008/90211443

相关文章:

UML之组合与聚合

关联和链接关系在很多情况下是对称的,即被关联的两个类都有以自己为源端对方为目标端的角色存在,而且角色与源端类的属性是等价的,即在关联一端的关联端(角色)等价于另外一端的属性。例如,在下图中&#xf…...

数据结构理论篇(期末突击)

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: 学校课程突击 下面均是为了应付学校考试所用,如果有涉及部分知识点下面未说明,可以去我的数据结构专栏看看或者自行在…...

《一文读懂PyTorch核心模块:开启深度学习之旅》

《一文读懂PyTorch核心模块:开启深度学习之旅》 一、PyTorch 入门:深度学习的得力助手二、核心模块概览:构建深度学习大厦的基石三、torch:基础功能担当(一)张量操作:多维数组的神奇变换(二)自动微分:梯度求解的幕后英雄(三)设备管理:CPU 与 GPU 的高效调度四、to…...

摆脱Zotero存储限制:WebDAV结合内网穿透打造个人文献管理云平台

文章目录 前言一、Zotero安装教程二、群晖NAS WebDAV设置三、Zotero设置四、使用公网地址同步Zotero文献库五、使用永久固定公网地址同步Zotero文献库 前言 如果你是科研工作者、学生或者任何需要频繁处理大量学术资料的人士,你一定对如何高效管理和引用文献感到头…...

Flutter封装一个三方ViewPager学习

Flutter如何实现一个增强的 PageView,支持自定义页面切换动画。 前置知识点学习 CrossAxisAlignment CrossAxisAlignment 是 Flutter 中用于控制布局子组件在交叉轴(cross axis)方向上的对齐方式的一个枚举类。它主要在 Flex 布局模型中使…...

服务器数据恢复—离线盘数超过热备盘数导致raidz阵列崩溃的数据恢复

服务器数据恢复环境&故障: 一台配有32块硬盘的服务器在运行过程中突然崩溃不可用。经过初步检测,基本上确定服务器硬件不存在物理故障。管理员重启服务器后问题依旧。需要恢复该服务器中的数据。 服务器数据恢复环境: 1、将服务器中硬盘…...

nginx-nginx的缓存集成

缓存的概念 缓存就是数据交换的缓冲区,被称作cache,访用户想要获取数据时,就会先从缓存中去查询数据,如果缓存中有就会直接返回给用户,若果缓存中没有,则会发出请求从服务器中重新查询数据,将数…...

【Vim Masterclass 笔记01】Section 1:Course Overview + Section 2:Vim Quickstart

文章目录 Section 1:Course Introduction 课程概述S01L01 Course Overview 课程简介课程概要 S01L02 Course Download 课程资源下载S01L03 What Vim Is and Why You Should Learn It 何为 Vim?学来干啥?1 何为 Vim2 为何学 Vim Section 2&…...

【数据库系列】Spring Boot 中使用 MyBatis 详细指南

一、基础介绍 1.1 MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 P…...

Azure Airflow 中配置错误可能会使整个集群受到攻击

网络安全研究人员在 Microsoft 的 Azure 数据工厂 Apache Airflow 中发现了三个安全漏洞,如果成功利用这些漏洞,攻击者可能会获得执行各种隐蔽操作的能力,包括数据泄露和恶意软件部署。 “利用这些漏洞可能允许攻击者以影子管理员的身份获得…...

Python跨年烟花

目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…...

【代码】Python|Windows 批量尝试密码去打开加密的 Word 文档(docx和doc)

文章目录 前言完整代码Githubdocxdoc 代码解释1. msoffcrypto 方法(用于解密 .docx 文件)read_secret_word_file 函数密码生成与解密尝试try_decrypt_file 函数 2. comtypes 方法(用于解密 .doc 文件)read_secret_word_file 函数注…...

java开发中注解汇总​​

注解作用位置注意mybatis Data Getter Setter ToString EqualsAndHashCode AllArgsConstructor NoArgsConstructor Data 代替:无参构造,get,set,toString,hashCode,equals Getter Setter 可放在类和方法上&…...

C# 设计模式(结构型模式):外观模式

C# 设计模式(结构型模式):外观模式 (Facade Pattern) 在复杂系统中,往往会涉及到多个子系统、模块和类。这些子系统的接口和功能可能会让使用者感到困惑和复杂。在这种情况下,我们可以使用外观模式(Facade…...

PowerShell 常见问题解答

PowerShell 是微软开发的一种功能强大的命令行界面和脚本语言,广泛应用于系统管理和自动化任务。以下是一些使用 PowerShell 时常见的问题及其解决方法。 什么是 PowerShell? PowerShell 是基于 .NET 的命令行界面(CLI)和脚本语言…...

计算机网络 (15)宽带接入技术

前言 计算机网络宽带接入技术是指通过高速、大容量的通信信道或网络,实现用户与互联网或其他通信网络之间的高速连接。 一、宽带接入技术的定义与特点 定义:宽带接入技术是指能够传输大量数据的通信信道或网络,其传输速度通常较高&#xff0c…...

前端Python应用指南(六)构建RESTful API:使用Flask和Django实现用户认证与授权

《写给前端的python应用指南》系列: (一)快速构建 Web 服务器 - Flask vs Node.js 对比(二)深入Flask:理解Flask的应用结构与模块化设计(三)Django vs Flask:哪种框架适…...

【Unity3D】基于UGUI——简易版 UI框架

https://github.com/AMikeW/BStandShaderResources/blob/master/milk_UIFramework.unitypackage UI框架支持如下功能: 1、层级控制 2、支持面板多次打开时,隐藏前一个打开的面板,当关闭面板时,能够恢复前一个打开面板状态 3、支…...

算法排序算法

文章目录 快速排序[leetcode 215数组中的第K个最大元素](https://leetcode.cn/problems/kth-largest-element-in-an-array/)分析题解快速排序 桶排序[leetcode 347 前K个高频元素](https://leetcode.cn/problems/top-k-frequent-elements/)分析题解 快速排序 leetcode 215数组…...

第3章 总线

总线的定义 为多个部件 分时共享 公共信息传送线路。 系统之间、模块之间、芯片内部用来传递信息信号线集合。 共享 总线上可连接多个部件 各部件间相互交换信息 都可通过总线来。 分时 同一时刻 总线上只能传 一个部件信息。 采用标准总线的优点 简化系统软硬件设计 从硬件角度…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

docker 部署发现spring.profiles.active 问题

报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

【C++进阶篇】智能指针

C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...

c# 局部函数 定义、功能与示例

C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...