从过程化到面向对象(上)
抽象过程:计算机的工作建立在抽象的基础上
计算机层面的抽象:从计算机硬件,到机器语言,再到高级语言
当出现一个抽象的任务时,需要程序员在机器模型与实际问题模型之间建立联系,按照计算机的结构去思考
过程化程序设计:每个步骤用语句代替;适合解决小问题;
面向对象程序设计:解决问题寻找帮手;可以解决大问题;
从过程化到面向对象(下)
对象与变量:都是程序中解决问题的工具;后者是语言已经设计好的工具,前者是程序员自己创建的工具
面向对象的程序设计为程序员提供了创建工具的功能
解决问题过程:考虑需要的工具;创建、收集工具;设计利用工具解决问题的过程
面向对象的程序设计的特点
代码重用:已有的工具能给其他程序员使用
实现隐藏:工具的使用者不需要知道工具的内部实现方式
继承:在已有工具的基础上加以扩展,形成一个功能更强的工具
多态:对不同对象发出同一指令,不同对象有不同行为
DoubleArray库的设计与实现
库的设计:
数组的存储:需要一块保存数组元素的空间
数组的操作:给元素赋值;访问元素的值;给元素分配空间;释放空间
将函数放入结构体
原有库的缺点:
不能直接下标访问
需要使用者关心空间分配问题
函数名容易出现冲突
使用相当笨拙
改进方案:将函数放入结构体
好处:减少了函数所需的参数,同时解决了可能存在的函数名冲突的问题
将函数放入结构体是从C到C++的根本改变!
类定义
类的定义与声明
class ClassName { private: //私有数据成员和成员函数 public: //公有数据成员和成员函数 };
私有成员(private):只能由类的成员函数调用,私有成员被封装在一个类中,类的用户是看不见的
公有成员(public):类的用户可以调用的信息,是类对外的接口
private和public的出现次序可以是任意的,可以反复出现多次,成员还可以被声明为protected(此声明在之后的章节会进行解释)
类的设计
数据成员和成员函数:
访问特性:
需保存的信息设计数据成员
根据行为设计成员函数
根据所
数据成员一般是私有的
成员函数一般是公有的
成员函数实现时分解出的小函数是私有的
在实际工程中,我们可以将接口和实现分开:
类的定义写在接口文件中
成员函数的实现写在实现文件中
某些简单的成员函数的定义可以直接写在类定义中
在类定义中定义的成员函数被认为是内联函数
有理数类的设计
设计要求:提供有理数的加和乘运算,要求保存的有理数是最简形式
设计考虑:
数据成员:分子分母
访问特性:数据成员与化简函数私有,其余函数公有
成员函数:考虑实际需要的函数外加化简函数