C++12 ---对象于对象的关系

news2025/4/6 16:47:44

一、对象于对象的关系

在一个系统中,一个对象可能与不同的对象相关,以下是不同的关系。·

依赖(Dependency)  (使用一个)
关联(Association)  (使用一个)
聚合(Aggregation)  (有一个)
组合(Composition )  (有一个,"用..来实现")
继承(Inheritance)  (是一个)
类模板(Class template)

1、依赖

(使用一个)
依赖关系是用一个带箭头的虚线表示的;他描述一个对象在运行期间会用到另一个对象的关系;
与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化;依赖关系也可能发生变化;
显然,依赖也有方向,单向依赖,双向依赖,我们总是应该保持单向依赖,杜绝双向依赖的产生;注意:在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系处理临时知道对方外,还是“使用"对方的方法和属性;

一个类的对象作为另外一个类的成员函数的参数出现

在这里插入图片描述

2、关联

(使用一个)
关联关系是用一条直线表示的;它描述不同类的对象之间的结构关系;它是一种静态关系,通常与运行状态无关,一般由常识等因素决定的;
它一般用来定义对象之间静态的、天然的结构;所以,关联关系是一种“强关联"的关系;

比如,教师和课程之间就是一种关联关系;学生和学校就是一种关联关系;

关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示Tearcher知道Course,但Course不知道Tearcher;

注:在最终代码中,关联对象通常是以成员属性(对象)或引用的形式实现

在这里插入图片描述

3、聚合

聚合关系(Aggregation)(有一个,有整体和部分的关系)
弱拥有
聚合关系用一条带空心菱形箭头的直线表示,如下图表示Point聚合到Circle上,或者说Circle由Point组成.
聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义;例如一个部门由多个员工组成;与组合关系不同的是,整体和部分不是强依赖(生存期控制),即使整体不存在了,部分仍然存在;例如,部门撤销了,人员不会消失,他们依然存在;
在这里插入图片描述

例如 公司类,员工类 ,公司有员工,但公司不会因为员工的消亡而消亡

4、组合

组合关系(Composition )
(有一个,“用…来实现”,“用…来构成”,有整体和部分的关系)
组合关系用一条带实心菱形箭头直线表示,如下图表示Body和Soul组成People,或者People由Body和Soul组成;
与聚合关系一样,组合关系同样表示整体由部分构成的语义;比如公司由多个部门组成;
但组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了;例如,公司不存在了,部门也将不存在了;
在这里插入图片描述

一个类的对象作为另外一个类的数据成员,强拥有
例如:电脑类,cpu类

示例代码:

class CPU
{
public:
	CPU() { cout << "CPU" << endl; }
};
class KB
{
public:
	KB() { cout << "KB" << endl; }
};
class Mouse
{
public:
	Mouse() { cout << "Mouse" << endl; }
};

class Computer//Computer由CPU、KB、Mouse组成--组合--有
{
public:
	Computer() { cout << "Computer" << endl; }
private:
	CPU cpu;
	KB kb;
	Mouse ms;
};

void main()
{
	Computer c;
}

运行结果:

在这里插入图片描述

5、继承

泛化关系

泛化关系(generalization)
泛化关系用一条带空心箭头的直接表示;如下图表示(Student继承自Person或Person派生Student) ;
类的继承结构表现在UML中为:泛化(generalize)与实现(realize):
继承关系为is-a的关系;两个对象之间如果可以用is-a来表示,就是继承关系:(…是一个…);学生是人。
最终代码中,泛化关系表现为公有继承非抽象类;
在这里插入图片描述

6、类模板

模板:

