面向对象程序设计-1_第1页
面向对象程序设计-1_第2页
面向对象程序设计-1_第3页
面向对象程序设计-1_第4页
面向对象程序设计-1_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、第第1 1讲讲 概述概述龚 勋 【】本课程教学概述教学特点与重点课时少,内容多课时少,内容多与与c语言的异同语言的异同OOP编程思想编程思想教材郑莉、董渊等,郑莉、董渊等,C+语言程序设计语言程序设计(第(第4版)版)自编教材自编教材学习建议认真阅读教材认真阅读教材编写书上示例,熟练掌握编写书上示例,熟练掌握 c+ 语法语法2这门课教授方法“能够对现实世界中简单问题的计算描述”面向对象的基本概念p4类、对象、封装、继承、多态类、对象、封装、继承、多态面向对象程序设计最大优点易于设计、便于维护易于设计、便于维护掌握与C的语言区别(习惯养成)编程方式(代码组织、内存管理、数据管理)编程方式(代码组

2、织、内存管理、数据管理)输入输出流输入输出流异常处理异常处理本讲主要内容(第1章)程序设计语言的发展面向对象思想与机制面向过程程序设计面向对象程序设计软件工程化方法开发环境4软件危机与程序设计方法论的演变软件危机与程序设计方法论的演变“计算机软件”一词是1964年提出来的。这个时期,出产的软件越来越多,规模越来越大。1962年美国金星探测器发射失败并归咎于程序错误,造成计算机界的巨大震动。这个时期相继问世的大批软件系统,后来都纷纷发现其中存在不少错误。如:著名的IBM公司的OS360系统耗资2.17亿美元的美国空军高级后勤系统,花费了几千人年,竟需要推倒重来。阿波罗登月计划,也毫不例外地受到了

3、软件错误的冲击。这一时期,可以说“没有不出错误的软件没有不出错误的软件”。软件给人的印象是越来越不可靠,人们对使用软件无不提心吊胆。1.1 程序设计方法与语言的发展历史这幅图景,被人们称之为“软件危机”,“软件危机”的爆发,促使人们总结反思出以下宝贵的经验教训宝贵的经验教训:(1 1)程序的效率主要取决于算法的复杂度。)程序的效率主要取决于算法的复杂度。算法一经确定,程序效率的大局已定;现有硬件速度越来越快;这两方面使得依靠编程技巧挣来的效率已非常有限。结果:提出了算法时间算杂度与空间复杂度的概念;开设专门研究算法的“数据结构”与“计算方法”课程。1.1 程序设计方法与语言的发展历史(续1)(

4、2 2)软件规模日益扩大,程序可靠性的问题越来越突出。)软件规模日益扩大,程序可靠性的问题越来越突出。追求效率的细节而忽略了主要流程的清晰,把程序复杂化,是导致程序出错的主要原因之一。同时,随着硬件技术的进步,新算法的涌现,使人们在程序设计时,不必强调效率问题,指导思想应当不失时机地从“效率第一效率第一”转向转向“清晰第一清晰第一”。结果:于70年代末出现了第一个结构化程序设计语言PASCAL;80年代初又进一步提出和发展了面向对象程序设计语言。(3 3)程序生产要从根本上摒弃研制人员按爱好和习惯各自)程序生产要从根本上摒弃研制人员按爱好和习惯各自为政的个体手工业方式,而必须走向科学化、规范化

5、、工为政的个体手工业方式,而必须走向科学化、规范化、工程化、工业化。程化、工业化。结果:于60年代末提出了软件工程方法学并逐步完善。1.1 程序设计方法与语言的发展历史(续2)符合人类思维方式的编码方式才是最清晰的。1.1 程序设计方法与语言的发展历史(续3)1.1 C+ 与 JavaJAVA教科书如是说:教科书如是说:JAVA和C+都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继承,多态)。而由于c+为了照顾大量的C语言使用者, 而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性!JAVA则是完全的面向对象语言,它句法更清晰,规模更小,更易学它是在对

