《面向对象的思考过程(原书第4版)》一1.11 组合

简介: 对象中包含其他对象非常自然。比如电视机包含开关和显示屏。计算机包含显卡、键盘和光驱。可以将计算机自身看成一个对象,而光驱也是一个有效的对象。

本节书摘来自华章出版社《面向对象的思考过程(原书第4版)》一书中的第1章,第1.11节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.11 组合

对象中包含其他对象非常自然。比如电视机包含开关和显示屏。计算机包含显卡、键盘和光驱。可以将计算机自身看成一个对象,而光驱也是一个有效的对象。
事实上,你可以打开计算机把光驱取下来放到你手上。计算机和光驱都可以看作对象。只是计算机包含其他的对象(譬如光驱)。
使用其他对象来构建或结合成新的对象,这种方式就是组合。

1.11.1 抽象

和继承一样,组合也是一种构建对象的机制。事实上,我想说只有两种方式来使用其他类构建新类,这两种方式就是继承和组合。之前已经看到了,继承允许类继承另一个类。我们可以把属性和行为抽象到通用类中。例如,狗和猫都是哺乳动物,因为狗是(is-a)哺乳动物,猫也是(is-a)哺乳动物。而使用组合,我们也可以把类嵌入其他类中来构造新类。
我们可以拿车和引擎之间的关系来举例。把引擎从车中分离出来是明显可行的。我们可以单独构建引擎,把它用到各种车上,更别提还有其他优势。但我们不能说引擎是(is-a)一辆车。顺口说出来我们就觉得不对(因为我们在为真实世界的系统建模,这正是我们想要的效果)。我们最好用has-a术语来描述组合关系。车有(has-a)引擎。

1.11.2 has-a关系

我们之前已经讨论过了继承关系是is-a关系的原因,而组合关系可以称为has-a关系。我们可以使用上一小节中的例子,电视有(has-a)开关和显示屏。电视显而易见不是一个开关,所以两者没有继承关系。同样,计算机有(has-a)显卡,有(has-a)键盘,有(has-a)光驱。第7章深入讲解继承和组合这两个主题以及相互之间的关系。

相关文章
|
3月前
|
设计模式
建模底层逻辑问题之以命令设计模式为例,要用定义法建模,如何实现
建模底层逻辑问题之以命令设计模式为例,要用定义法建模,如何实现
|
6月前
|
Java C++ Python
面向对象特性分析大全集
面向对象特性分析大全集
|
6月前
针对抽象编程与对应的好处
针对抽象编程与对应的好处
49 1
|
程序员 数据安全/隐私保护 C++
C++面向对象封装特性的实例分析与应用扩展(一)
生活中充满复杂性,处理复杂性的方法之一就是简化和抽象。在计算中,为了根据信息与用户之间的接口来表示它,抽象是至关重要的。将问题的本质特征抽象出来,并根据特征来描述解决方案。抽象往往是用户定义类型的捷径,在C++中用户定义类型指的就是实现抽象接口的类设计。
130 1
C++面向对象封装特性的实例分析与应用扩展(一)
|
编译器 C语言 C++
C++面向对象封装特性的实例分析与应用扩展(二)
封装意义一: 在设计类的时候,属性和行为写在一起,表现事物 语法: class 类名{ 访问权限: 属性 / 行为 }; 示例1:设计一个圆类,求圆的周长
149 0
C++面向对象封装特性的实例分析与应用扩展(二)
|
设计模式 Java
面向对象的设计原则最终篇(一)
关于面向对象的设计原则我之前已经解释过四种了,分别是单一职责原则,开放关闭原则,里式替换原则,依赖倒置原则而接下来我们要解释的就是最后的三种原则了,分别是接口隔离原则, 迪米特法则, 组合复用原则。
面向对象的设计原则最终篇(一)
|
设计模式
面向对象的设计原则最终篇(二)
关于面向对象的设计原则我之前已经解释过四种了,分别是单一职责原则,开放关闭原则,里式替换原则,依赖倒置原则而接下来我们要解释的就是最后的三种原则了,分别是接口隔离原则, 迪米特法则, 组合复用原则。
面向对象的设计原则最终篇(二)
|
Java
编程之代码抽象三原则
编程之代码抽象三原则,这三原则仔细推敲,与23种设计模式不无关系。 23种设计模式,在此我不做详细介绍和说明,因为我目前也正在学习,在学习设计模式的时候,有一点非常重要, 引用王阳明先生的理念“知行合一”,将理论同实践集合起来,这样就不空中楼阁了。
1359 0
下一篇
无影云桌面