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

上传人:wuy****n92 文档编号:80476067 上传时间:2023-03-23 格式:PPT 页数:53 大小:497KB
返回 下载 相关 举报
java语言程序设计(第二版).ppt_第1页
第1页 / 共53页
java语言程序设计(第二版).ppt_第2页
第2页 / 共53页
点击查看更多>>
资源描述

《java语言程序设计(第二版).ppt》由会员分享,可在线阅读,更多相关《java语言程序设计(第二版).ppt(53页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第二章第二章 面向对象面向对象(OO)程序设计概念程序设计概念参考书:参考书:Bruce Eckel Thinking in Java程序设计的演变程序设计的演变l机器语言机器语言l汇编语言汇编语言l面向过程的语言和结构化程序设计面向过程的语言和结构化程序设计程序算法数据结构程序算法数据结构 (C)l面向对象程序设计面向对象程序设计程序对象消息传递程序对象消息传递(Java,C+,C#)抽象的进步抽象的进步 l所有编程语言的最终目的都是提供一种所有编程语言的最终目的都是提供一种“抽抽象象”方法方法 l汇编语言是对基础机器的少量抽象汇编语言是对基础机器的少量抽象 l命令式语言(如命令式语言(如F

2、ORTRAN,BASIC和和C)是对汇编语言的一种抽象是对汇编语言的一种抽象 lOOP是更高层的抽象是更高层的抽象面向对象程序设计方法的来源面向对象程序设计方法的来源l大英百科全书描述了人类在认识和理解大英百科全书描述了人类在认识和理解现实世界的过程中普遍运用的三个法则:现实世界的过程中普遍运用的三个法则:1、区分对象及其属性,例如,区分一棵树和树的、区分对象及其属性,例如,区分一棵树和树的大小或它与其它对象的空间关系。大小或它与其它对象的空间关系。2、区分整体对象及其组成部分。例如,区分一棵、区分整体对象及其组成部分。例如,区分一棵树和树枝。树和树枝。3、形成并区分不同对象的类。例如,形成所

3、有树、形成并区分不同对象的类。例如,形成所有树的类和所有石头的类,并区分它们。的类和所有石头的类,并区分它们。面向对象程序设计方法的特征面向对象程序设计方法的特征 (1)所有东西都是对象。所有东西都是对象。可将对象想象成一种新型变量;它保存着数可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。理论上讲,据,但可要求它对自身进行操作。理论上讲,可从要解决的问题身上提出所有概念性的组件,可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象。然后在程序中将其表达为一个对象。(2)程序是一大堆对象的组合;程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什

4、么。通过消息传递,各对象知道自己该做些什么。为了向对象发出请求,需向那个对象为了向对象发出请求,需向那个对象“发送一发送一条消息条消息”。更具体地讲,可将消息想象为一个。更具体地讲,可将消息想象为一个调用请求,它调用的是从属于目标对象的一个调用请求,它调用的是从属于目标对象的一个子例程或函数。子例程或函数。(3)每个对象都有自己的存储空间,可容纳每个对象都有自己的存储空间,可容纳其他对象。其他对象。或者说,通过封装现有对象,可制作出新型或者说,通过封装现有对象,可制作出新型对象。所以,尽管对象的概念非常简单,但在对象。所以,尽管对象的概念非常简单,但在程序中却可达到任意高的复杂程度。程序中却可

5、达到任意高的复杂程度。(4)每个对象都有一种类型。每个对象都有一种类型。根据语法,每个对象都是某个根据语法,每个对象都是某个“类类”的一个的一个“实例实例”。其中,。其中,“类类”(Class)是)是“类型类型”(Type)的同义词。一个类最重要的特征就)的同义词。一个类最重要的特征就是是“能将什么消息发给它?能将什么消息发给它?”。(5)同一类所有对象都能接收相同的消息。同一类所有对象都能接收相同的消息。这实际是别有含义的一种说法,大家不久便能理解。这实际是别有含义的一种说法,大家不久便能理解。由于类型为由于类型为“圆圆”(Circle)的一个对象也属于类型为)的一个对象也属于类型为“形状形

