面向对象编程中类与类之间的关系(二)

news2024/11/7 7:10:56

目录

1.引言

2.泛化(继承)关系

3.实现关系

4.聚合关系

5.组合关系

6.依赖关系

7.关联关系

7.1. 单向关联

7.2. 双向关联

7.3.自关联

8.总结


1.引言

        在面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强。

        用UML来描述类之间的关系符号为:

2.泛化(继承)关系

        继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口。

class Cat {
public:
    Cat();
    ~Cat();

private:
    uint32_t age;
    uint32_t height;
};

class Choumi : Cat {
public:
    Choumi();
    ~Choumi();

private:
    string belongto;
};

3.实现关系

        实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。用一条带空心三角箭头的虚线表示。

class Animal {
    virtual void Move() = 0; // 纯虚函数
};

class Cat {
public:
    void Move()
    {
        // cat move
    }
};

class Dog {
public:
    void Move()
    {
        // dog move
    }
};

class Bird {
public:
    void Move()
    {
        // bird move
    }
};

4.聚合关系

        聚合是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。表现在代码层面:和关联关系是一致的,只能从语义级别来区分。在UML类图设计中,聚合关系以空心菱形加实线箭头表示。

        聚合通常是被写为一个对象指针。 聚合是类与类之间的关系,通常表达整体与组成部分的关系,但这两个类都可以独立存在,没有依附关系(与组合关系的区别),比如汽车类与发动机类的关系。

class Engine {
public:
    uint16_t hoursePower;
};

class Car {
public:
    Engine engine;

private:
    string brand;
};

5.组合关系

        组合也是关联关系的一种特例,它体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。在UML类图设计中,组合关系以实心菱形加实线箭头表示。

        比如头和眼睛的关系:

class Eye {

};

class Head {
public:
    Eye eye;
};

6.依赖关系

        依赖就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A。表现在代码层面:类B作为参数被类A在某个method方法中使用。在UML类图设计中,依赖关系用由类A指向类B的带箭头虚线表示。

        依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。例如:驾驶员开车,在Driver类的drive()方法中将Car类型的对象car作为一个参数传递,以便在drive()方法中能够调用car的move()方法,且驾驶员的drive()方法依赖车的move()方法,因此类Driver依赖类Car。

class Car {
public:
    void Move();
};

class Driver {
public:
    void Drive(Car car) {
        car.Move();
    }
};

7.关联关系

        关联体现的是两个类之间语义级别的一种强依赖关系,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。关联可以是单向、双向的。表现在代码层面:被关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。在UML类图设计中,关联关系用由关联类A指向被关联类B的带箭头实线表示,在关联的两端可以标注关联双方的角色和多重性标记。 

        用由关联类A指向被关联类B的带箭头实线表示,在关联的两端可以标注关联双方的角色和多重性标记。

        关联是两个相对独立的类与类之间的关系,当一个类的对象与另一个类的对象存在固定的对应关系时,这俩类存在关联关系。比如:顾客与商品,老师和学生,员工与公司
关联关系分为以下三种

  • 单向关联
  • 双向关联
  • 自关联

        一般在代码中,一个类包含另一个类的指针或引用

7.1. 单向关联

7.2. 双向关联

class Employee {
private:
    Company *company;
};

class Company {
private:
    Employee *employee;
};

7.3.自关联

class Node {
public:
    Node *next;
};

8.总结

        这些关系在面向对象编程中起着至关重要的作用,它们允许开发者以模块化和可扩展的方式构建软件系统。通过合理地设计和建立这些关系,可以实现代码的重用、提高系统的可维护性和可扩展性。

参考资料:

面向对象编程中类与类之间的关系(一)

深入浅出UML类图

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

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

相关文章

贪心算法入门(一)

1.什么是贪心算法? 贪心算法是一种解决问题的策略,它将复杂的问题分解为若干个步骤,并在每一步都选择当前最优的解决方案,最终希望能得到全局最优解。这种策略的核心在于“最优”二字,意味着我们追求的是以最少的时间和…

MATLAB发票识别系统

课题介绍 该课题为基于MATLAB的发票识别系统。主要识别发票的编号。可定做发票的日期,金额等字段的识别。通过输入图片,校正,定位目标区域,分割,字符分割,模板匹配识别,得出结果。整个设计包含…

spark==windows启动spark集群

下载hadoop3.0.0 https://archive.apache.org/dist/hadoop/core/hadoop-3.0.0/ 下载spark3.5.3 Index of /dist/spark/spark-3.5.0 添加环境变量 HADOOP_HOME SPARK_HOME PATH中添加%HADOOP_HOME%\bin,%HADOOP_HOME%\sbin, %SPARK_HOME%\bin,%SPARK_HOME%\sbin, 启动mast…

(实战)WebApi第10讲:Swagger配置、RESTful与路由重载

一、Swagger配置 1、导入SwashBuckle.AspNetCore包 2、在.NET Core 5框架里的startup.cs文件里配置swagger 3、在.NET Core 6框架里的Program.cs文件里配置swagger 二、RESTful风格:路由重载,HttpGet()括号中加参数 (1)原则&…

【春秋云镜】CVE-2023-27179

