第4章类和对象课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第4章类和对象课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对象 课件
- 资源描述:
-
1、4.1 面向对象的思想v C+是一种面向对象的程序设计语言,使用它可以实现面向对象的程序设计。它与传统的结构化程序设计的联系与本质差别。二、结构化程序设计方法v结构化程序设计方法将解决问题的重点放在如何实结构化程序设计方法将解决问题的重点放在如何实现过程的细节方面,而把数据和对数据进行操作的现过程的细节方面,而把数据和对数据进行操作的函数截然分开,以数据结构为核心,围绕着功能实函数截然分开,以数据结构为核心,围绕着功能实现或操作流程来设计程序。这样设计出来的程序,现或操作流程来设计程序。这样设计出来的程序,其基本形式是主模块与若干子模块的组合,即一个其基本形式是主模块与若干子模块的组合,即一个
2、主函数(主函数(mainmain函数)和若干子函数。程序以函数为函数)和若干子函数。程序以函数为单位,函数之间以数据作为连接的纽带。正是由于单位,函数之间以数据作为连接的纽带。正是由于把数据和操作分开对待,因而有着方法本身无法克把数据和操作分开对待,因而有着方法本身无法克服的缺点。服的缺点。一、结构化程序设计方法v由于数据和操作代码(函数)的分离,一旦数据由于数据和操作代码(函数)的分离,一旦数据的格式或结构发生变化,相应的操作函数就得改的格式或结构发生变化,相应的操作函数就得改写,而且对于核心数据的访问往往也得不到有效写,而且对于核心数据的访问往往也得不到有效控制。同时,如果程序进行扩充或升
3、级改进,也控制。同时,如果程序进行扩充或升级改进,也需要大量修改函数。这样,程序开发的效率就难需要大量修改函数。这样,程序开发的效率就难以提高,大大限制了软件产业的发展。以提高,大大限制了软件产业的发展。第二种为第二种为OOPOOP面向对象程序设计程序框面向对象程序设计程序框架架(Object-Oriented Programming)(Object-Oriented Programming),它以类,它以类(class)(class)为核心,其程序主体为一批类定义的为核心,其程序主体为一批类定义的集合。集合。面向对象的程序设计面向对象的程序设计认为现实世界认为现实世界是由一系列彼此相关并且能
4、够相互通信是由一系列彼此相关并且能够相互通信的实体组成,的实体组成,这些实体就是面向对象方这些实体就是面向对象方法中的对象,而一些对象的共性的抽象法中的对象,而一些对象的共性的抽象描述,就是面向对象的核心描述,就是面向对象的核心类。类。v 四、面向对象程序设计v 在面向对象程序设计中,将对象作为构成软件系统的基本单元,并从相同类型的对象中抽象出一种新型的数据结构类。v对象是类的实例。类是一种区别于其它各种一般数据类型的特殊类型。类的成员中不仅包含有描述类对象属性的数据,还包含对这些数据进行处理的程序代码,称之为对象的行为(或操作)。对象将其属性和行为封装在一起,并将其内部大部分的实现细节隐藏起
5、来,仅通过一个可控的接口与外界交互。v 面向对象程序设计不仅实现了数据抽象,而且通过抽象出相关类的共性,而形成一般类(基类),并在此基础上,采用继承的方式,对一般类增添不同的特性而派生出多种特殊类(派生类),从而建立了类与类之间的多层结构关系,为软件复用提供有效的途径。v 面向对象程序设计支持多态性。多态性与继承性相结合,使不同结构的对象可以以各自不同的方式响应同一消息。v 软件系统的对象之间存在着依存关系,对象之间通过消息联系。面向对象程序设计中,消息表现为对象在其操作过程中对另一个对象的服务程序的调用。程序对象对象程序对象对象 对象对象 1 描述问题描述问题 解决问题解决问题 面向对象程序
6、设计方法面向对象程序设计方法 数据数据 算法算法 对象对象 n 数据数据 算法算法 第七章 类与对象v类(class)的概念是面向对象程序设计的核心概念。把数据和对象的操作和处理封装在一个程序模块中的方法,可以说是人们积几十年程序设计实践的经验总结。把程序以类的形式组织成若干模块,使其获得了最佳的结构特性,类的概念的引入使程序设计技术发生了革命性的转变。从结构程序设计(SP)中以函数作为程序的基本模块转变为面向对象程序设计(OOP)中,以类作为程序的基本模块,这一变化使程序设计技术出现了质的飞跃。数据抽象 封装 继承 多态 动态绑定面向对象方法的主要特点面向对象方法有三大支柱:封装性、继承性和
7、多态性。OOP程序设计要点:v (1)(1)有且仅有一个有且仅有一个mainmain函数,从它开始执行,函数,从它开始执行,它结束则整个程序结束。它结束则整个程序结束。v (2)(2)类以数据为中心,把相关的一批函数组类以数据为中心,把相关的一批函数组成为一体。类与类之间一方面通过封装而具有明确成为一体。类与类之间一方面通过封装而具有明确的独立性;另一方面,类与类之间又可通过成员、的独立性;另一方面,类与类之间又可通过成员、友元和参数的关系,通过继承和派生的关系,进行友元和参数的关系,通过继承和派生的关系,进行相互的通讯和联络,从而形成一个有机的整体。相互的通讯和联络,从而形成一个有机的整体。
8、v (3)(3)除上述主体部分外,如有必要,还可在除上述主体部分外,如有必要,还可在类之外加入全局量说明或全局函数定义等语法成分。类之外加入全局量说明或全局函数定义等语法成分。v (4)(4)可以从以下两个角度来看待类与对可以从以下两个角度来看待类与对象概念在编程中所起的作用。象概念在编程中所起的作用。v 第一第一,从,从程序的组织角度程序的组织角度看,看,C+C+通过通过classclass把数据以及对这些数据进行处理和运算的函把数据以及对这些数据进行处理和运算的函数封装为互相关联的程序模块,提高程序的可读数封装为互相关联的程序模块,提高程序的可读性、可维护性及可重用性。性、可维护性及可重用
9、性。v 第二第二,从,从数据类型的角度数据类型的角度看,看,C+C+通过通过classclass引入了抽象数据类型的概念。一个由数据成引入了抽象数据类型的概念。一个由数据成员及函数成员组成的一个类就是一种新的数据类员及函数成员组成的一个类就是一种新的数据类型。型。v通过类与对象而实现面向对象程序设计的三大通过类与对象而实现面向对象程序设计的三大特征:特征:封装性、继承性、多态性封装性、继承性、多态性。通过。通过抽象抽象对所对所要处理的问题进行划分、进行归类,通过要处理的问题进行划分、进行归类,通过类类(classclass)类型对所要处理的问题进行抽象描述,)类型对所要处理的问题进行抽象描述,
10、从而将逻辑上相关的数据与函数进行封装。封装从而将逻辑上相关的数据与函数进行封装。封装所进行的所进行的“信息隐蔽信息隐蔽”为的是减少对象间的联系,为的是减少对象间的联系,提高软件的模块化程度,增强代码的重用性。提高软件的模块化程度,增强代码的重用性。v通过类的继承,使新生成的所谓派生类可从其通过类的继承,使新生成的所谓派生类可从其基类那里得到已有的属性(数据)和行为特征基类那里得到已有的属性(数据)和行为特征(方法),从而可简化人们对事物的认识和描述。(方法),从而可简化人们对事物的认识和描述。面向对象语言通过继承机制很方便地实现了程序面向对象语言通过继承机制很方便地实现了程序代码的可重用问题。
11、代码的可重用问题。v多态性是通过对函数和运算符进行重载以及通多态性是通过对函数和运算符进行重载以及通过在基类及其派生类间对虚函数进行使用来具体过在基类及其派生类间对虚函数进行使用来具体体现的。多态性可使程序易于编制、易于阅读理体现的。多态性可使程序易于编制、易于阅读理解与维护。解与维护。v本章介绍类与对象的说明及其相关使用,下一本章介绍类与对象的说明及其相关使用,下一章将重点介绍继承性与多态性方面的内容。章将重点介绍继承性与多态性方面的内容。对象的数据和功能v对象表示现实世界中的实体。定义了周边的、与要解决的问题有关的概念或事物。对象有两种用途:v它们帮助理解现实世界v它们为计算机应用程序提供
12、实用基础对象(续)v每个对象都有它自己的特性或特征,描述它是什么或它做什么。交通监视应用程序中的车辆菜单鼠标和键盘人事文件有关某次考试的分数表时间复数将组织中的部门视为对象v每个部门的员工可对该部门的数据进行控制和操作SalesPersonnelAccounts不同的对象姓名:Jack年龄:28体重:65 kgs型号:Ferrari颜色:Red年份:1995动作:走路说话睡觉 动作:启动停止加速 v每个对象都有它自己的属性和操作,即它的静态特征和动态特征。属性是描述它的静态特征,而操作是描述其动态特征。如电视机有颜色、音量、频道等属性;还有一些操作,如切换频道、增减音量等。v 7.2.1 抽象
13、性v 抽象是指从具体的实例中抽取出共同的性质并加以描述的过程。比起面向过程的程序设计,面向对象程序设计更加强调抽象性。在面向对象方法中,抽象是通过对一个系统进行分析和认识,强调系统中某些本质的特性,而对系统进行的简化描述。对象的抽象类 v把具有相同特征和行为的对象归在一起就形成了类(Class)。它是一组具有相同属性和相同操作的对象集合,是对象的抽象,它抽象地描述了属于该类的全部对象的属性和操作。每个具体的对象只是该类的一个实例。类可以产生很多个对象,这些对象有不同的属性值。数据抽象 对 象 类 抽象数据类型 抽抽象象 抽抽象象 具具体体 具具体体 类是一组相似对象的抽象描述,它抽取了这些对象
14、的共性组成了一个共同的概念。抽象数据类型(Abstract Data Type,ADT)是一组相似的类的抽象,而一个类又是ADT的具体实现。数据抽象v用于将每个对象的特性和方法标识为与当前应用用于将每个对象的特性和方法标识为与当前应用程序有关将对象归为类,就是在执行一个问题的程序有关将对象归为类,就是在执行一个问题的数据抽象每个类的公共定义只存储一次,而不是数据抽象每个类的公共定义只存储一次,而不是对类的每个实例的公共定义都存储一次只需为每对类的每个实例的公共定义都存储一次只需为每个类编写一次方法,既可使类中的所有对象受益个类编写一次方法,既可使类中的所有对象受益于代码重用。于代码重用。类v拥
15、有相同特性、共同的行为和共同的关系的一组对象。v术语“类”是“对象的类”的缩略形式。例如:人类、动物类、过程类v每个对象称为它的类的实例对象和类抽象为多边形 类属性:顶点 边的颜色 填充的颜色 方法:绘制 抹去 移动多边形对象v对问题的抽象包括两个方面:数据抽象和行为抽象。数据抽象为程序员提供了对对象的属性和状态的描述,行为抽象则是对这些数据所需要的操作的抽象。v 抽象的过程是通过模块化来实现的,即通过分析将一个复杂的系统分解为若干个模块,每个模块是对整个系统结构的某一部分的一个自包含和完整的描述。同时,对模块中的细节部分进行信息隐藏,用户只能通过一个受保护的接口来访问模块中的数据。这个接口由
16、一些操作组成,定义了该模块的行为。v 看一个简单的例子。假设需要在计算机上实现一个绘制圆形的程序。通过对这个图形的分析,可以看出需要三个数据来描述该圆的位置和大小,即圆心的横、纵坐标以及圆的半径,这就是对该圆形的数据抽象。另外,该图形应该具有设置圆心坐标、设置半径大小、绘制圆形等功能,这就是对它的行为抽象。用C+语言可以将该图形描述如下:v圆形(circle):v数据抽象:vdouble x,y,r;v行为抽象:vsetx();sety();setr();draw();v抽象是面向对象方法的核心。王老师-姓名:王一凡-性别:男-年龄:33-职称:教授教师-姓名:string-性别:string
17、-年龄:int-职称:sting类对象图1-6类与对象的关系操作操作v 7.2.2 封装性v 封装是面向对象方法重要的原则和基本特性,其目的是有效地实现信息隐蔽和局部化。封装是指把对象的属性和操作结合在一起,组成一个独立的对象:其内部信息对外是隐蔽的,用户只能看到对象封装界面上的信息;不允许外界直接存取对象的属性,只能通过有限的接口与对象发生联系。只有对象内部的操作(方法)才能访问和修改该对象的属性。信息隐蔽和局部化封装 v所谓封装,就是将一个事物包装起来,使外界不了解它的详细内情。在面向对象方法中,把某些相关的代码和数据结合在一起,形成一个数据和操作的封装体,这个封装体向外提供一个可以控制的
18、接口,其内部大部分的实现细节则对外隐藏,从而达到对数据访问权限的合理控制。封装可以使得程序中各部分之间的相互影响达到最小,并且提高程序的安全性,简化代码的编写工作。封装(续)v如果适当地封装一些代码,就可以达到两个目的:如果适当地封装一些代码,就可以达到两个目的:构建一堵不可穿透的墙壁保护代码,使其不会构建一堵不可穿透的墙壁保护代码,使其不会因大家可能会犯的一些愚蠢小错误而受到意外因大家可能会犯的一些愚蠢小错误而受到意外破坏。破坏。还可分离错误,将其定位到一些小部分代码上,还可分离错误,将其定位到一些小部分代码上,从而更容易发现它们并予以纠正从而更容易发现它们并予以纠正封装是指软件的组成部分(
19、模块、子程序、方法等)应该互相独立,或者隐藏设计的细节。在传统的方法中,封装通常局限于将功能和数据分开封装;而在面向对象方法中,封装将功能和数据同时装入对象中。参看Student类的例子封 装class Student/Student类的声明public:/公有成员Student();/构造函数Student();/析构函数char*GetName();/查询姓名intGetAge();/查询年龄charGetSex();/查询姓名intGetNumber();/查询学号boolSetName(char*n);/设置姓名boolSetAge(int age);/设置年龄boolSetSex(c
20、har*s);/设置性别boolSetNumber(int num);/设置学号protected:/保护成员charm_strName20;/姓名,字符串数组intm_nAge;/年龄,整型charm_cSex;/性别,字符型intm_nNumber;/学号,整型;例:C+中类的声明Student类利用封装的特性,编写程序时,对于已有的成果,使用者不 必了解具体的实现细节,而只需要通过外部接口,依据特定的访 问原则,就可以实现这些现有的东西。在中,是利用类(class)的形式来实现封装的。以下以时钟的封装为例:class Clock /class 关键字;Clock 类名 /边界public
21、:/外部接口void SetDime(int NewH,int NewM,int NewS);/行为 代码成员void ShowTime();/行为 代码成员private:/特定的访问权限 int Hour,Minute,Second;/属性,数据成员;/边界v 7.2.3 继承性v 继承是软件复用的一种方式,通过继承,一个对象可以获得另一个对象的属性,并加入属于自己的一些特性。继承提供了创建新类的一种方法,即从现有类创建新类。新类继承了现有类的属性和行为,并通过对这些属性和行为进行扩充和修改,增添自己特有的一些性质。v 一个一般类可以派生出多个特殊类,不同的特殊类在一般类的基础上增加了不同
22、的特性。一个类也可以继承多个一般类的特性,这称之为多继承。v 继承是很重要的概念。继承支持多层分类的概念,使得一个个原来彼此孤立的类有效地组织起来,形成层次结构关系。倘若不使用多层分类的概念,对每个对象的清晰描述都要穷尽其特征,而采用继承的概念描述一个对象,只需在一般类特征的基础上加上该对象的一些专有特性即可。继承(续)v每个子类与它从其中派生的类具有共同的特性每个子类与它从其中派生的类具有共同的特性例如,汽车类中的所有车辆可能都有类似的特性:有车例如,汽车类中的所有车辆可能都有类似的特性:有车轮和发动机轮和发动机v子类可拥有它自己的特定特征子类可拥有它自己的特定特征例如,公共汽车有供人坐的座
23、位,而卡车拥有装货物的例如,公共汽车有供人坐的座位,而卡车拥有装货物的空间空间如果类与类之间有is-a(是一种)的关系,那么可以采用继承机制来表示。子类可以自动继承父类中的一些属性和行为,而不必再进行定义,从而实现了代码的复用。同时,继承也是产生新类的方法之一。继 承class People/People类的声明public:/公有成员People();/构造函数People();/析构函数char*GetName();/查询姓名intGetAge();/查询年龄boolSetName(char*n);/设置姓名boolSetAge(int age);/设置年龄private:/私有成员pro
24、tected:/保护成员charm_strName20;/姓名,字符串数组intm_nAge;/年龄,整型charm_cSex;/性别,字符型;类的声明举例People类class Student:public Peoplepublic:Student();/构造函数Student();/析构函数int GetNumber();/查询学号bool SetNumber(int n);/设置学号private:protected:intm_nNumber;/学号;类的声明举例Student类class Teacher:public People/Teacher类的声明public:/公有成员Tea
25、cher();/构造函数Teacher();/析构函数bool IsTeaching();/查询是否授课private:/私有成员protected:/保护成员boolm_bIsTeaching/是否授课;类的声明举例Teacher类v3、继承、继承v 分析问题,抽象得到数据和代码,使用类分析问题,抽象得到数据和代码,使用类进行封装,得到有机的整体,应该说只是面向对象进行封装,得到有机的整体,应该说只是面向对象程序设计的初步工作。程序设计的初步工作。一个程序员,如果领会了抽一个程序员,如果领会了抽象,问题就可以解决一半,如果懂得了封装,那就象,问题就可以解决一半,如果懂得了封装,那就可以起步进
展开阅读全文