6.1从结构化设计到面向对象程序设计
6.1.1“自顶向下,逐步求精”的结构化程序结构
1.面向对象:
(1)先提出问题,然后分析问题的处理流程
(2)接着根据把一个大问题划分为几个问题,分成各个子模块,解决每个子问题,实现每个子模块。
(3)最后通过主函数按照某种次序调用这些子模块
2.程序仅有三种基本结构组成
任何复杂的程序只有三种基本结构:顺序结构、选择结构和循环结构
再组合和嵌套
3.分而治之,各个击破
分解成子模块,一个解决
4.自顶向下,逐步求精
(1):宏观角度,按照功能或者业务逻辑划分程序子模。
(2):结构化程序设计思想的不足:
在结构化设计中,数据和操作是相互分离的,如果数据的格式发生改变,相应的操作函数改写
5.改变这一设计思路
6.1.2面向对象的编程设计
1.是对结构化程序设计的继承和发展:更接近人类的思维
2.程序是对现实世界的描述,现实世界的基本单元是物体,程序中的基本单元就是对象。
3.面向对象:现实世界是由很多彼此相关并互通信息的实体---->对象组成的
分析对象:每个对象由两个部分组成:
(1):描述对象状态或属性的数据
(2):描述对象行为或功能的函数
example 老师
属性:姓名,年龄,职务
行为:备课,上课,批改作业
6.1.3面向对象的三座基石:封装、继承与多态
1.封装:
(1)某个物体是什么、能做什么,就是描述物体所必需的数据和算法。
(2)面向对象的思想中,他是通过封装机制将数据和相应的算法捆绑到一起的,以形成一个完整的,具有属性(数据)和行为(算法)的对象,避免了外界的干扰和不确定性。
(3)简单来说:对象就是封装数据和操作这些数据的算法的逻辑实体。
(4)封装机制 --> 对数据的保护
(5)在对象内部,某些算法和某些数据可以有私有的,不能被外界访问。
2.继承:
可以使得某个对象获得另外一个类型对象的属性的方法。
继承的最大魅力就在于它允许我们充分利用已经存在的类别
3.多态:
(1)不同情况下做不同形式的能力
(2)多态:就是指对象在不同情况下具有不同形式的能力
(3)多态机制具有不同内部结构的对象可以共享相同的外部接口
1)容易设置和维护
2)复用设计和代码,系统质量高
3)容易拓展
6.2类:当C++爱上面向对象
6.2.1类的声明和定义
1.面向对象思想把现实世界中的物体都封装对象,而类是所有相同类型对象的抽象,是它们总体的描述。
2.在一个类的声明中描述这类对象的属性和行为,从而用这个类描述这一类对象。
class 类名:public 基类名
{
public:
//公有成员,通常用来定义类的行为,提供接口供外部访问
protected:
//保护型成员
private:
//私有成员,通常用来定义类的属性
};
3.class 是声明类的关键词,后面是类的名字,通常用名词来描述,在后面是继承的方式和基类的名字
没有基类可以省略。
4.完成类的名字以及继承关系的定义后,就可以开始类的主体中描述这个类的属性和行为。
类就是对多个同类型对象的抽象,通过面向对象的封装机制,可将现实世界中的物体封装成对象,这个对象就包含这个物体的属性和行为。
变量代表某一数据,将变量引入类的声明之中成为类的成员变量,这些变量就成为对对象属性的描述。
5.三个关键词来定义类的属性和行为的访问级别
public :定义类的行为,提供公共的函数接口供外部访问
protected:在这个部分,可以定义遗传给下一代子类的属性和行为
private:可以定义这个类所所私有的属性和行为
class Teacher
{
//成员函数
//描述对象的行为
public : | void PrepareLesson(); | //备课 |
//成员变量 //描述对象的属性 protected: string m_strName; |
private;
};
6.完成类的声明之后,就需要对类的行为进行具体的定义
域操作符“::”
6.2.2使用类创建对象
1.得到类的具体对象,可以用定义变量的方式将类当成一种新的数据类型来创建变量,也就是该类的对象。
类名 对象名;
类名就是定义好的类的名字,对象名就是要声明的对象的标志符:
//定义一个Teacher类型的对象MrChen
Teacher Mrchen;
得到一个Teacher类型的对象MrChen
得到对象后,就可以调用这个类提供的公有成员函数,完成这个对象的成员函数。我们使用“.”操作符来调用一个对象的成员函数,
对象名.公有成员函数;
多位老师抽象为类,类得到具体对象。
6.2.3构造函数和析构函数
1.对象有其生命周期