为了代码重用,代码就必须是通用的;通用的代码就必须不受数据类型的限制。那么我们可以把数据类型改为一个设计参数。这种类型的程序设计称为参数化(parameterize)程序设计。软件模块由模板(template)构造。
包括函数模板(function template和类模板(class template)。

7、实现关系

实现关系用一条带空心箭头的虚线表示;
"IShape"为一个抽象概念,在现实中并无法直接用来定义对象;只有指明具体的子类(Circle,Square),才可以用来定义对象("IShape"这个类在C++中用抽象类表示,在JAVA中有接口这个概念,更容易理解)
最终代码中,实现关系表现为公有继承抽象类。

在这里插入图片描述

8、模板实例化

二、UML统一建模语言-类图示例

UML:统一建模语言
STL :标准模板库
UML类图示例:

在这里插入图片描述

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

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

相关文章

从Matlab实例学习遗传算法

文章目录前言问题背景遗传算法Matlab实例代码附录君主方案遗传算法解决旅行商问题前言 本文旨在使用智能优化算法及其MATLAB实例&#xff08;第2版&#xff09; 一书中的例子&#xff0c;来透彻理解遗传算法的本质。 问题背景 目标&#xff1a; 求解最大化函数 f(x)x10sin⁡…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java星光之夜香水网站的设计与开发bfmcr

大学计算机专业毕业的&#xff0c;实际上到了毕业的时候&#xff0c;基本属于会与不会之间。说会&#xff0c;是因为学了整套的理论和方法&#xff0c;就是所谓的科班出身。说不会&#xff0c;是因为实践能力极差。 不会的问题&#xff0c;集中体现在毕设的时候&#xff0c;系…

CTFSHOW菜狗杯 web

文章目录web签到web2 c0me_t0_s1gn我的眼里只有$抽老婆一言既出驷马难追TapTapTapWebshell化零为整无一幸免传说之下&#xff08;雾&#xff09;算力超群算力升级2遍地飘零茶歇区小舔田&#xff1f;LSB探姬Is_Not_Obfuscate龙珠NFTweb签到 eval($_REQUEST[$_GET[$_POST[$_COOK…

Ubuntu22.04虚拟机配置双网

文章目录Ubuntu22.04虚拟机配置双网一、 虚拟机网络1、 简介1.1 概述1.2 四种网络2、 配置双网2.1 NAT2.2 主机模式3、 添加到虚拟机二、 ubuntu设置Ubuntu22.04虚拟机配置双网 一、 虚拟机网络 1、 简介 1.1 概述 近期在使用VirtualBox的时候遇到这样的场景&#xff0c;我…

Docker(五)—— 镜像原理、容器快照commit

一、如何得到镜像 1&#xff09;从远程仓库下载 2&#xff09;朋友/同事拷贝给你 3&#xff09;自己制作DockerFile 二、联合文件系统 Docker的镜像是由一层层的文件系统组成&#xff0c;这种层级的文件系统叫做联合文件系统UnionFS。 三、Docker镜像加载原理 1. bootfs:…

第十四届蓝桥杯校内模拟赛第一期——Python

第十四届蓝桥杯校内模拟赛第一期——Python 文章目录第十四届蓝桥杯校内模拟赛第一期——Python1.二进制位数问题描述参考答案扩展2. 晨跑问题描述参考答案扩展3. 调和级数问题描述参考答案4. 山谷问题描述参考答案5. 最小矩阵问题描述参考答案6. 核酸日期问题描述输入格式输出…

redux与react-redux的学习笔记之react-redux

redux与react-redux前言一、redux和react-redux是啥&#xff1f;二、redux使用步骤1.引入库2.原理图原理图释义actions1&#xff09;含义2&#xff09;demostore.js1&#xff09;含义2&#xff09;demoreducer.js1&#xff09;含义2&#xff09;demoCount.jsx1&#xff09;含义…

2022年,我们为什么要学习C++?

“C已死” 大学时代&#xff0c;我就听过这样的说法——差不多十多年前的事儿了。那时候至少在美国&#xff0c;Java已经成了各公司的主流语言。程序员也许都很熟悉Joel Spolsky在2005年12月对JavaSchools发起的批驳。此外&#xff0c;作为微软应对Java的手段&#xff0c;2000…

Ubuntu环境配置(instant-ngp)

综合环境配置 这篇文章的综合配置我是在恒源云上配的&#xff0c;自己穷买不起机子&#xff0c;就只能租咯&#xff0c;这家价格还行&#xff0c;而且可以装VNC&#xff0c;非推广&#xff0c;只是感觉方便&#xff0c;请大家结合自身实际情况 数据上传 这里有几种方法&…

【免费】多种方法手把手教你如何将自己做的网页做成网络链接(直接访问)

目录 前言 ​一、github&#xff08;最常用的&#xff09; 二、七牛云&#xff08;推荐小白使用&#xff0c;简单粗暴&#xff09; 三、NATAPP 四、codepen&#xff08;建议学网页的人群使用&#xff09; 彩蛋 前言 http://t.csdn.cn/VaiP1我之前发的爱心代码&#xff0c;…

电脑突然开机无反应,怎么办

电脑常见故障之三开机无响应&#xff08;上&#xff09; 经常使用电脑的朋友应该会碰到这种情况&#xff0c;开机时按下电源按钮后&#xff0c;电脑无响应&#xff0c;显示器黑屏不亮。 除去那些傻瓜式的故障原因&#xff0c;如显示器、主机电源没插好&#xff1b;显示器与主…

手写小程序摇树优化工具(一)——依赖分析介绍

道可道&#xff0c;非常道&#xff1b;名可名&#xff0c;非常名&#xff1b;玄之又玄&#xff0c;众妙之门。 现在国内好像没有什么针对小程序代码的摇树优化方案&#xff0c;出现了很多超包的问题无法解决&#xff0c;本教程就手把手教大家如何编写一个完整的微信小程序摇树优…

深度学习零基础学习之路——第四章 UNet-Family中Unet、Unet++和Unet3+的简介

Python深度学习入门 第一章 Python深度学习入门之环境软件配置 第二章 Python深度学习入门之数据处理Dataset的使用 第三章 数据可视化TensorBoard和TochVision的使用 第四章 UNet-Family中Unet、Unet和Unet3的简介 Unet-Family的学习Python深度学习入门前言一、FCN全卷积网络…

【JavaSE】面向对象三大特性之多态

文章目录多态的概念向上转型重写之动态绑定与重载之静态绑定重写与重载的区别重写的注意事项总结不安全的向下转型多态的优点和注意事项优点缺点和注意事项多态的概念 多态可以理解为一个对象在某些时刻可以代表不同的对象&#xff0c;指的是对象的多种形态。所以在某些时刻&a…

CSDN第九次竞赛题解与总结

CSDN第九次竞赛题解与总结前言T1小艺读书题意分析T2鬼画符门之宗门大比题意分析代码别的方法T3硬币划分题意分析状态转移方程初始值代码T4饿龙咆哮-逃离城堡题意分析坑点代码写在最后前言 2022/11/12 我有幸参加了csdn第九次竞赛&#xff0c;终于拿了次满分&#xff0c;进了次…

Vuex④(多组件共享数据、Vuex模块化+namespace)

文章目录多组件共享数据代码实现Vuex模块化总结多组件共享数据 我们现在想实现这种情况&#xff1a; Person组件的总人数就是Person中列表的长度 br上的是Count组件&#xff0c;br下的是Person组件。 我们通过vuex中的state实现一些数据的多组件共享&#xff1a; 代码实现 …

第二章STP应用配置

目录 一 生成树 二 生成树算法 三 STP是什么 四 BPDU是什么 五 BPDU的概念 六 生成树基本配置 一 生成树 生成树算法的网桥协议STP(Spanning Tree Protocol) 它通过生成生成树保证一个已知的网桥在网络拓扑中沿一个环动态工作。网桥与其他网桥交换BPDU消息来监测环路&#xf…

使用 hugo oss 搭建个人博客网站

系列文章目录 文章目录系列文章目录前言一、下载hugo二、oss三、域名四、创建博客上传五、发布&#xff0c;上传文章前言 本文主要详解如何用最低的成本搭建个人博客网站 原本我是直接用的github搭建的博客网站&#xff0c;因为免费&#xff0c;但由于github访问很不稳定&…

Python——正则表达式的应用

文章目录前言正则表达式方法re.search方法group方法re.match方法re.findall方法re.finditer方法re.split方法re.sub方法正则表达式的应用前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 正则表达式是字符串处理的有力工具和技术。 使用正在表达式的目的…

多态(polymorphic)

目录 1. 多态的基本介绍 2. 多态实现条件 3. 重写 重写的介绍&#xff1a; 【重写和重载的区别】 动、静态绑定机制 5 向上转型和向下转型 向上转型 向上转型的特点&#xff08;总结&#xff09;&#xff1a; 向下转型 多态的优缺点 多态是Java三大基本特征中最抽象…