ch5 找到对象,确定接口¶
1. 从 FOP 到 OOP¶
封装:把不常变化的量封装起来,形成概念函数,使用时把经常变化的量作为参数。
接口:类暴露出来的部分,是类所提供的功能,隐藏了实现细节。
找出其中可以变化的量,然后对算法进行抽象,将可变信息描述成参数或函数,从而抽取出对象。当具体问题发生变化时,我们的对象并没有发生变化,只是参数不一样了。
根据期待的类使用方法设计接口,首先确定成员变量,实现构造函数、析构函数和输出流操作符等接口。
2. 多态¶
可以使用虚函数,将同一个接口的不同实现推迟到子类中。
模板方法:
- 抽象类定义算法不变的骨架
- 算法的需要改变的细节由实现类以重写实现
- 在使用时,调用抽象类的算法骨架方法,再由这个方法来根据需要调用类的算法细节实现
- 当更换一个新的实现类时,新的步骤细节将带来算法的改变
针对接口而不是针对实现编程:
- 通过抽象出抽象概念,设计出描述这个抽象概念的抽象类(接口类),这个类有一系列的纯虚函数,描述了这个类的接口
- 对这个接口类进行继承并实现这些纯虚函数,从而形成这个抽象概念的实现类,实现可以有很多种以适应变化
- 在使用这个概念的时候,我们使用接口类来引用这个概念,而不直接使用实现类,从而避免实现类的改变造成整个程序的大规模修改