组合关系:表示类之间的关系是整体与部分的关系。即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. crontab执行不生效

    背景:不知道什么原因脚本手动执行:正常:crontab执行不生效: 1.将命令所属路径加入到 /etc/crontab中, 2.在shell脚本中加入 source /etc/profile

  2. 054_VisualForce Ajax 01

    为获得最佳性能,请在使用少量数据时使用AJAX Toolkit: 由于信息是通过浏览器传送的,所以AJAX最适合于相对较少的数据量(最多约200条记录)六个字段各有50个字符的数据).返回的数据集越大 ...

  3. python3.7 sorted 自定义排序

    from functools import cmp_to_keyls=['9','23','3','56','78']sorted(ls, key=cmp_to_key(lambda x, y: in ...

  4. 【PDF】数理科学 2001年01月号 特集:「時間とは何か」- 時間が生んだ世界観とパラダイム -

    书本详情 标题:数理科学 2001年01月号 特集:「時間とは何か」- 時間が生んだ世界観とパラダイム - | 数理科学編集部 | 年份:2001出版社:サイエンス社ISBN10:暂无信息5ISBN1 ...

  5. 3Com-OfficeConnect-Wireless-11宽带路由器默认口令

    网络空间资产搜索: app="3Com-OfficeConnect-Wireless-11g-Cable/DSL-Router" 找到环境 账户密码 admin/a***n End ...

  6. token能放在cookie中吗

    能. token一般是用来判断用户是否登录的, 它内部包含的信息有: uid(用户唯一的身份标识). time(当前时间的时间戳). sign(签名,token 的前几位以哈希算法压缩成的一定长度的十 ...

  7. 作业三:CART回归树算法

    作业三:CART回归树算法 班级:20大数据(3)班 学号:201613341 题目一 表1为拖欠贷款人员训练样本数据集,使用CART算法基于该表数据构造决策树模型,并使用表2中测试样本集确定剪枝后的 ...

  8. linux-vi/vim常用操作键

    命令模式: :w 将编辑的数据写入硬盘档案中(常用) :w! 若文件属性为『只读』时,强制写入该档案.不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊! :q 离开 vi (常用) :q! 若 ...

  9. 动手搭建ssm框架

    现在很多公司用的开源框架很多都是ssm框架的一个结构,这里我自己试着自己搭一个简单的框架,大家共同学习.下面一起跟着我搭建吧,本人菜鸟,有任何不对的地方有望指出. 框架结构:spring(4.3.9. ...

  10. Linux_Tomcat实战

    Tomcat实战 tomcat简述 tomcat安装 部署jspgou项目 tomcat简述 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(A ...