6、状”(Shape)的一个对象,所以一个圆完全能接)的一个对象,所以一个圆完全能接收形状消息。这意味着可让程序代码统一指挥收形状消息。这意味着可让程序代码统一指挥“形状形状”,令其自动控制所有符合,令其自动控制所有符合“形状形状”描述的对象,其中自描述的对象,其中自然包括然包括“圆圆”。这一特性称为对象的。这一特性称为对象的“可替换性可替换性”,是,是OOP最重要的概念之一。最重要的概念之一。计计算算机机世世界界概概念念世世界界现现实实世世界界实体实体抽象数据类型抽象数据类型类类对象对象抽象抽象转换转换抽象抽象实例化实例化白白馬馬非非馬論馬論 l公孙龙是名家的代表人物,他最有名的辩论是“白马非马

7、”的假说。一天,他牵一匹白马出关被阻,公孙龙便以白马非马的命题与之辩论,守关的人辩不过他,公孙龙就牵着马出关去了(或说,他还是不得出关)。l公孙龙说,白马为非马者,言白所以名色,言马所以名形白马为非马者,言白所以名色,言马所以名形也;色非形,形非色也。夫言色则形不当与,言形则色不也;色非形,形非色也。夫言色则形不当与,言形则色不宜从,今合以为物,非也。如求白马于厩中,无有,而有宜从,今合以为物,非也。如求白马于厩中,无有,而有骊色之马,然不可以应有白马也。不可以应有白马,则所骊色之马,然不可以应有白马也。不可以应有白马,则所求之马亡矣;亡则白马竟非马求之马亡矣;亡则白马竟非马。l公孙龙的话大意

