1、面向对象程序设计,Object Oriented Programming,教师:姜 玥,1/56,资源,http:/ 密码:20021-5,2/56,第1章 绪论,要点,程序设计程序设计语言C+,3/56,计算机发展史,1.1 程序设计与程序设计语言,4/56,主机,计算机系统,系统软件,硬件系统,外部设备,软件系统,应用软件,CPU,内存,输入设备,输出设备,外存储器,编程语言,汇编语言、高级语言,操作系统、编译程序,数据处理、信息管理,5/56,计算机-20世纪人类带给21世纪的最有价值的礼物,人类文明历史上最伟大的发明之一;,1.计算机与程序设计,计算机与其他发明的主要差别,发明器官的延
2、长/替代;计算机人脑功能的延长/替代电脑; 发明应用在各不同的局部领域;计算机应用在几乎所有的人类活动的领域。,6/56,程序(软件)是计算机的必要组成部分,硬件计算机软件程序设计,软件开发,计算机产业(硬软件的研究、设计和生产)是进行程序设计与开发,程序:要计算机完成某任务所规定的一系列动作步骤。,程序设计的工作量无止境,极困难复杂又富有魅力和创造乐趣,7/56,-计算机唯一可以读懂的语言指令=指令码+地址码的固定长度的2进制位串,2.程序设计语言,程序设计的任务,-用计算机懂得的语言(程序设计语言)编写程序,交给它去执行。,计算机指令系统,机器语言,机器语言程序设计,把计算机完成的任务分解
3、为指令表/指令系统包括的动作,以指令序列的形式写出。,8/56,低级编程语言,汇编程序的出现背景,机器易懂,但对人不方便。汇编程序: “汇编语言”翻译为“机器语言”。,汇编语言,-用人比较习惯的符号代替指令编码,低级语言,-汇编语言和机器语言,9/56,依赖于机器,可移植性差 代码冗长,不易于编写大规模程序 可读性差,可维护性差,低级语言的共同点,语言结构以面向机器的指令序列形式为主,与人的习惯语言方式距离较远。,低级语言的共同缺点,10/56,高级程序设计语言,编译系统/编译器,设计人们习惯的高级语言规范;当时计算机主要是工程计算, 描述计算任务的高级语言的主要是数学表达式。 设计编译程序:
4、把高级语言写的对计算任务的描述翻译为机器语言的指令序列。,例:5*x+3;,11/56,FORTRAN语言-标志着计算机技术的新的里程碑,高级程序设计语言及其编译系统的帮助, 人们可编制出规模越来越大,结构越来越复杂 的程序。计算机的应用领域不断扩展,计算机 技术发展到今天的局面,没有高级语言及编译 技术的突破是不可能实现的。,12/56,高级程序设计语言的特点,严格的结构化形式丰富完备的数据类型运行效率高查错能力强,13/56,3.程序设计方法理论的发展,程序设计技术的发展过程,计算机诞生,von Neumann模式形成,低级语言编程是主要开发形式;,14/56,3.程序设计方法理论的发展,
5、程序设计技术的发展过程,计算机在工程计算领域的成功应用; 低级语言程序设计-推广计算机应用的主要障碍; 第1代高级语言诞生,Fortran和Algol_60为代表,表达式处理为重点,重视目标代码的效率;,15/56,计算机应用在5/60年代的发展,包括宇航和机器人等大型应用程序的开发、使用进入新阶段; 大规模程序频频出错为特征的“软件危机”发生,引起关于“Goto语句的辩论;例:1962年,软件出错美国金星探测器水手II号卫星发射失败 SP和软件工程被提倡,以Pascal和C语言为代表,强调数据类型、程序结构,主张牺牲效率保证程序无/少错;,程序设计技术的发展过程,16/56,计算机在更广泛的
6、领域中应用,包括系统程序(OS和编译系统),管理系统程序和智能程序; SP面对图形界面窗口系统等大规模的程序的软件商品化、部件化的要求,编程成为新瓶颈; OOP从理论实践,以Smalltalk,C+等语言为代表程序设计理论成熟; 计算机应用以并行化、网络化、多媒体化、智能化为主要特征,形成巨大的产业。,程序设计技术的发展过程,17/56,计算机应用领域的扩展、软件规模和复杂度的提高程序设计技术的升级,高级语言编程的初级阶段,高级程序设计语言的主要特点,计算机应用的主要领域:数值计算语言中变量、表达式、向量和矩阵(数组)的处理是主要部分 主要目标:生成效率较高的目标程序,18/56,高级语言的出
7、现打破低级语言的“指令序列”的死板的程序格式过程型的程序设计语言是程序设计语言的主流FORTRAN,ALGOL_60Pascal,CC+,高级语言编程的初级阶段,高级程序设计语言主要的特点,例:Algol_60:用于算法描述的自由格式的分程序结构语言;COBOL:用于商业和事务处理领域的语言,例:LISP:用于符号处理的函数式程序设计语言;PROLOG:用于AI领域的逻辑型程序设计语言。,19/56,SP阶段,SP思想,程序的标准首先是可读性和可维护性,其次是高效率; 可读性:改善程序书写的静态结构,好的语言风格,结构清晰,符合人的阅读习惯,注意编程格式,给程序有意义的命名,注释; SP:设计
8、程序的技术,采用自顶向下、逐步求精的设计方法和单入口单出口的控制结构;,20/56,SP阶段,SP思想,自顶向下、逐步求精的设计方法符合解决问题的规则,软件开发的成功率;开发出的程序具有清晰的层次结构,易阅读理解及修改调试扩充; 程序出问题的更主要原因:程序执行中动态结构的混乱。SP的最主要目标:尽可能使程序运行的动态结构与程序书写的静态结构相对一致。,21/56,这依赖于:语言只包括顺序、选择、循环3种控制结构,目标:使程序的各局部符合控制的单入口单出口原则。模块化的程序设计,努力规范和简化模块间的联系,充分利用过程/函数的参数机制,规范程序模块间的接口。,22/56,SP阶段,SP思想,严
9、格区分数据类型,程序中出现的数据必须进行类型说明和任何数据操作进行类型检查。,体现SP思想的语言:Pascal和C,程序 = 过程 + 过程调用,公式化描述,23/56,OOP阶段,OOP方法在90年代盛行的原因,OOP方法从思想上抓住了软件开发的本质和规律;OOP方法开发的软件产品,易重用,易修改,易测试,易维护,易扩充; 计算机要解决的问题的重要性,复杂性,原程序设计技术不再满足要求; 较好地解决软件模块化、信息隐蔽和抽象。,24/56,OOP阶段,OOP语言的要素,对象-状态和操作/方法的封装体; 类-创建对象的模板,包含着所创建对象的状态描述和方法的定义; 继承,例:人(类)-父母(对
10、象)-子女(继承,多重继承),25/56,类和对象的关系,26/56,对象和消息,27/56,class Car int color_number; int door_number;int speed;void brake() void speedUp() ;void slowDown() ,28/56,variables,methods,29/56,30/56,程序 = 对象 + 消息面向对象=对象 + 类 + 继承 + 通信,公式化描述,31/56,OOP阶段,OOP的3大特征,封装性 类的属性和行为封装在同一模块中,对外不 透明,只有用接口才能访问内部信息。(安 全可靠) 继承性 实现行
11、为共享和代码重用。高层次抽象的是 父类,低层次抽象的是子类。(如学生例) 多态性 不同对象对相同消息有不同意义的解释,使 它们表现的行为和动作也不同。(如不同的 人干同一事),32/56,33/56,例:输入圆的半径,求圆的周长和面积,方法1:SP 数据描述:半径、周长、面积用float型 数据处理:输入半径r;计算周长2*pi*r;计算面积=pi*r2; 输出半径、周长、面积。,34/56,#include void main() float r,girth,area;const float pi=3.1415;coutr;girth=2*pi*r; area=pi*r*r;cout“半径:
12、“rendl;cout“周长:“girthendl;cout“面积:“areaendl; ,35/56,方法2:OOP 类型/类:圆 属性/数据成员:半径、周长、面积 方法/成员函数:计算周长2*pi*r;计算面积=pi*r2。,36/56,#include class Circle float radius; public:void Set_Radius(float r)radius=r;float Get_Radius()return radius;float Get_Girth()return 2*3.1415*radius;float Get_Area()return 3.1415*r
13、adius*radius; ; void main() Circle A,B; A.Set_Radius(6.23);cout“半径:“A.Get_Radius()endl;cout“周长:“A.Get_Girth()endl;cout“面积:“A.Get_Area()endl;,37/56,B.Set_Radius(10.23); cout“半径:“B.Get_Radius()endl; cout“周长:“B.Get_Girth()endl; cout“面积:“B.Get_Area()endl; ,38/56,4.程序设计技术的层次,算法 方法学 语言 环境与工具,39/56,1.2 C+语
14、言概述,1.为什么选择C+语言,OOP逐渐成为主流设计技术 OOP技术不取代SP和一般的程序设计的技能技巧 C+在各种不同机型上都有优秀的编译系统和相关的环境与工具 C+最可能取代C而成为主流的软件开发语言 C+-计算机专业主要的教学语言,40/56,带类的CC+的诞生C+的发展,2. C+语言简史,41/56,3. C+语言的特点,-新的类的定义就是一种新的抽象数据类型,用在不同的程序系统中,C+是支持OOP的最主要的代表语言之一,封装和信息隐藏,-数据和对数据的操作封装到类和对象之中,抽象数据类型,继承和派生,-实现程序的重用,42/56,传统的处理方法,43/56,对象封装的处理方法,4
15、4/56,私有数据,方法,方法,数据,对象A,对象B,公有数据,45/56,bicycle,(super class),Mountain bikes,Racing bikes,Tandem bikes,sub class,46/56,-实现类型和函数定义的参数化,进一步抽象,C+是支持OOP的最主要的代表语言之一,函数与运算符的重载,虚函数的多重定义,-实现多种情形下的多态特征;提高程序的水平,模板,3. C+语言的特点,47/56,C+是实践中的创造,语言的各特征、研制过程,体现了面向实用,面向软件开发者的思想,3. C+语言的特点,C+是C的超集,C+与C比较,从C中继承简明高效的表达式形
16、式 易于解决目标代码高质量高效率的问题 吸纳80年代的C程序员,自然地转向C+ 与80年代以来的大批C程序软件兼容,48/56,C与C+及其编译系统同时发售,促进C程序员向C+转化;对C的语法成分,做了许多取代工作。,3. C+语言的特点,C+是C的超集,C+与C的相关问题,例:引人const常量和内联函数概念,取代宏定义;引入refrence引用概念,部分取代C中过于灵活而影响安全性的指针;引入动态内存分配运算符,取代较低级的有关库函数;,49/56,3. C+语言的特点,C+是C的超集,C+与C的相关问题,例:引入动态内存分配运算符,取代较低级的有关库函数;引入用于数据I/O的流类,取代可
17、读性差的C的I/O库函数。,C+与C的完全兼容的问题,例:语言成分中的冗余/重复;同时支持SP框架和OOP框架;误解:C+是C的扩集,是C的改善,实际上在设计方法、思想和风格上,二者有着本质差别。,50/56,#include文件,.CPP 源程序,.obj 目标程序,.exe 可执行程序,#include文件,产生C+可执行文件的过程,51/56,在VC中产生的文件,.CLW:支持ClassWizard .DSP :项目文件 .DSW:工作空间文件 .NCB:支持ClassView .OPT:保存工作空间的配置 .PLG :日志文件,52/56,4. C与C+的基本比较,53/56,例:输入1个圆的半径,计算圆的面积。,方法1:C语言,#include #define PI 3.14159f void main() float Radius,Area; printf(“输入圆的半径:”); scanf(“%f”, ,54/56,方法2:C+语言,#include const float PI=3.14159f void main() float Radius,Area; coutRadius; Area=PI*Radius*Radius; cout“面积=Areaendl; ,例:输入1个圆的半径,计算圆的面积。,55/56,5. Eclipse简介,56/56,