6、多种程序设计语言进行了深入细致研究的基础上,据弃了其他语言的不足之处,从根本上解决了c+的固有缺陷。 Java和c+的相似之处多于不同之处,但两种语言问几处主要的不同使得Java更容易学习,并且编程环境更为简单。1指针 JAVA语言让编程者无法找到指针来直接访问内存。2多重继承 c+支持多重继承,Java不支持多重继承3数据类型及类 Java是完全面向对象的语言,Java中取消了cc+中的结构和联合, 消除了不必要的麻烦。4自动内存管理5操作符重载6. Java不支持缺省函数参数,而c十十支持7.“goto“语句 “可怕”的goto语句是c和c+的“遗物”8类型转换 Java不支持c十十中的自

7、动强制类型转换,如果需要,必须由程序 显式进行强制类型转换。1.1 C+ 与 Java(续)1.1.人类认识世界和发展世界的过程人类认识世界和发展世界的过程1.2 面向对象思想与机制 个体个体个性个性共性共性共性共性个性个性个体个体抽象抽象派生派生继承机制继承机制1.1.面向对象的基本概念面向对象的基本概念归纳的过程需要以大量的“实例”为基础。这些实例称为“对象对象”。对象在现实世界中也称为“实体”,在知识层面也称为“实例”。包括:物理对象物理对象(物理实体):在现实生活中看得见摸得着具有一定实际尺寸的实际存在的“物体”。比如:张三(人),太阳,这只花猫,那棵白菜等。逻辑对象逻辑对象(逻辑实体

8、):这类对象也是真实存在的,但不一定看得见摸得着。比如课堂上的“例子”,法官断案时的“证据”,讲道理时所需要摆的“事实”等。1.2 面向对象思想与机制(续2)“类类”是相似物体的高度抽象,或者说,类是相似对象的特征抽象。简单来说,一个类都包含若干“成员”,这些成员代表了同类对象的“特征”:每个类的特征数量虽然有多有少,但都可以分为静态部分和动态部分。前者称为物理特征,或属性,或数据,后者称为行为特征,或动作,或方法。归结起来,一个类类是是由数据成员和方法成员构成由数据成员和方法成员构成的。1.2 面向对象思想与机制(续3)人人有有姓名、年龄、身高、体重,思想姓名、年龄、身高、体重,思想遇到突发

9、事件时有回应遇到突发事件时有回应树有高度、宽度、命名适度浇水可以生长,扒掉树皮就会死亡电脑有品牌、显示器、主板、CPU加电就会运行,点击就有反应一个对象是个体存在,一个类只具有特征,但每一个特征都没有具体值。一个简单名词构成类。人们认识世界的过程,是从对象到类的过程。1.2 面向对象思想与机制(续4)一个类是相同对象的共性。一个对象不仅具有特征,而且每一个特征都可以赋予具体值。在该名字前加上“这个”、“那个”等限定词后则构成对象。人们发展世界的过程,是从类到对象的过程。2. 类与对象类与对象对象和对象之间是有关系的,彼此在“通信”和“交互”。这种交互过程就称为对象之间的消息传递消息传递。对象之

10、间的消息传递是依靠“消息请求”、“消息处理”和“消息应答”过程来完成的。其中的“消息请求”和“消息应答”存在与两个对象之间,“消息处理”则是对象内部的动作或活动。消息传递机制可以有效地屏蔽消息处理的具体过程和内部细节,只对外呈现出相应的“接口”。1.2 面向对象思想与机制(续5)3. 消息传递消息传递正如,人对外提供的接口包括正如,人对外提供的接口包括“口口”、“耳耳”、“眼眼”等,但等,但“消息处理消息处理”的过的过程程大脑活动的细节和思维方法则是对大脑活动的细节和思维方法则是对外隐藏的。外隐藏的。1.2 面向对象思想与机制(续6完)3. 面向对象的机制面向对象的机制1. 1. 什么是面向过

11、程程序设计什么是面向过程程序设计? ?指程序设计工作主要围绕设计解题过程来进行。传统指程序设计工作主要围绕设计解题过程来进行。传统的程序设计语言称为过程性语言。的程序设计语言称为过程性语言。2. 2. 什么是结构化程序设计思想?什么是结构化程序设计思想?自顶向下、逐步求精;自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每一个模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。1.3 面向过程程序设计3. 结构化程序设计的优点(1)自顶向下逐步求精的方法符合人类解决复杂问题的普遍

