组合关系:表示类之间的关系是整体与部分的关系。即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. ORACLE监听无法启动的几个原因

    1./etc/hosts中配置问题 误删了127.0.0.1的默认记录 2./var/tmp/.oracle的权限问题 TNS-12546:TNS:permission denied TNS-1256 ...

  2. ApacheBench(压力测试)

    1.post请求 (post.txt body信息) ab -c2000 -n50 -p post.txt -T "application/json"  url 2.get 请求 ...

  3. IntelliJ IDEA 生成serialVersionUID

    1.设置Settings-->Editor->Inspections 2.实现Serializble

  4. nodejs发布cesium问题,其他电脑访问发布

    在电脑上安装nodejs后在选择的cesium文件中,按住shift和鼠标右键,打开powershell,输入命令行hs -p 1212,完成cesium的发布,出现两个网址,127.0.0.1:12 ...

  5. 错题记录:C51同一个hex文件偶尔效果不行 的处理方法

    51单片机很多方面和C语言有区别,经验下来,总结以下:1.关于变量报错:报错的原因大多是因为编译器C++版本不同,所以变量我都推荐使用驼峰命名法;2.如果同一个hex文件,或者改的代码自己认为没问题 ...

  6. 一文学会使用pip

    pip介绍 pip的全称:package installer for python,是 Python包管理工具,该工具提供了对Python包的查找.下载.安装.卸载的功能.Python官方的PyPi仓 ...

  7. RabbitMQ的全面简述讲解

    **转载自微信公众号:楼仔** 常见的消息队列很多,主要包括 RabbitMQ.Kafka.RocketMQ 和 ActiveMQ,这篇文章只讲 RabbitMQ,先讲原理,后搞实战. 思维导图: 1 ...

  8. python 列表中随机抽取多个数

    方法一:[random.randint(0,100) for _ in range(2)]输出: [34, 44]方法二:list中随机去取K个数list=[1,2.3,......] random. ...

  9. 我的第三次JAVA作业

    ------------恢复内容开始------------ 1.对象与对象引用的区别是什么? 请举例说明 创建对象被分配在堆中,对象引用分配在栈中. eg. new FighterPlane(); ...

  10. RStudio中有常用的快捷键

    1.常用快捷键 转自:https://blog.csdn.net/swuteresa/article/details/8649067 2.RStudio中如何撤销上一步操作: 一般运行过的程序都会在H ...