1.关于抽象的进步。面向对象OOP的设计思路其实是把“抽象”这种编程方法进行了新的解释说明,把具体的人或事务抽象成了“类”“对象”的形式。
面向对象的主要思想:
- 万物即对象
- 程序是对象的组合
- 每个对象都有自己的空间,可以容纳其他对象
- 每个对象都有自己的实例
- 同一类的所有对象都能接收相同的消息
2.对象的接口
通过类构造对象,对象开放给使用者接口,此时使用者可以通过类的对象的接口给对象发出请求。
3.面向对象编程要提供给两个使用者:类的创建者和使用者。类的创建者的职责是从头创建一个类,提供给使用者接口就好,而类的使用者(书中称之为客户程序员)直接拿来接口使用,而不需要了解这个类具体是什么构造。同时类的创建者也不用有顾虑怕类被破坏或者修改。
4.方案的重复使用
我们知道在面向对象中一个类的对象可以置入另外一个类中,这叫做“创建一个成员对象”,在新建类的时候,首先可以考虑把不同类的对象组织起来使用,可以有效减少代码的复杂度,减少不必要的继承。
5.继承的进一步解释
在以前的认识中,继承只是用来创建新类,和旧的类区别开来,书中对创建继承的必要性进行了一定的探讨:
- 为什么要使用继承:要创建新的类和已有类功能相似,但是有一定的新功能,此时使用继承,把旧的类所有的成员继承到新类中,复制了旧类的接口
- 如何区分衍生类和旧类:a.为衍生的类增加新的函数,提供新的功能;b.改善基础类的现有函数
6.关于类型的上溯
这个概念这次深刻的理解了。
举例:
此时有一个这样的类的构造:
![这里写图片描述](https://box.kancloud.cn/207cc9dd61d8dcc78db1fda6a9c84acb_521x384.jpg "")
同时有这样的一个函数:
~~~
void doStuff(Shape s){
s.draw();
...
...
}
~~~
此时如果定义了新的形状,则只需要指出该形状的类衍生于Shape类即可调用Shape类的函数:
~~~
Circle c = new Circle();
Triangle t = new Triangle();
Square s = new Square();
doStuff(c);
doStuff(t);
doStuff(s);
~~~
这里把衍生的类当成了它的基础类型处理,这种方法就叫做Upcasting,只需要指出某个类所属的基本类型,即可让它执行基础类的具体功能。