《写给大家看的面向对象编程书》读书笔记
第1章 面向对象概念介绍
-
OO和过程式程序设计的区别
在OO设计中,属性和行为都包含在一个对象中,而在过程式程序设计中,属性和行为是分开的。 -
过程是程序设计的缺点
如果数据是全局的,修改中这些数据很简单,对数据的访问时非受控且不可预测的。
对谁能访问数据无从控制。 -
封装
封装就是把属性和方法合并到同一个实体中,这样就能控制对Math对象中数据的访问,其他对象不允许直接访问成员变量。封装完之后,客户想访问对象的成员变量,需要通过对象来进行访问,而且很多时候都只能用方法的那些操作来操作数据。
封装是一个对程序打包的过程,将各个类划分为两个不同的部分:接口和实现。 -
类是对象模板
-
继承实现了代码重用
结构化设计调用函数实现了代码的重用,OO中继承也实现了代码重用。 -
继承与组合
继承是is-a的关系,组合是has-a的关系。
汽车与发动机是has-a的关系,但不是is-a的关系 -
多态
多态是指类似对象可以采用不同的方式对相同的消息(函数调用)做出响应
第2章 如何以对象方式思考
-
要培养善于完成OO思维过程的敏锐判断力,要注意3个重要方面
了解接口和实现之间的区别
以更抽象的方式思考
近可能为用户提供最小接口 -
什么是更抽象的思考方式?
“送我去机场”比“左转”,“右转”抽象 -
抽象与可重用是什么关系?
抽象使得更加可重用,“送我去机场”在任何城市都可以说,但是“左转”,“右转”换了城市可能就不灵了,毕竟不同的城市去机场的路径不同。
第5章 类设计指导原则
- OO设计的妙处
OO将数据和行为封装到对象中,对象之间相互交互。这种思想的妙处在于,类能够对真实对象和真实对象之间的交互进行建模。
第一次转向OO开发时,许多人仍然倾向于采用一种结构化的方式思考,主要原因是类只包含行为而没有数据。
第7章 掌握继承和组合
-
继承会破坏封装
对父类进行修改的时候会影响到其子类,对父类实现的修改并不一定完全封装在父类中。为了减少这种情况所产生的风险,使用继承时一定要坚持严格的is-a条件。如果子类确实是父类的一种特殊化,那么父类的修改很有可能会以自然的、可预见的方式影响子类。 -
抽象类和使用接口的区别
继承是一种严格的is-a关系,但接口不是。接口可用于没有关联的类,比如nameable可用于任何不同的类。
第9章 构建对象
- 聚集与关联
是否关联非常紧密,是某个对象的一部分
聚集:狗和狗头
关联:狗和主人