12、规律,因此可以显著提高编程效率。(2)用先全局后局部、先整体后细节、先抽象后具体的逐步求精过程开发的程序有清晰的层次结构,因此容易阅读理解。(3)不使用GOTO语句仅使用单入口单出口的控制结构,使得程序的静态结构和它的动态执行情况比较一致,因此,程序容易阅读和理解,开发时也较容易保证程序的正确性,即使出现错误也比较容易诊断和纠正。(4)控制结构有确定的逻辑模式,编写程序代码只限于使用很少几种直截了当的方式,因此源程序清晰流畅。1.3 面向过程程序设计(续1)4. 结构化程序设计的局限性(1)数据与处理数据的过程互相独立,当数据结构改变时,需要修改所有相关的过程,增加了程序变动和维护难度,并给程

13、序的可靠性及安全性带来潜在的隐患。(2)可升级性及可重用性较差。升级或重用若仅局限于模块内部,比较方便,但涉及几个模块甚至模块的重新划分,最终可能导致全局性重新设计。(3)对复杂问题的描述能力有限。当程序描述的客观对象比较复杂(涉及大量数据),或功能不容易划分为相对比较独立的模块时,则模块设计时数据的共用,模块间的数据交换都变得十分复杂甚至难以设计。1.3 面向过程程序设计(续2 )比如,有下面的需求:张三的语文书的第38页的第1个字符是什么?李四的数学书的第50页的第8个字符是什么?王五的外语书的第23页的第20个字符是什么?1.3 面向过程程序设计(续4)结构化抽象的例子char getx

14、(char *who,char *book,int page,int pos) /函数具体操作 void main()coutgetx(张三,语文,38,1);coutgetx(李四,数学,50,8);coutgetx(王五,外语,23,20);需求大致一样,区别的地方有4个:谁的书,什么书,第多少页,第多少个字符面向对象抽象的例子void main()cout 张三.语文.C381;cout 李四.数学.C508;cout 王五.外语.C2320;1.3 面向过程程序设计(续5完)在该例子中,张三的语文和李四在该例子中,张三的语文和李四的语文完全可以不同,彼此独立,的语文完全可以不同,彼此独

