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

下载本文档

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

文档简介

面向对象程序设计及C+,主讲:曹晓梅,第1章 面向对象程序设计及C+概述,面向对象程序设计及C+,3,本章作业 P23,书上:一、二 作业本:三(1、2),C+融合了三种不同的编程思想,4,面向过程编程,面向对象编程,通用模板 编程,面向对象编程,5,授课线索及内容,为什么引入面向对象程序设计方法? 从面向过程程序设计方法及其弊端谈起,面向对象程序设计方法及其核心思想,C语言和C+语言的关系,C+程序的开发和VC+的使用,本章核心问题 面向对象程序设计方法 的由来和核心思想,6,1. 面向过程程序设计思想,1.1 核心思想 1.2 实例说明 1.3 优缺点,7,1.1 核心思想,核心思想:程序=数据结构+算法,对数据进行处理的过程,待处理的数据,例如:一个简单的学生成绩管理系统用来管理若干个学生的信息。 每个学生的信息包括学号、姓名、某门课的平时成绩、期末成绩、总评成绩和名次,总评成绩=平时成绩*0.4+期末成绩*0.6。主要操作:成绩的录入、计算、排名、输出。,面向过程程序设计思想,8,1.2 实例说明,typedef struct studentScore char number10; /学号 char name10; /姓名 int dailyScore ; /平时成绩 int finalScore; /期末成绩 float generalScore; /总评成绩 int rate; /名次 SS;,数据,void readData(SS stu ,int n); /输入n个学生的学号、姓名、平时及期末成绩 void calcuScore(SS stu ,int n); /计算n个学生的总评成绩 void sortScore(SS stu ,int n); /根据总评成绩排名,得出每个学生的place值 void printOut(SS stu ,int n); /按一定的格式输出n个学生的完整信息,过程,面向过程程序设计思想,9,数据需求的改变 在C语言课程中,需要增加实验成绩这一项,学生的总评成绩计算方法修改为: 总评成绩=平时成绩*0.2+实验成绩*0.2+期末成绩*0.6。 显然,类型SS中需要增加一个数据项 int experiScore; 表示实验成绩。 同时,所有的函数代码都应该作相应地修改,1.2 实例说明,面向过程程序设计思想,10,1.3 面向过程程序设计的优缺点,采用自顶向下、逐步求精的方法: 直观有条理 结构清晰 模块化强,数据和过程的分离: 数据的安全性问题 代码的可维护性问题 代码的可重用性问题,面向对象程序 设计应运而生,面向过程程序设计思想,11,2. 面向对象程序设计思想,2.1 客观原型 2.2 核心思想 2.3 实例说明 2.4 两个概念和三个特性,12,2.1 客观原型,客观世界中的对象,是现实世界中一个实际存在的事物 有形(一台洗衣机)、无形(一项计划) 是构成世界的一个独立单位,具有:,有一个特定的名字以区别其他对象 有一组属性,用来描述对象的静态特征 有一组行为,用来描述对象的动态特征,类和对象,类是同类对象的抽象 对象是类的实例,抽象与具体的关系,面向对象程序设计思想,13,2.2 核心思想,核心思想:以数据为核心,将数据以及对这些数据的操作封装为一个整体。 I. 声明抽象的类,以类封装两类成员,成员函数:,数据成员:,一类对象的静态特性,一类对象的动态特性,类,II. 定义类的实例对象,以对象作为程序的基本元素,通过向对象发送消息,进而由对象启动相关的成员函数完成各种功能,程序=对象+消息,面向对象程序设计思想,14,2.3 实例说明,例如: 人类,静态特性:,动态特性:,姓名,性别,年龄,身高,体重,身份,吃,穿,住,行,学习,工作,Person类,数据成员,成员函数,char name20,char sex8,int age,double height,double weight,char career20,void eat();,void dress();,void reside();,void walk();,void study();,void work();,对象名: p1,张虹,女,25,1.70,55.0,教师,类和对象是抽象和具体的关系,面向对象程序设计思想,15,前面成绩管理的例子,将结构体改造成一个类SS,其定义如下: class SS private: char number10; char name10; int dailyScore; int finalScore ; float generalScore; int rate ;,public: /接口对外公开 void readData( ); void calcuScore( ); void printOut( ); friend void sortScore(SS stu ,int n) ; ;,2.3 实例说明,面向对象程序设计思想,16,此时的主函数代码为: void main( ) SS stu30; /定义30个学生类的对象 int i, 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中增加 int experiScore; 表示实验成绩,总评成绩计算方法改变,则类的成员函数代码需做相应地改造,但主函数的代码不需做任何变动。,2.3 实例说明,面向对象程序设计思想,17,几个结论: (1)面向对象的程序设计主要由类的定义和类的使用两部分组成。 (2)程序中的一切操作都是通过向对象发送消息来实现的,对象接收到消息后,启动有关函数完成相应的操作。 (3)向对象发送消息的形式是: 对象名.成员函数名(实在参数表),2.3 实例说明,面向对象程序设计思想,18,面向对象程序设计中最重要的两个概念:类和对象 面向对象程序设计中最突出的特征是:封装性、继承性、多态性,2.4 两个概念和三个特征,面向对象程序设计思想,19,类是对一组具有相同属性特征和行为特征的对象的高度抽象 对象是类的具体的个体,是类的实例 例1:Person是一个类p1则是该类的一个对象张虹是p1姓名属性的值。 例2:上面的SS类,主函数中定义了5个对象,对象名分别为stu0、stu1、stu2、stu3、stu4。,2.4.1 类与对象,面向对象程序设计思想,20,2.4.1 类与对象,类与对象的比较 设计类是为了使用类,使用类的方式是定义该类的变量对象,通过对象实现特定功能;对象一定属于类,它具有什么样的静态属性值、可以有哪些动态行为取决于类的设计。,面向对象程序设计思想,21,封装性是面向对象程序设计的第一大特征,这一特性使得面向对象程序设计具有安全性和可靠性。 生活中的封装 例:MP4 - 对外接口:面板上的各种控制按钮, 如:电源开关、菜单选择按钮、调节音量按钮等 - 隐藏起来的: 各种元器件 按下某按钮时其内部的元器件状态如何改变、如何参与工作等细节,2.4.2 封装性,面向对象程序设计思想,22,类中隐藏的成员: private属性的数据成员和成员函数 protected属性的数据成员和成员函数 public属性的成员函数具体实现代码 类中未被隐藏的成员: public属性的数据成员 public属性的成员函数原型,2.4.2 封装性,面向对象程序设计思想,只能被类中的成员函数直接访问!,可以被程序的所有代码直接访问!,改善了数据的安全性,ssi. readData(); ssi. calcuScore(); ssi. printOut();,23,例如前面讲过的学生类SS中: - 隐藏的信息有 (1)所有的private数据成员:number、name、dailyScore、finalScore、generalScore、 place 。 (2)所有的public成员函数的实现细节: void readData() void calcuScore() void printOut() - 公开的接口有:以上3个成员函数的原型,2.4.2 封装性,面向对象程序设计思想,24,继承性是面向对象程序设计的第二大特征,表现了类之间的上下层关系,使一个类(称为基类或父类)的数据成员和成员函数能被另一个类(称为派生类或子类)重用。,2.4.3 继承性,面向对象程序设计思想,继承的优点:提高代码的可重用性,避免公共代码的重复开发,减少代码和数据冗余。,25,类继承关系举例: 以上为一个多层次的类继承关系,从继承源上分,可以有单一继承和多重继承两种。 派生类中成员的构成: 1)从基类直接继承的数据成员和成员函数 2)派生类中新增加的数据成员和成员函数 3)对基类中某些成员的改造,2.4.3 继承性,面向对象程序设计思想,26,多态性是面向对象程序设计的第三大重要特征。面向对象程序设计的多态性指的是一种行为对应着多种不同的实现。,2.4.4 多态性,求面积,在三角形类、圆形类、正方形类、长方形类中都定义了函数getArea()。显然,为求相应图形的面积,实现的代码不一样。但用户在使用这些类的对象求面积时不必关心实现细节,直接调用该成员函数就可以了。,生活中的多态性举例: (1)发动汽车 (2)发动火车 (3)发动公民义务献血,面向对象程序设计思想,27,静态多态性 :在同一个类、无继承关系的平行类、不属于任何类的普通函数中,同一个函数名对应着不同的实现代码。通过函数重载和运算符重载实现现态多态性。 动态多态性:在一般类和它的各个派生类中,同一个函数名可以对应着不同的实现代码 。需要通过继承、虚函数、基类的指针或引用实现动态多态性。这些知识在第5章中将会详细介绍。,2.4.4 多态性,多态性有两种:静态多态性(也称为编译时的多态性)和动态多态性(也称运行时的多态性)。,面向对象程序设计思想,28,3. 面向程序设计语言及C+,3.1 面向对象程序设计语言概述 3.2 C+ 3.3 C+语言和C语言的关系,29,面向对象的程序设计语言应该具有以下几个特点 : (1)支持对象的概念及对象所有的特点 (2)要求对象属于类 (3)提供类的继承机制 从20世纪60年代开始,先后出现了Simula、Smalltalk、Object-C、Eiffel、Ada、C+和Java等面向对象的程序设计语言,每种语言各有其优势和应用领域。,3.1 面向对象的程序设计语言概述,面向对象程序设计语言及C+,30,C+语言的研发始于1980年,对C语言进行改进和扩充,增加了对面向对象程序设计的支持。最初的成果称为“带类的C”,1983年正式取名为C+,在经历了3次修订后,于1994年制定了ANSI C+标准的草案,以后又经过不断完善,成为目前的C+。 C+是同时支持面向过程程序设计和面向对象程序设计的混合型语言,是目前应用最为广泛的高级程序设计语言。,3.2 C+语言,面向对象程序设计语言及C+,31,C+语言支持面向对象的编程表现在以下3个方面: 支持封装性:C+语言允许使用类和对象。类是支持封装的工具,对象是被封装的实体 。通过public定义接口,其余信息封装。 支持继承性 :C+语言同时支持单一继承和多重继承 ,实现了抽象和共享机制。 支持多态性 :C+语言同时支持静态多态性和动态多态性 。,3.2 C+语言,面向对象程序设计语言及C+,32,C+语言由C语言发展而来,兼容C语言,并对C语言作了继承和改进,既支持面向过程的程序设计,又支持面向面向的程序设计。,3.3 C+语言与C语言的关系,面向对象程序设计语言及C+,33,C+语言继承了C语言 : C语言是C+语言的一个子集。C语言的词法、语法和其他规则都可以用到C+语言中。 C+语言保持了C语言简练明了的风格,也保留了C语言面向过程的特性。,3.3 C+语言与C语言的关系,面向对象程序设计语言及C+,34,C+语言改进了C语言 : C+语言虽然保留了C语言的风格和特点,但又针对C语言的某些不足做了改进 例如:提供了更方便的输入/输出方法、灵活的const关键字的应用、新增引用的灵活应用、内联函数、函数重载、更方便的动态内存空间的管理等等。 第2章将具体介绍C+在面向过程的程序设计方面对C语言的改进和扩充。,3.3 C+语言与C语言的关系,面向对象程序设计语言及C+,35,与开发其他高级语言的程序一样,开发一个C+程序包括编辑、编译、链接和运行几个步骤。 当然,在编辑源程序之前,还需要有一些准备工作要做: 分析:解决“做什么”的问题 设计:解决“怎么做”的问题 编码:根据设计编写代码,为编辑做准备,4. C+程序的开发过程,C+程序的开发过程,36,4. C+程序的开发过程,做什么,编写代码,怎么做,扩展名为.cpp的源文件 扩展名为.h的头文件,扩展名为.obj的目标文件,扩展名为.exe的 可执行文件,C+程序的开发过程,37,C+程序的开发在特定的集成开发环境(IDE)下进行,集成环境中提供了编辑器、编译器、链接器、调试器等多种工具,使得程序员从源程序的编辑到最后的运行均可在集成环境中完成。目前常用的C+集成环境有Turbo C+、Microsoft Visual C+、Borland C+、Magic C+等,本教材中的源程序都是在

温馨提示

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

评论

0/150

提交评论