【3】c++设计模式——>UML表示类之间的关联关系

news2024/12/24 3:21:37

关联关系

关联(Assocition)关系是类与类之间最常见的一种关系,它是一种结构化的关系,表示一个对象与另一个对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等。在UML类图中,用(带接头或不带箭头的)实线连接有关联关系的类。在C++中这种关联关系在类中是这样体现的,通常将一个类的对象作为另一个类的成员变量
类之间的关联关系有三种,分别是:单向关联双向关联自关联。下面逐一给大家进行介绍。

1.单向关联关系

单向关联指的是关联只有一个方向,比如每个孩子(Child)都拥有一个父亲(Parent),其代码实现为:

class Parent
{
};

class Child
{
private:
    Parent m_father;
};

通过UML来说描述这两个类之间的关系,如下图:
在这里插入图片描述
如果是单向关联,使用的连接线是带单向箭头的实线, 哪个类作为了当前类的成员变量,那么箭头就指向哪个类。在这个例子中,Parent类作为了Child类的成员变量,因此箭头端应该指向Parent类,另一端连接Child类。

2.双向关联关系

现实生活中每个孩子都有父母,每个父母同样有自己的孩子,如果想要通过类来描述这样的亲情关系,代码如下:

class Parent
{
private:
    Child m_son;
};

class Child
{
private:
    Parent m_father;
};

在这里插入图片描述
这两个类的对象分别作为了对方类的成员变量。

3.自关联关系

自关联指的是当前类中包含一个自身类型的对象成员,这在链表中非常常见,单向链表中都会有一个指向自身节点类型的后继指针成员,而双向链表中会包含一个指向自身节点类型的前驱指针和一个指向自身节点类型的后继指针。就以双向链表节点类为例:

class Node 
{
private:
    void* m_data;
    Node* m_prev;
    Node* m_next;
};

一般使用带箭头的实线来描述自关联关系,我中有我,独角戏。
在这里插入图片描述

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

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

相关文章

JVM篇---第一篇

系列文章目录 文章目录 系列文章目录一、知识点汇总二、知识点详解:三、说说类加载与卸载一、知识点汇总 JVM是Java运行基础,面试时一定会遇到JVM的有关问题,内容相对集中,但对只是深度要求较高. 其中内存模型,类加载机制,GC是重点方面.性能调优部分更偏向应用,重点突出实践…

专业图标制作软件 Image2icon 最新中文 for mac

Image2Icon是一款用于Mac操作系统的图标转换工具。它允许用户将常见的图像文件(如PNG、JPEG、GIF等)转换为图标文件(.ico格式),以便在Mac上用作应用程序、文件夹或驱动器的自定义图标。 以下是Image2Icon的一些主要功…

基于vc6+sdk51开发简易文字识别转语音的程序

系统:window7 软件:vc6.0 目的:简易文字转语音真人发声 利用2023国庆小长假,研究如何将文言转语音,之前在网上查询相关知识,大致了解微信语音转换,翻译官之类软件的原理,但要加入神…

python二次开发CATIA:旋转楼梯

旋转楼梯,也称为螺旋形或螺旋式楼梯,是一种围绕单柱或中心轴旋转而上的楼梯类型。由于其流线造型美观、典雅,并且能够节省空间,因此受到很多人的喜爱。这种楼梯最早可以追溯到公元前1000年左右,当时在所罗门王的宫殿中…

【4】c++设计模式——>UML表示类之间的聚合关系

聚合关系表示整体与部分的关系,在聚合关系中,成员对象时整体的一部分,但是成员对象可以脱离整体对象独立存在,当整体被析构销毁的时候,组成整体的这些子对象是不会被销毁的,是可以继续存活,并在…

Matlab论文插图绘制模板第117期—气泡云图

之前的文章中,分享了Matlab气泡图的绘制模板: 进一步,分享一种特殊的气泡图:气泡云图,先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行下载。有…

【STL】用哈希表(桶)封装出unordered_set和unordered_map

⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏留言 ⭐系列专栏:C进阶 ⭐代码仓库:C进阶 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们的支持是我…

如何在企业网站里做好网络安全