15、立,能够很好地实现个体维护而不影能够很好地实现个体维护而不影响其他。响其他。面向对象程序设计方法主张以对象为单位。需求中的人(张三、李四等)都是对象,不同的书也都是对象,每个对象彼此独立存在,互不干扰。1. 什么是面向对象方法?首先,它将数据及对数据的操作方法放在一起,作为一个它将数据及对数据的操作方法放在一起,作为一个相互依存、不可分离的整体(相互依存、不可分离的整体(称为对象称为对象)。对同类型对象)。对同类型对象抽象出其共性,形成类:类中的大多数数据,只能用本类抽象出其共性,形成类:类中的大多数数据,只能用本类的方法进行处理(的方法进行处理(封装性封装性)。类通过一个简单一外部接口。类通

16、过一个简单一外部接口与外界发生关系,对象与对象之间通过消息进行通信与外界发生关系,对象与对象之间通过消息进行通信。这样,程序模块间的关系就更为简单,程序模块的独立性、数据的安全性就有了很好的保障。另外,类还具有继承性继承性与多多态性态性,还可以大大提高程序的可重用性可重用性,使得软件的开发与维护都更为方便。1.4 面向对象程序设计(1)认为客观世界是由各种对象对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。(2)对象用程序语言中称为类类(class)的数据结构来描述。一个类由一组数据(称为成员变量或属性)和一组方法(即一组操作,由若干子程序实现)构成。数据表示类

17、的状态、性质、属性等,而方法完成对数据的处理。(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。子类具有基类的共性(称为继承继承-Inheritance)与自身的个性。(4) 对象彼此之间仅能通过传递消息传递消息互相联系。2. 面象对象方法的四个要点:一切局部于对象的私有信息,都被封装在该对象类的定义中,就好象装在一个不透明的黑盒子中,在外界是看不见的,更不能直接使用,这就是“封装性”。面向对象的方法可以用如下的方程式来概括:OOObjects+Classes+Inheritance+Communication With Messa

18、ges注意:注意:只有同时使用了以上四个要素(对象、类、继承和消息)的方法,才是真正面象对象的方法。例:对象抽象化的实例。(1) 客观世界中“笔”的概念就可以抽象为一个基类对象,笔又可分为钢笔、铅笔、圆珠笔、毛笔等,因此可以在基类的基础上派生出如下的类对象体系。1.4 面向对象程序设计(续2)笔笔钢笔钢笔铅笔铅笔圆珠笔圆珠笔毛笔毛笔基类子类(2)考察学校的所有人员,包括学生、教师、工人、职员、干部,我们可以将“人”抽象为一个基类对象,用姓名、生日、性别、民族、籍贯等数据项构成“人”这一基类的属性;在此基础上派生出学生、教师、工人、职员、干部各个子类。进一步以“学生”类为例,又可派生出本科生、专

19、科生、研究生子类,“本科生”子类又可派生出统招本科生、网院本科生、成教本科生等。以“学生”子类为例,它具有基类“人”所具有的公共属性,并扩展出个性化的新属性,比如:学号、班级、专业、成绩等。1.4 面向对象程序设计(续3)对基类“人”的基本操作可包括:对各属性域赋值,输入输出各属性域等;对“学生”类的基本操作显然可继承基类“人”的上述操作,它还可以具有自己的基本操作,比如:登记、修改、查询、打印成绩;变更班级和专业等。人人学生学生教师教师工人工人基类基类子类子类本科生本科生专科生专科生研究生研究生1.4 面向对象程序设计(续4)3. 面象对象方法的主要优点(1)与人类习惯的思维方法比较一致)与

20、人类习惯的思维方法比较一致(2)稳定性好)稳定性好OOP用类来模拟现实实体的状态和行为,在软件生命期内,客观实体一般都具有不变性,因此程序的稳定性教好,无需频繁变动。(3)可重用性好)可重用性好可以用已有的类体系来构造新的程序,OOP也称为“软件IC”,即类似于搭积木,在父类的基础上建立对象实例或派生新的类,可以很容易对程序功能进行修改和扩充。(4)可维护性好)可维护性好(5)特别适合软件的工业化生产和连续升级开发)特别适合软件的工业化生产和连续升级开发1.4 面向对象程序设计(续5)4. 面向对象方法的缺点(1)程序的编译和执行对存贮空间的要求较高)程序的编译和执行对存贮空间的要求较高。(2

21、)OOP程序的效率在很多时候不如同样规模的面象过程开程序的效率在很多时候不如同样规模的面象过程开发的程序。发的程序。这主要是因为消息传递的方法不如直接访问数据的交互方式效率高;大量私有数据成员的访问需要通过函数进行,增加了数据访问的额外开销。(3)针对具体应用建立一套类体系的工作量大)针对具体应用建立一套类体系的工作量大,OOP适合开发比较复杂的大系统和工业化软件产品,小规模程序、数值计算以及实时控制领域使用面象过程的方法更合适。(4)OOP的很多概念和编程方式初学者不易理解和入门。的很多概念和编程方式初学者不易理解和入门。1.4 面向对象程序设计(续6)1. OOP方法并不摒弃面向过程的方法

22、,特别是结构化程序设计方法的很多思想仍然适用于OOP。2. OOP方法中,类对象的方法(子程序)内部的编程仍然必须采用面向过程的程序语言和设计思路。3. 由于机器语言程序仍然是面向过程的,因此OOP方法编写的高级语言程序经过编译连接后,仍然是面象过程的方式来执行的。4. 并非所有的软件项目都适合用完整的OOP技术来开发,实时控制程序(如:导弹制导系统程序设计)、数值计算程序等仍然以面象过程方式为主。面向过程与面向对象程序设计方法的关系1.4 面向对象程序设计(续7完)面向对象程序设计的一般过程面向对象的思想是以类为主导的。面向对象程序设计的过程也不例外。一般来说,要构建一个面向对象程序,其过程

