学习记录--C++组合+依赖+依赖倒置
组合关系:表示类之间的关系是整体与部分的关系。即has a / contains a的关系
在面向对象程序设计中,将一个复杂对象分解为简单对象的组合。
在代码中,体现为将一个或多个类的对象作为另一个类的成员变量。类的成员变量可以是基本类型的变量也可以是类的对象。
在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,即部分对象不能脱离整体而存在,反之成立。
如Head(部分)与Person(整体)之间,汽车(整体)与轮胎(部分)之间的关系,如果人没有了头,就会死去,如果汽车没了轮胎就无法行驶。

依赖关系
两个类之间的语义连接关系:其中一个类是独立的,另一个类不是独立的,非独立的类就依赖于独立的类。若独立的类改变,则非独立类会受到影响改变。
如:A类的某个方法(参数是B或获得B类实例)中使用B类,则A类依赖于B类。
最常见的依赖关系:一个类的成员函数的参数中出现另一个类的对象指针或对象引用。
如程序员依赖于计算机来编写代码,或汽车依赖于汽油。

依赖倒置原则
依赖倒置原则规定:
高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口。
抽象接口不应该依赖于具体实现,具体实现应该依赖于抽象接口。
依赖倒置原则的核心思想:面向接口编程,而不是面向实现编程。
因为高层次的模块一般负责完成主要的业务逻辑,一旦对其进行修改,则出错的可能性增加。所以低层次的模块尽量有抽象类或接口。此后无论怎样扩展低层次模块,都不需要再修改高层次模块。即高层模块不直接依赖于底层的实现,而是依赖于底层模块的抽象。使得架构更加稳定,灵活。
在实际设计中,细节(具体的类实现)即具体实现具有多变性,而抽象层(接口或抽象类)相对稳定,故以抽象层为基础搭建的架构比以细节等具体实现为基础更加具有稳定性与实用性。
依赖倒置原则的主要作用:
降低类之间的耦合性
提高系统的稳定性
减少并行开发引起的风险
提高代码的可读性与可维护性
错题:
下列关于运算符重载的描述中,错误的是()。
::运算符不能重载
类型转换运算符只能作为成员函数重载
将运算符作为非成员函数重载时必须定义为友元
重载[]运算符应完成“下标访问”操作
错选为D
目前不知正确答案:标记
类 B是类A的派生类,对于代码:
A a,*pa = &a;
B b,*pb = &b;
pa = pb ;是Upcast,是被允许的。
pb = pa;是Upcast,是被允许的。
pb = &a ; 是Upcast,是被允许的。
学习记录--C++组合+依赖+依赖倒置的更多相关文章
- UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)
UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ...
- UML类图(下):关联、聚合、组合、依赖
前言 上一篇文章UML类图(上):类.继承.实现,讲了UML类图中类.继承.实现三种关系及其在UML类图中的画法,本文将接着上文的内容,继续讲讲对象之间的其他几种关系,主要就是关联.聚合.组合.依赖, ...
- seaJs学习笔记之javascript的依赖问题
之前分别为大家介绍了有关javascript中的冲突和性能问题,今天为大家介绍一下有关javascript中的依赖问题.我们将继续就之前javascript中性能问题继续介绍. 先来回顾一下性能问题的 ...
- Angular4学习笔记(四)- 依赖注入
概念 依赖注入是一种设计思想,并不是某一类语言所特有的,因此可以参考开涛大神关于学习Java语言的Spring框架时对其的解释: DI-Dependency Injection,即"依赖注入 ...
- go微服务框架kratos学习笔记八 (kratos的依赖注入)
目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...
- GO学习-(22) Go语言之依赖管理
Go语言之依赖管理 Go语言的依赖管理随着版本的更迭正逐渐完善起来. 依赖管理 为什么需要依赖管理 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面.这就导致了同一个库只能保存一个 ...
- Java开发学习(二十九)----Maven依赖传递、可选依赖、排除依赖解析
现在的项目一般是拆分成一个个独立的模块,当在其他项目中想要使用独立出来的这些模块,只需要在其pom.xml使用<dependency>标签来进行jar包的引入即可. <depende ...
- 《java从入门到精通》学习记录
目录 <Java从入门到精通>学习记录 3 基础的基础部分: 3 一. 常量与变量 3 1. 掌握: 3 (1) .常量与变量的声明方式: 3 (2) .变量的命名规则: 3 (3) .变 ...
- uml 图学习记录
UML类图与类的关系详解 2011-04-21 来源:网络 在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...
- Python学习记录day7
目录 Python学习记录day7 1. 面向过程 VS 面向对象 编程范式 2. 面向对象特性 3. 类的定义.构造函数和公有属性 4. 类的析构函数 5. 类的继承 6. 经典类vs新式类 7. ...
随机推荐
- 无法启动iis服务器
网上的大多数教程都千篇一律,增加我寻找解决方法的难度 ,在我边气边找的努力下终于找到了解决办法. 不过还是建议先去看其他的教程,其他的不行的话再来看这个 因为工作进程未能正确初始化,因而无法启动.返回 ...
- (jmeter笔记)jmeter远程启用服务器(分布式)
1.在负载机上安装jmeter,修改jmeter\bin\jmeter.properties配置: 1)server.rmi.ssl.disable=false 改 server.rmi.ssl.di ...
- com.alibaba.fastjson.JSONObject cannot be cast to xxx
今天在使用json格式的数据进行转化的时候遇到了这个问题,故此记录下来. 通常我们使用JSON把数据转成实体的方法是这样的 List<DataModel> dataModels= (Lis ...
- css3 旋转 八仙桌
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 元素定位xpath路径中添加参数的方法
在某次自动化测试中,需要定位下拉列表(非select列表)中不同的元素,我想到了利用参入参数的方式来实现,经过多次尝试,得到如下方法,与大家分享 例如在通过text定位某个元素时,self.find_ ...
- C# 使用Enumerable.Range 打印数字
static void Main(string[] args) { var list1 = Enumerable.Range(0, (int)Math.Pow(2, 22)).ToList(); va ...
- 攻防(一)tomcat CVE-2020-1938,ftp 21端口
TOMCAT kali自带POE msf6 > use auxiliary/admin/http/tomcat_ghostcat set RHOST 10.98.xx.xx msf6 auxil ...
- 2月28日Android开发学习
界面显示与逻辑处理 Android Studio利用XML标记描绘应用界面,使用java代码书写程序逻辑. 把App界面设计与代码逻辑分开的好处 使用XML文件描述App界面,可以很方便地在Adroi ...
- uniapp中使用AntV F6 + table表格插件使用
首先看页面效果: AntV官网下载F6文件到项目中与uViewUI插件 <template> <view class="page"> <!-- 导航栏 ...
- linux基础命令4
用户和组群账户管理 用户的 角色是通过UID(用户ID号)来标识的,每个用户的UID都是不同的. 在Linux系统中有三大类用户,分别是root 用户.系统用户和普通用户. root用户UID为0.r ...