组合关系:表示类之间的关系是整体与部分的关系。即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. VUE学习-组件通信

    vue组件通信 页面传值:$route/${prop} 组件传值: 父组件传值给子组件:参数传值 子组件传值给父组件:给父组件传过来函数传参数:通过插槽的v-slot,绑定参数 组件通信一般分为以下几 ...

  2. H5分享功能--带图标、说明

    代码实现 index.vue <template> <div id="app"> <SelfSharePage v-if="share_da ...

  3. redhat用bind配置DNS

    redhat配置bind 1.配置IP地址(这个我这里不写). 2.配置本地yum 3.用yum安装bind,没有nslookup命令的安装bind-utlis.(这里有所以不安装) 4.配置nane ...

  4. css - object-fit ie兼容

    css - object-fit ie兼容 参考资料 github 解决object-fit兼容IE浏览器实现图片自适应 demo <!-- * @createDate: 2022-08-30 ...

  5. linux格式化文件命令

    一些文件被windows打开后代码格式会被改变,使用一下命令来转换 sed -i 's/\r//' filename

  6. 微软开源 Python 自动化神器 Playwright

    背景 逛博客时候突然看到 Playwright web自动化,感觉很有意思,就翻看了很多博客,简单记录一下. 简介 Playwright是一个强大的Python库,仅用一个API即可自动执行Chrom ...

  7. vim多行缩进

    1.首先设置vim缩进空格 vim /etc/vim/vimrc 或者vim /etc/vimrc,添加一下文字 set smartindent set shiftwidth=4 # 缩进四个空格 # ...

  8. UI自动化之【报错记录-selenium】

    1.找不到元素 写脚本的过程中时不时就会报这种错,一般路径定位不到直接复制xpath基本就能找到了,也有时候是因为有iframe或是句柄不对 原因: ①没有加等待时间,脚本运行到那步时,页面还没加载完 ...

  9. 在虚拟机上安装CentOS6.5(minimal)

    在虚拟机上安装CentOS6.5(minimal) 2017年04月04日 09:40:38 kongmd 阅读数:2171   1.安装CentOS6.5 1.首先下载VMware ,和CentOS ...

  10. 什么是DI

    属性的依赖注入,spring在通过IOC创建对象的时候,如果对象还有属性,就一并给赋值进去DI是在IOC的基础上进行对象的属性注入