23、如下:一,构造类。一,构造类。构造类的过程可以通过系统分析,对需求进行充分理解和关键词提取之后得到。二,构建类和类之间的关系。二,构建类和类之间的关系。包括泛化特化关系和整体部分关系。主要采用面向对象的继承机制(包括抽象、派生、组合等)。三,创建应用类对象。三,创建应用类对象。类是不能直接使用的。要使用类中成员(数据成员和方法成员),必须创建对象。应用类对象是独立存在的,类似于结构化程序设计中的主函数。四,使用对象。四,使用对象。使用对象就是通过使用对象的成员来实现,通常是调用应用类对象中的一个主方法来实现。软件工程方法是将软件进行工业化生产和管理的科学方法,OOP能与软件工程方法很好配合,使

24、得软件产品的可重用性、易维护性更好。软件工程化生产方法可以简要地规纳于下表中:1.5 软件工程化方法IDE开发语言VC+C+Object PASCALC+BuilderC+VB扩展BASIC.NETC#、J#等PowerbuilderPowerScriptEclipse、Jbuilder等Java常用面向对象程序设计语言和工具1. VC+的发展历史的发展历史 VC+即Visual C+的简称。它是微软公司推出的面向Windows平台的可视化C+编程语言。VC+环境的主要发展历程如下:1991年:VC+1.0, windows3.11996年:VC+6.0, WIN95/98/NT/2000/X

25、P2002年:VC+.NET 2003(VC+7.0), WIN95/98/NT/2000/XP/2003/Vista2005年:VC+.NET 2005, WIN2000/2003/XP/Vista2007年:Visual C+ 2008(也即Visual C+ 9.0)2010年: Visual C+ 20102012年9月:Visual Studio 20121.6 VC+开发平台简介2. 什么是什么是.NET编程编程? 即基于微软.NET Framwork框架的程序开发。(1).NET Framework的组成的组成Visual Studio.NET集成开发环境集成开发环境调用调用.N

26、ET Framework服务服务VC+.NETC#J#VB.NET.NET Framework公共类型系统公共语言规范垃圾收集器JIT编译器第三方语言编译器编译器公共语言运行时公共语言运行时类库类库.NET Framework框架为所有的.NET开发语言提供了一个公共的运行环境,而不是为一种语言提供各自不同的运行环境。这个 公 共 的 运 行 环 境 称 为 C o m m o n Language Runtime(CLR),即,即公共语言运公共语言运行时行时。CLR规范现在收录在ECMA(欧洲计算机制造商)的CLI(通用语言基础结构,Common Language Infrastructur

27、e)标准335中,同时收录在相应的ISO/IEC23271标准中。 1.6 VC+开发平台简介(续1)(2) .NET Framework的程序开发方式的程序开发方式选择一种开发语言选择一种开发语言编译为中间语言编译为中间语言生成中间语言文件生成中间语言文件公共语言运行时公共语言运行时JIT编译器编译器目标目标CPU可执行的代码可执行的代码1.6 VC+开发平台简介(续2) .NET Framework为有效解决程序可移植性和跨平台性,把应用程序源代码编译为一种独立于硬件的语言,即中间语言中间语言。 在CLR环境中,中间语言程序由JIT编译器进一步转换为目标CPU可以执行的指令代码。而不同语言

28、的编译程序只需要将源程序编译为中间语言程序即可。由于这种执行方式需要依赖于CLR提供的服务,称为托管代码托管代码,而传统意义上的不依赖CLR环境的独立可执行应用程序称为非非托管代码托管代码。基于.NET Framework框架的程序开发采用哪种程序语言并不重要,程序开发人员可能在VB、VC+、C#和J#中任意选择。(3) .NET Framework与与Visual Studio.NET IDE的关系的关系1.6 VC+开发平台简介(续3) IDE:Integrated Development Environment(集成开发环境) .NET Framework框架可以视为操作系统的一部分,而不是Visual Studio.NET的一部分。 即.NET程序是以中间语言形式的可执行程序(EXE文件)发布的,只要Windows平台安装了.NET Framework就可以正常运行。 开发.NET程序可以不使用Visual Studio.NET提供的集成环境,而采用任何字符编辑器建

温馨提示

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

评论

0/150

提交评论