第二章从结构到类的演变.ppt
文本预览下载声明
第二章 从结构到类的演变 主讲:冯传胜 Email: fcs@ 2.1 结构的演化 2.2 从结构演变一个简单的类 2.3 面向过程与面向对象 2.4 C++面向对象程序设计的特点 2.5 使用类和对象 2.6 string对象数组与泛型算法 2.1 结构的演化 2.1.1 结构发生质的演变 1、函数与数据共存 C++允许结构中可以定义函数,称为成员函数。 struct 结构名 { 数据成员 成员函数}; 可以用C语言中使用结构成员的方法使用成员函数 结构对象.成员函数 例2.1: 2、封装性 如果在定义结构时,将数据成员使用private关键字,则产生封装性。 例2.2: 2.1.2 使用构造函数初始化结构的对象 结构中private的使用使其具有封装性,所以不能像C语言中那样使用初始化列表对结构对象进行初始化。为此我们可以设计两个特殊的成员函数来进行初始化。两个函数的名字与结构同名,其原型为 Point() Point(double,double) 两函数为重载函数。 专门用于对象的初始化,称为构造函数。 例2.3:构造函数。 2.2 从结构演变一个简单的类 利用关键字class(类)代替struct(结构)就是一个标准的类。 例2.4 类的使用与结构相同。如, 2.3 面向过程与面向对象 面向过程 不必要了解计算机的内部逻辑,而把精力主要集中在对如何求解问题的方法逻辑和过程上,通过编写程序把解决问题的步骤告诉计算机。 例2.5:输入三角形3个顶点的坐标,计算3边长的过程算法描述。 输入三个顶点的坐标数据(6个数据) 计算两个顶点间的距离得到连长 输出三个边长 C语言中的函数 是功能的抽象。 有利于结构化程序设计和模块化设计,适合于大型程序的开发。 解决了大系统多文件的组织与管理。 C++是混合型语言,可用于面向过程软件的开发。 当软件太复杂,结构化程序设计不能满足要求。 人们分析问题思考方式的不一致 全局变量的大量存在 面向过程存在的问题。 要求开发人员按计算机的结构去思考,而不是按要解决的问题的结构去思考。 开发人员必须在机器模型(解空间)和实际问题模型(问题空间)之间进行对应。 面向过程的方法充满“变数”。 面向对象 相对于过程,对象是稳定的。 在面向对象程序设计中,可以将一组密切相关的函数统一封装在一个对象中,从而可以合理、有效地避免全局变量的使用。 对象是功能抽象和数据抽象的统一。 面向对象的程序设计方法不是以函数过程和数据结构为中心,而是用对象代表求解问题的中心环节。 例2.6:输入三角形的3个顶点坐标,计算3条边的长度的面向对象的算法描述。 问题以“点”对象为中心环节。边长可以看作两点对象之间了距离。 设计Point类: 算法设计: 设计Point类 创建3个点对象 Point A(x1,y1); Point B(x2,y2); Point C(x3,y3); 计算边长: AB:A.Getlength(B); BC:B.Getlength(C); AC:A.Getlength(C); 输出三边长:AB,BC,AC 软件开发是对给定问题求解的过程,包含两部:认识和描述。 问题域:软件开发者将被开发的整个业务范围称作“问题域”。 认识:就是通过人的思维,对该问题域客观存在的事物以及对所要解决的问题产生正确的认识和理解,包括弄清事物的属性、行为及其彼此之间的关系并找出解决问题的方法。 描述:是指人们用一种语言把对问题域中事物的认识、对问题及其解决方法的认识描述出来。最终描述成一种能被计算机读得懂的语言,即编程语言。 2.4 C++面向对象程序设计的特点 与传统的程序设计方法相比,面向对象程序设计具有抽象、封装、继承和多态性等关键要素。 2.4.1 对象 描述对象的三要素:对象名、属性、操作。 对象名:用来标识一个具体对象。 属性:用数据来表示对象的属性,一个属性就是描述对象静态特征的一个数据项。 操作:是描述对象动态特征(行为)的一个函数序列(用函数实现操作),也称为方法或服务。 数据称为“数据成员”,函数称为“成员函数”。 C++中的对象是系统中用来描述客观事物的一个实体,要构成系统的一个基本单位。 一个对象由一组属性和对这组属性进行操作的成员函数构成。 例2.7:用简单对象表示平面上的两个坐标点:A(3.5, 6.4), B(8.5, 8.9)。 2.4.2 抽象和类 抽象是一种从一般的观点看待事物的方法,即集中于事物的本质特征,而不是具体细节或具体实现。可以从一组对象的共同特征进一步抽象出来从而形成“类”的概念。 类由类名、一组属性、一组操作组成。 类的属性只是性质的说明,对象的属性才是具体数据。 如,从上例中A,B两点抽象出来的点类,如右上图。 在抽象的过程中用到“归纳法”和“演绎法
显示全部