已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Sun Website, The Java Language: An Overview, /docs/overviews/java/java-overview-1.html,2004Java语言综述Hoare. C A R Monitors计算机科学学院 40212137 xxxx译摘要:Java作为一种定位于网络使用的编程语言,越来越成为计算机行业的焦点。它具有许多适宜于互连网异构平台环境的特点。论文介绍了Java语言的如下几个特点:简单、面向对象、网络灵活性、解释(执行)、健壮性、安全性、平台独立性、移动性、高性能、多线程处理和动态性。关键词:Java 面向对象 多线程处理 动态性绪论Java 编程语言和环境是为了解决现代编程实践中存在的大量的问题而被开发设计的。Java 最初是作为为家用消费电子产品开发先进的软件这个较大项目的一部分。这些设备具有小、可靠、可移动、分布、 实时嵌入系统的特点。起初我们打算使用C+ 来完成这个项目, 但是遇到了许多问题。 最初是即时编译器技术问题,但是随着时间的推移,涌现出了更多可以用改变这种语言来得到最好解决问题。Java Java是一种简单、面向对象、网络灵活的、解释(执行)的、健壮的、安全的、与平台无关的、可移动的、高性能的、多线程的以及动态的程序设计语言。 描绘一个系统的一种方法是用一套专业术语。我们使用一套标准的专业术语来描述Java。下面将给出我们那些专业术语的解释和我们设法解决的问题。Archimedes 公司是一个生产一种基础物理教育软件的虚拟软件公司。 这套软件的设计是用来与用户打交道的, 不仅提供传统课本方式的文本和例证, 而且还提供一套可以用来设计和模仿实验的软件实验室平台。 最基本的实验是允许学生把杠杆和滑轮放在一起并观察它们怎么运动。 Archimedes设计师们的艰辛和用斜体字印刷的叙述的实验在这里用来为Java 语言概念提供例子。 简单我们想建立一种不需要经过高级培训并且支持今天标准操作的很容易被编程系统。目前大多数程序员都使用C,使用C+实现面向对象的编程。因此即使我们发现C+ 是不合适的, 我们还是设计了与C+相似的Java 尽可能地使系统更容易被理解。Java 省去了C+中给我们的经验带来更多麻烦而非好处的许多很少被使用, 很难懂,缠扰不清的特点。这些被省去的特点主要包括运算符过载(虽然Java 语言中的确也有方法过载), 多重继承性, 并且广泛的自动强制。 我们增加了自动垃圾收集,从而简化了Java编程时的任务,但使得Java程序设计系统较为复杂。导致许多C、C+应用程序复杂的一个根本原因是存储器的管理: 内存的分配和释放。 由于具有自动垃圾收集(定期释放内存没有提到),Java语言不仅使编程的任务更加容易,而且大幅度地减少了漏洞。 Archimedes 的成员曾经希望把他们的时间花费在考虑杠杆和滑轮上, 然而却在世俗的编程任务上花费了很多时间。 他们的核心是知识教育, 而不是编程。这些编程任务中最复杂的是推测在他们20K 的代码行中哪些内存被浪费。另一方面是小而简单。Java的目标之一是使软件设计可以在小机器上独立运行。Java 编译器和标准库占有一个小空间。 这个小空间对嵌入式系统的应用很重要,因此Java可能容易通过网络被下载。面向对象不幸的是, 这是一个在工业上最使用过度的专业术语之一。但面向对象的设计是非常强有力的,因为它有利于接口的清晰定义还可以提供使可再用的“软件ICs” 。 简单地说,面向对象设计是一种设计重点在于数据(=对象)及其接口的技术。以木匠业为例,一个面向对象的 木匠将会主要涉及他担任制作的椅子,其次有制作椅子使用的工具; 一个非面向对象木匠则主要是他的工具。面向对象的设计也是定义模块如何“即插即用”的机制。 Java 的面向对象设施实质上是C+的那一套, 以引伸客观C 为更加动态的方法决议。Archimedes的成员在模仿很多东西, 其中包括绳索和橡皮筋。 在产品的最初C 版本, 他们最终以一个相当大的系统告终,因为他们为描述绳索对抗橡皮筋必须编写单独的软件。 当他们以面向对象的风格重写他们的应用程序时, 他们发现可以先定义一个代表绳索和橡皮筋共同方面的基本对象,然后绳索和橡皮筋被定义为这个基本类型的变异(子类)。 在使用它时随时增加链表, 这是系统网络动作程序,因为它们能够在写之前被建立, 而不是写一个全新的模拟对象。网络灵活性Java 有一个例行测试的扩展库,用来容易地应付TCP(传输控制协议)/IP(网际协议) 如HTTP(超文本传输协议) 和FTP(文件传输协议) 。 这使得创建网络连接比在C 或C+中更加容易。 Java 应用可以很容易地通过网络用URLs(统一资源定位器)打开和访问对象, 程序员被用来访问一个本地文件系统。Archimedes的成员最初确立他们的原料为CD ROM。 但他们有一些关于交互式学习比赛的想法,希望用下一代产品来试验。例如,他们想允许学生在不同的计算机上进行合作,并将建立一个虚拟机器。 但是他们发现所有网络系统是复杂并且需要资深的软件专家。 因此他们放弃了。健壮性Java 试图编写必须在各个方面都可靠的程序。 Java非常重视可能发生问题的早期检查, 最新动态(运行时间) 检查, 并且清除容易发生错误倾向的情况。 一种强烈被键入的语言的好处之一(如C+)是它允许广泛编译时间检测因此故障可以被及早被发现。 不幸的是,C+编继承了C在编译时间检查方面的一些漏洞,那些是较为宽松的(特别是方法/程序的声明)。在Java语言里,我们要求必须声明,并且不支持C型的隐含声明。连接器了解类型系统并重复许多类型的检查, 由编译器完成守卫,以防止版本错配问题。Java和C/C+唯一最大的区别是Java 有一种可以减少重写内存和破坏数据的可能性的指针模型。代替指运针算, Java 有真实的阵列。 这允许利用下标来执行检测。除此之外,不可能把任意整数转换成指针。Archimedes的成员有在C上运行相当快的基本应用程序。 但是由于持续下滑的所有小漏洞他们的计划持续下滑。 他们面临着诸如内存损坏, 版本失调和接口配错等许多困难。是C允许他们在其代码中加入特别的技巧让他们获得了成功,他们在质量保证上付出了时间。同时由于所有滑过的漏洞,在第一版以后他们必须重新发行他们的软件。而当Java不使 QA 问题消失, 这使得它更加容易。非常动态的语言Lisp语言,终端控制语言和面向对象的编程语言通常用于原型开发. 他们成功的原因之一在此,那就是因为它们非常健壮:你不用担心释放或损坏内存. Java 程序员可能相对地无所畏惧的就是关于内存的处理因为他们不必担心内存被毁坏。由于Java里没有指针,程序就无法随机修改内存的缓冲区末端。Java程序也不能未经许可访问内存,这在C或C+中也可能发生。 动态语言有助于原型开发的原因之一就是它们不要求您太早采取决定,Java用另一种方法来解决这个难题使; Java 迫使您做出明确的选择因为它有静态键入, 那些是编译器强制执行的。与这些选择随之而来的是许多帮助:你可以写入方法调用,并且如果你写入有误,在编译时会通知你的。 你不用担心方法引用错误。安全性Java 意欲编写用于网络/分布式环境的程序。为此,许多重点放在安全方面。 Java 保证了结构无病毒、无窜改系统。 认证技术根据公钥加密码。 在健壮性和安全性方面有较强的互相作用。例如, 改变指针的语义使它不可能使用伪造途径对对象中的数据结构或私有数据进行访问,从而使他们无法存取。 这样就关闭大多数病毒活动的大门。有人给Archimedes 系统的个人计算机版本写了一个有趣的补丁 。他们把这个补丁张贴到主要海报栏中。因为它可以容易地被利用并且为系统增加了一些有趣的特点, 所以许多人下载了它。它未经Archimedes成员的检查,但是实践证明是可以运行的。 直到第二年4月1日,数千名Archimedes的成员发现在孩子们的课堂里突然出现了粗鲁画面。 毋庸讳言,即使他们对这件事不负任何责任,但是Archimedes成员还是受到了很多损失。平台无关性Java是为支持网络应用而设计的。 通常来说,网络系统是由各种各样的具有不同CPU和操作系统结构的系统组成的。 为了使一个Java应用程序可以在网络上的任何地方被执行,编译器产生了一种结构中立的目标文件格式-编译后的代码可以在许多处理器上被执行,出现了Java运行时系统。 这不仅对网络系统是有益的,而且对一个分布式系统软件也很有用。在目前的个人计算机市场上,应用程序的编写者都必须为他们的应用程序编写不同的版本以使之与IBM 的个人计算机和Macintosh公司的苹果计算机相兼容。随着个人计算机市场(通过Windows/NT) 多样化入许多CPU 体系结构, 和苹果计算机公司放弃680x0 向PowerPC发展, 运行在所有平台上的软件产品几乎变得不可能。而Java不同,同样版本的Java应用程序可以在所有平台上运行。 Java 编译器产生的字节码指令与任何特定的计算机结构无关。 相反,他们的设计目的是既要在任何机器都很容易地被解释并且易于在运行时被转化为本地机器代码。Archimedes 是一家小公司。 他们开始为个人电脑开发软件,因为这是最大的市场。一段时间后,他们公司够大使他们能够为Macintosh公司做一个端口,但它付出了相当大的努力,而且没有真正见效。 他们不能够支持Macintosh公司的PowerPC 或MIPS NT 机器。正如所发生的一切一样他们不能赶上新一波,并成为他们竞争对手的手下败将. 移动性平台无关性是移动性的一个大块, 但更多的是它。 不同于C 和C+的是, 它没有规范的执行依赖性 具体问题。 对原始数据类型的大小有规定, 比如算术运算在它们上的行为。 例如, 整型 总是指一个符号的两个32 位整数的补码, 并且浮点型 是指32 位IEEE 754 浮点数。 在这个时代做出这些选择是可行的,这是因为几乎所有中央处理器都共享这些有趣的特色。 库文件是系统定义移动性的接口的一个部分。例如,有作为Unix, Windows NT/95, 和Macintosh的抽象窗口组和它的执行。 Java 系统本身是相当轻便的。 编译器是在Java 上用来编写和运行时在ANSI C编写的一个干净的轻便界限。 轻便界限实质上是POSIX 的一个子集。解释(执行)Java 字节码在执行中被翻译成本地机器指令(被解释) 并且不被存放在任何地方。并且连接更轻巧、是渐进过程,发展过程可能更加迅速和具有试探性。 作为字节码流的一部分, 在运行时更多的编译时信息是转入和可利用的。这是连接器类型检查的依据。它也使程序更易于调试。 Archimedes的程序员等待的程序编译和连接上花费了很多时间。 同时他们花费了很多时间在跟踪无意义的故障上,因为一些被改变的源文件没有得到编译(尽管用一种流行的make 设备), 这导致了版本配错; 并且他们必须追踪程序这就宣告地他们的程序的各个部分是不一致的。计划里的另外两个月的时间又被浪费了。高性能被解释的字节码的性能更加充分,用在有更高的性能要求的情况下。字节码在运行时能够被翻译运行在特定CPU上的机器码。对于那些习惯了正常设计的编译器和动态装载器,这有点像把最后的机器码装入动态装载器。 字节码的格式在头脑里被设计成机器代码,所以产生机器代码的实际过程中一般来说很简单。产生高效率的代码: 编译器必须自动进行寄存器分配并且能对产生的字节码进行优化。 在被解释的代码中我们每秒钟大约收到在Sun Microsystems SPARCStation 10 上的300,000 个方法。字节码被转换为机器码的性能与本地的C 或C+几乎很难区分。Archimedes刚 开始在面向对象编程环境下作了一个原型。这充分打动了投资者并获得了他们的资助, 但它真正地没有帮助他们生产出他们的产品:因为为了使他们的模仿足够快和系统足够小, 它必须用C重写。多线程在我们周围的世界里,有很多事情是同时进行的。 多线程是指用多个线程建立应用程序的一种方法。不幸的是,编写处理多件事情同时发生的程序比用常规的单线程的C 或C+的方式编写程序困难得多。 Java有一套完善的由C.a.r.hoare提出的基于广泛应用监视和条件变量范例的同步原语。 将这些理念融入语言(而不是只在类),这样它们变得更健壮,更易于使用。这种融合的方式大部分来自Xeroxs Cedar/Mesa系统。 多线程的另外一个好处就是更好的交互式响应和实时行为。这是有限的, 然而,通过底层的平台:独立Java 运行时环境可以有更好的实时行为。可以在顶层系统比如Unix, Windows, Macintosh, 或Windows NT那些底层限制实时响应的系统上运行。在他们的模仿中有很多事情都在同时进行着。绳索拉动, 轮子转动, 杠杆晃动, 和用户的输入都被跟踪。因为他们必须用单线程的形式来描述这所有的一切,所有同时发生的事情,即使相互之间没有联系,也必须手动混合。用事件池想使事情变得清楚点,但仍然一塌糊涂。系统变得脆弱并且令人费解。他们搜集来自网上的所有数据。但是原来他们在一段时间是在做程序块。这一系列的网络通讯非常缓慢。当它们转换为多线程方式时,是微不足道的所有网络通讯的琐碎重叠。 动态性在许多方面, Java 是一种C 或C+更加动态的语言。 它设计的目的是适应环境的变化。 例如, 在一个生产环境里用C+ 的一个主要问题是代码执行方式的负作用。 如果公司A 生产一类库(即插即用部件的库) ,公司B 购买B公司购买并在他们自己的产品上使用该产品, 那么,如果A 改变了它的库并且发行了新版本, B将不得不重新编译和再分配他们自己的软件。 在终端用户得到A 和B 的软件独立性的环境下(也就是说A 是操作系统卖主,B 是应用系统卖主) 问题可能就产生了。例如, 如果A 对他的库发布一个升级程序, 那么所有来自B的软件将被破坏。 用C+这个问题可能会被避免, 但是这样做是相当困难的,而且它并不是解决用于任何具有面向对象特点语言的直接有效途径。Archimedes 用3DPC 公司的面向对象的图形学库生产他们的产品。 3DPC 发布了图形学库的一个新版本,那是几个计算机制造商绑定到他们的新机器上的。 买这些新机器的Archimedes顾客沮丧地发现他们的旧软件不再运作。(在现实生活中, 在Unix 世界里不兼容性总不是重要性。 在个人计算机世界, 3DPC 从未发布过那样的库: 他们改变他们产品和使用C+的面向对象的特点的能力被严格的限制,因为他们不希望他们的顾客重新编译 。) 后来在这些模块之间引入了相互关系, Java完全避免了这些问题,并且使使用对象面向的模式更简单. 库还可以在不影响他们客户的情况下自由加入新方法和实例变量。一个接口定义了一个对象可能执行的一套方法但是仅开放对象应该怎样实施那些方法。 一个类通过执行包含在接口中的所有方法执行一个接口。 相反, 通过子类继承的一套方法和它们从父类到子类的执行。 接口通过根据对象能做什么而不是它们怎样做来连接对象以促进代码的灵活性和可再用性。 类有一个运行时的表示法: 有一个类被命名为Class, 包含运行时的类定义的实例。 如果, 在C 或C+ 程序里, 您定义了一个指向对象的指针但是您不知道对象是什么类型的, 也无法找到。然而, 在Java里, 查找基于运行时的类型信息是很直接的。 由于各部分在编译时和运行时都会被检查, 所以在Java里您可以信任何部分。另一方面, 在C 和C+里, 编译器仅相信您做着的正确事情。它还可能查找出给定包含它名字的字符串的类的定义。这意味着, 您可以计算出一个数据类型名字,并且很容易地把它动态连接到运行时系统。 为了扩大他们的收入来源, Archimedes的成员想要改造他们的产品以便新的售后市场插件程序模块能够扩大系统。这在个人计算机上是可行的 , 但是很少。 他们必须聘用两三位新程序员,因为它是很复杂的。 这使得在调试时也增加了问题。 结束语Java 语言为程序员提供了处理各种问题的强大工具。 Java 使编程变得更加容易,因为它是面向对象的、并且拥有自动垃圾收集机制。 另外, 因为编译后的Java 代码是平台独立的, 所以Java 应用程序对于一个异构环境(比如互联网)来说是理想的。更多资料,请访问我们的网站:/。参考文献1 Bathe K-J. Finite element procedures. Englewood Cliffs: Prentice-Hall; 1996.2 Smith IM, Grififiths DV. Programming the finite element method. Chichester: Wiley; 1998.3 Mackie RI. Using objects to handle complexity in finite element software. Eng
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年福建辅警协警招聘考试备考题库含答案详解(培优b卷)
- 2025年益阳辅警协警招聘考试备考题库及答案详解(考点梳理)
- 2025年银川辅警招聘考试题库及答案详解(全优)
- 2025版办公室装修设计合同范本
- (完整版)畜禽解剖生理第5章习题及参考答案
- 2025集体土地征用补偿安置合同范本
- 2025年白城辅警招聘考试真题含答案详解(考试直接用)
- 2025年深圳辅警招聘考试真题附答案详解(b卷)
- 2025年黔西南州辅警协警招聘考试备考题库及答案详解1套
- 2025年青岛辅警招聘考试题库及参考答案详解1套
- 前程无忧在线测试题库及答案行测
- 2024年度宏观经济学高鸿业版本ppt课件完整版
- 空气凤梨创意悬挂栽培布置
- MSOP(测量标准作业规范)测量SOP
- 锯齿形板式热水冷却器的设计.文档
- 体质健康成绩测试全自动化计算模板
- 2023年法律服务行业洞察报告及未来五至十年预测分析报告
- ESS核心销售技巧
- 中医基础理论-暨南大学中国大学mooc课后章节答案期末考试题库2023年
- 内燃机学-西安交通大学中国大学mooc课后章节答案期末考试题库2023年
- 《为什么家庭会生病》读书笔记思维导图PPT模板下载
评论
0/150
提交评论