类之间的关系

news2024/12/24 3:19:20

1. 关系强弱顺序(由强到弱)

  • 泛化
  • 实现
  • 组合
  • 聚合
  • 关联
  • 依赖

在这里插入图片描述
图中,组合和聚合标错了

2. 依赖

  • 虚线箭头,箭头指向被依赖类
  • 依赖关系描述了两个类之间的临时关系。通常不会持续整个对象的生命周期,而是创建一个临时的关系以满足特定操作。
  • 一个类的对象或方法依赖于另一个类的对象或方法时,它们之间存在依赖关系。依赖关系一般一个类的对象不会持有另一个类的对象
  • 依赖关系在类之间创建了解耦,使得一个类的修改不至于影响到其他类。
type DataLoader interface {
	LoadData() []string
}

type DataProcessor struct{}

func (dp *DataProcessor) ProcessData(loader DataLoader) {
	data := loader.LoadData()
	// 处理数据的逻辑
}

DataProcessor 类依赖的是DataLoader接口,而不是具体的实现,这样我们替换了DataLoader的实现而不用修改DataProcessor类

  • 依赖关系通常有“使用 ”、“需要”,或者“依赖于”等特点。

3. 关联

  • 泛化和实现,其他的都是关联关系
  • 关联关系分为两种, 强关联和弱关联
  • 弱关联: 依赖关系
  • 强关联:聚合关系、组合关系

3.1 按关联方式分类

  • 双向关联:实线表示 ,你也可以两端都带箭头
  • 单向关联: 实线箭头
  • 自关联:同一个类的对象之间的关联
  • 多重性关联:在关联上限定上最大最小实例数 在多重性关联中,我们用实线表示,并在两端标好数字限定

注意,关联关系即可以按关联方式分类,也可以按关联性强弱分类。是按两种维度来进行划分的。 关联方式与关联性强弱没有相关性

3.2 关联的多重性

示例描述
00 个
11 个
0 … 10个或1 个
*多个, 包括 0个
0… *0到 n 个
1…*1到 n个
2…62到 6个

在这里插入图片描述

3.3 按关联强度分类

强关联

  • 强关联表示两个类之间的紧密联系。
  • 强关联关系中,一个类包含对另一个类对象的直接引用,通常作为成员或实例变量。
  • 组合和聚合都属于强关联的一种。 但聚合的关联性要更弱一些。
  • 在强关联中,对象的生命周期可能相互依赖。
type Engine struct {
	// 引擎的属性和方法
}

type Car struct {
	engine *Engine
}

func NewCar() *Car {
	engine := &Engine{}
	return &Car{engine: engine}
}

在这个示例中,Car 类和 Engine 类之间存在强关联关系,因为每辆车都拥有(包含)一个引擎,而引擎也是车的一个组成部分。在 NewCar 函数中,当我们创建一个新的 Car 实例时,同时也会创建一个新的 Engine 实例。如此一来,Car 对象的生命周期和 Engine 对象的生命周期就相互依赖了。

弱关联

  • 弱关联表示两个类之间的相对较弱的联系。通常通过间接方法如接口回调函数来维护联系。
  • 在弱关联中,一个类不会直接包含对另一个类对象的引用。 (不会直接引用另一个类对象,但可以直接引用接口、抽象类。或者在方法中通过参数使用而不是直接引用)
  • 当一个类发生改变时,另一个关联类可能不会受到直接影响。
  • 弱关联可以实现更高程度的解耦,便于代码的维护和扩展。
  • 依赖就是一种弱关联

4. 聚合

  • 尾部空心菱形的实线箭头 箭头可以省略,箭头指向整体
  • 聚合是一种表示整体和部分之间关系的较弱关联。
  • 在聚合关系中,整体(容器类)和部分(构成类)的生命周期是相对独立的。
  • 部分可以脱离整体独立存在
  • 如鸟群和鸟,他们的生命周期相对独立。

