面向对象的程序设计-Java张白一第三版第1章.ppt
《面向对象的程序设计-Java张白一第三版第1章.ppt》由会员分享,可在线阅读,更多相关《面向对象的程序设计-Java张白一第三版第1章.ppt(105页珍藏版)》请在三一办公上搜索。
1、第1章 Java系统环境概述,1.1 编程语言的发展 1.2 网络时代的编程语言Java 1.3 Java的开发运行环境 1.4 Java程序的运行步骤,1.1 编程语言的发展自从1946年第一台电子计算机问世以来,人们一直在探索着自然语言与计算机语言之间的映射问题。我们知道,人类的任何思维活动都是借助于人们所熟悉的某种自然语言进行的。若希望借助计算机完成人类的一种思维活动,就需要把用自然语言表达的东西转换成计算机能够理解和执行的语言形式,这便是编程语言或程序设计语言。毫无疑问,电子计算机毕竟是一种机器,它能够理解和执行的编程语言和自然语言之间存在着较大的差距,这种差距被人们称做“语言的鸿沟”
2、。这一鸿沟虽不可彻底消除,但可以使其逐渐变窄。,事实上,从计算机问世至今,各种编程语言的发展变迁,其目的就是为了缩小这一鸿沟。图1.1引自参考文献3,笔者稍作修改,该图展示了从机器语言发展到面向对象的语言使“语言的鸿沟”变窄的情形。,图1.1 编程语言的发展与“语言的鸿沟”的变化,1.1.1 机器语言电子计算机是一种机器,这种机器主要由电子元器件构成。对于电子元器件来说,最容易表达的是电流的通/断或电位的高/低两种状态。因此,在电子计算机问世之初,人们首先想到的是用“0”和“1”两种符号来代表电路的通和断两种状态,这便是最早的编程语言机器语言。,机器语言是计算机能够理解并直接执行的唯一语言,整
3、个语言只包含“0”和“1”两种符号。用机器语言编写的程序,无论是它的指令、数据还是其存储地址,都是由二进制的“0”和“1”组成的。这种语言离计算机最近,机器能够直接执行它。然而,由“0”和“1”组成的二进制串没有丝毫的形象意义,因此,它离人类的思维最远,“语言的鸿沟”最宽。所以,用机器语言编写程序的效率最低,并且在编写程序时很容易发生错误。,1.1.2 汇编语言为了克服机器语言的缺陷,人们设想用一些易于理解和记忆的符号来代替二进制码,这便是汇编语言。由于汇编语言用符号构成程序,而这些符号表示指令、数据、寄存器、地址等物理概念,因而,使用汇编语言编程在适合人类形象思维的道路上前进了一步。但是,使
4、用汇编语言编写程序时,编程人员依然需要考虑寄存器等大量的机器细节,即汇编语言仍然是一种与具体机器硬件有关的语言,是一种面向机器的语言,因此,人们也把它称为符号化的机器语言。,1.1.3 高级语言由于机器语言和汇编语言都离不开具体的机器指令系统,用它们编程时要求程序员必须熟悉所用计算机的硬件特性,因而,用它们编写程序的技术复杂、效率不高,且可维护性和可移植性都很差。为了从根本上摆脱语言对机器的依附,人们经过多年的潜心研究,终于在1956年推出了一种与具体机器指令系统无关、表达方式接近自然语言的计算机语言FORTRAN语言。在FORTRAN语言程序中,采用了具有一定涵义的数据命名和人们容易理解的执
5、行语句,屏蔽了机器细节,使得人们在书写和阅读程序时可以联系到程序所描述的具体事物。所以,人们把这种“与具体机器指令,系统无关,表达方式接近自然语言”的计算机语言称为高级语言。高级语言的出现是编程语言发展史上的一大进步,它缩小了编程语言与自然语言之间的鸿沟。此后,高级语言进一步向体现客观事物的结构和逻辑涵义的方向发展。结构化数据、结构化语句、数据抽象、过程抽象等概念相继被提出。以1971年推出的Pascal为典型代表的结构化程序设计语言,进一步缩小了编程语言和自然语言的距离。在此后的十几年中,结构化程序设计进一步发展成为一门方法学。在20世纪70年代到80年代,各种结构化程序设计语言及方法非常流
6、行,成为当时软件开发设计领域的主流技术。,在结构化程序设计中,把程序概括为如下的公式:程序=数据结构+算法其中,数据结构是指利用计算机的离散逻辑来量化表达需要解决的问题,而算法则研究如何高效、快捷地组织解决问题的具体过程。可见,以结构化程序设计为代表的高级语言是一种面向数据/过程的程序设计语言,人们把这类语言也称为面向过程的语言。,面向过程的语言可以精确地用计算机所理解的逻辑来描述和表达待解决问题的具体解决过程。然而,它把数据和过程分离为相互独立的实体,使程序中的数据和操作不能有效地组织成与问题域中的具体事物相对应的程序成分,所以它很难把一个具有多种相互关系的复杂事物表述清楚。程序员在编写算法
7、时,必须时刻考虑所要处理问题的数据结构,如果数据结构发生了轻微的变化,那么对处理这些数据的算法也要做出相应的修改,甚至完全重写,否则这个算法就不可再用。因而,用这种程序设计方法编写的软件,其重用性较差。为了较好地解决软件的重用性问题,使数据与程序始终保持相容,人们又提出了面向对象的程序设计方法。,1.1.4 面向对象的语言面向对象的编程语言(Object-Oriented Programming Language,OOPL)的设计出发点是为了能更直接地描述问题域中客观存在的事物(即对象)以及它们之间的关系。面向对象技术追求的是软件系统对现实世界的直接模拟,是将现实世界中的事物直接映射到软件系统
8、的解空间。它希望用户最大程度地利用软件系统,花费少量的编程时间来解决需要解决的问题。在面向对象的程序设计语言中,可以把程序描述为如下的公式:程序=对象+消息,面向对象的语言对现实世界的直接模拟体现在下面几个方面:(1)对象(object)。只要我们仔细研究程序设计所面对的问题域客观世界,就可以看到,客观世界是由一些具体的事物构成的,每个事物都具有自己的一组静态特征(属性)和一组动态特征(行为)。例如,一辆汽车有颜色、型号、马力、生产厂家等静态特征,又具有行驶、转弯、停车等动态特征。要把客观世界的这一事实映射到面向对象的程序设计语言中,则需把问题域中的事物抽象成对象,用一组数据描述该对象的静态特
9、征(即属性,在Java中称之为数据成员),用一组方法来刻画该对象的动态特征(即行为)。,(2)类(class)。客观世界中的事物既具有特殊性又具有共同性。人类认识客观世界的基本方法之一就是对事物进行分类,即根据事物的共同性把事物归结为某些类。考虑一下所有的汽车和一辆汽车之间的关系就很容易理解这一点。OOPL很自然地用类(class)来表示一组具有相同属性和方法的对象。(3)继承(inheritance)。在同一类事物中,每个事物既具有同类的共同性,又具有自己的特殊性。OOPL用父类与子类的概念来描述这一事实。在父类中描述事物的共性,通过父类派生(derive)子类的机制来体现事物的个性。考虑同
10、类事物中每个事物的特殊性时,可由这个父类派生子类,子类可以继承父类的共同性,又具有自己的特殊性。,(4)封装(encapsulation)。客观世界中的事物是一个独立的整体,它的许多内部实现细节是外部所不关心的。例如,对于一个只管开车的驾驶员来说,他可能根本不知道他所驾驶的这辆汽车内部用了多少根螺钉或几米导线,以及它们是怎样组装的。OOPL用封装机制把对象的属性和方法结合为一个整体,并且屏蔽了对象的内部细节。,(5)关联(association)。客观世界中的一个事物可能与其他事物之间存在某种行为上的联系。例如,一辆行驶中的汽车遇到红色信号灯时要刹车停止,OOPL便通过消息连接来表示对象之间的
11、这种动态联系,也称之为关联。(6)组合体(composite)。拥有其他对象的对象被称为组合体。客观世界中较为复杂的事物往往是由其他一些比较简单的事物构成的。例如,一辆自行车是由车架、车轮、把手等构件构成的。OOPL也提供了描述这种组合体的功能。,综上所述,面向对象的编程语言使程序能够比较直接地反映客观世界的本来面目,并且使软件开发人员能够运用人类认识事物所采用的一般思维方法来进行软件开发。面向对象的语言和人类认识、理解客观世界所使用的自然语言之间的差距是比较小的。当然,二者之间仍然存在着一定的差距,自然语言的丰富多样和借助人脑的联想思维才能辨别的语义,仍是目前任何一种计算机编程语言无法相比的
12、。,1.1.5 面向对象语言的发展面向对象的语言是在软件开发的实践中逐步提出并不断得到完善的。1967年由挪威计算中心开发的Simula 67语言首先引入了类的概念和继承机制,被认为是面向对象语言的鼻祖。20世纪70年代出现的CLU、并发Pascal、Ada和Modula-2等编程语言,对抽象数据类型理论的发展起到了重要作用。这些语言支持数据与操作的封装。,1980年提出的Smalltalk-80是第一个完善的、能够实际应用的面向对象语言。它在系统的设计中强调对象概念的统一,并引入和完善了类、方法、实例等概念和术语,应用了继承机制和动态链接。它被认为是一种最纯粹的面向对象的程序设计语言。从20
13、世纪80年代中期到90年代,是面向对象语言走向繁荣的阶段。其主要表现是大批比较实用的OOPL的涌现,例如C+、Objective-C、Object Pascal、COLOS(Common Lisp Object System)、Eiffel、Actor及Java等。,综观所有的面向对象程序设计语言,我们可以把它们分为两大类:(1)纯粹的面向对象语言,如Smalltalk、Java。在这类语言中,几乎所有的语言成分都是“对象”。这类语言强调的是开发快速原型的能力。(2)混合型的面向对象语言,如C+、Object Pascal。这类语言是在传统的过程化语言中加入了各种面向对象的语言机构,它们强调的
14、是运行效率。,1.2 网络时代的编程语言JavaInternet将世界各地成千上万的计算机子网连接成一个庞大的整体,而这些子网是由各种各样不同型号、不同规模、使用不同操作系统、具有不同应用软件平台的计算机组成的。这就很自然地提出了一个问题:有没有一种语言,使得程序员用这种语言编写的程序可以在不同的计算机上运行,从而减少编程工作量,提高程序的可移植性,使Internet能够发挥更多、更大的作用呢?Java正是顺应了这种需求,因而得到了广泛的使用。它以其平台无关性、面向对象、多线程、半编译半解释等特点而成为网络时代的编程语言。,1.2.1 Java的产生1991年初,美国加州的Sun Micros
15、ystem公司(以下简称Sun公司)成立了一个以James Gosling为首、名为Green的项目研发小组,其目标是开发一个面向家用电器市场的软件产品,用软件实现一个对家用电器进行集成控制的小型控制装置。他们首先注意到这个产品必须具有平台独立性,即让该软件在任何CPU上都能运行。为达到此目的,Gosling首先从改写C+语言的编译器着手。但是,他们很快便意识到这个产品还必须具有高度的简洁性和安全性,而C+在这方面显然无法胜任。因此,Gosling决定自行开发一种新的语言,并将该语言命名为Oak(橡树)。,Oak是Green项目小组开发的名为“*7”(StarSeven)产品中的一个组成部分。
16、StarSeven是一个集成了Oak、GreenOS(一种操作系统)、用户接口模块和硬件模块四个部分的类似于PDA(Personal Digital Assistant,个人数字助理)的设备。StarSeven的第一个原型于1992年8月问世。尽管这个原型非常成功,但在竞争激烈的家用电器市场上却败给了竞争对手。失败的原因固然是多方面的,但笔者认为这与Sun公司的主业是计算机产品而不是家用电器产品这一因素密切相关。,“有心栽花花不开,无心插柳柳成荫。”有趣的是,在这段时间里,WWW的发展却如日中天。1993年7月,伊利诺斯大学的NCSA推出了一个在Internet上广为流行的WWW浏览器Mosa
17、ic 1.0版。然而,这时的WWW页面虽然内容丰富,声、图、文并茂,但它却是静态的,若想增强WWW的动感,需要通过一种机制来使它具有动态性。其解决方案显然是嵌入一种既安全可靠,又非常简练的语言。Oak完全能满足这一要求,但是要将它推向市场,为人们所广泛接受,还必须采用一种合适的策略。在这种情况下,1994年,Sun公司的创始人之一Bill Joy的介入,促成Oak成为Java并得以走红。,Bill Joy早年曾参与过UNIX的开发,深知网络对UNIX的推广所起的作用。因此,他不仅指定Gosling继续完善Oak(发布时改名为Java),同时要求Naughton用Oak编写一个真正的应用程序We
18、bRunner,也就是后来被命名为HotJava的WWW浏览器。1994年底,两人均出色地完成了各自的任务。这时,在这个产品的发布问题上,Bill Joy力排众议,采取了“让用户免费使用来占领市场份额”的策略,促成了Java与HotJava于1995年初在Internet上的免费发布。由于Java确实是一种分布式、安全性高、内部包含编译器又非常小的适合网络开发环境的语言,因而一经发布,立即得到包括Netscape在内的各WWW厂商的广泛支持。工业界,一致认为:“Java是(20世纪)80年代以来计算机界的一件大事。”微软总裁Bill Gates认为:“Java是长期以来最卓越的程序设计语言。”
19、而今,Java已成为最流行的网络编程语言。Java名称的由来:由于Oak这个名称与其他产品的名称雷同,因此开发小组后来为这个新语言取了一个新名称Java(爪哇)。据说取这个名称的灵感来自于这样一个故事:研发小组的成员经常在公司附近的一家咖啡厅喝咖啡,而咖啡的原产地是Java,于是就将这一新语言取名为Java。,1.2.2 Java的特点Sun公司在“Java白皮书”中对Java的定义是:“Java:A simple,object-oriented,distributed,interpreted,robust,secure,architecture-neutral,portable,high-p
20、erformance,multi-threaded,and dynamic language.”。按照这个定义,Java是一种具有“简单、面向对象的、分布式、解释型、健壮、安全、与体系结构无关、可移植、高性能、多线程和动态执行”等特性的语言。下面我们简要叙述Java的这些特性。,1.简单性Java语言简单而高效,基本Java系统(包含编译器和解释器)所占空间只有250 KB左右。当然,这与Java的起源有很大关系。前已述及,Java最初是为了对家用电器进行集成控制而设计的一种语言,因此它必须具有简单明了的特性。,我们注意到,Gosling等人在设计Java之初,是从改写C+编译器入手的,这就使
21、Java具有了以下特点:其语言风格类似于C+,保留了C+语言的优点;摈弃了C+中不安全且容易引发程序错误的指针;消除了C+中可能给软件开发、实现和维护带来麻烦的地方,包括其冗余、二义性和存在安全隐患之处,如操作符重载、多重继承和数据类型自动转换等;简化了内存管理和文件管理Java提供了C+中不具备的自动内存垃圾搜集机制,从而减轻了编程人员进行内存管理的负担,有助于减少软件错误。从这些方面看,Java是C+的简化和改进,因而C+程序员可以很快掌握Java编程技术。,Java的简单性是以增加运行时系统的复杂性为代价的。以内存管理为例,自动内存垃圾处理减轻了面向对象编程的负担,但Java运行时系统却
22、必须内嵌一个内存管理模块。虽然如此,对编程人员而言,Java的简单性只会是一个优点,它可以使我们的学习曲线更趋合理化,加快我们的开发进度,减少程序出错的可能性。,2.面向对象Java语言是纯面向对象的,它不像C+那样既支持面向对象的技术,又支持面向过程的程序设计技术(对象及其相关概念请参阅第4章)。这里只从一个侧面说明面向对象的编程语言与面向过程的编程语言之间的区别。传统的面向过程的编程语言把程序概括为程序=数据结构+算法而面向对象的编程语言把程序概括为程序=对象+消息,在面向对象的技术中,可以把现实世界中的任何实体都看做对象。对象其实就是现实世界模型的一个自然延伸。现实世界中的对象均具有属性
23、和行为,映射到计算机程序上,属性用数据表示,行为用程序代码实现。可见,对象实际上就是数据和算法(程序代码)的封装体,它用一个自主式框架把代码和数据结合在一起。面向对象的程序设计技术较传统的面向过程的程序设计技术更能真实地模拟现实世界。,Smalltalk的发明人Alan Kay对第一个成功的面向对象语言Smalltalk总结出的五个基本特征如下(当然,这些特征也是Java语言所具备的):(1)万物皆对象。理论上讲,我们可以抽取待解问题的任何概念化成分,将其表示为程序中的对象。可以将对象视为奇特的变量,它既可以存储数据,也可以执行操作。(2)程序是对象的集合,它们通过发送消息实现调用。消息就是对
24、某个特定对象的方法的调用请求。具体地说,要想请求一个对象,就必须向该对象发送一条消息。,(3)每个对象都有自己的由其他对象所构成的存储。换句话说,可以通过创建包含现有对象的包的方式来创建新的对象。因此,可以在程序中构建复杂的体系,同时将其复杂性隐藏在对象的简单性背后。(4)每个对象都拥有其类型。按照通用的说法,“每个对象都是某个类(class)的一个实例(instance)”,这里的“类”是“类型”的同义词。每个类区别于其他类的最重要特性就是“可以发送什么样的消息给它”。,(5)某个特定类型的所有对象都可以接收同样的消息。例如:因为“圆形”类型的对象同时也是“几何形”类型的对象,所以,一个“圆
25、形”对象必定能够接收发送给“几何形”对象的消息。这也意味着可以编写与“几何形”交互并自动处理所有与“几何形”性质相关的事物的代码。Java语言是纯面向对象的,它的设计集中于对象及其接口,提供了简单的类机制以及动态的接口模型。对象中封装了它的属性和行为,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。,3.可移植性(平台无关性)程序的可移植性指的是程序不经修改就能在不同硬件或软件平台上运行的特性,即“一次编写,到处运行”的特性。可移植性在一定程度上决定了程序的可应用性。可移植性分为两个层次:源代码级可移植性和二进制代码级可移植
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 Java 张白一 第三
链接地址:https://www.31ppt.com/p-6034393.html