谭浩强版《c++程序设计》 第8章n

上传人:简****9 文档编号:98446548 上传时间:2019-09-11 格式:PPT 页数:75 大小:294KB
返回 下载 相关 举报
谭浩强版《c++程序设计》 第8章n_第1页
第1页 / 共75页
谭浩强版《c++程序设计》 第8章n_第2页
第2页 / 共75页
谭浩强版《c++程序设计》 第8章n_第3页
第3页 / 共75页
谭浩强版《c++程序设计》 第8章n_第4页
第4页 / 共75页
谭浩强版《c++程序设计》 第8章n_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《谭浩强版《c++程序设计》 第8章n》由会员分享,可在线阅读,更多相关《谭浩强版《c++程序设计》 第8章n(75页珍藏版)》请在金锄头文库上搜索。

1、第8章 类和对象 第9章 关于类和对象的进一步讨论 第10章 运算符重载,第3篇 基于对象的程序设计,第8章 类和对象,8.1 面向对象程序设计方法概述 8.2 类的声明和对象的定义 8.3 类的成员函数 8.4 对象成员的引用 8.5 类的封装性和信息隐蔽 8.6 类和对象的简单应用举例,面向过程的程序设计:适合规模比较小的程序。当程序规模较大时,就显得力不从心了。 面向对象程序设计:为了解决编写大程序过程中的困难而产生的。,8.1 面向对象程序设计方法概述,面向对象的程序设计的思路和人们日常生活中处理问题的思路是相似的。是对自然世界和社会生活的抽象和模拟。 下面先讨论几个有关的概念。,8.

2、1.1 什么是面向对象的程序设计,1. 对象 客观世界中任何一个事物都可以看成一个对象(object)。 对象可大可小。对象是构成系统的基本单位。 对象的构成:任何一个对象都应当具有这两个要素,即属性(attribute)和行为(behavior),它能根据外界给的信息进行相应的操作。一个对象往往是由一组属性和一组行为构成的。 对象间的交互或对象的调用:要使某一个对象实现某一种行为(即操作),应当向它传送相应的消息。对象之间就是这样通过发送和接收消息互相联系的。,图8.1 图8.2,面向对象的程序设计的思路: 设计一个复杂的软件系统时,首要确定该系统是由哪些对象组成的,并且设计这些对象。 在C

3、+中,每个对象都是由数据和函数(即操作代码)这两部分组成的,见图8.2。数据体现了前面提到的“属性”,如一个三角形对象,它的3个边长就是它的属性。函数是用来对数据进行操作的,以便实现某些功能,例如可以通过边长计算出三角形的面积,并且输出三角形的边长和面积。计算三角形面积和输出有关数据就是前面提到的行为,在程序设计方法中也称为方法(method)。 调用对象中的函数就是向该对象传送一个消息(message),要求该对象实现某一行为(功能)。,2. 封装与信息隐蔽 可以对一个对象进行封装处理,把它的一部分属性和功能对外界屏蔽,优点:大大降低了操作对象的复杂程度。 所谓“封装”,指两方面的含义: (

4、1)一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。 (2)二是将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。信息隐蔽有利于数据安全,防止无关的人了解和修改数据。,C+的对象中的函数名就是对象的对外接口,外界可以通过函数名来调用这些函数来实现某些行为(功能)。这些将在以后详细介绍。,3. 抽象(类的产生) 抽象的过程是将有关事物的共性归纳、集中的过程。 抽象的作用:是表示同一类事物的本质。C和C+中的数据类型就是对一批具体的数的抽象。 对象是具体存在的,类是对象的抽象,而对象则是类的特例,或者说是类的具

5、体表现形式。,4. 继承与重用 什么叫继承?优点? 已经设计了一个大学生类A,再设计研究生类B。 只是在前者的基础上增加一些属性和行为,只需在类A的基础上增加一些新内容即可。这就是面向对象程序设计中的继承机制。利用继承可以简化程序设计的步骤。软件重用的实现。 “白马”继承了“马”的基本特征,又增加了新的特征(颜色),“马”是父类,或称为基类,“白马”是从“马”派生出来的,称为子类或派生类。 C+提供了继承机制,采用继承的方法可以很方便地利用一个已有的类建立一个新的类。这就是常说的“软件重用”(software reusability) 的思想。,5. 多态性 (概念,优点) 如果有几个相似而不

6、完全相同的对象,有时人们要求在向它们发出同一个消息时,它们的反应各不相同,分别执行不同的操作。这种情况就是多态现象。如,在Windows环境下,用鼠标双击一个文件对象(这就是向对象传送一个消息),如果对象是一个可执行文件,则会执行此程序,如果对象是一个文本文件,则启动文本编辑器并打开该文件。 在C+中,所谓多态性(polymorphism)是指: 由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。,传统的面向过程程序设计是围绕功能进行的,用一个函数实现一个功能。所有的数据都是公用的,一个函数可以使用任何一组数据,而一组数

7、据又能被多个函数所使用(见图8.3)。 图8.3,8.1.2 面向对象程序设计的特点,面向对象程序设计采取的思路: 程序设计者的任务包括两个方面: 一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起;二是考虑怎样向有关对象发送消息,以完成所需的任务。这时他如同一个总调度,不断地向各个对象发出命令,让这些对象活动起来(或者说激活这些对象),完成自己职责范围内的工作。各个对象的操作完成了,整体任务也就完成了。 优点:对一个大型任务来说,面向对象程序设计方法是十分有效的,它能大大降低程序设计人员的工作难度,减少出错机会。,类是C+中十分重要的概念,它是实现面向对象程序设计的基础。一个有一定