在当今数字时代,网站不仅仅是企业宣传和产品展示的平台,更是日常生活和商业活动中不可或缺的一部分。然而,随着网络技术不断发展,网站的安全问题日益凸显。保护网站和用户数据的安全已经成为至关重要的任务,以下是一些…

C#学生选课及成绩查询系统

一、项目背景 学生选课及成绩查询系统是一个学校不可缺少的部分,传统的人工管理档案的方式存在着很多的缺点,如:效率低、保密性差等,所以开发一套综合教务系统管理软件很有必要,它应该具有传统的手工管理所无法比拟的…

进程间通信-内存映射

内存映射是通过将一个进程的虚拟内存空间映射到另一个进程的虚拟内存空间来实现的。这样,两个进程可以共享同一块物理内存,从而实现数据的共享。内存映射通常通过操作系统提供的特定系统调用来完成。 下面是使用内存映射进行进程间通信的一般步骤&…

29 drf-Vue个人向总结-2

文章目录 drf项目总结2重写create自定义验证类获取个性化内容 与 lookup_field 的用处重写get_queryset,get_serializer_class类docs帮助文档支付宝支付原理(微信同原理)使用流程创建公钥私钥使用的理论介绍使用的代码介绍支付宝与Drf的联合使…

扫雷 | C语言 | 简单易懂 | 扫雷相关知识点总结

扫雷思路 相信大家都有玩过扫雷吧!其实在我们学习完C语言中函数和数组之后,我们就有能力制作一个简单的扫雷小游戏了。 先考虑扫雷游戏的思路: 扫雷游戏我们需要利用二维数组将其进行初始化以及赋值“雷”,就以9*9个雷盘来分析…

集合-Map系列

系列文章目录 1.集合-Collection-CSDN博客​​​​​​ 2.集合-List集合-CSDN博客 3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客 4.数据结构-哈希表_喜欢吃animal milk的博客-CSDN博客 5.集合-set系列集合-CSDN博客 6.集合-Map系列-CSDN博客 文章目…

指针详解第三部分

1. 字符指针变量 一种指针类型为字符指针 char*(下面有两个代码表示了两种不同的用法) int main() {char ch w;char* pc &ch;*pc w;return 0; }int main() {const char* pstr "hello bit.";//这⾥是把⼀个字符串放到pstr指针变量⾥了…

什么是JWT?深入理解JWT从原理到应用

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《ELement》。🎯🎯 &#x1…

使用 Python 和 wxPython 进行批量文件扩展名替换

引言: 在日常的文件管理中,有时我们需要将一大批文件的扩展名进行替换。手动一个个重命名文件是一项繁琐的任务,但是使用 Python 编程语言和 wxPython 模块可以轻松地实现这一功能。本文将介绍如何使用 Python 和 wxPython 创建一个简单的图形…

Python学习笔记之分支结构与循环结构

Python学习笔记之分支结构与循环结构 一、分支结构 使用关键字if、elif、else 练习1&#xff1a;使用分支结构实现分段函数求值 """分段函数求值""" x float(input("x "))if x > 1:y 3 * x - 5 elif x < -1:y 5 * x 3…

开启创意思维,畅享Mindomo Desktop for Mac思维导图之旅

在数字化时代&#xff0c;我们需要一个强大而直观的工具来整理和展现我们的思维。Mindomo Desktop for Mac&#xff08;Mindomo&#xff09;作为一款免费的思维导图软件&#xff0c;将为您提供卓越的创意思维体验。 Mindomo拥有直观的界面和丰富的功能&#xff0c;让您能够方便…

手搭手Mybatis-Plus多数据源异构数据迁移案例

环境介绍 技术栈 springbootmybatis-plusdruidbaomidoumysqloracledm 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis 2.3.1 pom.xml所需依赖 <dependencies><dependency><groupId>org.springframework.…

【Golang】包

包 Go语言是使用包来组织源代码的&#xff0c;包&#xff08;package&#xff09;是多个 Go 源码的集合&#xff0c;是一种高级的代码复用方案 Go语言中为我们提供了很多内置包&#xff0c;如 fmt、os、io 等。 任何源代码文件必须属于某个包&#xff0c;同时源码文件的第一…