5. 组合

  • 尾部实心菱形的实线箭头 ,箭头可以省略,箭头指向整体
  • 组合是一种表示整体和部分之间关系的较强关联。
  • 在组合关系中,整体(容器类)和部分(构成类)的生命周期是紧密相关的。
  • 身体(Body)和心脏(Heart)之间的关系可以看作是组合关系。一个身体包含一个心脏,当身体不存在时,心脏也不存在。

6. 泛化

  • 实线空心三角箭头 ,三角箭头指向父类
  • 是一种子类和父类之间继承关系

7. 实现

  • 虚线空心三角箭头 ,三角箭头指向接口
  • 是一种类于接口之间的关系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/758566.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

string【1】介绍与使用(超详解哦)

string的介绍与使用 引言string类常用接口构造函数容量操作size与lengthcapacityresizereserveclearempty 元素访问迭代器访问beginendrbeginrend范围for 下标访问 字符串修改insertappendpush_backoperatorpop_backerase 字符串查找findrfind 非成员函数operator>>opera…

光场成像2.0——聚焦型光场相机

光场2.0 1. 发展历程 由于光场1.0从结构上子图像的分辨率严重依赖MLA子透镜的数量,因此分辨率一直受限,限制了光场1.0结构的广泛应用。针对此不足,在2008年,又一篇伟大的论文出现了,该论文提出了全分辨率光场渲染的概…

CS拒绝连接,Cobalt Strike连接失败,Cobalt Strike使用方法(一)

拒绝连接 connection refused:connect。 kali端(服务器端)和本地端win10。看看端口开启状态 先启动服务器端 查看端口开启状态,确定50050端口开启,可以参阅本文章点击跳转 没问题再往下看。 使用步骤 chmod 777 ./teamserver…

【运维工程师学习】Centos中MySQL替换MariaDB

【运维工程师学习】Centos8中MySQL替换MariaDB 1、查看已有的mysql2、MySQL官网tar包下载3、找到下载路径解压4、移动解压后的文件夹到/usr/local/mysql5、创建data文件夹,一般用于存放数据库文件数据6、创建用户组7、更改用户文件夹权限8、生成my.cnf文件9、编辑my…

排序子序列,倒置字符串讲解(图文并茂)

目录 1.排序子序列 2.倒置字符串 1.排序子序列 排序子序列_牛客笔试题_牛客网 (nowcoder.com) 首先题干中提到非递增序列和非递减序列,那么我们就要先弄明白什么是上述2种序列: 非递增序列:a[i] > a[i1] 如:3 2 1 或者 3 3 …

运动控制-达妙C#开源USB2CAN例程

C# Can总线资料不多, 达妙USB2CAN入口 http://www.dmbot.cn/forum.php?modviewthread&tid328&extrapage%3D1

怎么自学网络安全?遇到问题该怎么解决?

趁着今天下班,我花了几个小时整理了下,非常不易,希望大家可以点赞收藏支持一波,谢谢。 我的经历: 我 19 年毕业,大学专业是物联网工程,我相信很多人在象牙塔里都很迷茫,到了大三大…

帝国cms如何判断首页高亮显示

通过简单的代码判断当前页面是否为首页并且进行高亮的代码如下&#xff1a; 判断逻辑是获取当前栏目id&#xff0c;如果为空则为首页。 条件判断代码&#xff1a; <?php if(empty($GLOBALS[navclassid])){echo class"active";}?> 需要特别说明的此判断会…

二进制文件的Python写入与读取

二进制文件的Python编写 这么基础的东西&#xff0c;必然用内置的就好 二进制文件的Python读写 重要提示 p.s. 1 >>> bHello World.decode() "Hello World" True >>> example import struct with open(binary_file.bin, wb) as file:data b…

【华为机试】HJ17 坐标移动详解+完整源代码示例

忙碌了一周&#xff0c;一直没时间更新&#xff0c;趁着周末来更新第二个题目。 题目 题目解析 这个题目相比于上一个题目来说&#xff0c;会简单一些&#xff0c;不涉及到那些复杂的算法&#xff0c;就是对于字符串的处理。 算法步骤 输入一个字符串根据分号&#xff0c;将…

