面向对象程序设计中的概念课件.ppt
《面向对象程序设计中的概念课件.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计中的概念课件.ppt(125页珍藏版)》请在三一办公上搜索。
1、1,1.对象客观世界中任何一个事物都可以看成一个对象(object)。对象可大可小。对象是构成系统的基本单位。一个对象往往是由一组属性和一组行为构成的。2.封装与信息隐蔽面向对象程序设计方法的一个重要特点就是“封装性”(encapsulation),所谓“封装”,指两方面的含义:一、将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。二、将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。信息隐蔽还有利于数据安全,防止无关的人了解和修改数据。,面向对象程序设计中的概念,2,3.抽象在程序设计方法中,常用到抽象(abs
2、traction)这一名词。抽象的过程是将有关事物的共性归纳、集中的过程。抽象的作用是表示同一类事物的本质。C+中的类就是对一批具体的数的抽象。类是对象的抽象,而对象则是类的特例,或者说是类的具体表现形式。4.继承与重用如果在软件开发中已经建立了一个名为A的“类”,又想另外建立一个名为B的“类”,而后者与前者内容基本相同,只是在前者的基础上增加一些属性和行为,只需在类A的基础上增加一些新内容即可。这就是面向对象程序设计中的继承机制。利用继承可以简化程序设计的步骤。C+提供了继承机制,采用继承的方法可以很方便地利用一个已有的类建立一个新的类。这就是常说的“软件重用”的思想。,3,5.多态性如果有
3、几个相似而不完全相同的对象,有时人们要求在向它们发出同一个消息时,它们的反应各不相同,分别执行不同的操作。这种情况就是多态现象。如,在Windows环境下,用鼠标双击一个文件对象(这就是向对象传送一个消息),如果对象是一个可执行文件,则会执行此程序,如果对象是一个文本文件,则启动文本编辑器并打开该文件。在C+中,所谓多态性(polymorphism)是指:由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。,4,传统的面向过程程序设计是围绕功能进行的,用一个函数实现一个功能。所有的数据都是公用的,一个函数可以使用任何一组数
4、据,而一组数据又能被多个函数所使用(见图8.3)。,面向对象程序设计的特点,5,面向对象程序设计采取的是另外一种思路。程序设计者的任务包括两个方面:一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起;二是考虑怎样向有关对象发送消息,以完成所需的任务。这时它如同一个总调度,不断地向各个对象发出命令,让这些对象活动起来(或者说激活这些对象),完成自己职责范围内的工作。各个对象的操作完成了,整体任务也就完成了。显然,对一个大型任务来说,面向对象程序设计方法是十分有效的,它利用代码的重用,大大降低程序设计人员的工作难度,减少出错机会。,6,类是C+中十分重要的概念,它是实现面向对象程序设计的
5、基础。类是所有面向对象的语言的共同特征,所有面向对象的语言都提供了这种类型。一个有一定规模的C+程序是由许多类所构成的。面向对象的软件工程是面向对象方法在软件工程领域的全面应用。它包括:面向对象的分析(OOA)面向对象的设计(OOD)面向对象的编程(OOP)Object-Oriented Programming面向对象的测试(OOT)面向对象的软件维护(OOSM),类和对象的作用,7,类是用户自己定义的类型。如果程序中要用到类类型,必须自己根据需要进行声明,或者使用别人已设计好的类。类(class)就是对象的类型。类是一种广义的数据类型。类这种数据类型中的数据既包含数据,也包含操作数据的函数。
6、不能把类中的全部成员与外界隔离,一般是把数据隐蔽起来,而把成员函数作为对外界的接口。class Student/声明类类型 private:/声明以下部分为私有的int num;char name20;char sex;public:/声明以下部分为公用的void display()coutnum:numendl;coutname:nameendl;coutsex:sexendl;Student stud1,stud2;/定义了两个Student 类的对象,声明类类型,8,类的成员函数(简称类函数)是函数的一种,它的用法和作用和函数基本上是一样的,它也有返回值和函数类型。它与一般函数的区别只是
7、:它是属于一个类的成员,出现在类体中。一般的做法是将需要被外界调用的成员函数指定为public,它们是类的对外接口。注意,并非要求把所有成员函数都指定为public。有的函数并不是准备为外界调用的,而是为本类中的成员函数所调用的,就应该将它们指定为private。这种函数的作用是支持其他函数的操作,是类中其他成员的工具函数(utility function),类外用户不能调用这些私有的工具函数。类的成员函数是类体中十分重要的部分。如果一个类中不包含成员函数,就等同于C语言中的结构体了,体现不出类在面向对象程序设计中的作用。,类的成员函数成员函数的性质,9,在前面的成员函数是在类体中定义的。也可
8、以在类体中只写成员函数的声明,而在类的外面进行函数定义。如:class Student public:void display();/公用成员函数原型声明 private:int num;string name;char sex;/以上3行是私有数据成员;void Studentdisplay()/在类外定义display类函数 coutnum:numendl;/函数体 coutname:nameendl;coutsex:sexendl;Student stud1,stud2;/定义两个类对象注意:成员函数在类外定义时,必须在函数名前面加上类名,予以限定(qualifed),“”是作用域运算符
9、,用它声明函数是属于哪个类的。,在类外定义成员函数,10,用类去定义对象时,系统会为每一个对象分配存储空间。如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间。按理说,如果用同一个类定义了10个对象,那么就需要分别为10个对象的数据和函数代码分配存储单元,如图所示。,成员函数的存储方式,11,能否只用一段空间来存放这个共同的函数代码段,在调用各对象的函数时,都去调用这个公用的函数代码。如图所示。显然,这样做会大大节约存储空间。C+编译系统正是这样做的,因此每个对象所占用的存储空间只是该对象的数据部分所占用的存储空间,而不包括函数代码所占用的存储空间。,12,例:8-1-(1).c
10、pp,#includeiostreamusing namespace std;class Timepublic:int hour;int minute;int sec;void set();void Time:set()cinhourminutesec;int main()Time t1,t2;coutsizeof(Time)endl;coutsizeof(t1)endl;coutsizeof(t1)endl;return 0;,13,C+通过类来实现封装性,把数据和与这些数据有关的操作封装在一个类中。公用成员函数是用户使用类的公用接口,或称类的对外接口。类中被操作的数据是私有的,实现的细节对
11、用户是隐蔽的,这种实现称为私有实现(private implementation)。这种“类的公用接口与私有实现的分离”形成了信息隐蔽。软件工程的一个最基本的原则就是将接口与实现分离,它的好处在于:(1)如果想修改或扩充类的功能,只需修改本类中有关的数据成员和与它有关的成员函数,程序中类外的部分可以不必修改。(2)如果在编译时发现类中的数据读写有错,不必检查整个程序,只需检查本类中访问这些数据的少数成员函数。,类的封装性和信息隐蔽 公用接口与私有实现的分离,14,在面向对象的程序开发中,一般做法是将类的声明放在指定的头文件中,用户如果想用该类,只要把有关的头文件包含进来即可,不必在程序中重复书
12、写类的声明,提高编程的效率。由于在头文件中包含了类的声明,因此在程序中就可以用该类来定义对象。由于在类体中包含了对成员函数的声明,在程序中就可以调用这些对象的公用成员函数。为了实现信息隐蔽,对类成员函数的定义一般不放在头文件中,而另外放在一个文件中。,类声明和成员函数定义的分离,15,/student.h(头文件可以包括:外部变量声明、函数原型声明、类声明、常量声明、内联函数和typedef声明,该头文件则进行类的声明)class Student/类声明 public:void display();/公用成员函数原型声明private:int num;char name20;char sex;
13、/student.cpp/在此文件中进行函数的定义#include#include“student.h”/不要漏写此行,否则编译通不过Using namespace std;void Studentdisplay()/在类外定义display类函数coutnum:numendl;coutname:nameendl;coutsex:sexendl;,类声明和成员函数定义的分离,16,为了组成一个完整的源程序,还应当有包括主函数的源文件:/main.cpp 主函数模块/#include#include“student.h”/将类声明头文件包含进来/using namespace std;int m
14、ain()Student stud;/定义对象 stud.display();/执行stud对象的display函数 return 0;这是一个包括3个文件的程序,组成两个文件模块:一个是主模块main.cpp,一个是student.cpp。在主模块中又包含头文件student.h。在预编译时会将头文件student.h中的内容取代#include student.h行。,17,请注意:由于将头文件student.h放在用户当前目录中,因此在文件名两侧用双撇号包起来(student.h)而不用尖括号(),否则编译时会找不到此文件。,18,由于要求接口与实现分离,为软件开发商向用户提供类库创造了
15、很好的条件。开发商把用户所需的各种类的声明按类放在不同的头文件中,同时对包含成员函数定义的源文件进行编译,得到成员函数定义的目标代码。软件商向用户提供这些头文件和类的实现的目标代码(不提供函数定义的源代码)。用户在使用类库中的类时,只需将有关头文件包含到自己的程序中,并且在编译后连接成员函数定义的目标代码即可。由于类库的出现,用户可以像使用零件一样方便地使用在实践中积累的通用的或专用的类,这就大大减少了程序设计的工作量,有效地提高了工作效率。,19,在面向对象程序理论中,“方法”是指对数据的操作。一个“方法”对应一种操作。显然,只有被声明为公用的方法(成员函数)才能被对象外界所激活。外界是通过
16、发“消息”来激活有关方法的。所谓“消息”,其实就是一个命令,由程序语句来实现。stud.display();就是向对象stud发出的一个“消息”,通知它执行其中的display“方法”(即display函数)。上面这个语句涉及3个术语:对象、方法和消息。stud是对象,display()是方法,语句“stud.display();”是消息。,面向对象程序设计中的几个名词,20,例8.3 将程序用含成员函数的类来处理。#include using namespace std;class Timepublic:void set_time();/公用成员函数void show_time();/公用成
17、员函数 private:/数据成员为私有int hour;int minute;int sec;int main()Time t1;/定义对象t1 t1.set_time();/调用对象t1的成员函数set_time,向t1的数据成员输入数据 t1.show_time();/调用对象t1的成员函数show_time,输出t1的数据成员的值 Time t2;/定义对象t2,类和对象的简单应用举例,21,t2.set_time();/调用对象t2的成员函数set_time,向t2的数据成员输入数据 t2.show_time();/调用对象t2的成员函数show_time,输出t2的数据成员的值 r
18、eturn 0;void Timeset_time()/在类外定义set_time函数 cinhour;cinminute;cinsec;void Timeshow_time()/在类外定义show_time函数 couthour:minute:secendl;,22,例8.4 找出一个整型数组中的元素的最大值。这个问题可以不用类的方法来解决,现在用类来处理,读者可以比较不同方法的特点。#include using namespace std;class Array_max/声明类public:/以下3行为成员函数原型声明void set_value();/对数组元素设置值void max_v
19、alue();/找出数组中的最大元素void show_value();/输出最大值private:int array10;/整型数组int max;/max用来存放最大值;void Array_max:set_value()/成员函数定义,向数组元素输入数值 int i;for(i=0;iarrayi;,23,void Array_max:max_value()/成员函数定义,找数组元素中的最大值 int i;max=array0;for(i=1;imax)max=arrayi;void Array_max:show_value()/成员函数定义,输出最大值 cout“max=”maxend
20、l;int main()Array_max arrmax;/定义对象arrmax arrmax.set_value();/调用arrmax的set_value函数,向数组元素输入数值 arrmax.max_value();/调用arrmax的max_value函数,找出数组元素中的最大值 arrmax.show_value();/调用arrmax的show_value函数,输出数组元素中的最大值 return 0;/运行结果如下:12 12 39-34 17 134 045-91 76(输入10个元素的值)max=134(输入10个元素中的最大值),24,C+提供了构造函数(construct
21、or)来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。构造函数的名字必须与类名同名,而不能由用户任意命名,以便编译系统能识别它并把它作为构造函数处理。它不具有任何类型,不返回任何值。构造函数的功能是由用户定义的,用户根据初始化的要求设计函数体和函数参数。,构造函数的作用,25,例9.1 在例8.3基础上定义构造成员函数。#include using namespace std;class Timepublic:Time()/定义构造成员函数,函数名与类名相同 hour=0;/利用构造函数对对象中的数据成员赋初值 minute=
22、0;sec=0;void set_time();/函数声明void show_time();/函数声明private:int hour;/私有数据成员int minute;int sec;,26,void Timeset_time()/定义成员函数,向数据成员赋值cinhour;cinminute;cinsec;void Timeshow_time()/定义成员函数,输出数据成员的值 couthour:minute:secendl;int main()Time t1;/建立对象t1,同时调用构造函数t1.Time()t1.set_time();/对t1的数据成员赋值 t1.show_time(
23、);/显示t1的数据成员的值 Time t2;/建立对象t2,同时调用构造函数t2.Time()t2.show_time();/显示t2的数据成员的值 return 0;/程序运行的情况为:10 25 54(从键盘输入新值赋给t1的数据成员)10:25:54(输出t1的时、分、秒值)0:0:0(输出t2的时、分、秒值),27,有关构造函数的使用,有以下说明:(1)在类对象进入其作用域时调用构造函数,因此主函数中不需要指定调用构造函数,这是它和一般函数的一个重要的不同之点;(2)构造函数不需用户调用,也不能被用户调用;(3)构造函数没有返回值;(4)如果用户自己没有定义构造函数,则C+系统会自动
24、生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。,28,例9.2 有两个长方柱,其长、宽、高分别为:(1)12,20,25;(2)15,30,21。求它们的体积。#include using namespace std;class Boxpublic:Box(int,int,int);/声明带参数的构造函数 int volume();/声明计算体积的函数 private:int height;int width;int length;BoxBox(int h,int w,int len)/在类外定义带参数的构造函数 height=h;width=w;length
25、=len;int Boxvolume()/定义计算体积的函数 return(height*width*length);,带参数的构造函数,29,int main()Box box1(12,25,30);/建立对象box1,并指定box1长、宽、高的值 coutThe volume of box1 is box1.volume()endl;Box box2(15,30,21);/建立对象box2,并指定box2长、宽、高的值 coutThe volume of box2 is box2.volume()endl;return 0;程序运行结果如下:The volume of box1 is 90
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 中的 概念 课件
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-3000369.html