CVE-2023-27179 CVE-2023-27179 是一个影响 Apache Doris 的漏洞。Apache Doris 是一款用于交互式分析的高性能数据库,特别适用于处理大规模的结构化数据。该漏洞属于权限提升漏洞,允许未授权用户以管理员身份执行敏感操作。 具体细节 漏洞类型&#…

chrome编辑替换js文件的图文教程

一、找到要修改替换的js文件 二、将文件保存到本地 三、在本地新建一个文件 路径最好跟你要替换的文件的路径保持一致, 四、选中js文件替换 回到原文件右击选择保存并覆盖 点击完保存并覆盖之后回到替换的新文件中,在自动生成的webpack文件中对文件进…

​CSS之三

CSS三大特性 CSS 有三个非常重要的三个特性:层圣性、继承性、优先级 层叠性 相同选择器给设置相同的样式,此时一个样式就会覆盖(层曼)另一个冲突的样式。层曼性主要解决样式冲突的问题 层叠性原则: - 样式冲突,遵循的原则是就近原则,哪个…

Generating /run/initramfs/rdsosreport.txt

Linux中遇到Generating /run/initramfs/rdsosreport.txt 第一步:首先输入 ls /dev/mapper 第二步:输入 xfs_repair /dev/mapper/centos-root -L 第三步:重启reboot 不说原因了,直接上解决方式: 第一步:首先…

Spark,Anconda在虚拟机实现本地模式部署

如果想要了解模式的概念部分,以及作用请看: Spark学习-CSDN博客 一.在虚拟机安装spark cd /opt/modules 把Anconda和Spark安装包拖拽进去: 解压: tar -zxf spark-3.1.2-bin-hadoop3.2.tgz -C /opt/installs 重命名&#x…

云原生开源开发者沙龙丨AI 应用工程化专场杭州站邀您参会

云原生开源开发者沙龙 AI 原生应用架构专场,邀您一起交流,探索 AI 原生应用的工程化落地! 活动简介 AI 驱动的应用程序开发、部署和运维,给应用带来了新的生命力和想象空间。但大部分开发者对 AI 应用的编程框架、可观测体系、网…

OpenCV基本操作(python开发)——(5)轮廓处理

OpenCV基本操作(python开发)——(1) 读取图像、保存图像 OpenCV基本操作(python开发)——(2)图像色彩操作 OpenCV基本操作(python开发)——(3&…

常用的查询mysql配置命令

1. 查看数据库版本信息 SELECT VERSION();2. 查看数据库所有变量和值 SHOW VARIABLES3. 查询数据库是否区分大小写 SHOW VARIABLES LIKE lower_case_table_names;查询数据库是否支持大小写lower_case_table_names 被设置为 1,即表名不区分大小写。如果值为 1&…

企业数据泄露安全演练(分享)

该文章主要分享作者在XXX企业内部做的一次【数据泄露安全演练】,涉及演练背景、目的、演练流程、剧本设定、预期行为、结果等等。 以下是完整的演练方案,有不足的地方希望大家指出!! 需要原版方案电子版的可以联系作者获取。 演练…

品牌控价的执行技巧

在当今竞争激烈的商业世界中,品牌的发展犹如在波涛汹涌的大海中航行,而价格管控,无疑是那保驾护航的关键舵手,简称控价。这一举措,绝非仅仅着眼于品牌自身的狭隘利益,实则肩负着更为深远的使命,…

一文详解精细化工行业持续增长的策略与路径解析

随着全球经济的快速发展和科技的不断进步,精细化工行业正面临着前所未有的挑战和机遇。在这个过程中,数字化转型已成为推动行业持续增长的关键因素。精细化工行业,作为化学工业的一个重要分支,其产品广泛应用于医药、农药、涂料、…

akshare股票涨跌幅自定义范围查询:A股、港股、美股

参看:https://stock.hexun.com/2024-10-31/215251914.html 涨幅计算公式:(当前价格 - 上一个交易日收盘价) 上一个交易日收盘价 100% 。 跌幅计算公式:(上一个交易日收盘价 - 当前价格) 上一个…

基于Pycharm和Django模型技术的数据迁移

1.配置数据库 在trip_server/settings.py中修改配置: 其格式可访问官网:Settings | Django documentation | Django 1.1 配置数据库 文件地址:trip_server/settings.py 配置前需要创建(NaviCat)个人数据库 "…

linux命令行的艺术

文章目录 前言基础日常使用文件及数据处理系统调试单行脚本冷门但有用仅限 OS X 系统仅限 Windows 系统在 Windows 下获取 Unix 工具实用 Windows 命令行工具Cygwin 技巧 更多资源免责声明 熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际…

C++学习路线(数据库部分)四

表的插入 插入数据记录是常见的数据操作,可以显示向表中增加的新的数据记录。在MySQL中可以通过“INSERT INTO”语句来实现插入数据记录,该SQL语句可以通过如下4种方式使用:插入完整数据记录、插入部分数据记录、插入多条数据记录和插入JSON…

供应商图纸外发:如何做到既安全又高效?

供应商跟合作伙伴、客户之间会涉及到图纸外发的场景,这是一个涉及数据安全、效率及合规性的重要环节。供应商图纸发送流程一般如下: 1.申请与审批 采购人员根据需要提出发放图纸的申请并提交审批; 采购部负责人审批发放申请,确…