组合关系:表示类之间的关系是整体与部分的关系。即has a / contains a的关系

在面向对象程序设计中,将一个复杂对象分解为简单对象的组合。

在代码中,体现为将一个或多个类的对象作为另一个类的成员变量。类的成员变量可以是基本类型的变量也可以是类的对象。

在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,即部分对象不能脱离整体而存在,反之成立。

如Head(部分)与Person(整体)之间,汽车(整体)与轮胎(部分)之间的关系,如果人没有了头,就会死去,如果汽车没了轮胎就无法行驶。

依赖关系

两个类之间的语义连接关系:其中一个类是独立的,另一个类不是独立的,非独立的类就依赖于独立的类。若独立的类改变,则非独立类会受到影响改变。

如:A类的某个方法(参数是B或获得B类实例)中使用B类,则A类依赖于B类。

最常见的依赖关系:一个类的成员函数的参数中出现另一个类的对象指针或对象引用。

如程序员依赖于计算机来编写代码,或汽车依赖于汽油。

依赖倒置原则

依赖倒置原则规定:

  1. 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口。

  2. 抽象接口不应该依赖于具体实现,具体实现应该依赖于抽象接口。

依赖倒置原则的核心思想:面向接口编程,而不是面向实现编程。

因为高层次的模块一般负责完成主要的业务逻辑,一旦对其进行修改,则出错的可能性增加。所以低层次的模块尽量有抽象类或接口。此后无论怎样扩展低层次模块,都不需要再修改高层次模块。即高层模块不直接依赖于底层的实现,而是依赖于底层模块的抽象。使得架构更加稳定,灵活。

在实际设计中,细节(具体的类实现)即具体实现具有多变性,而抽象层(接口或抽象类)相对稳定,故以抽象层为基础搭建的架构比以细节等具体实现为基础更加具有稳定性与实用性。

依赖倒置原则的主要作用:

  1. 降低类之间的耦合性

  2. 提高系统的稳定性

  3. 减少并行开发引起的风险

  4. 提高代码的可读性与可维护性

错题:

16、单选题

下列关于运算符重载的描述中,错误的是()。

 
A

::运算符不能重载

B

类型转换运算符只能作为成员函数重载

C

将运算符作为非成员函数重载时必须定义为友元

D

重载[]运算符应完成“下标访问”操作

错选为D

目前不知正确答案:标记

10、单选题

类 B是类A的派生类,对于代码:

A a,*pa = &a;

B b,*pb = &b;

 
A

pa = pb ;是Upcast,是被允许的。

B

pb  = pa;是Upcast,是被允许的。

C

pb  = &a ; 是Upcast,是被允许的。

选择答案:B 
正确答案目前未知:标记

学习记录--C++组合+依赖+依赖倒置的更多相关文章

  1. UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)

    UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ...

  2. UML类图(下):关联、聚合、组合、依赖

    前言 上一篇文章UML类图(上):类.继承.实现,讲了UML类图中类.继承.实现三种关系及其在UML类图中的画法,本文将接着上文的内容,继续讲讲对象之间的其他几种关系,主要就是关联.聚合.组合.依赖, ...

  3. seaJs学习笔记之javascript的依赖问题

    之前分别为大家介绍了有关javascript中的冲突和性能问题,今天为大家介绍一下有关javascript中的依赖问题.我们将继续就之前javascript中性能问题继续介绍. 先来回顾一下性能问题的 ...

  4. Angular4学习笔记(四)- 依赖注入

    概念 依赖注入是一种设计思想,并不是某一类语言所特有的,因此可以参考开涛大神关于学习Java语言的Spring框架时对其的解释: DI-Dependency Injection,即"依赖注入 ...

  5. go微服务框架kratos学习笔记八 (kratos的依赖注入)

    目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...

  6. GO学习-(22) Go语言之依赖管理

    Go语言之依赖管理 Go语言的依赖管理随着版本的更迭正逐渐完善起来. 依赖管理 为什么需要依赖管理 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面.这就导致了同一个库只能保存一个 ...

  7. Java开发学习(二十九)----Maven依赖传递、可选依赖、排除依赖解析

    现在的项目一般是拆分成一个个独立的模块,当在其他项目中想要使用独立出来的这些模块,只需要在其pom.xml使用<dependency>标签来进行jar包的引入即可. <depende ...

  8. 《java从入门到精通》学习记录

    目录 <Java从入门到精通>学习记录 3 基础的基础部分: 3 一. 常量与变量 3 1. 掌握: 3 (1) .常量与变量的声明方式: 3 (2) .变量的命名规则: 3 (3) .变 ...

  9. uml 图学习记录

    UML类图与类的关系详解   2011-04-21 来源:网络   在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...

  10. Python学习记录day7

    目录 Python学习记录day7 1. 面向过程 VS 面向对象 编程范式 2. 面向对象特性 3. 类的定义.构造函数和公有属性 4. 类的析构函数 5. 类的继承 6. 经典类vs新式类 7. ...

随机推荐

  1. FMC145-四路16位125Msps AD FMC子卡模块 模拟信号 中频信号采集 信号发出

    FMC145-四路16位125Msps AD FMC子卡模块 一.概述 该板卡可实现4路16bit 125Msps AD 功能,是xilinx开发板设计的标准板卡.FMC连接器是一种高速多pin的互连 ...

  2. deployment.yml参考

    apiVersion: apps/v1kind: Deploymentmetadata: labels: com.xx.service: xxxxxxxxxxxxx name: xxxxxxxxxxx ...

  3. pgsql给表重命名

    alter table "pavement_damage_dtl_temp" rename to "pavement_damage_dtl"; 搜索 复制

  4. Linux下找不到SO的解决方法

    Linux下找不到so文件的解决办法 1)将.so文件路径的目录添加到/etc/ld.so.conf sudo vim /etc/ld.so.conf 将你的SO文件存放路径的根目录写进去(不带so本 ...

  5. Luogu P3368 【模板】树状数组 2 [区间修改-单点查询]

    P3368 [模板]树状数组 2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表 ...

  6. centos7的mysql主从

    互为主从关闭两台虚拟机的防火墙1.yum -y install mariadb-server mariadb2.Systemctl start mariadb3.进入配置文件:vi /etc/my.c ...

  7. Jmeter添加BeanShell后置处理程序保存响应结果

    对于某些请求,无法通过保存响应到文件这个组件来进行保存(会出现UNKNOW文件类型). 那么就可以通过BeanShell后置处理程序来进行将响应结果直接输出到文件,并可以直接指定文件名和后缀. imp ...

  8. Flask----常用路由系统及自定义路由系统

    @app.route('/user/<username>') @app.route('/post/<int:post_id>') @app.route('/post/<f ...

  9. jenkins - Asp.net 环境搭建(Windows)

    jenkins - Asp.net 环境搭建(Windows) 安装环境 通过 Chocolatey自动安装 choco install ojdkbuild11 #或 choco install jd ...

  10. hdu4585 Treap与名次树/STL map(C/C++)

    hdu4585 题目地址:https://acm.dingbacode.com/showproblem.php?pid=4585 Shaolin Time Limit: 3000/1000 MS (J ...