《C++面向对象的程序设计.ppt》由会员分享,可在线阅读,更多相关《C++面向对象的程序设计.ppt(57页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+面向对象的程序设面向对象的程序设计计 本课程的任务本课程的任务: 本课程是为已经学过本课程是为已经学过C语言程序设计、具语言程序设计、具有程序设计初步知识的学生开设的,主要介有程序设计初步知识的学生开设的,主要介绍面向对象程序设计的基本知识和方法。绍面向对象程序设计的基本知识和方法。 本课程学习的主要任务本课程学习的主要任务: 使学生了解面向对象的基本概念和方法。使学生了解面向对象的基本概念和方法。 初步掌握初步掌握C+程序设计的基本技能。程序设计的基本技能。 为以后进一步学习和应用打下良好的基础。为以后进一步学习和应用打下良好的基础。 本课程的主要内容本课程的主要内容: : 第第1 1章
2、章 从从现实生活现实生活和和面向对象程序设计面向对象程序设计的两个角度,简单介绍面向对象程序设计的一的两个角度,简单介绍面向对象程序设计的一些概念,例如些概念,例如对象对象与与类类、抽象抽象与与封装封装、继承性继承性、多态性多态性等。等。 第第2 2章章 介绍介绍C+C+对对C C在非面向对象方面的在非面向对象方面的改进与增强,为以后各章的学习打下基础。改进与增强,为以后各章的学习打下基础。 第第3 3章到第章到第1010章章 介绍介绍C+C+面向对象程序设面向对象程序设计的基本知识和方法。计的基本知识和方法。l 第第1111章章 介绍面向对象程序设计方法与实介绍面向对象程序设计方法与实例例
3、。 l课程性质课程性质:专业基础课(必修课):专业基础课(必修课)l 学学 时时: 讲课讲课 3232学时学时 上机上机 1616学时学时l先修课程先修课程:C C语言程序设计语言程序设计l成绩比例成绩比例: : 平时平时 3030 考试考试 7070 (考勤、作业、上机考勤、作业、上机) 学习学习C+C+的几点看法的几点看法l1.1.了解了解C+C+l 研制研制C+C+的初衷为了解决大型软件开发中的初衷为了解决大型软件开发中遇到的问题,提高软件的开发效率。只有参加遇到的问题,提高软件的开发效率。只有参加过大型软件开发的人才会真正体会到过大型软件开发的人才会真正体会到C+C+的优的优越性。越性
4、。 曾经有同学说:曾经有同学说: 也许,你是一个玩游戏的高手,但是你的也许,你是一个玩游戏的高手,但是你的C+C+水平不会和你通关的能力一起变高水平不会和你通关的能力一起变高“可以时刻记住:学可以时刻记住:学C+C+是为了编游戏的是为了编游戏的” ” 。 l2.2.正确定位正确定位 同学们没有从事程序设计的实际经验,同学们没有从事程序设计的实际经验, 现在学习现在学习C+C+的目的是了解面向对象程序的目的是了解面向对象程序设计方法,能够利用设计方法,能够利用C+C+编写相对简单的程序,编写相对简单的程序,为以后进一步学习和应用打好良好的基础。为以后进一步学习和应用打好良好的基础。 企图,通过几
5、十小时的学习,使一个没有企图,通过几十小时的学习,使一个没有程序设计基础的人变成一个熟练的程序设计基础的人变成一个熟练的C+C+开发人开发人员员, ,是不可能的。是不可能的。 l3.3.勤学多练勤学多练 由于由于C+C+涉及概念很多,语法比较复杂,内涉及概念很多,语法比较复杂,内容十分广泛,对容十分广泛,对C C语言的基础要求很高,不少人语言的基础要求很高,不少人感到学习难度较大,难以入门。感到学习难度较大,难以入门。 学好学好C+C+的秘诀是:的秘诀是: 认真听讲,多读程序;认真听讲,多读程序;l 编程,编程,再编程;编程,编程,再编程;l 上机,上机,再上机。上机,上机,再上机。 第 一
6、章 1.1 1.1 什么是面向对象程序设计什么是面向对象程序设计 1.2 1.2 为什么要使用面向对象程序设计为什么要使用面向对象程序设计 1.3 1.3 面向对象程序设计的语言面向对象程序设计的语言面向对象程序设计概述面向对象程序设计概述本章主要内容本章主要内容 C+C+是是2020世纪世纪8080年代初开发成功的。年代初开发成功的。 9090年代以来,年代以来,面向对象的程序设计面向对象的程序设计(Object_Oriented Programming,Object_Oriented Programming,简称简称OOP)OOP)异异军突起军突起, ,迅速地在全世界流行迅速地在全世界流行
7、, ,并一跃而成为程并一跃而成为程序设计的序设计的主流技术主流技术。 l近年来推出的新一代近年来推出的新一代程序设计语言程序设计语言、软件开发软件开发工具工具与与开发环境开发环境,以及,以及操作糸统操作糸统等,几乎都是等,几乎都是面向对象的。面向对象的。 面向对象的面向对象的程序设计程序设计 面向对象的面向对象的数据库数据库 面向对象的面向对象的操作系统操作系统 面向对象的面向对象的系统分析系统分析 面向对象的面向对象的系统设计系统设计l 例如:例如:l C+C+、VBVB、VCVC、PBPB、VFVF、JavaJava、 WindowsWindows等等 为什么面向对象的程序设计(OOP)会
8、发展的如此迅速,成为当前的主流技术? 1.1 1.1 面向对象程序设计面向对象程序设计 1.1.1 1.1.1 什么是面向对象程序设计什么是面向对象程序设计 l1.1.2 1.1.2 面向对象程序设计的面向对象程序设计的基本概念基本概念 1.1.3 1.1.3 面向对象程序设计的面向对象程序设计的基本特征基本特征 1.1.1 1.1.1 什么是面向对象程序设计什么是面向对象程序设计l面向对象程序设计面向对象程序设计是一种新的程序设计的范型。是一种新的程序设计的范型。 程序设计范型是指设计程序的规范、模型程序设计范型是指设计程序的规范、模型和风格和风格, ,它是一类程序设计语言的基础。一种程它是
9、一类程序设计语言的基础。一种程序设计范型体现了一类语言的主要特征。序设计范型体现了一类语言的主要特征。 面向过程程序设计面向过程程序设计范型的范型的主要特征主要特征是是, ,程序程序由由过程定义过程定义和和过程调用过程调用组成。组成。 基于面向过程的程序可以用以下的公式来基于面向过程的程序可以用以下的公式来表述表述: : 程序程序 = = 过程过程 + + 调用调用 所谓所谓过程过程就是程序执行某项操作的一段代就是程序执行某项操作的一段代码码, ,函数是最常用的过程。函数是最常用的过程。 l面向过程程序设计语言称为面向过程程序设计语言称为面向过程性语言面向过程性语言, ,如如C C、PASCA
10、LPASCAL等都是典型的面向过程性语言。等都是典型的面向过程性语言。l 用面向过程的程序设计语言解决一个实际用面向过程的程序设计语言解决一个实际问题时,通常分为以下三步:问题时,通常分为以下三步: 1 1将问题分解成若干个称之为模块的功能将问题分解成若干个称之为模块的功能块块; ; 2. 2. 根据模块功能来设计一系列用于存储数根据模块功能来设计一系列用于存储数据的数据结构据的数据结构; ; 3. 3. 编写一些过程(或函数)对这些数据进编写一些过程(或函数)对这些数据进行操作。行操作。 程序就是由这些过程构成的。程序就是由这些过程构成的。 面向过程的程序设计方法将面向过程的程序设计方法将数
11、据数据和和过程过程作为两作为两个实体来对待,个实体来对待,数据数据和和过程过程是分离的。是分离的。 面向过程的程序设计的缺点面向过程的程序设计的缺点: : 一旦数据需要变更的时候,必须修改与之一旦数据需要变更的时候,必须修改与之有关的所有模块。有关的所有模块。 因此,因此,面向过程的程序的可重用性差,维面向过程的程序的可重用性差,维护代价高护代价高, , 数据安全性较差。数据安全性较差。 面向对象的程序设计面向对象的程序设计将将数据数据和相应的和相应的操作操作看成看成一个一个统一体统一体, ,这个统一体称为这个统一体称为对象对象。 面向对象程序设计的主要特征是面向对象程序设计的主要特征是: :
12、 l 程序程序 = = 对象对象 + + 消息消息l 对象对象是面向对象程序的基本元素。是面向对象程序的基本元素。 面向对象程序的结构特点是面向对象程序的结构特点是: : 第一,程序一般由第一,程序一般由类的定义类的定义和和类的使用类的使用两两部分组成。部分组成。l 在程序中由类定义其对象在程序中由类定义其对象, ,并规定对象之间并规定对象之间传递消息的规律。传递消息的规律。l 第二,程序中的一切操作都是通过第二,程序中的一切操作都是通过向对象向对象发送消息发送消息来实现的。来实现的。l 对象接收到消息后,启动有关方法完成相对象接收到消息后,启动有关方法完成相应的操作。应的操作。l 面向对象程
13、序设计面向对象程序设计是一种是一种新的程序设计的新的程序设计的范型范型, ,是是解决面向过程的程序设计的缺点的最好解决面向过程的程序设计的缺点的最好方法。方法。 1.1.2 1.1.2 面向对象程序设计的基本概念面向对象程序设计的基本概念 1.1.对对 象象 2.2.类类 3.3.消消 息息 4.4.方方 法法 1.1.对象对象l在在现实世界中现实世界中, ,对象就是我们认识世界的基本单元。对象就是我们认识世界的基本单元。l 它可以是人,也可以是物,还可以是一件事,它可以是人,也可以是物,还可以是一件事,整个世界就是由形形色色的整个世界就是由形形色色的“对象对象”构成的。构成的。 l对象对象可
14、以是可以是: :l * * 有形的具体存在的事物有形的具体存在的事物 例如例如: : 一辆车、一个球、一个小学生一辆车、一个球、一个小学生; ; * * 无形的、抽象的事件无形的、抽象的事件 例如例如: : 一次演出、一场球赛等。一次演出、一场球赛等。l 对象既可以很简单,也可以很复杂,复杂的对象既可以很简单,也可以很复杂,复杂的对象可以由若干简单的对象构成。对象可以由若干简单的对象构成。 现实世界中的对象,具有以下特性:现实世界中的对象,具有以下特性: (1) (1) 每一个对象必须有一个每一个对象必须有一个名字名字以区别其以区别其它对象;它对象; (2) (2) 用用属性属性来描述对象的某
15、些特征;来描述对象的某些特征; (3) (3) 有一组有一组操作操作,每一个操作决定对象的一,每一个操作决定对象的一种种行为行为; ; (4) (4) 对象的操作可以分为两类对象的操作可以分为两类: :一类是自身一类是自身所承受的操作,一类是施加于其他对象的操作所承受的操作,一类是施加于其他对象的操作。在在现实世界中现实世界中对象可以表示为对象可以表示为: 属性属性 + 行为行为 举例: 对象名对象名: : 录音机录音机 l 对象的属性对象的属性: :l 生产厂家生产厂家: SONY: SONY 机器编号机器编号 :XXXX:XXXX 出厂日期出厂日期 :2009.05.06:2009.05.
16、06 对象的行为对象的行为: :l 播放播放 录音录音 停止停止 倒带倒带 静态特征静态特征动态特征动态特征 l使用对象时只需知道它向外界提供的使用对象时只需知道它向外界提供的接口接口形式形式而不需要知道它的内部是如何实现的。而不需要知道它的内部是如何实现的。 这样,不仅使得对象的使用变得非常简单、这样,不仅使得对象的使用变得非常简单、方便,而且具有很高的安全性和可靠性。方便,而且具有很高的安全性和可靠性。 可见面向对象程序设计中的对象来源于现可见面向对象程序设计中的对象来源于现实世界,更接近人们的思维。实世界,更接近人们的思维。 在在面向对象程序设计面向对象程序设计中中: : 对象是对象是描
17、述其属性的描述其属性的数据数据以及以及对这些数对这些数据施加的据施加的一组一组操作操作封装在一起构成的统一体。封装在一起构成的统一体。 对象可以认为是对象可以认为是: :数据数据 + + 操作操作。 在面向对象程序设计中在面向对象程序设计中, ,用用数据数据来体现来体现上面提到的上面提到的“属性属性”, ,用用函数函数来实现对来实现对数据的操作数据的操作, ,以实现某些功能。以实现某些功能。 2.类 在在现实世界现实世界中,中, “类类”是对一组具有共同的属性和行是对一组具有共同的属性和行为的对象的抽象。为的对象的抽象。 例如,教师黎明是一个对象。例如,教师黎明是一个对象。l 对象名对象名:
18、: 黎明黎明l 对象的属性对象的属性: :l 年龄年龄:45:45 学历学历: :博士博士 职称职称: :教授教授l 对象的行为(操作)对象的行为(操作): :l 走路走路 吃饭吃饭 授课授课 一个个的一个个的像像黎明黎明这样的教师就构这样的教师就构成成教师类。教师类。 l类类和和对象对象之间的关系是之间的关系是抽象抽象和和具体具体的关系,的关系,l 类类是对多个对象进行是对多个对象进行抽象的结果抽象的结果。 一个一个对象对象是类的一个是类的一个实例。实例。 例如:例如: 张三、李四、王五、张三、李四、王五、. 人人l 对象对象 类类 再如:再如: 苹果、梨、桔子、香蕉苹果、梨、桔子、香蕉 -
19、 - - - - - 水果水果 对象对象 类类 在在面向对象程序设计面向对象程序设计中,中,l “ “类类”就是具有相同的就是具有相同的数据数据和和操作操作( (函函数数) )的的一组对象的集合一组对象的集合。 在在C+C+语言中把类中的数据称为语言中把类中的数据称为数据成数据成员员, ,类中的操作是用函数来实现的类中的操作是用函数来实现的, ,这些函这些函数称为数称为成员函数成员函数。 实际上,实际上,类类是一种新的用户定义的是一种新的用户定义的抽抽象的象的数据类型数据类型, ,对象是类的一个实例。对象是类的一个实例。 类类型类类型与与传统数据类型传统数据类型的的重要区别重要区别是是: :
20、一个类在定义一个类在定义数据数据的同时也定义了对这些的同时也定义了对这些数据的数据的操作操作。 在面向对象程序设计中在面向对象程序设计中: : 总是先声明类,再由类生成其对象。总是先声明类,再由类生成其对象。 类是建立对象的类是建立对象的“模板模板”,按照这个模板,按照这个模板所建立的一个个具体的对象,就是类的实际例所建立的一个个具体的对象,就是类的实际例子,通常称为子,通常称为实例实例。 3.消息l 在面向对象程序设计中在面向对象程序设计中,对象之对象之间的联系间的联系,称为称为对象的交互对象的交互。l 在面向对象程序设计中,一个在面向对象程序设计中,一个对象对象向另一个向另一个对象对象发出
21、的请求被称为发出的请求被称为“消息消息” 。 l消息具有三个性质消息具有三个性质: : (1)(1) 同一个对象可以接收不同形式的同一个对象可以接收不同形式的多个消息,作出不同的响应多个消息,作出不同的响应; ; (2)(2) 相同形式的消息可以传递给不相同形式的消息可以传递给不同的对象,所作出的响应可以是不同的同的对象,所作出的响应可以是不同的; ; (3)(3) 接收对象对消息的响应并不是接收对象对消息的响应并不是必须的,对象可以响应消息,也可以不必须的,对象可以响应消息,也可以不响应。响应。 4.方法 l 调用对象中的函数就是向该对象传送一调用对象中的函数就是向该对象传送一个个消息消息,
22、要求该对象实现某一行为要求该对象实现某一行为(功能、操功能、操作作)。l 对象所能实现的行为对象所能实现的行为(操作操作),在程序设计在程序设计方法中称为方法中称为方法方法,方法方法中定义了一系列的中定义了一系列的操操作步骤作步骤它们是通过调用相应的它们是通过调用相应的函数函数来实现来实现的。的。l实际上:实际上: 在在C+语言中语言中,方法方法是通过是通过成员函数成员函数来实来实现的现的。 1.1.3 1.1.3 面向对象程序设计的基本特征面向对象程序设计的基本特征 1. 1. 抽抽 象象 2. 2. 封封 装装 3. 3. 继继 承承 4. 4. 多多 态态 1.抽象l现实生活中现实生活中
23、:l张三、李四、王五、张三、李四、王五、. - . - 人人。l苹果、梨、桔子、香蕉苹果、梨、桔子、香蕉 . - . -水果水果l抽象的过程是将有关事物的共性归纳、集中是将有关事物的共性归纳、集中的过程。的过程。 1.抽象l在程序设计方法中:在程序设计方法中:l 抽象是对复杂世界的简单表示抽象是对复杂世界的简单表示, ,抽象并抽象并不打算了解全部问题不打算了解全部问题, ,而而只强调感兴趣的只强调感兴趣的信息信息, ,忽略了与主题无关的信息忽略了与主题无关的信息。 l 例如例如, ,在设计一个在设计一个成绩管理程序成绩管理程序的过程的过程中中, ,只关心他的姓名、学号、成绩等只关心他的姓名、学
24、号、成绩等, ,而对而对他的身高、体重等信息就可以忽略。他的身高、体重等信息就可以忽略。l 而在设计学生而在设计学生健康信息管理系统健康信息管理系统中中, ,身高、体重等信息必须抽象出来身高、体重等信息必须抽象出来, ,而成绩而成绩则可以忽略。则可以忽略。 l抽象包括两个方面抽象包括两个方面: :数据抽象数据抽象和和代码抽象代码抽象。l数据抽象数据抽象描述某类对象的描述某类对象的共同属性共同属性; ;l代码抽象代码抽象描述了某类对象具有的描述了某类对象具有的共同行共同行为为。 以以职工人事管理系统职工人事管理系统为例为例, ,通过对所有职工进行归纳、通过对所有职工进行归纳、分析分析, ,抽取出
25、其中的共性抽取出其中的共性, ,可以得到如下的抽象描述可以得到如下的抽象描述: : 共同的属性共同的属性( (数据抽象部分数据抽象部分):):姓名、职工号、部门等。姓名、职工号、部门等。 用用C+C+语言的数据成员来表示语言的数据成员来表示: : charchar* * name; / name; /姓名姓名l int number; / int number; /职工号职工号l char char* * department; / department; /成绩成绩 共同的行为共同的行为( (代码抽象部分代码抽象部分):):数据录入、数据修改和数据录入、数据修改和数据输出等。数据输出等。 用
26、用C+C+语言的成员函数表示语言的成员函数表示: : input() /input() /数据录入函数数据录入函数l modify() / modify() /数据修改函数数据修改函数l display() / display() /数据输出函数数据输出函数 2.封装 在在现实世界现实世界中中, ,所谓封装就是把某个事物所谓封装就是把某个事物包围起来包围起来, ,外界是看不到的,甚至是不可外界是看不到的,甚至是不可知的。知的。 例如:录音机、电视机、照相机等。例如:录音机、电视机、照相机等。l 在面向对象程序设计中在面向对象程序设计中, ,封装封装是指把是指把数据数据和实现和实现操作的代码操作
27、的代码集中起来放在集中起来放在对对象内部象内部, ,并尽可能隐蔽对象的内部细节。并尽可能隐蔽对象的内部细节。 对象好像是一个不透明的对象好像是一个不透明的黑盒子黑盒子l 表示对象属性的表示对象属性的数据数据和实现各个和实现各个操作的代码操作的代码都被都被封装在黑盒子封装在黑盒子里里, ,从外面是看不见的从外面是看不见的, ,各个对各个对象之间是相对独立的,互不干扰。象之间是相对独立的,互不干扰。 对象只留下少量接口,以便与外界联系。对象只留下少量接口,以便与外界联系。 C+ C+对象中的对象中的成员函数名成员函数名就是对象的就是对象的对外接口对外接口,外界可以通过外界可以通过成员函数名成员函数
28、名来调用函数来实现某些来调用函数来实现某些操作。操作。 l封装具有两方面的含义:l一是将有关的数据和操作代码封装在一个对象中,各个对象相对独立、相不干扰。l二是将对象中某些数据与操作代码对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息隐蔽。 l封装和抽象机制可以将对象的使用者与设计者分开,使用者不必知道对象行为实现的细节,只需要使用设计者提供的接口让对象去做。l 这样,大大降低了人们操作的复杂程度,还有利于数据安全。从而减轻了开发一个软件糸统的难度。 3. 3. 继承继承l(1) (1) 继承的概念继承的概念 父亲父亲l 儿子儿子l 继承
29、关系可以使后者继承前者的基本继承关系可以使后者继承前者的基本特性,又可以增加一些新的特性。特性,又可以增加一些新的特性。 l 哺乳动物哺乳动物 (热血、有毛发、用奶哺育幼仔)(热血、有毛发、用奶哺育幼仔) 狗狗 (有犬牙、食肉、特定的骨骼结构、群居)(有犬牙、食肉、特定的骨骼结构、群居) 白狗白狗 黑狗黑狗 (白色)(白色) (黑色)(黑色)l 继承关系继承关系简化了人们对事物的认识和叙述,简化了人们对事物的认识和叙述,简化了工作程序。简化了工作程序。 l若类之间具有继承关系,则它们之间具若类之间具有继承关系,则它们之间具有下列几个特性:有下列几个特性: 1 1类间具有共享特性(包括数据和类间
30、具有共享特性(包括数据和程序代码的共享);程序代码的共享); 2 2类间具有差别或新增部分(包括类间具有差别或新增部分(包括非共享的数据和程序代码);非共享的数据和程序代码); 3 3类间具有层次结构。类间具有层次结构。 假设有两个类假设有两个类-类类A A 和和类类B B,若,若类类B B继承继承类类A A,则则类类B B具有具有类类A A的基本特性(包括的基本特性(包括数据数据和和操作操作)l A A B B 这时,我们称这时,我们称类类A A为为基类基类或或父类父类;而称;而称类类B B为为类类A A的的派生类派生类或或子类子类。 我们可以说我们可以说: :类类B B 继承继承了类了类A
31、 A 还可以说还可以说: : 类类B B是从类是从类A A中中派生派生出来的出来的。 如果如果类类B B是是类类A A的派生类,那么,在构的派生类,那么,在构造类造类B B的时候的时候, ,不必描述不必描述派生类派生类B B的所有特的所有特性,只需性,只需: : 1. 1. 让它继承让它继承类类A A的特性,的特性, 2. 2. 增加增加类类B B与与基类基类A A不同的那些特性。不同的那些特性。 可见,可见,类类B B的特性是由继承来的和新添的特性是由继承来的和新添加的两部分特性构成。加的两部分特性构成。 类的派生过程可以无限继承下去,类的派生过程可以无限继承下去, 即即派生类派生类可以作为
32、可以作为另一个派生类另一个派生类的基类的基类。l 祖父祖父l 父亲父亲l 儿子儿子 继承机制的作用:继承机制的作用: 一是避免公用代码的重复开发一是避免公用代码的重复开发, , 减少代码和数减少代码和数据冗余。据冗余。 二是通过增强一致性来减少模块间的接口和界二是通过增强一致性来减少模块间的接口和界面面 (2) (2) 继承的分类继承的分类 从从继承源继承源上划分上划分: : 继承分为继承分为单继承单继承和和多继承多继承。l单继承单继承-一个派生类只继承了一个基类的特一个派生类只继承了一个基类的特性。性。l多继承多继承-一个派生类继承了多个基类的特性一个派生类继承了多个基类的特性。 4. 多态
33、 面向对象系统的面向对象系统的多态性多态性是指不同的对象收到是指不同的对象收到相相同的的消息同的的消息时时, 执行执行不同的操作不同的操作。 1.1.在日常生活中:在日常生活中: 汽车汽车 行为行为1 1 挪开挪开 同一消息同一消息 凳子凳子 行为行为2 2 2. 2.在在OOPOOP中:中: 窗口对象窗口对象 行为行为3 3 移动移动 同一消息同一消息 棋子对象棋子对象 行为行为4 4 lC+C+语言支持两种多态性语言支持两种多态性: : 编译时的多态性编译时的多态性 运行时的多态性运行时的多态性l 编译时的多态性编译时的多态性是通过是通过函数重载函数重载和和运算符重载运算符重载来实现的来实
34、现的; ; 运行时的多态性运行时的多态性是通过是通过虚函数虚函数来实来实现的。现的。 将分别在第将分别在第2 2章、第章、第6 6章与第章与第7 7章进章进行介绍行介绍。 1.2 1.2 为什么要使用面向对象程序设计为什么要使用面向对象程序设计 1.2.1 1.2.1 传统程序设计方法的局限性传统程序设计方法的局限性 1.2.2 1.2.2 面向对象程序设计的主要优点面向对象程序设计的主要优点 1.2.1 1.2.1 传统程序设计方法的局限性传统程序设计方法的局限性 1.1.传统程序设计开发软件的生产效率低下传统程序设计开发软件的生产效率低下l硬件:硬件: 电子管电子管晶体管晶体管集成电路集成
35、电路大规模集成电路大规模集成电路。 生产能力不断提高、更新越来越快、功能越来越强、价生产能力不断提高、更新越来越快、功能越来越强、价格越来越低。格越来越低。l软件软件: : 机器语言机器语言汇编语言汇编语言高级语言高级语言。 生产能力低下、开发周期长、效率低、更新较慢、费用生产能力低下、开发周期长、效率低、更新较慢、费用不断上升。不断上升。为什么出现这个问题?为什么出现这个问题?主要原因是计算机硬件生产较好地解决了以下三个问题主要原因是计算机硬件生产较好地解决了以下三个问题: 重用性重用性 复杂性复杂性 可维护性可维护性 而传统的程序设计不能很好地解决这三个问题。而传统的程序设计不能很好地解决
36、这三个问题。 l(1) (1) 重用性重用性 传统软件生产中缺乏大粒度、可重用的构件。基传统软件生产中缺乏大粒度、可重用的构件。基本处于手工作业阶段。本处于手工作业阶段。l(2) (2) 复杂性复杂性 传统程序中传统程序中数据数据与其与其操作操作是相是相分离分离的,开发大程的,开发大程序时,常因数据的一个的小小变动而导致意想不到的序时,常因数据的一个的小小变动而导致意想不到的错误,甚至整个程序的崩溃。以致出现过所谓的错误,甚至整个程序的崩溃。以致出现过所谓的“软软件危机件危机”。l(3) (3) 可维护性可维护性 传统程序中数据与操作相分离的结构不利于程序传统程序中数据与操作相分离的结构不利于
37、程序的维护的维护。 2.2.传统程序设计难以应付日益庞大的信息量和多传统程序设计难以应付日益庞大的信息量和多样的信息类型样的信息类型 随着计算机科学与技术的飞速发展随着计算机科学与技术的飞速发展 应用领域应用领域: :已从数值计算扩展到了人类社会已从数值计算扩展到了人类社会的各个方面的各个方面; ; 处理的数据处理的数据: :已从简单数字和字符已从简单数字和字符, ,发展为具发展为具有多种格式的多媒体数据有多种格式的多媒体数据, ,如文本、图形、图像、如文本、图形、图像、影像、声音等影像、声音等; ; 描述的问题描述的问题: :从单纯的计算问题到仿真复杂从单纯的计算问题到仿真复杂的自然现象和社
38、会现象。的自然现象和社会现象。 然而然而, ,面对这些庞大的信息量和多样的信息面对这些庞大的信息量和多样的信息格式格式, ,传统程序设计方法是无法应付的传统程序设计方法是无法应付的。 3.3.传统的程序设计难以适应各种新环境传统的程序设计难以适应各种新环境 当前当前, ,并行处理、分布式、网络和多机系并行处理、分布式、网络和多机系统等统等, ,已经或将是程序运行的主流方式和主流已经或将是程序运行的主流方式和主流环境。环境。 传统的程序设计技术很难适应这些新环境。传统的程序设计技术很难适应这些新环境。 综上所述综上所述, ,传统的面向过程的结构化程序传统的面向过程的结构化程序设计不能够满足计算机
39、技术的迅猛发展的需要设计不能够满足计算机技术的迅猛发展的需要, ,软件开发迫切需要一种新的程序设计方法的支软件开发迫切需要一种新的程序设计方法的支持。持。 1.2.2 1.2.2 面向对象程序设计的主要优点面向对象程序设计的主要优点l 1.1.可提高程序的重用性可提高程序的重用性 2. 2.可控制程序的复杂性可控制程序的复杂性 3. 3.可改善程序的可维护性可改善程序的可维护性 4. 4.能够更好地支持大型程序设计能够更好地支持大型程序设计 5. 5.增强了计算机处理信息的范围增强了计算机处理信息的范围 6. 6.能很好地适应新的硬件环境能很好地适应新的硬件环境 1.3 1.3 面向对象的程序
40、设计语言面向对象的程序设计语言l1.3.1 1.3.1 面向对象程序设计语言的发展概况面向对象程序设计语言的发展概况 l1.3.2. 1.3.2. 几种典型的面向对象程序设计语言几种典型的面向对象程序设计语言 1.3.1 1.3.1 面向对象程序设计语言的发展概况面向对象程序设计语言的发展概况 l 现在公认的第一个真正面向对象程序设计现在公认的第一个真正面向对象程序设计语言是语言是SmalltalkSmalltalk。l 它是由美国的它是由美国的XeroxXerox公司于公司于2020世纪世纪7070年年代初研制的。代初研制的。l 该语言第一次使用了该语言第一次使用了“面向对象面向对象”的概的
41、概念和程序风格念和程序风格, ,开创了面向对象程序设计的新开创了面向对象程序设计的新范型。范型。被誉为面向对象程序设计语言发展的里被誉为面向对象程序设计语言发展的里程碑。程碑。 2020世纪世纪8080年代以来年代以来, ,面向对象语言得到飞速发展面向对象语言得到飞速发展 。 面向对象程序设计语言朝着面向对象程序设计语言朝着两个方向发展两个方向发展: : 一个方向是一个方向是朝着纯面向对象语言发展朝着纯面向对象语言发展, ,如如继继SmalltalkSmalltalk之后之后, ,又出现了又出现了EiffelEiffel、SELFSELF等语等语言言; ; 另一个方向是另一个方向是朝着混合型面
42、向对象语言发朝着混合型面向对象语言发展展, ,如将如将过程型与面向对象结合过程型与面向对象结合产生了诸如产生了诸如 C+C+、Objective-CObjective-C、Object Pascal Object Pascal 等一大批等一大批语言。将语言。将函数型与面向对象结合函数型与面向对象结合产生了诸如产生了诸如 LOOPSLOOPS、 FlavorsFlavors、 CLOSCLOS等语言。等语言。 我们将要学习的我们将要学习的 C+C+就是一种就是一种面向过程面向过程与与面向对象面向对象相结合的语言。相结合的语言。 1.3.2 1.3.2 几种典型的面向对象程序设计语言几种典型的面向
43、对象程序设计语言l(1) Smalltalk(1) Smalltalk语言语言(20(20世纪世纪7070年代年代) ) Smalltalk Smalltalk语言被认为是最纯正最具代表性的面向语言被认为是最纯正最具代表性的面向对象的程序设计语言对象的程序设计语言l(2) C+(2) C+语言语言 (20(20世纪世纪8080年代年代) ) C+ C+是在是在C C语言的基础上语言的基础上, ,进行面向对象特征的扩充进行面向对象特征的扩充而成的语言而成的语言l(3) Java(3) Java语言语言( 2020世纪世纪9090年代年代) JavaJava语言,是一种面向对象的程序设计语言,是一语言,是一种面向对象的程序设计语言,是一种网络编程语言。种网络编程语言。l(4) C#(4) C#语言语言 (21(21世纪世纪20002000年年) ) C# C#语言从语言从C/C+C/C+语言继承发展而来语言继承发展而来, ,是一个全新的、是一个全新的、面向对象的、现代的编程语言。面向对象的、现代的编程语言。
限制150内