《C程序设计》课件第8章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《C程序设计》课件第8章.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C程序设计 程序设计 课件
- 资源描述:
-
1、第第8章章 类和对象类和对象第第9章章 关于类和对象的进一步讨论关于类和对象的进一步讨论第第10章章 运算符重载运算符重载第第3 3篇篇基于对象的程序设计基于对象的程序设计第第8章章 类和对象类和对象8.1 面向对象程序设计方法概述面向对象程序设计方法概述8.2 类的声明和对象的定义类的声明和对象的定义8.3 类的成员函数类的成员函数8.4 对象成员的引用对象成员的引用8.5 类的封装性和信息隐蔽类的封装性和信息隐蔽8.6 类和对象的简单应用举例类和对象的简单应用举例到目前为止,我们介绍的是到目前为止,我们介绍的是C+在面向过程的程序设在面向过程的程序设计中的应用。对于规模比较小的程序,编程者
2、可以计中的应用。对于规模比较小的程序,编程者可以直接编写出一个面向过程的程序,详细地描述每一直接编写出一个面向过程的程序,详细地描述每一瞬时的数据结构及对其的操作过程。但是当程序规瞬时的数据结构及对其的操作过程。但是当程序规模较大时,就显得力不从心了。模较大时,就显得力不从心了。C+就是为了解决编就是为了解决编写大程序过程中的困难而产生的。写大程序过程中的困难而产生的。8.1 面向对象程序设计方法概述面向对象程序设计方法概述面向对象的程序设计的思路和人们日常生活中处理面向对象的程序设计的思路和人们日常生活中处理问题的思路是相似的。在自然世界和社会生活中,问题的思路是相似的。在自然世界和社会生活
3、中,一个复杂的事物总是由许多部分组成的。一个复杂的事物总是由许多部分组成的。当人们生产汽车时,分别设计和制造发动机、底盘、当人们生产汽车时,分别设计和制造发动机、底盘、车身和轮子,最后把它们组装在一起。在组装时,车身和轮子,最后把它们组装在一起。在组装时,各部分之间有一定的联系,以便协调工作。各部分之间有一定的联系,以便协调工作。这就是面向对象的程序设计的基本思路。这就是面向对象的程序设计的基本思路。为了进一步说明问题,下面先讨论几个有关的概念。为了进一步说明问题,下面先讨论几个有关的概念。8.1.1 什么是面向对象的程序设计什么是面向对象的程序设计1.对象对象客观世界中任何一个事物都可以看成
4、一个对象客观世界中任何一个事物都可以看成一个对象(object)。对象可大可小。对象是构成系统的基本单位。对象可大可小。对象是构成系统的基本单位。任何一个对象都应当具有这两个要素,即属性任何一个对象都应当具有这两个要素,即属性(attribute)和行为和行为(behavior),它能根据外界给的信息它能根据外界给的信息进行相应的操作。一个对象往往是由一组属性和一进行相应的操作。一个对象往往是由一组属性和一组行为构成的。一般来说,凡是具备属性和行为这组行为构成的。一般来说,凡是具备属性和行为这两种要素的,都可以作为对象。两种要素的,都可以作为对象。在一个系统中的多个对象之间通过一定的渠道相互在
5、一个系统中的多个对象之间通过一定的渠道相互联系,如图联系,如图8.1示意。要使某一个对象实现某一种行示意。要使某一个对象实现某一种行为为(即操作即操作),应当向它传送相应的消息。对象之间就,应当向它传送相应的消息。对象之间就是这样通过发送和接收消息互相联系的。是这样通过发送和接收消息互相联系的。图图8.1 图图8.2面向对象的程序设计采用了以上人们所熟悉的这种面向对象的程序设计采用了以上人们所熟悉的这种思路。使用面向对象的程序设计方法设计一个复杂思路。使用面向对象的程序设计方法设计一个复杂的软件系统时,首要的问题是确定该系统是由哪些的软件系统时,首要的问题是确定该系统是由哪些对象组成的,并且设
6、计这些对象。在对象组成的,并且设计这些对象。在C+中,每个对中,每个对象都是由数据和函数象都是由数据和函数(即操作代码即操作代码)这两部分组成的这两部分组成的,见见图图8.2。数据体现了前面提到的。数据体现了前面提到的“属性属性”,如一个三,如一个三角形对象,它的角形对象,它的3个边长就是它的属性。函数是用来个边长就是它的属性。函数是用来对数据进行操作的,以便实现某些功能,例如可以对数据进行操作的,以便实现某些功能,例如可以通过边长计算出三角形的面积,并且输出三角形的通过边长计算出三角形的面积,并且输出三角形的边长和面积。计算三角形面积和输出有关数据就是边长和面积。计算三角形面积和输出有关数据
7、就是前面提到的行为,在程序设计方法中也称为方法前面提到的行为,在程序设计方法中也称为方法(method)。调用对象中的函数就是向该对象传送一个调用对象中的函数就是向该对象传送一个消息消息(message),要求该对象实现某一行为要求该对象实现某一行为(功能功能)。2.封装与信息隐蔽封装与信息隐蔽可以对一个对象进行封装处理,把它的一部分属性可以对一个对象进行封装处理,把它的一部分属性和功能对外界屏蔽,也就是说从外界是看不到的和功能对外界屏蔽,也就是说从外界是看不到的,甚甚至是不可知的。至是不可知的。这样做的好处是大大降低了操作对象的复杂程度。这样做的好处是大大降低了操作对象的复杂程度。面向对象程
8、序设计方法的一个重要特点就是面向对象程序设计方法的一个重要特点就是“封装封装性性”(encapsulation),所谓所谓“封装封装”,指两方面的含,指两方面的含义:义:一是将有关的数据和操作代码封装在一个对象一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,中,形成一个基本单位,各个对象之间相对独立,互不干扰。二是将对象中某些部分对外隐蔽,即隐互不干扰。二是将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息接收外界的消息。这种对外界隐蔽的做法称
9、为信息隐蔽隐蔽(imformation hiding)。信息隐蔽还有利于数据信息隐蔽还有利于数据安全,防止无关的人了解和修改数据。安全,防止无关的人了解和修改数据。C+的对象中的函数名就是对象的对外接口,外界可的对象中的函数名就是对象的对外接口,外界可以通过函数名来调用这些函数来实现某些行为以通过函数名来调用这些函数来实现某些行为(功能功能)。这些将在以后详细介绍。这些将在以后详细介绍。3.抽象抽象在程序设计方法中,常用到抽象在程序设计方法中,常用到抽象(abstraction)这一这一名词。抽象的过程是将有关事物的共性归纳、集中名词。抽象的过程是将有关事物的共性归纳、集中的过程。的过程。抽象
10、的作用是表示同一类事物的本质。抽象的作用是表示同一类事物的本质。C和和C+中的中的数据类型就是对一批具体的数的抽象。数据类型就是对一批具体的数的抽象。对象是具体存在的,如一个三角形可以作为一个对对象是具体存在的,如一个三角形可以作为一个对象,象,10个不同尺寸的三角形是个不同尺寸的三角形是10个对象。如果这个对象。如果这10个三角形对象有相同的属性和行为,可以将它们抽个三角形对象有相同的属性和行为,可以将它们抽象为一种类型,称为三角形类型。在象为一种类型,称为三角形类型。在C+中,这种类中,这种类型就称为型就称为“类类(class)”。这这10个三角形就是属于同一个三角形就是属于同一“类类”的
11、对象。类是对象的抽象,而对象则是类的的对象。类是对象的抽象,而对象则是类的特例,或者说是类的具体表现形式。特例,或者说是类的具体表现形式。4.继承与重用继承与重用如果在软件开发中已经建立了一个名为如果在软件开发中已经建立了一个名为A的的“类类”,又想另外建立一个名为又想另外建立一个名为B的的“类类”,而后者与前者内,而后者与前者内容基本相同,只是在前者的基础上增加一些属性和容基本相同,只是在前者的基础上增加一些属性和行为,只需在类行为,只需在类A的基础上增加一些新内容即可。这的基础上增加一些新内容即可。这就是面向对象程序设计中的继承机制。利用继承可就是面向对象程序设计中的继承机制。利用继承可以
12、简化程序设计的步骤。以简化程序设计的步骤。“白马白马”继承了继承了“马马”的基本特征,又增加了新的的基本特征,又增加了新的特征特征(颜色颜色),“马马”是父类,或称为基类,是父类,或称为基类,“白马白马”是从是从“马马”派生出来的,称为子类或派生类。派生出来的,称为子类或派生类。C+提供了继承机制,采用继承的方法可以很方便地提供了继承机制,采用继承的方法可以很方便地利用一个已有的类建立一个新的类。这就是常说的利用一个已有的类建立一个新的类。这就是常说的“软件重用软件重用”(software reusability)的思想。的思想。5.多态性多态性如果有几个相似而不完全相同的对象,有时人们要如果
13、有几个相似而不完全相同的对象,有时人们要求在向它们发出同一个消息时,它们的反应各不相求在向它们发出同一个消息时,它们的反应各不相同,分别执行不同的操作。这种情况就是多态现象。同,分别执行不同的操作。这种情况就是多态现象。如,在如,在Windows环境下,用鼠标双击一个文件对象环境下,用鼠标双击一个文件对象(这就是向对象传送一个消息这就是向对象传送一个消息),如果对象是一个可执,如果对象是一个可执行文件,则会执行此程序,如果对象是一个文本文行文件,则会执行此程序,如果对象是一个文本文件,则启动文本编辑器并打开该文件。件,则启动文本编辑器并打开该文件。在在C+中,所谓多态性中,所谓多态性(poly
14、morphism)是指:是指:由继由继承而产生的相关的不同的类,其对象对同一消息会承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的一作出不同的响应。多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。个重要特征,能增加程序的灵活性。传统的面向过程程序设计是围绕功能进行的,用一传统的面向过程程序设计是围绕功能进行的,用一个函数实现一个功能。所有的数据都是公用的,一个函数实现一个功能。所有的数据都是公用的,一个函数可以使用任何一组数据,而一组数据又能被个函数可以使用任何一组数据,而一组数据又能被多个函数所使用(见图多个函数所使用(见图8.3)。)。图图
15、8.38.1.2 面向对象程序设计的特点面向对象程序设计的特点面向对象程序设计采取的是另外一种思路。它面对面向对象程序设计采取的是另外一种思路。它面对的是一个个对象。实际上,每一组数据都是有特定的是一个个对象。实际上,每一组数据都是有特定的用途的,是某种操作的对象。也就是说,一组操的用途的,是某种操作的对象。也就是说,一组操作调用一组数据。作调用一组数据。程序设计者的任务包括两个方面:程序设计者的任务包括两个方面:一是设计所需的一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一各种类和对象,即决定把哪些数据和操作封装在一起;二是考虑怎样向有关对象发送消息,以完成所起;二是考虑怎样向有关
16、对象发送消息,以完成所需的任务。这时他如同一个总调度,不断地向各个需的任务。这时他如同一个总调度,不断地向各个对象发出命令,让这些对象活动起来对象发出命令,让这些对象活动起来(或者说激活这或者说激活这些对象些对象),完成自己职责范围内的工作。各个对象的,完成自己职责范围内的工作。各个对象的操作完成了,整体任务也就完成了。显然,对一个操作完成了,整体任务也就完成了。显然,对一个大型任务来说,面向对象程序设计方法是十分有效大型任务来说,面向对象程序设计方法是十分有效的,它能大大降低程序设计人员的工作难度,减少的,它能大大降低程序设计人员的工作难度,减少出错机会。出错机会。类是类是C+中十分重要的概
17、念,它是实现面向对象程序中十分重要的概念,它是实现面向对象程序设计的基础。类是所有面向对象的语言的共同特征,设计的基础。类是所有面向对象的语言的共同特征,所有面向对象的语言都提供了这种类型。一个有一所有面向对象的语言都提供了这种类型。一个有一定规模的定规模的C+程序是由许多类所构成的。程序是由许多类所构成的。C+支持面向过程的程序设计,也支持基于对象的程支持面向过程的程序设计,也支持基于对象的程序设计,又支持面向对象的程序设计。在本章到第序设计,又支持面向对象的程序设计。在本章到第10章将介绍基于对象的程序设计。包括类和对象的章将介绍基于对象的程序设计。包括类和对象的概念、类的机制和声明、类对
18、象的定义与使用等。概念、类的机制和声明、类对象的定义与使用等。这是面向对象的程序设计的基础。这是面向对象的程序设计的基础。8.1.3 类和对象的作用类和对象的作用基于对象就是基于类。与面向过程的程序不同,基基于对象就是基于类。与面向过程的程序不同,基于对象的程序是以类和对象为基础的,程序的操作于对象的程序是以类和对象为基础的,程序的操作是围绕对象进行的。在此基础上利用了继承机制和是围绕对象进行的。在此基础上利用了继承机制和多态性,就成为面向对象的程序设计多态性,就成为面向对象的程序设计(有时不细分基有时不细分基于对象程序设计和面向对象程序设计,而把二者合于对象程序设计和面向对象程序设计,而把二
19、者合称为面向对象的程序设计称为面向对象的程序设计)。基于对象程序设计所面对的是一个个对象。所有的基于对象程序设计所面对的是一个个对象。所有的数据分别属于不同的对象。数据分别属于不同的对象。在面向过程的结构化程序设计中,人们常使用这样在面向过程的结构化程序设计中,人们常使用这样的公式来表述程序:的公式来表述程序:程序程序=算法数据结构算法数据结构算法和数据结构两者是互相独立、分开设计的,面算法和数据结构两者是互相独立、分开设计的,面向过程的程序设计是以算法为主体的。在实践中人向过程的程序设计是以算法为主体的。在实践中人们逐渐认识到算法和数据结构是互相紧密联系不可们逐渐认识到算法和数据结构是互相紧
20、密联系不可分的,应当以一个算法对应一组数据结构,而不宜分的,应当以一个算法对应一组数据结构,而不宜提倡一个算法对应多组数据结构,以及一组数据结提倡一个算法对应多组数据结构,以及一组数据结构对应多个算法。基于对象和面向对象程序设计就构对应多个算法。基于对象和面向对象程序设计就是把一个算法和一组数据结构封装在一个对象中。是把一个算法和一组数据结构封装在一个对象中。因此,就形成了新的观念:因此,就形成了新的观念:对象对象=算法算法 数据结构数据结构程序程序=(对象对象+对象对象+对象对象+)+消息消息 或:或:程序程序=对象对象s+消息消息“对象对象s”表示多个对象。消息的作用就是对对象的控表示多个
21、对象。消息的作用就是对对象的控制。程序设计的关键是设计好每一个对象,及确定制。程序设计的关键是设计好每一个对象,及确定向这些对象发出的命令,使各对象完成相应操作。向这些对象发出的命令,使各对象完成相应操作。随着软件规模的迅速增大,软件人员面临的问题十随着软件规模的迅速增大,软件人员面临的问题十分复杂。需要规范整个软件开发过程,明确软件开分复杂。需要规范整个软件开发过程,明确软件开发过程中每个阶段的任务,在保证前一个阶段工作发过程中每个阶段的任务,在保证前一个阶段工作的正确性的情况下,再进行下一阶段的工作。这就的正确性的情况下,再进行下一阶段的工作。这就是软件工程学需要研究和解决的问题。是软件工
22、程学需要研究和解决的问题。面向对象的软件工程包括以下几个部分:面向对象的软件工程包括以下几个部分:8.1.4 面向对象的软件开发面向对象的软件开发1.面向对象分析面向对象分析(object oriented analysis,OOA)软件工程中的系统分析阶段,系统分析员要和用户软件工程中的系统分析阶段,系统分析员要和用户结合在一起,对用户的需求作出精确的分析和明确结合在一起,对用户的需求作出精确的分析和明确的描述,从宏观的角度概括出系统应该做什么的描述,从宏观的角度概括出系统应该做什么(而不而不是怎么做是怎么做)。面向对象的分析,要按照面向对象的概。面向对象的分析,要按照面向对象的概念和方法,
23、在对任务的分析中,从客观存在的事物念和方法,在对任务的分析中,从客观存在的事物和事物之间的关系,归纳出有关的对象和事物之间的关系,归纳出有关的对象(包括对象的包括对象的属性和行为属性和行为)以及对象之间的联系,并将具有相同属以及对象之间的联系,并将具有相同属性和行为的对象用一个类性和行为的对象用一个类(class)来表示。建立一个能来表示。建立一个能反映真实工作情况的需求模型。反映真实工作情况的需求模型。2.面向对象设计面向对象设计(object oriented design,OOD)根据面向对象分析阶段形成的需求模型,对每一部根据面向对象分析阶段形成的需求模型,对每一部分分别进行具体的设计
24、,首先是进行类的设计,类分分别进行具体的设计,首先是进行类的设计,类的设计可能包含多个层次的设计可能包含多个层次(利用继承与派生利用继承与派生)。然后以。然后以这些类为基础提出程序设计的思路和方法,包括对这些类为基础提出程序设计的思路和方法,包括对算法的设计。在设计阶段,并不牵涉某一种具体的算法的设计。在设计阶段,并不牵涉某一种具体的计算机语言,而是用一种更通用的描述工具计算机语言,而是用一种更通用的描述工具(如伪代如伪代码或流程图码或流程图)来描述。来描述。3.面向对象编程面向对象编程(object oriented programming,OOP)根据面向对象设计的结果,用一种计算机语言把
25、它根据面向对象设计的结果,用一种计算机语言把它写成程序,显然应当选用面向对象的计算机语言写成程序,显然应当选用面向对象的计算机语言(例例如如C+),否则无法实现面向对象设计的要求。否则无法实现面向对象设计的要求。4.面向对象测试面向对象测试(object oriented test,OOT)在写好程序后交给用户使用前,必须对程序进行严在写好程序后交给用户使用前,必须对程序进行严格的测试。测试的目的是发现程序中的错误并改正格的测试。测试的目的是发现程序中的错误并改正它。面向对象测试是用面向对象的方法进行测试,它。面向对象测试是用面向对象的方法进行测试,以类作为测试的基本单元。以类作为测试的基本单
展开阅读全文