java语言程序设计(第二版)

上传人:san****019 文档编号:70086059 上传时间:2019-01-15 格式:PPT 页数:53 大小:726KB
返回 下载 相关 举报
java语言程序设计(第二版)_第1页
第1页 / 共53页
java语言程序设计(第二版)_第2页
第2页 / 共53页
java语言程序设计(第二版)_第3页
第3页 / 共53页
java语言程序设计(第二版)_第4页
第4页 / 共53页
java语言程序设计(第二版)_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《java语言程序设计(第二版)》由会员分享,可在线阅读,更多相关《java语言程序设计(第二版)(53页珍藏版)》请在金锄头文库上搜索。

1、第二章 面向对象(OO)程序设计概念,参考书:Bruce Eckel Thinking in Java,程序设计的演变,机器语言 汇编语言 面向过程的语言和结构化程序设计 程序算法数据结构 (C) 面向对象程序设计 程序对象消息传递 (Java,C+,C#),抽象的进步,所有编程语言的最终目的都是提供一种“抽象”方法 汇编语言是对基础机器的少量抽象 命令式语言(如FORTRAN,BASIC和C)是对汇编语言的一种抽象 OOP是更高层的抽象,面向对象程序设计方法的来源,大英百科全书描述了人类在认识和理解现实世界的过程中普遍运用的三个法则: 1、区分对象及其属性,例如,区分一棵树和树的大小或它与其

2、它对象的空间关系。 2、区分整体对象及其组成部分。例如,区分一棵树和树枝。 3、形成并区分不同对象的类。例如,形成所有树的类和所有石头的类,并区分它们。,面向对象程序设计方法的特征,(1) 所有东西都是对象。 可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。理论上讲,可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象。,(2) 程序是一大堆对象的组合; 通过消息传递,各对象知道自己该做些什么。为了向对象发出请求,需向那个对象“发送一条消息”。更具体地讲,可将消息想象为一个调用请求,它调用的是从属于目标对象的一个子例程或函数。,(3) 每个对象都有自己的

3、存储空间,可容纳其他对象。 或者说,通过封装现有对象,可制作出新型对象。所以,尽管对象的概念非常简单,但在程序中却可达到任意高的复杂程度。,(4) 每个对象都有一种类型。 根据语法,每个对象都是某个“类”的一个“实例”。其中,“类”(Class)是“类型”(Type)的同义词。一个类最重要的特征就是“能将什么消息发给它?”。,(5) 同一类所有对象都能接收相同的消息。 这实际是别有含义的一种说法,大家不久便能理解。由于类型为“圆”(Circle)的一个对象也属于类型为“形状”(Shape)的一个对象,所以一个圆完全能接收形状消息。这意味着可让程序代码统一指挥“形状”,令其自动控制所有符合“形状

4、”描述的对象,其中自然包括“圆”。这一特性称为对象的“可替换性”,是OOP最重要的概念之一。,实体,抽象数据类型,类,对象,白馬非馬論,公孙龙是名家的代表人物,他最有名的辩论是“白马非马”的假说。一天,他牵一匹白马出关被阻,公孙龙便以白马非马的命题与之辩论,守关的人辩不过他,公孙龙就牵着马出关去了(或说,他还是不得出关)。 公孙龙说,白马为非马者,言白所以名色,言马所以名形也;色非形,形非色也。夫言色则形不当与,言形则色不宜从,今合以为物,非也。如求白马于厩中,无有,而有骊色之马,然不可以应有白马也。不可以应有白马,则所求之马亡矣;亡则白马竟非马。 公孙龙的话大意是说:“马“ 指的是马的形态,

5、“白马“指的是马的颜色,而形态不等于颜色,所以白马不是马。,其他声音(论面向对象和结构化 ),1、许多人一谈到结构化,就非常不屑地说,那是过了时的东西,现在流行的是面向对象,等等. 真的是这样吗? 我认为没有,结构化的设计思想并没有消失,而是一直在顽强的生存着,以后也会生存下去.结构化的思想和面向对象的思想只是考虑同样一个问题的两个不同角度而已,他们本身并没有那个好那个不好的问题,当然具体到每个系统设计人员,就要受限制与自己所接受的教育,从而可能会有自己的判断和喜好. 我曾经接触过几个老资格的程序员,他们在中国刚刚引进计算机时就开始进行大规模的软件编程,他们对于系统的把握和理解确实是非常深刻的

6、,尽管是结构化的. 系统分析本身的最终目的,是为了真正理解系统,而采用那个角度,用那种方法来理解系统只是一个手段问题,不是根本问题.,2、不敢苟同,你没有意识到两者本质上的不同,结构化方法的缺陷(或者叫硬伤)使得它逐渐被淘汰,,3、我来打个比方,面向对象和结构化好比中医和西医一样,只是两种不同的理论体系一样,但病人是一个,他们本质上是不同的,但其处理的问题是一致的.难道中医能看病,就意味着西医不能看病吗? 请问,结构化的缺陷何在?,4、“天圆地方”是足够正确的,在人们没有见到大海之前 “地心说”是足够正确的,在人们没有感觉到行星轨道的复杂之前 “日心说”是足够正确的,在人们没有感觉到更大星系的

7、存在之前 牛顿力学是足够正确的,在人们没有计算超大尺度和超小尺度之前 结构化也是足够的,在软件开发不得不把“复用”、“构件”摆在重要位置之前,5、老资格的结构化程序员确实是面向对象新手,就象算盘老手速度比计算器新手快一样,有的毛笔老手也会写得比钢笔新手快又好。,6、知不知道并不是有了超大超小之后, 牛顿力学就不对了. 你拿量子力学或者超弦理论来算火车什么时候到站估计永远得不出结果来. 只有适用的才是最好的, 没有万能药 用来打苍蝇估计苍蝇拍比原子弹更好.,7、如果你说的是世界观,我同意OO和结构化没有优劣之分,这属于哲学范畴;但我想,我们是在讨论技术和工程问题,在这一点上,无论理论还是实践,O

8、O是主流,胜于结构化,也早有定论。 市场已经做出了回答。在这10年间新的软件基本上都在用OO方法,而结构化只被限制小范围、某些特定的应用上。 我离开大学后就再也没有接触过结构化,OO完全可以取代它。,8、回头看一看OO的历史,就会发现OO的出现是为了适应软件工程的发展。随着项目规模的不断扩大,结构化已经力不从心了。 引入OO的方法是为了将复杂的问题简单化,可以理解成为另一种方式的自顶向下、逐步细化。分解到一定程度后就可以采用结构化的方法去实现了。 所以面向对象与结构化不是格格不入的,而是相辅相成的。用牛顿力学和相对论比可能不太合适,是不是可以比喻成双脚和车子:短距离步行还可以,距离远了走起来可

9、是要累死了;但是要想回家还得下车来走两步;所以走路永远不过时,开车就是比走路快!,哈哈,请同学考虑如何编程实现这个记事本程序? 难度有多大?,面向对象程序设计是使用类和对象将现实世界中真实的或抽象的实体在程序中建立模型。,面向对象程序设计,面向对象程序设计的基本概念,什么是对象( Object) 什么是消息( Message) 什么是类 ( Class) 什么是继承( Inheritance) 什么是接口( Interface),什么是对象( Object),对象的概念 软件对象是现实对象在程序中的模型 现实世界对象的两个特征: 状态(state)与行为(behavior). 软件对象也具有状

10、态与行为: 状态:以一个或多个变量保存 行为:用方法实现行为,对象的定义 对象由变量与相关的方法结合起来构成的。,对象(Object) 一组数据及其对这些数据的操作过程 对象中的数据称为域(Field) 例:plane1.weight 对象中的操作过程称为方法(Method) 例:plane1.move(),换种说法来帮助理解,class Car int color_number; int door_number; int speed; void brake() void speedUp() ; void slowDown() ,对象实例 一个特定的对象称为实例。,对象的使用-用句柄操纵对象

11、每种编程语言都有自己的数据处理方式。有些时候,程序员必须时刻留意准备处理的是什么类型。您曾利用一些特殊语法直接操作过对象,或处理过一些间接表示的对象吗(C或C+里的指针)? 所有这些在Java里都得到了简化,任何东西都可看作对象。因此,我们可采用一种统一的语法,任何地方均可照搬不误。但要注意,尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“句柄”(Handle)。,可将这一情形想象成用遥控板(句柄)操纵电视机(对象)。只要握住这个遥控板,就相当于掌握了与电视机连接的通道。但一旦需要“换频道”或者“关小声音”,我们实际操纵的是遥控板(句柄),再由遥控板自己操纵电视机(对象)。如果要

12、在房间里四处走走,并想保持对电视机的控制,那么手上拿着的是遥控板,而非电视机。,对象的封装 含义:对象的变量置于对象方法的包裹之中,被对外隐藏。 优点: 模块化:不同对象代码之间有一定独立,对象可以 在系统中方便移动。 信息隐藏:保证修改对象信息时,不会对访问它的 对象产生影响。,什么是消息,对象之间通过发送消息进行交互与通信。,消息由三部分构成: 接收消息的对象 方法名称 方法的参数,消息(Message) 对象通过消息相互交流 消息传递:发送消息的对象,接受消息的对象,传递的参数,调用的方法 消息传递(Send Message)是方法调用(Call Method):car1.acceler

13、ate(),换种说法,消息示例,消息机制的好处 对象的行为是通过它的方法表达的,所以消息传递支持对象之间的所有交互。 相互交换消息的对象可以在不同的进程,甚至在不同的机器上。,什么是类(class),A class is a blueprint, or prototype, that defines the variables and the methods common to all objects of a certain kind. 一个类是一个蓝图或样板,它定义了某一特定类的所有对象都具有的变量与方法。,类(Class) 定义一类对象的模板,相当于类型(Type),例:类Plane 对

14、象称为类的实例(Instance),例:对象plane1是类Plane的一个实例,换种说法,类的结构,类示例-自行车,类的实例化示例,类中的变量与方法 变量 实例变量(instance variable) 包含特定对象的状态 类变量(class variable) 由类的所有实例共享 方法 实例方法(instance method) 通过实例进行访问的方法。 类方法 (class method) 通过类进行调用的方法。,什么是继承,继承的子类和父类 子类 A class that is derived from a particular class. 从某个特定类派生出来的类。 父类 A cl

15、ass from which a particular class is derived. 派生出某个特定类的类。,继承的含义 子类继承父类的状态与方法。 子类可以增加新的变量和方法。 子类可以重写(Override)继承来的方法。 注:继承关系可以有多层,子类要继承它所有父类的方法与状态。,class Car int color_number; int door_number; int speed; push_break() add_oil() ,class Trash_Car extends Car double amount; fill_trash() ,继承例,class Car in

16、t color_number; int door_number; int speed; push_break() speed=0; add_oil() ,class Trash_Car extends Car double amount; fill_trash() push_break() speed=speed-10; ,方法的覆盖例,方法的重载(多态性) 在同一个类中至少有两个方法用同一个名字,但有不同的参数。,Java 中的Object类(根类) Java中的Object类是最顶层的类,所有其他的类都是它直接或间接的子类。 类型是Object的变量可以指向任意的对象。 Object提供了运行在JVM中的所有对象都需要的行为(方法)。,继承的优点 通过继承可以重用父类中的代码。 程序员可以定义含有一般行为的抽象类。抽象类中的很多方法是没有实现的。可以

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号