第1章_面向对象的程序设计及C++概述.ppt_第1页
第1章_面向对象的程序设计及C++概述.ppt_第2页
第1章_面向对象的程序设计及C++概述.ppt_第3页
第1章_面向对象的程序设计及C++概述.ppt_第4页
第1章_面向对象的程序设计及C++概述.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象程序设计及C+,主讲:,第1章面向对象程序设计及C+概述,面向对象程序设计及C+,3,本章内容提要,面向过程的程序设计方法面向对象的程序设计方法面向对象的几个重要概念:类、对象、封装、继承、多态面向对象的程序设计语言C+与C语言的关系开发C+程序的过程及VC+6的使用,4,本章内容安排,1.1面向过程与面向对象1.2面向对象的基本概念及特征1.3面向对象的程序设计语言及C+1.4VC+6集成开发环境与C+程序1.5本章小结,结束本章,5,1.1.1面向过程的程序设计,核心思想:以功能为核心,数据与对数据处理的过程相分离。实现方法:自顶向下、逐步细化、模块化优点:直观有条理、结构清晰、模块化强。缺点:代码的可重用性差、模块之间依赖性强、不利于代码的维护和扩充。数据结构对整个程序公开,数据安全性差,6,1.1.1面向过程的程序设计,数据与对数据处理的过程相分离,其弊端表现在:一旦数据结构改变,与之相关的所有操作都必须改动,代码修改量大例如:一个简单的学生成绩管理系统用来管理若干个学生的信息。每个学生的信息包括学号、姓名、某门课的平时成绩、期末成绩、总评成绩和名次,总评成绩=平时成绩*0.3+期末成绩*0.7。主要操作:成绩的录入、计算、排名、输出。,7,1.1.1面向过程的程序设计,数据结构定义一个结构体typedefstructstudentScorecharnumber10;/学号charname10;/姓名intdailyScore;/平时成绩intfinalScore;/期末成绩floatgeneralScore;/总评成绩intplace;/名次SS;/结构体变量名C,intexperiScore;/后增项实验成绩,8,1.1.1面向过程的程序设计,操作数据的几个函数:voidreadData(SSstu,intn);/输入n个学生的学号、姓名、平时及期末成绩voidcalcuScore(SSstu,intn);/计算n个学生的总评成绩voidsortScore(SSstu,intn);/根据总评成绩排名,得出每个学生的place值voidprintOut(SSstu,intn);/按一定的格式输出n个学生的完整信息,9,1.1.1面向过程的程序设计,现在,需求改变了:在C语言课程中,需要增加实验成绩这一项,学生的总评成绩计算方法修改为:总评成绩=平时成绩*0.2+实验成绩*0.2+期末成绩*0.6。显然,类型SS中需要增加一个数据项intexperiScore;表示实验成绩。G同时,所有的函数代码都应该作相应地修改,10,1.1.1面向过程的程序设计,面向过程的程序设计的范型是:程序=算法+数据结构数据与对数据操作的分离导致软件维护(包括软件的测试、调试和升级)的困难。一种新型的程序设计方法面向对象的程序设计方法应运而生,它很好地解决了以上问题。,11,1.1.2面向对象的程序设计,核心思想:以数据为核心,将数据以及对这些数据的操作封装为一个整体实现方法:以类封装,以类的对象作为程序的基本元素,通过向对象发送消息,进而由对象启动相关的方法完成各种功能优点:数据安全、软件可靠、代码可重性可维护性强缺点:代码的效率有时会低,12,类与对象是抽象与具体的关系类包含:对象必然属于某一个类,且各有一个名字,有不同的数据成员值,可以进行相同的行为。,1.1.2面向对象的程序设计,成员函数:,数据成员:,一类对象的静态特性,一类对象的动态特性,13,1.1.2面向对象的程序设计,例如:人类,静态特性:,动态特性:,姓名,性别,年龄,身高,体重,身份,吃,穿,住,行,学习,工作,Person类,数据成员,成员函数,charname20,charsex8,intage,doubleheight,doubleweight,charidentity,voideat();,voiddress();,voidreside();,voidwalk();,voidstudy();,voidwork();,类对象名:teacher1,张虹,女,25,1.70,55.0,教师,14,前面成绩管理的例子,将结构体改造成一个类SS,其定义如下:classSSprivate:charnumber10;charname10;intdailyScore;intfinalScore;floatgeneralScore;intplace;,1.1.2面向对象的程序设计,public:/接口对外公开voidreadData();voidcalcuScore();voidprintOut();friendvoidsortScore(SSstu,intn);,15,此时的主函数代码为:voidmain()SSstu30;/定义30个学生类的对象inti,n=5;/对前5个学生执行下列操作for(i=0;in;i+)stui.readData();for(i=0;in;i+)stui.calcuScore();sortScore(stu,5);for(i=0;in;i+)stui.printOut();若在类SS中增加intexperiScore;表示实验成绩,总评成绩计算方法改变,则类的成员函数代码需做相应地改造,但主函数的代码不需做任何变动。,1.1.2面向对象的程序设计,16,几个结论:(1)面向对象的程序设计由类的定义和类的使用两部分组成(2)程序中的一切操作都是通过向对象发送消息来实现的,对象接收到消息后,启动有关方法完成相应的操作。(3)向对象发送消息的形式是:对象名.成员函数名(实在参数表)面向对象的程序设计范型为:程序=对象+消息。,1.1.2面向对象的程序设计,17,面向对象程序设计中最重要的两个概念:类和对象面向对象程序设计中最突出的特征是:封装性、继承性和多态性面向对象的程序设计围绕类的定义和类的使用展开的,1.1.2面向对象的程序设计,返回,18,类是对一组具有相同属性特征和行为特征的一类对象的高度抽象对象是类的具体的个体,是类的实例类与对象是一对抽象与具体的关系例1:教师是一个类,李老师则是教师类的一个对象。例2:上面的SS类,主函数中定义了5个对象,对象名分别为stu0、stu1、stu2、stu3、stu4。,1.2.1类与对象,19,1.2.1类与对象,类与对象的比较设计类是为了使用类,使用类的方式是定义该类的变量对象,通过对象实现特定功能;对象一定属于类,它具有什么样的静态属性值、可以有哪些动态行为取决于类的设计。,20,每一个对象有以下几个特征:(1)必须属于某一个类,必须有一个区别于同类型其他对象的对象名。(2)对象有自己的属性值,即每个对象的数据成员有特定的值来标识该对象的静态特性。(3)对象有一组类所规定的操作,每一个操作决定对象的一种动态行为,通过对象名.成员函数名(实在参数表)的形式实施这种行为。,1.2.1类与对象,21,封装性是面向对象程序设计的第一大特征,这一特性使得面向对象程序设计具有安全性和可靠性。生活中的封装例:MP4对外接口:面板上的各种控制按钮如:电源开关、菜单选择按钮、调节音量按钮等封装起来的:各种元器件、按下某按钮时其内部的元器件状态如何改变、如何参与工作等细节,1.2.2封装性,22,类中封装的成员:private属性的数据成员和成员函数protected属性的数据成员和成员函数public属性的成员函数具体实现代码类中未被封装的成员:public属性的数据成员public属性的成员函数原型对于类中封装的成员不可以用形如对象名.成员的形式直接访问,这种形式只可以访问未被封装的成员。,1.2.2封装性,23,例如前面讲过的学生类SS中:封装的信息有(1)所有的private数据成员:number、name、dailyScore、finalScore、generalScore、place。(3)所有的public成员函数的实现细节:voidreadData()voidcalcuScore()voidprintOut()公开的接口有:以上3个成员函数的原型,1.2.2封装性,24,因此在main()函数中通过类的对象可以直接访问类的接口成员:ssi.readData();ssi.calcuScore();ssi.voidprintOut();封装的单位实际上是属于某一个类的对象。因此,在封装之前需要仔细做好数据抽象和功能抽象的工作,明确类中哪些成员需要信息隐藏,哪些成员应该对外公开。,1.2.2封装性,25,继承性是面向对象程序设计的第二大特征,是面向对象的程序设计提高代码重用性的重要措施。继承表现了特殊类与一般类之间的上下分层关系,这种机制为程序员提供了一种组织、构造和重用类的手段。继承使一个类(称为基类或父类)的数据成员和成员函数能被另一个类(称为派生类或子类)重用。,1.2.3继承性,26,派生类中成员的构成:(1)从基类直接继承的数据成员和成员函数(2)派生类中新增加的数据成员和成员函数(3)对基类中某些成员的改造继承的优点:可以避免公共代码的重复开发,减少代码和数据冗余。,1.2.3继承性,27,类继承关系举例:以上为一个多层次的类继承关系,从继承源上分,可以有单一继承(如图中大学生类对学生类的继承)和多重继承(如图中在职大学生类是从大学生类和职工类多重继承)两种。,1.2.3继承性,28,多态性是面向对象程序设计的第三大重要特征。面向对象程序设计的多态性指的是一种行为对应着多种不同的实现。生活中的多态性举例:(1)发动汽车(2)发动火车(3)发动公民义务献血多态性有两种:静态多态性(也称为编译时的多态性)和动态多态性(也称运行时的多态性)。,1.2.4多态性,29,静态多态性:在同一个类、无继承关系的平行类、不属于任何类的普通函数中,同一个函数名对应着不同的实现代码。通过函数重载和运算符重载实现现态多态性。动态多态性:在一般类和它的各个派生类中,同一个函数名可以对应着不同的实现代码。需要通过继承、虚函数、基类的指针或引用实现动态多态性。这些知识在第5章中将会详细介绍。,1.2.4多态性,30,多态性的意义:用同一个接口实现不同的操作,直接使用类来进行程序开发非常方便。例如,为求面积,在三角形类、圆形类、正方形类、长方形类中都定义了函数getArea()。显然,为求相应图形的面积,实现的代码不一样。但用户在使用这些类的对象求面积时不必关心实现细节,直接调用该成员函数就可以了。,1.2.4多态性,返回,31,面向对象的程序设计语言应该具有以下几个特点:(1)支持对象的概念及对象所有的特点(2)要求对象属于类(3)提供类的继承机制从20世纪60年代开始,先后出现了Simula、Smalltalk、Object-C、Eiffel、Ada、C+和Java等面向对象的程序设计语言,每种语言各有其优势和应用领域。,1.3.1面向对象的程序设计语言概述,32,各种面向对象的程序设计语言简介:Simula67语言:20世纪60年代开发,被认为是面向对象程序设计语言的鼻祖,它提供了对象、类、继承的概念,提出了面向对象的术语,面向对象程序设计的许多原始思想都来源于此语言。Smalltalk语言:从20世纪70年代开始开发,它完整体现了来自于Simula以及其他早期原型语言中面向对象的概念,历经了Smalltalk-72、Smalltalk-76和Smalltalk-80几个版本,现在一般用Smalltalk-80,1.3.1面向对象的程序设计语言概述,33,各种面向对象的程序设计语言简介:Object-C语言:1983年左右开发,它在C语言的基础上进行了扩充,通过新引入的构造和运算符来完成类定义和消息传递,其语法更像Smalltalk。Eiffel语言:从理论上讲是最好的面向对象的程序设计语言,它除了封装和继承,还集成了几个强有力的面向对象的特征,如参数化多态性、对方法实施前置条件和后置断言等。,1.3.1面向对象的程序设计语言概述,34,各种面向对象的程序设计语言简介:Ada语言:开发工作始于1975年,其语法严谨、书写优美、可读性强,它提供了一系列功能来定义相关的数据类型(type)、对象(object)和操作(operation)的程序包(package),一度被美国国防部强制指定为军用武器系统的唯一开发语言。Java语言:由SUN公司在20世纪90年代初开发的一种面向对象的程序设计语言,其优点是简单、面向对象、不依赖于硬件结构、可移植性强、安全性高、能最大限度地利用网络,因此被广泛用于网络编程。,1.3.1面向对象的程序设计语言概述,35,C+语言的研发始于1980年,贝尔实验室的BjarneStroustrup对C语言进行改进和扩充,增加了对面向对象程序设计的支持。最初的成果称为“带类的C”,1983年正式取名为C+,在经历了3次修订后,于1994年制定了ANSIC+标准的草案,以后又经过不断完善,成为目前的C+,C+仍在不断地发展。C+是同时支持面向过程程序设计和面向对象程序设计的混合型语言,是目前应用最为广泛的高级程序设计语言。,1.3.2C+语言支持面向对象的程序设计,36,C+语言支持面向对象的编程表现在以下3个方面:支持封装性:C+语言允许使用类和对象。类是支持封装的工具,对象是封装的实体。通过public定义接口其余信息封装。支持继承性:C+语言同时支持单一继承和多重继承,实现了抽象和共享机制。支持多态性:C+语言同时支持静态多态性和动态多态性,1.3.2C+语言支持面向对象的程序设计,37,C+语言由C语言发展而来,兼容C语言,并对C语言作了改进和扩充,既支持面向过程的程序设计,又支持面向面向的程序设计。作为面向过程的程序设计语言,C+语言与C语言的关系可以用两个词概括继承和改进。,1.3.3C+语言与C语言的关系,38,C+语言继承了C语言:C语言是C+语言的一个子集。C语言的词法、语法和其他规则都可以用到C+语言中。C+语言保持了C语言简练明了的风格,也保留了C语言面向过程的特性。在利用C+进行面向过程的程序设计时,可以有多种方案,可以完全使用C语言风格,但是建议使用C+语言风格更为方便,1.3.3C+语言与C语言的关系,39,C+语言改进了C语言:C+语言虽然保留了C语言的风格和特点,但又针对C语言的某些不足做了改进例如:提供了更方便的输入/输出方法、灵活的const关键字的应用、新增引用的灵活应用、内联函数、函数重载、更方便的动态内存空间空间的管理等等。第2章将具体介绍C+在面向过程的程序设计

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论