UML-类图详解
UML中基本概念说明
UML类图中关系连接线说明
UML类图说明
+号表示public、-表示表示private、#表示protected
UML类关系详解
泛化(Generalization)关系
简单的讲就是类之间的继承关系。在UML中,泛化关系用空心三角形+实线来表示,箭头指向为父类。
实现关系
实现是一种类与接口的关系,表示类是接口所有特征和行为的实现,在程序中一般通过类实现接口来描述
依赖(dependence)关系
是一种使用关系,即一个类的实现需要另一个的协助,Java中,方法参数需要传入另一个类的对象,就表示依赖这个类。
关联关系
是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
Java中一个类的全局变量引用了另一个类就表示关联了这个类(如下图:Techer关联了Course)
聚合关系
聚合关系表示的是一种弱的拥有关系。聚合是整体和个体之间的关系,即has-a的关系,体现了A对象可以包含B对象,但是B对象不是A对象一部分;换句话说,部分对象可以存在独立于整体对象的上下文中,整体对象的生命周期不直接决定部分对象的生命周期。
举个例子,考虑一个图书馆和书籍之间的聚合关系。图书馆是整体对象,书籍是部分对象。图书馆包含多本书,但这并不意味着每一本书都必须属于某个特定的图书馆。书籍可以被共享或者被多个图书馆包含。当某个图书馆被关闭时,书籍不一定会被销毁,它们可以被移到其他图书馆或者存在于其他上下文中。
总体来说,聚合关系强调了整体对象和部分对象之间的松散关联,部分对象在某种程度上是独立的。这与强关联的组合关系不同,组合关系中部分对象是整体对象的一部分,其生命周期直接受整体对象的管理。
eg:雁群和大雁的关系,每一只大雁都属于一个雁群,每一个雁群又有很多只大雁。它们之间构成了聚合关系
组合关系
组合也是关联关系的一种特例。组合是一种整体与部分的关系,即contains-a的关系,比聚合强。部分与整体的生命周期一致,整体的生命周期结束也就意味着部分的生命周期结束,组合关系不能共享。程序中组合和关联关系是一致的,只能从语义级别来区分。eg:鸟儿和翅膀的关系
聚合关系与组合关系区分
在UML(Unified Modeling Language)中,组合关系和聚合关系都表示类之间的关联,但它们在语义上有一些区别:
- 组合关系(Composition):
- 组合关系表示一种强烈的“整体与部分”的关系,部分对象的生命周期依赖于整体对象的生命周期。
- 整体对象拥有部分对象,而部分对象没有独立存在的意义。
- 在代码实现中,通常体现为整体对象负责创建和管理部分对象的生命周期,当整体对象被销毁时,部分对象也会被销毁。
- 在UML中,组合关系通常用实心菱形箭头来表示。
- 聚合关系(Aggregation):
- 聚合关系表示一种“整体与部分”的关系,但部分对象的生命周期不受整体对象的影响。
- 被聚合的对象可以独立存在,它们之间的关系更像是一种拥有关系,而不是生命周期依赖关系。
- 在代码实现中,聚合关系通常体现为整体对象包含对部分对象的引用,但整体对象的销毁并不会导致部分对象的销毁。
- 在UML中,聚合关系通常用空心菱形箭头来表示。
举个例子,假设有一个学校和学生的关系:
- 如果学生和学校之间是组合关系,那么学生对象的生命周期会受学校对象的管理,即学生对象只能存在于一个学校中,并且随着学校的销毁而销毁。
- 如果学生和学校之间是聚合关系,那么学生对象可以存在于多个学校中,它们之间的关系更像是一种包含关系,而学生对象的生命周期不受学校对象的影响。
UML类图关系完整示例
【参考】:《大话设计模式》
相关文章:
UML-类图详解
UML中基本概念说明 UML类图中关系连接线说明 UML类图说明 号表示public、-表示表示private、#表示protected UML类关系详解 泛化(Generalization)关系 简单的讲就是类之间的继承关系。在UML中,泛化关系用空心三角形实线来表示&…...
Python 快速获取PDF文件的页数
有时在处理或打印一个PDF文档之前,你可能需要先知道该文档包含多少页。虽然我们可以使用Adobe Acrobat这样的工具来查看页数,但对于程序员来说,编写脚本来完成这项工作会更加高效。本文就介绍一个使用Python快速获取PDF文件页数的办法。 安装…...
uniapp开发小程序使用x-www-form-urlencoded; charset=UTF-8 编码格式请求案例
使用x-www-form-urlencoded,header要放在前面,第一行位置。 uni.request({ header: { content-type: application/x-www-form-urlencoded; charsetUTF-8},url: ,method:POST, //请求方式POST\GETdata:that.loginData,success: funct…...
酷开科技服务升级,酷开系统给消费者更好的使用体验!
看电视的时候你是不是也会有选择困难症?不知道要看哪个?不知道如何操作?体验不够顺畅?现在,有了酷开系统9.2,这些通通不再是问题!酷开科技,一直致力于服务升级,给消费者更…...
【leetcode热题】单词拆分
难度: 中等通过率: 33.7%题目链接:. - 力扣(LeetCode) 题目描述 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明&#…...
【论文阅读】MC:用于语义图像分割的深度卷积网络弱监督和半监督学习
【论文阅读】MC:用于语义图像分割的深度卷积网络弱监督和半监督学习 文章目录 【论文阅读】MC:用于语义图像分割的深度卷积网络弱监督和半监督学习一、介绍二、联系工作三、方法四、实验结果 Weakly- and Semi-Supervised Learning of a Deep Convolutio…...
读书·基于RISC-V和FPGA的嵌入式系统设计·第3章
72.8051单片机的弊端和指令集架构CISC的缺点 76.RV指令集的特征(⭐) 特权架构和特权指令集是相关但不完全相同的概念。 特权架构(Privileged Architecture)指的是计算机体系结构中用于实现特权级操作的硬件和软件机制。特权架构定…...
本地项目推送到腾讯云轻量应用服务器教程(并实现本地推送远程自动更新)
将本地项目上传到腾讯云轻量应用服务器并实现后续的推送更新,具体步骤如下: 在本地项目目录下初始化 Git 仓库: cd 项目目录 git init将项目文件添加到 Git 仓库并提交: git add . git commit -m "Initial commit"在…...
MacOS安装反编译工具JD-GUI 版本需要1.8+
Java Decompiler http://java-decompiler.github.io/ 将下载下来的 jd-gui-osx-1.6.6.tar 解压,然后将 JD-GUI.app 文件拷贝到 Applications 应用程序目录里面 1.显示包内容 2.找到Contents/MacOS/universalJavaApplicationStub.sh 3.修改sh文件 内容修改为下面…...
计算机大数据毕业设计-基于Flask的旅游推荐可视化系统的设计与实现
基于Flask的旅游推荐可视化系统的设计与实现 编程语言:Python3.10 涉及技术:FlaskMySQL8.0Echarts 开发工具:PyCharm 摘要:以Pycharm为旅游推荐系统开发工具,采用B/S结构,使用Python语言开发旅游景点推…...
java实现pdf转word
java实现pdf转word 前言pom文件启动入口过滤器对象ConvertPdfToWordWithFlowableStructure转换实现类 前言 1.java实现pdf转word。 2.纯免费开源。 3.pdf解析完会生成word文件和图片文件夹。 4.无页码限制,文本类型生成到word中,图片生成到图片文件夹中…...
【操作系统概念】 第4章:线程
文章目录 0.前言4.1 概述4.1.1 多线程编程的优点 4.2 多线程模型4.2.1 多对一模型4.2.2 一对一模型4.2.3 多对多模型 4.3 线程库4.4 多线程问题4.4.1 系统调用fork()和exec()4.4.2 取消4.4.3 信号处理4.4.4 线程池4.4.5 线程特定数据 0.前言 第3章讨论的进程模型假设每个进程是…...
STM32/GD32——I2C通信协议
芯片选型 Ciga Device — GD32F470系列 通讯规则 I2C协议(或称IIC)是由飞利浦(现在的恩智浦半导体)公司开发的一种通用的总线协议。它使用两根线(时钟线和数据线)来传输数据,支持多个设备共享…...
Apache Paimon 使用之Creating Catalogs
Paimon Catalog 目前支持两种类型的metastores: filesystem metastore (default),在文件系统中存储元数据和表文件。 hive metastore,将metadata存储在Hive metastore中。用户可以直接从Hive访问表。 1.使用 Filesystem Metastore 创建 Cat…...
IntelliJ IDEA分支svn
IntelliJ IDEA分支svn 【为何使用分支】 项目开发中经常会遇到这种情况,项目中功能开发完上线后,新的需求又来了,风风火火的在项目里开发, 突然有一天测试说有个很致命的bug需要紧急修改上线,完蛋了,原来…...
.NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
在本文中,我们将详细介绍.NET Core日志内容,包括不同日志级别的区别,以及一些常用的日志记录实用工具和第三方库。同时,我们还将通过示例来展示如何使用这些工具和库。 一、.NET Core日志级别 .NET Core日志系统提供了五种日志级…...
Vue开发实例(七)Axios的安装与使用
说明: 如果只是在前端,axios常常需要结合mockjs使用,如果是前后端分离,就需要调用对应的接口,获取参数,传递参数;由于此文章只涉及前端,所以我们需要结合mockjs使用;由于…...
2024.3.6
作业1:使用C语言完成数据库的增删改 #include <myhead.h>//定义添加员工信息函数 int Add_worker(sqlite3 *ppDb) {//准备sql语句printf("请输入要添加的员工信息:\n");//从终端获取员工信息char rbuf[128]"";fgets(rbuf,sizeof(rbuf),s…...
抖音视频批量采集软件|视频评论下载工具
在日常工作中,需要频繁下载抖音视频,但逐个复制分享链接下载效率太低?别担心!我们推出了一款专业的抖音视频批量采集软件,基于C#开发,满足您的需求,让您通过关键词搜索视频并自动批量抓取&#…...
苹果 Vision Pro零售部件成本价格分析
苹果公司发布的全新头戴式显示器 Apple Vision Pro 虽然售价高达3499美元,但其制造成本同样不菲,根据研究机构 Omdia 的估计,该头显仅零部件成本就超过了1500美元。这款头显的总零部件成本估计为1542美元,这还并不包括研发、包装、…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果