uniapp 集成七牛云,上传图片

1 创建项目 我是可视化创建项目的 &#xff0c;cli创建的项目可以直接使用npm安装七牛云。 2 拷贝qiniuUploader.js到项目&#xff0c;下面的回复 放了qiniuUploader.js百度云链接。 3 在需要使用qiniuUploader的vue文件 引入。 4 相册选择照片&#xff0c;或者拍照后&#xff…

Redis-持久化、主从集群、哨兵模式、分片集群、分布式缓存

文章目录 高级篇 - 分布式缓存 Redis集群0、单节点Redis的问题一、Redis持久化1.1 RDB 持久化1.1.1 基本介绍1.1.2 RDB的fork原理1.2.3 总结 1.2 AOF持久化1.3 RDB与AOF对比 二、Redis主从集群2.1 介绍2.2 搭建主从集群2.2.1 准备实例、配置2.2.2 启动2.2.3 开启主从关系2.2.4 …

快速而简单的视频格式转换方法

在数字时代&#xff0c;我们经常需要将视频文件从一种格式转换为另一种格式。无论是因为兼容性问题&#xff0c;还是为了在特定设备上播放视频&#xff0c;视频格式转换是一项非常常见的任务。本文将介绍视频格式转换的基本知识和步骤。 首先&#xff0c;了解不同的视频格式非常…

8.3 非正弦波发生电路

在实用电路中除了常见的正弦波外&#xff0c;还有矩形波、三角波、锯齿波、尖顶波和阶梯波&#xff0c;如图8.3.1所示。 一、矩形波发生电路 矩形波发生电路是其它非正弦波发生电路的基础&#xff0c;例如&#xff0c;若方波电压加在积分运算电路的输入端&#xff0c;则输出就…

数学建模-相关系数

excel基本操作&#xff1a;ctrl右&#xff0c;ctrl左&#xff0c;ctrlshift下/右&#xff0c;ctrlshift空格 题目里有数据&#xff0c;给出描述性统计是比较好的习惯 excel描述性统计&#xff1a;数据-数据分析-描述统计 MATLAB要做散点图C62个 SPSS可以直接画出两两之间的散…

华为OD机试真题 Java 实现【最小循环子数组】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、备注五、Java算法源码六、效果展示1、输入2、输出 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有…

koa初体验———swagger使用

学习完koa框架和mysql&#xff0c;写了一个小demo&#xff0c;选课管理系统&#xff0c;其中包含权限验证&#xff0c;登录注册&#xff0c;用户管理和选课管理。写这个项目目的一方面是为了自己练手&#xff0c;另一方面是为了我们在学习新技术的时候能够有接口供我们使用去测…

Cilium基础架构

Cilium作为一款Kubernetes CNI插件&#xff0c;从一开始就是为大规模和高度动态的容器环境而设计&#xff0c;并且带来了API级别感知的网络安全管理功能&#xff0c;通过使用基于Linux内核特性的新技术——BPF&#xff0c;提供了基于service/pod/container作为标识&#xff0c;…

树莓派-家庭健康监测-空气篇

树莓派-家庭健康监测-空气篇 最后编辑日期: 2023.7.16 1、背景和目标 室内空气中高浓度的二氧化碳会损害人类的认知能力和健康&#xff0c;良好室内空气质量的重要性和价值不言而喻。家庭健康监测-空气篇应运而生。 最后效果总览: 细节: 手机预览: 实现功能: 二氧化碳…

Redis数据类型的常用命令和应用场景

1. Redis数据类型概述 Redis 常见的数据类型有10 种&#xff0c;其中包括 5 种基本数据类型&#xff1a;Strings(字符串)、Lists(列表)、Sets(集合)、Hashes(散列)、Sorted sets(Zset有序集合)。除了基本数据类型外&#xff0c;还有 5 种常用数据类型&#xff1a;Bitmaps 、Hy…