8、是说:马 指的是马的形态,白马指的是马的颜色,而形态不等于颜色,所以白马不是马。其他声音(论面向对象和结构化其他声音(论面向对象和结构化)1、许多人一谈到结构化、许多人一谈到结构化,就非常不屑地说就非常不屑地说,那是过了时的东那是过了时的东西西,现在流行的是面向对象现在流行的是面向对象,等等等等.真的是这样吗真的是这样吗?我认为没有我认为没有,结构化的设计思想并没有消失结构化的设计思想并没有消失,而是一直在顽强而是一直在顽强的生存着的生存着,以后也会生存下去以后也会生存下去.结构化的思想和面向对象的思结构化的思想和面向对象的思想只是考虑同样一个问题的两个不同角度而已想只是考虑同样一个问题的两个

9、不同角度而已,他们本身并他们本身并没有那个好那个不好的问题没有那个好那个不好的问题,当然具体到每个系统设计人员当然具体到每个系统设计人员,就要受限制与自己所接受的教育就要受限制与自己所接受的教育,从而可能会有自己的判断从而可能会有自己的判断和喜好和喜好.我曾经接触过几个老资格的程序员我曾经接触过几个老资格的程序员,他们在中国刚刚引进计他们在中国刚刚引进计算机时就开始进行大规模的软件编程算机时就开始进行大规模的软件编程,他们对于系统的把握他们对于系统的把握和理解确实是非常深刻的和理解确实是非常深刻的,尽管是结构化的尽管是结构化的.系统分析本身的最终目的系统分析本身的最终目的,是为了真正理解系统是

10、为了真正理解系统,而采用那个而采用那个角度角度,用那种方法来理解系统只是一个手段问题用那种方法来理解系统只是一个手段问题,不是根本问不是根本问题题.2、不敢苟同,你没有意识到两者本质上的不同,、不敢苟同,你没有意识到两者本质上的不同,结构化方法的缺陷(或者叫硬伤)使得它逐渐被结构化方法的缺陷(或者叫硬伤)使得它逐渐被淘汰,淘汰,3、我来打个比方、我来打个比方,面向对象和结构化好比中医和面向对象和结构化好比中医和西医一样西医一样,只是两种不同的理论体系一样只是两种不同的理论体系一样,但病人但病人是一个是一个,他们本质上是不同的他们本质上是不同的,但其处理的问题是但其处理的问题是一致的一致的.难道

11、中医能看病难道中医能看病,就意味着西医不能看病就意味着西医不能看病吗吗?请问请问,结构化的缺陷何在结构化的缺陷何在?4、“天圆地方天圆地方”是足够正确的,在人们没有见到大海之是足够正确的,在人们没有见到大海之前前“地心说地心说”是足够正确的,在人们没有感觉到行星轨道的是足够正确的,在人们没有感觉到行星轨道的复杂之前复杂之前“日心说日心说”是足够正确的,在人们没有感觉到更大星系的是足够正确的,在人们没有感觉到更大星系的存在之前存在之前.牛顿力学是足够正确的,在人们没有计算超大尺度和超小牛顿力学是足够正确的,在人们没有计算超大尺度和超小尺度之前尺度之前结构化也是足够的,在软件开发不得不把结构化也是

12、足够的,在软件开发不得不把“复用复用”、“构构件件”摆在重要位置之前摆在重要位置之前 5、老资格的结构化程序员确实是、老资格的结构化程序员确实是面向对象新手,面向对象新手,就象算盘老手速度比计算器新手快一样,有的毛就象算盘老手速度比计算器新手快一样,有的毛笔老手也会写得比钢笔新手快又好。笔老手也会写得比钢笔新手快又好。6、知不知道并不是有了超大超小之后、知不知道并不是有了超大超小之后,牛顿力学牛顿力学就不对了就不对了.你拿量子力学或者超弦理论来算火车什你拿量子力学或者超弦理论来算火车什么时候到站估计永远得不出结果来么时候到站估计永远得不出结果来.只有适用的才只有适用的才是最好的是最好的,没有万

13、能药没有万能药l用来打苍蝇估计苍蝇拍比原子弹更好用来打苍蝇估计苍蝇拍比原子弹更好.7、如果你说的是世界观,我同意、如果你说的是世界观,我同意OO和结构化没和结构化没有优劣之分,这属于哲学范畴;但我想,我们是有优劣之分,这属于哲学范畴;但我想,我们是在讨论技术和工程问题,在这一点上,无论理论在讨论技术和工程问题,在这一点上,无论理论还是实践,还是实践,OO是主流,胜于结构化,也早有定论。是主流,胜于结构化,也早有定论。市场已经做出了回答。在这市场已经做出了回答。在这10年间新的软件基本年间新的软件基本上都在用上都在用OO方法,而结构化只被限制小范围、某方法,而结构化只被限制小范围、某些特定的应用

14、上。些特定的应用上。我离开大学后就再也没有接触过结构化,我离开大学后就再也没有接触过结构化,OO完全完全可以取代它。可以取代它。8、回头看一看、回头看一看OO的历史,就会发现的历史,就会发现OO的出现是为了适的出现是为了适应软件工程的发展。随着项目规模的不断扩大,结构化已应软件工程的发展。随着项目规模的不断扩大,结构化已经力不从心了。经力不从心了。引入引入OO的方法是为了将复杂的问题简单化,可以理解成的方法是为了将复杂的问题简单化,可以理解成为另一种方式的自顶向下、逐步细化。分解到一定程度后为另一种方式的自顶向下、逐步细化。分解到一定程度后就可以采用结构化的方法去实现了。就可以采用结构化的方法

15、去实现了。所以面向对象与结构化不是格格不入的,而是相辅相成的。所以面向对象与结构化不是格格不入的,而是相辅相成的。用牛顿力学和相对论比可能不太合适,是不是可以比喻成用牛顿力学和相对论比可能不太合适,是不是可以比喻成双脚和车子:短距离步行还可以,距离远了走起来可是要双脚和车子:短距离步行还可以,距离远了走起来可是要累死了;但是要想回家还得下车来走两步;所以走路永远累死了;但是要想回家还得下车来走两步;所以走路永远不过时,开车就是比走路快!不过时,开车就是比走路快!请同学考虑请同学考虑如何编程实如何编程实现这个记事现这个记事本程序?本程序?难度有多大难度有多大?面面向向对对象象程程序序设设计计是是

16、使使用用类类和和对对象象将将现现实实世世界界中中真真实实的的或或抽抽象象的的实实体体在在程程序序中中建建立模型。立模型。面向对象程序设计面向对象程序设计面向对象程序设计的基本概念面向对象程序设计的基本概念z什么是对象(什么是对象(Object)z什么是消息(什么是消息(Message)z什么是类什么是类 (Class)z什么是继承(什么是继承(Inheritance)z什么是接口(什么是接口(Interface)什么是对象(什么是对象(Object)l对象的概念软件对象是现实对象在程序中的模型软件对象是现实对象在程序中的模型现实世界对象的两个特征:现实世界对象的两个特征:状态(状态(state

17、)与与行为(行为(behavior).软件对象也具有状态与行为:软件对象也具有状态与行为:状态:以一个或多个状态:以一个或多个变量变量保存保存 行为:用行为:用方法方法实现行为实现行为l对象的定义对象由对象由变量变量与相关的与相关的方法方法结合起来构成的。结合起来构成的。对象对象(Object)l一组一组数据数据及其对这些数据的及其对这些数据的操作过程操作过程l 对象中的数据称为对象中的数据称为域域(Field)例:例:plane1.weightl 对象中的操作过程称为对象中的操作过程称为方法方法(Method)例:例:plane1.move()换种说法来换种说法来帮助理解帮助理解class

18、Car int color_number;int door_number;int speed;void brake()void speedUp();void slowDown()计算机中计算机中的对象的原型的对象的原型现实生活现实生活中的对象中的对象l对象实例一个特定的对象称为一个特定的对象称为实例实例。l对象的使用-用句柄操纵对象每种编程语言都有自己的数据处理方式。有些时候,程序每种编程语言都有自己的数据处理方式。有些时候,程序员必须时刻留意准备处理的是什么类型。您曾利用一些特员必须时刻留意准备处理的是什么类型。您曾利用一些特殊语法殊语法直接操作直接操作过对象,或处理过一些过对象,或处理过一

19、些间接表示间接表示的对象吗的对象吗(C或或C+里的指针)?里的指针)?所有这些在所有这些在Java里都得到了简化,任何东西都可看作对象里都得到了简化,任何东西都可看作对象。因此,我们可采用一种统一的语法,任何地方均可照搬不因此,我们可采用一种统一的语法,任何地方均可照搬不误。但要注意,尽管将一切都误。但要注意,尽管将一切都“看作看作”对象,但操纵的标对象,但操纵的标识符实际是指向一个对象的识符实际是指向一个对象的“句柄句柄”(Handle)。)。可将这一情形想象成用可将这一情形想象成用遥控板(句柄)操纵电视机(对遥控板(句柄)操纵电视机(对象)象)。只要握住这个遥控板,就相当于掌握了与电视机。

20、只要握住这个遥控板,就相当于掌握了与电视机连接的通道。但一旦需要连接的通道。但一旦需要“换频道换频道”或者或者“关小声音关小声音”,我们实际操纵的是遥控板(句柄),再由遥控板自己,我们实际操纵的是遥控板(句柄),再由遥控板自己操纵电视机(对象)。如果要在房间里四处走走,并想操纵电视机(对象)。如果要在房间里四处走走,并想保持对电视机的控制,那么手上拿着的是遥控板,而非保持对电视机的控制,那么手上拿着的是遥控板,而非电视机。电视机。l对象的封装含义:对象的变量置于对象方法的包裹之中,含义:对象的变量置于对象方法的包裹之中,被对外隐藏。被对外隐藏。优点:优点:模块化:模块化:不同对象代码之间有一定

21、独立,对象可以不同对象代码之间有一定独立,对象可以 在系统中方便移动。在系统中方便移动。信息隐藏:信息隐藏:保证修改对象信息时,不会对访问它的保证修改对象信息时,不会对访问它的 对象产生影响。对象产生影响。私有数据私有数据 方法方法 方法方法数据数据对象对象A对象对象B公有数据公有数据什么是消息什么是消息l对象之间通过发送消息进行交互与通信。对象之间通过发送消息进行交互与通信。l消息由三部分构成:消息由三部分构成:接收消息的对象接收消息的对象方法名称方法名称方法的参数方法的参数消息消息(Message)对象通过消息相互交流对象通过消息相互交流 消息传递:发送消息的对象,接受消息消息传递:发送消

22、息的对象,接受消息的对象,传递的参数,调用的方法的对象,传递的参数,调用的方法 消息传递消息传递(Send Message)是方法调用是方法调用(Call Method):car1.accelerate()换种说法换种说法l消息示例消息示例l消息机制的好处对象的行为是通过它的方法表达的,所以消息对象的行为是通过它的方法表达的,所以消息传递支持对象之间的所有交互。传递支持对象之间的所有交互。相互交换消息的对象可以在不同的进程,甚至相互交换消息的对象可以在不同的进程,甚至在不同的机器上。在不同的机器上。什么是类(什么是类(class)A class is a blueprint,or protot

23、ype,that defines the variables and the methods common to all objects of a certain kind.一个类是一个蓝图或样板,它定义了某一个类是一个蓝图或样板,它定义了某一特定类的所有对象都具有的变量与方法。一特定类的所有对象都具有的变量与方法。类类(Class)定义一类对象的模板,相当于类型定义一类对象的模板,相当于类型(Type),例:类例:类Plane 对象称为对象称为类的实例类的实例(Instance),例:对,例:对象象plane1是类是类Plane的一个实例的一个实例换种说法换种说法l类的结构类的结构l类示例类

24、示例-自行车自行车l类的实例化示例类的实例化示例l类中的变量与方法变量变量l实例变量实例变量(instance variable)包含特定对象的状态包含特定对象的状态l类变量类变量(class variable)由类的所有实例共享由类的所有实例共享方法方法l实例方法实例方法(instance method)通过实例进行访问的方法。通过实例进行访问的方法。l类方法类方法(class method)通过类进行调用的方法。通过类进行调用的方法。什么是继承什么是继承l继承的子类和父类子类子类 A class that is derived from a particular class.从某个特定类从

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

26、;push_break()add_oil()class Trash_Car extends Car double amount;fill_trash()继承例继承例class Car int 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;方法的覆盖例方法的覆盖例l方法的重载(多态性)在同一个类中至少有两个方法用同一个名字,在同一个类中至少有两个方

27、法用同一个名字,但有不同的参数但有不同的参数。类类void show(int int_num)void show(double double_num)void show(int int_num,float float_num)1231.23123,1.23lJava 中的Object类(根类)Java中的中的Object类是最顶层的类类是最顶层的类,所有其他的,所有其他的类都是它直接或间接的子类。类都是它直接或间接的子类。类型是类型是Object的变量可以指向任意的对象。的变量可以指向任意的对象。Object提供了运行在提供了运行在JVM中的所有对象都需要中的所有对象都需要的行为(方法)。的行

28、为(方法)。l继承的优点通过继承可以通过继承可以重用重用父类中的代码。父类中的代码。程序员可以定义含有一般行为的抽象类。抽象程序员可以定义含有一般行为的抽象类。抽象类中的很多方法是没有实现的。可以在抽象类类中的很多方法是没有实现的。可以在抽象类的基础上定义特定的子类,实现具体的细节。的基础上定义特定的子类,实现具体的细节。什么是接口什么是接口Java语语言言中中,接接口口是是彼彼此此不不相相关关对对象象之之间间发发生生联联系系的的手手段段。接接口口类类似似于于一一种种对对某某种种行行为为达达成成的的协协议议。这这种种协协议议以以包包含含在在接接口口中中的的一一组组常常量量、一一些些方方法法定定

29、义义的的形形式式提提出出来来。对对象象必必须须实实现现接接口口,才能具有某种行为。才能具有某种行为。接口机制中没有强制这些类之间建立超、子类接口机制中没有强制这些类之间建立超、子类关系。关系。香蕉香蕉牛肉牛肉饼干饼干共同特共同特点是?点是?请各小组完成下面的作业:给出几何图形的组合与继承关系class point int x;int y;show()system.out.println(“show a point”);hide()system.out.println(“hide a point”);简单几何图形包括:l点、线、三角形、正方形、长方形、五边形、六边形、多边形、圆 l球体、圆拄、长

30、方体、六棱体等Bruce Eckel lThinking in Java 3rdlhttp:/ in Java一书封面的创作灵感来源于American Arts&CraftsMovement(美洲艺术手工艺品运动)。这一运动起始于世纪之交,1900到1920年达到了顶峰。它起源于英格兰,具有一定的历史背景。当时正是机器革命产生的风暴席卷整个大陆的时候,而且受到维多利亚地区强烈装饰风格的巨大影响。Arts&Crafts强调的是原始风格,回归自然的初衷是整个运动的核心。那时对手工制作推崇备至,手工艺人特别得到尊重。正因为如此,人们远远避开现代工具的使用。这场运动对整个艺术界造成了深远的影响,直至今天仍受到人们的怀念。特别是我们面临又一次世纪之交,强烈的怀旧情绪难免涌上心来。计算机发展至今,已走过了很长的一段路。我们更迫切地感到:软件设计中最重要的是设计者本身,而不是流水化的代码编制。如设计者本身的素质和修养不高,那么最多只是“生产”代码的工具而已。

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

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