8、规模的C+程序是由许多类所构成的。 C+支持面向过程的程序设计,也支持基于对象的程序设计,又支持面向对象的程序设计。,8.1.3 类和对象的作用,基于对象就是基于类:与面向过程的程序不同,基于对象的程序是以类和对象为基础的,程序的操作是围绕对象进行的。在此基础上利用了继承机制和多态性,就成为面向对象的程序设计(有时不细分基于对象程序设计和面向对象程序设计,而把二者合称为面向对象的程序设计)。 面向过程的结构化程序设计,公式来表述程序: 程序=算法数据结构,基于对象和面向对象程序设计:就是把一个算法和一组数据结构封装在一个对象中。因此,就形成了新的观念: 对象 = 算法 数据结构 程序 = (对

9、象+对象+对象+) + 消息 或: 程序 = 对象s + 消息 “对象s”表示多个对象。消息的作用就是对对象的控制。 程序设计的关键:是设计好每一个对象,及确定向这些对象发出的命令,使各对象完成相应操作。,随着软件规模的迅速增大,软件人员面临的问题十分复杂。需要规范整个软件开发过程,明确软件开发过程中每个阶段的任务,在保证前一个阶段工作的正确性的情况下,再进行下一阶段的工作。这就是软件工程学需要研究和解决的问题。 面向对象的软件工程包括以下几个部分:,8.1.4 面向对象的软件开发,1. 面向对象分析(object oriented analysis,OOA) 从宏观的角度概括出系统应该做什么

10、(而不是怎么做)。 面向对象的分析,要按照面向对象的概念和方法,在对任务的分析中,从客观存在的事物和事物之间的关系,归纳出有关的对象(包括对象的属性和行为)以及对象之间的联系,并将具有相同属性和行为的对象用一个类(class)来表示。,2. 面向对象设计(object oriented design,OOD) 首先是进行类的设计,类的设计可能包含多个层次(利用继承与派生)。然后以这些类为基础提出程序设计的思路和方法,包括对算法的设计。 3. 面向对象编程(object oriented programming, OOP) 根据面向对象设计的结果,用一种计算机语言把它写成程序,显然应当选用面向对

11、象的计算机语言(例如C+),否则无法实现面向对象设计的要求。,4. 面向对象测试(object oriented test,OOT) 在写好程序后交给用户使用前,必须对程序进行严格的测试。测试的目的是发现程序中的错误并改正它。面向对象测试是用面向对象的方法进行测试,以类作为测试的基本单元。 5. 面向对象维护(object oriented soft maintenance, OOSM) 因为对象的封装性,修改一个对象对其他对象影响很小。利用面向对象的方法维护程序,大大提高了软件维护的效率。,现在设计一个大的软件,是严格按照面向对象软件工程的5个阶段进行的,这5个阶段的工作不是由一个人从头到尾

12、完成的,而是由不同的人分别完成的。 如果所处理的是一个较简单的问题,可以不必严格按照以上5个阶段进行,往往由程序设计者按照面向对象的方法进行程序设计,包括类的设计(或选用已有的类)和程序的设计。,在C+中对象的类型称为类(class)。类代表了某一批对象的共性和特征。 类是对象的抽象,而对象是类的具体实例(instance)。类似前面的结构:先声明一个结构体类型,然后用它去定义结构体变量。同一个结构体类型可以定义出多个不同的结构体变量。,8.2 类的声明和对象的定义 8.2.1 类和对象的关系,在C+中也是先声明一个类类型,然后用它去定义若干个同类型的对象。对象就是类类型的一个变量。可以说类是

13、对象的模板,是用来定义对象的一种抽象类型。 类是抽象的,不占用内存,而对象是具体的,占用存储空间。 弄清对象和类的关系? 搞清声明和定义的区别?,类是用户自己指定的类型。如果程序中要用到类类型,必须自己根据需要进行声明,或者使用别人已设计好的类。C+标准本身并不提供现成的类的名称、结构和内容。 下面是声明一个结构体类型的方法: struct Student /声明了一个名为Student的结构体类型 int num; char name20; char sex; ; Student stud1,stud2; /定义了两个结构体变量stud1和stud2,8.2.2 声明类类型,它只包括数据,没

14、有包括操作。现在声明一个类: class Student /以class开头 int num; char name20; char sex; /以上3行是数据成员 void display( ) /这是成员函数 coutnum:numendl; coutname:nameendl; coutsex:sexendl; ; Student stud1,stud2; /定义了两个Student 类的对象stud1和stud2,类(class)就是对象的类型。类是一种广义的数据类型。类这种数据类型中的数据既包含数据,也包含操作数据的函数。 一般是把数据隐蔽起来,而把成员函数作为对外界的接口。 clas

15、s Student /声明类类型 private: /声明以下部分为私有的 int num; char name20; char sex; public: /声明以下部分为公用的 void display( ) coutnum:numendl; coutname:nameendl; coutsex:sexendl; ; Student stud1,stud2; /定义了两个Student 类的对象,如果在类的定义中既不指定private,也不指定public,则系统就默认为是私有的。 对类类型的声明的一般形式如下: class 类名 private: 私有的数据和成员函数; public: 公用的数据和成员函数; ; private和public称为成员访问限定符(member access specifier)。,除了private和public之外,还有一种成员访问限定符protected(受保护的),用protected声明的成员称为受保护的成员,它不能被类外访问(这点与私有成员类似),但可以被派生类的成员函数访问。 在声明类类型时,声明为private的成员和声明为public的成员的次序任意,既可以先出现private部分,也可以先出现public部分。如果在类体中既不写关键字private,又不写public,就默认为privat

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号