《面向对象的思考过程(原书第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章深入讲解继承和组合这两个主题以及相互之间的关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop 新增删除节点

1 新增Data节点 1.1 修改/etc/hosts,增加datanode的ip 1.2 在新增加的节点启动服务 hadoop-daemon.sh start datanode yarn-daemon.sh start nodemanager 1.3 均衡block start-balancer.sh 1)如果不balance,那么cluster会把新的数据都存放在…

Java Thread Status(转)

public static enum Thread.State extends Enum<Thread.State>线程状态。线程可以处于下列状态之一&#xff1a; 1.NEW 至今尚未启动的线程的状态。 2.RUNNABLE 可运行线程的线程状态。 处于可运行状态的某一线程正在 Java 虚拟机中运行&#xff0c;但它可能正在…

秀!微软《550页图解.Net+WPF完整版》.pdf 附下载!

赶紧看看微软公司基于最新的.netwpf编写文档。对于零基础可以作为.net的快速入门教材&#xff0c;对于高级程序员而言&#xff0c;这也是你的充电之路&#xff01;NO.1资料介绍该手册,全面的介绍.net的新特性&#xff0c;看完这个资料&#xff0c;你能够对.net/c#WPF的新功能&a…

Android之编译jni出错解决办法

1、问题 1&#xff09;、我编写的类一开始都能编译&#xff0c;后来编译不过 2&#xff09;、undefined reference to Qt::value 2、解决办法 1 )、我在写Android.mk的时候这样注释了下面的代码 LOCAL_SRC_FILES : \A.cpp \B.cpp \# C.cpp \D.cpp \这样导致找不到D…

《移动App测试的22条军规》—第1章1.2节移动App的生命周期

本节书摘来自异步社区《移动App测试的22条军规》一书中的第1章&#xff0c;第1.2节移动App的生命周期&#xff0c;作者黄勇&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 移动App的生命周期移动App测试的22条军规&#xff08;1&#xff09;对于还处于…

C语言之常见错误解决办法

1、问题 1)、忘记写const char* p string.c_str()char* p string.data(); 自己傻逼了&#xff0c;编译不过&#xff0c;应该这样写&#xff0c;不要忘记加上const const char* p string.c_str();const char* p string.data(); 2&#xff09;、const char*p 转 char* p co…

电子商务应用课程知识整理 第一章-电子商务概述与类型

一、电子商务定义 电子商务&#xff08;Electronic Commerce&#xff0c;简称EC&#xff09;&#xff0c;是指在全球各地广泛的商业贸易活动中&#xff0c;在因特网开放的网络环境下&#xff0c;基于客户端&#xff08;浏览器、移动端&#xff09;/服务器&#xff0c;买卖双方…

nodejs中文件,目录的操作(1)

首先&#xff0c;我们对fs文件系统分为两类操作&#xff0c;第一类是xxx方法&#xff0c;第二类是xxxSync方法。所有的fs操作几乎都是这两类&#xff0c;第一类是异步回调&#xff0c;第二类是同步等待。 A.对于文件的读写操作 a.完整性读写 1.fs.readFile(filename,[options],…

如何制作自己的静态库

如何制作自己的静态库 将一些不想暴露给使用方的实现代码打包成.a库&#xff08;比如&#xff1a;百度地图sdk,写sdk的时候&#xff0c;需要使用到&#xff09; 需要创建一个静态库的工程&#xff0c;来实现代码逻辑&#xff0c;并完成对代码的打包&#xff08;.a库&#xff09…

Android之jni编译出现error: jump to label ‘XXXX’ [-fpermissive]解决办法

1、问题 Android jni里面编写C代码的时候&#xff0c;我就写了个goto语句&#xff0c;特么也提示下面的错误 error: jump to label ‘XXXX’ [-fpermissive] 这不是日了狗吗&#xff1f;用个goto也出错。 2、原因 我在使用goto的后面语句,有一些初始化变量&#xff0c;如果跳…

《Java和Android开发学习指南(第2版)》—— 1.5 本章小结

本节书摘来异步社区《Java和Android开发学习指南&#xff08;第2版&#xff09;》一书中的第1章&#xff0c;第1.5节&#xff0c;作者&#xff1a;【加】Budi Kurniawan&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.5 本章小结 本章介绍了如何下载和安…

电子商务应用课程知识整理 第二章-电子商务相关知识与技术

一、万维网 万维网&#xff08;亦作“网络”、www、Web或World Wide Web&#xff09;&#xff0c;是一个资源空间。在这个空间中包含一些有用的事务&#xff0c;有一个”统一资源标识符“&#xff08;URL&#xff09;表示。这些资源通过超文本传输协议&#xff08;HTTP&#x…

Spark 性能调优-内存设置-GC设置

http://mt.sohu.com/20150604/n414449770.shtml http://my.oschina.net/mkh/blog/330386 http://itindex.net/detail/51632-spark-%E7%BB%8F%E9%AA%8C http://itindex.net/detail/51631-spark-%E7%BB%8F%E9%AA%8C转载于:https://www.cnblogs.com/liuchangchun/p/4718313.html

Avalonia跨平台入门第十三篇之Expander控件

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果;今天趁着空闲时间接着去摸索基于Expander控件实现的效果,最终实现的效果如下图:来看看具体的布局:Expander控件样…

Android之网络调试adb tcpip

1、问题 Android这边手机插上了第三方盾&#xff0c;需要网络调试2、解决办法 1、手机和PC在同一网段的情况下 把手机usb和连接线和电脑端连接起来&#xff0c;输入下面命令1&#xff09;、adb tcpip 55552) 、adb shell ifconfig 查看手机网络IP3&#xff09;、在电脑上ping…

《版式设计——日本平面设计师参考手册》—第1章应用对象样式

本节书摘来自异步社区《版式设计——日本平面设计师参考手册》一书中的第1章应用对象样式&#xff0c;作者Designing编辑部,更多章节内容可以访问云栖社区“异步社区”公众号查看。 应用对象样式版式设计——日本平面设计师参考手册对象样式可以帮助我们更有效率地进行工作。 h…

电子商务应用课程知识整理 第三章-网络营销

文章目录一、网络营销概述网络营销特点4Ps营销理论4Cs营销理论二、病毒营销特点传播方式&#xff08;病毒载体&#xff09;三、论坛营销优势技巧四、博客营销形式步骤五、微博营销六、微信营销优势七、软文营销软文营销的五种形式八、邮件营销效果评价一、网络营销概述 网络营…

软件概要设计做什么,怎么做

2019独角兽企业重金招聘Python工程师标准>>> 作者&#xff1a;赵磊 博客&#xff1a;http://elf8848.iteye.com 软件概要设计做什么&#xff0c;怎么做 一、软件设计一般流程&#xff1a; 1、先前的软件需求分析阶段&#xff0c;已经搞清楚了 “要解决什么问题”…

FFT算法的完整DSP实现(转)

源&#xff1a;FFT算法的完整DSP实现 傅里叶变换或者FFT的理论参考&#xff1a; [1] http://www.dspguide.com/ch12/2.htm The Scientist and Engineers Guide to Digital Signal Processing, By Steven W. Smith, Ph.D. [2] http://blog.csdn.net/v_JULY_v/article/details/…

LeetCode之Merge Two Sorted Lists

1、题目 Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.合并2个有序链表2、代码实现 /*** Definition for singly-linked list.* public class ListNode {* int val;* …