Java技术(外文文献翻译)

上传人:飞*** 文档编号:37142161 上传时间:2018-04-07 格式:DOC 页数:11 大小:61.50KB
返回 下载 相关 举报
Java技术(外文文献翻译)_第1页
第1页 / 共11页
Java技术(外文文献翻译)_第2页
第2页 / 共11页
Java技术(外文文献翻译)_第3页
第3页 / 共11页
Java技术(外文文献翻译)_第4页
第4页 / 共11页
Java技术(外文文献翻译)_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《Java技术(外文文献翻译)》由会员分享,可在线阅读,更多相关《Java技术(外文文献翻译)(11页珍藏版)》请在金锄头文库上搜索。

1、 Java 技术 网络编程历史上的网络编程都倾向于困难、复杂,而且极易出错。程序员必须掌握与网络 有关的大量细节,有时甚至要对硬件有深刻的认识。一般地,我们需要理解连网协议中不 同的“层” (Layer) 。而且对于每个连网库,一般都包含了数量众多的函数,分别涉及信息 块的连接、打包和拆包;这些块的来回运输;以及握手等等。这是一项令人痛苦的工作。 Java 最出色的一个地方就是它的“无痛苦连网”概念。有关连网的基层细节已被尽可能地 提取出去,并隐藏在 JVM 以及 Java 的本机安装系统里进行控制。我们使用的编程模型是一 个文件的模型;事实上,网络连接(一个“套接字” )已被封装到系统对象里

2、,所以可象对 其他数据流那样采用同样的方法调用。除此以外,在我们处理另一个连网问题同时控 制多个网络连接的时候,Java 内建的多线程机制也是十分方便的。用 JDBC 连接数据库 据估算,将近一半的软件开发都要涉及客户(机)服务器方面的操作。Java 为自己保证 的一项出色能力就是构建与平台无关的客户机服务器数据库应用。在 Java 1.1 中,这一 保证通过 Java 数据库连接(JDBC)实现了。数据库最主要的一个问题就是各家公司之间的 规格大战。确实存在一种“标准”数据库语言,即“结构查询语言” (SQL-92) ,但通常都 必须确切知道自己要和哪家数据库公司打交道,否则极易出问题,尽管

3、存在所谓的“标准” 。 JDBC 是面向“与平台无关”设计的,所以在编程的时候不必关心自己要使用的是什么数据 库产品。然而,从 JDBC 里仍有可能发出对某些数据库公司专用功能的调用,所以仍然不可 任性妄为。和 Java 中的许多 API 一样,JDBC 也做到了尽量的简化。我们发出的方法调用对 应于从数据库收集数据时想当然的做法:同数据库连接,创建一个语句并执行查询,然后 处理结果集。 为实现这一“与平台无关”的特点,JDBC 为我们提供了一个“驱动程序管理器” ,它能动 态维护数据库查询所需的所有驱动程序对象。所以假如要连接由三家公司开发的不同种类 的数据库,就需要三个单独的驱动程序对象。

4、驱动程序对象会在装载时由“驱动程序管理 器”自动注册,并可用 Class.forName 强行装载。为打开一个数据库,必须创建一个“数 据库 URL” ,它要指定下述三方面的内容:用“jdbc”指出要使用 JDBC。 “子协议”:驱动 程序的名字或者一种数据库连接机制的名称。由于 JDBC 的设计从 ODBC 吸收了许多灵感, 所以可以选用的第一种子协议就是“jdbc-odbc 桥” ,它用“odbc”关键字即可指定。 数据 库标识符:随使用的数据库驱动程序的不同而变化,但一般都提供了一个比较符合逻辑的 名称,由数据库管理软件映射(对应)到保存了数据表的一个物理目录。为使自己的数据 库标识符具

5、有任何含义,必须用自己的数据库管理软件为自己喜欢的名字注册(注册的具 体过程又随运行平台的不同而变化) 。所有这些信息都统一编译到一个字串里,即“数据库URL” 。举个例子来说,若想通过 ODBC 子协议同一个标识为“people”的数据库连接,相 应的数据库 URL 可设为:String dbUrl “jdbc:odbc:people“ 如果通过一个网络连接,数据库 URL 也需要包含对远程机器进行标识的信息。准备好同数 据库连接后,可调用静态方法 DriverManager.getConnection ,将数据库的 URL 以及进入 那个数据库所需的用户名密码传递给它。得到的返回结果是一个

6、 Connection 对象,利用它 即可查询和操纵数据库。多线程利用对象,可将一个程序分割成相互独立的区域。我们通 常也需要将一个程序转换成多个独立运行的子任务。象这样的每个子任务都叫作一个“线 程” (Thread) 。编写程序时,可将每个线程都想象成独立运行,而且都有自己的专用 CPU。一些基础机制实际会为我们自动分割 CPU 的时间。我们通常不必关心这些细节问题, 所以多线程的代码编写是相当简便的。这时理解一些定义对以后的学习狠有帮助。 “进程” 是指一种“自包容”的运行程序,有自己的地址空间。 “多任务”操作系统能同时运行多个 进程(程序)但实际是由于 CPU 分时机制的作用,使每个

7、进程都能循环获得自己的CPU 时间片。但由于轮换速度非常快,使得所有程序好象是在“同时”运行一样。 “线程” 是进程内部单一的一个顺序控制流。因此,一个进程可能容纳了多个同时执行的线程。多 线程的应用范围很广。但在一般情况下,程序的一些部分同特定的事件或资源联系在一起, 同时又不想为它而暂停程序其他部分的执行。这样一来,就可考虑创建一个线程,令其与 那个事件或资源关联到一起,并让它独立于主程序运行。一个很好的例子便是“Quit”或 “退出”按钮我们并不希望在程序的每一部分代码中都轮询这个按钮,同时又希望该 按钮能及时地作出响应(使程序看起来似乎经常都在轮询它) 。事实上,多线程最主要的一 个用

8、途就是构建一个“反应灵敏”的用户界面。所有编程语言的最终目的都是提供一种 “抽象”方法。一种较有争议的说法是:解决问题的复杂程度直接取决于抽象的种类及质 量。这儿的“种类”是指准备对什么进行“抽象”?汇编语言是对基础机器的少量抽象。 后来的许多“命令式”语言(如 FORTRAN,BASIC 和 C)是对汇编语言的一种抽象。与汇 编语言相比,这些语言已有了长足的进步,但它们的抽象原理依然要求我们着重考虑计算 机的结构,而非考虑问题本身的结构。在机器模型(位于“方案空间” )与实际解决的问题 模型(位于“问题空间” )之间,程序员必须建立起一种联系。这个过程要求人们付出较大 的精力,而且由于它脱离

9、了编程语言本身的范围,造成程序代码很难编写,而且要花较大 的代价进行维护。由此造成的副作用便是一门完善的“编程方法”学科。 为机器建模的另一个方法是为要解决的问题制作模型。对一些早期语言来说,如 LISP 和 APL,它们的做法是“从不同的角度观察世界”“所有问题都归纳为列表”或“所有问 题都归纳为算法” 。PROLOG 则将所有问题都归纳为决策链。对于这些语言,我们认为它们 一部分是面向基于“强制”的编程,另一部分则是专为处理图形符号设计的。每种方法都 有自己特殊的用途,适合解决某一类的问题。但只要超出了它们力所能及的范围,就会显 得非常笨拙。面向对象的程序设计在此基础上则跨出了一大步,程序

10、员可利用一些工具表 达问题空间内的元素。由于这种表达非常普遍,所以不必受限于特定类型的问题。我们将 问题空间中的元素以及它们在方案空间的表示物称作“对象” (Object) 。当然,还有一些 在问题空间没有对应体的其他对象。通过添加新的对象类型,程序可进行灵活的调整,以 便与特定的问题配合。所以在阅读方案的描述代码时,会读到对问题进行表达的话语。与 我们以前见过的相比,这无疑是一种更加灵活、更加强大的语言抽象方法。总之,OOP 允 许我们根据问题来描述问题,而不是根据方案。然而,仍有一个联系途径回到计算机。每 个对象都类似一台小计算机;它们有自己的状态,而且可要求它们进行特定的操作。与现 实世

11、界的“对象”或者“物体”相比,编程“对象”与它们也存在共通的地方:它们都有 自己的特征和行为。Alan Kay 总结了 Smalltalk 的五大基本特征。这是第一种成功的面向对 象程序设计语言,也是 Java 的基础语言。通过这些特征,我们可理解“纯粹”的面向对象 程序设计方法是什么样的:所有东西都是对象。可将对象想象成一种新型变量;它保存着 数据,但可要求它对自身进行操作。理论上讲,可从要解决的问题身上提出所有概念性的 组件,然后在程序中将其表达为一个对象。程序是一大堆对象的组合;通过消息传递,各 对象知道自己该做些什么。为了向对象发出请求,需向那个对象“发送一条消息” 。更具体 地讲,可

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

13、一个圆完全能接收形状消息。这意味着可让程序代码统一指挥“形状” ,令其自动控制所有符合“形状”描述的对象,其中自然包括“圆” 。这一特性称为对象的“可替 换性” ,是 OOP 最重要的概念之一。方案的重复使用创建并测试好一个类后,它应(从理 想的角度)代表一个有用的代码单位。但并不象许多人希望的那样,这种重复使用的能力 并不容易实现;它要求较多的经验以及洞察力,这样才能设计出一个好的方案,才有可能 重复使用。许多人认为代码或设计方案的重复使用是面向对象的程序设计提供的最伟大的 一种杠杆。为重复使用一个类,最简单的办法是仅直接使用那个类的对象。但同时也能将 那个类的一个对象置入一个新类。我们把这

14、叫作“创建一个成员对象” 。新类可由任意数量 和类型的其他对象构成。无论如何,只要新类达到了设计要求即可。这个概念叫作“组织” 在现有类的基础上组织一个新类。有时,我们也将组织称作“包含”关系,比如“一 辆车包含了一个变速箱” 。对象的组织具有极大的灵活性。新类的“成员对象”通常设为 “私有” (Private) ,使用这个类的客户程序员不能访问它们。这样一来,我们可在不干扰 客户代码的前提下,从容地修改那些成员。也可以在“运行期”更改成员,这进一步增大 了灵活性。后面要讲到的“继承”并不具备这种灵活性,因为编译器必须对通过继承创建 的类加以限制。由于继承的重要性,所以在面向对象的程序设计中,

15、它经常被重点强调。 作为新加入这一领域的程序员,或许早已先入为主地认为“继承应当随处可见” 。沿这种思 路产生的设计将是非常笨拙的,会大大增加程序的复杂程度。相反,新建类的时候,首先 应考虑“组织”对象;这样做显得更加简单和灵活。利用对象的组织,我们的设计可保持 清爽。一旦需要用到继承,就会明显意识到这一点。继承:重新使用接口就其本身来说, 对象的概念可为我们带来极大的便利。它在概念上允许我们将各式各样数据和功能封装到 一起。这样便可恰当表达“问题空间”的概念,不用刻意遵照基础机器的表达方式。在程 序设计语言中,这些概念则反映为具体的数据类型(使用 class 关键字) 。我们费尽心思做 出一

16、种数据类型后,假如不得不又新建一种类型,令其实现大致相同的功能,那会是一件 非常令人灰心的事情。但若能利用现成的数据类型,对其进行“克隆” ,再根据情况进行添 加和修改,情况就显得理想多了。 “继承”正是针对这个目标而设计的。但继承并不完全等 价于克隆。在继承过程中,若原始类(正式名称叫作基础类、超类或父类)发生了变化, 修改过的“克隆”类(正式名称叫作继承类或者子类)也会反映出这种变化。在 Java 语言 中,继承是通过 extends 关键字实现的使用继承时,相当于创建了一个新类。这个新类不 仅包含了现有类型的所有成员(尽管 private 成员被隐藏起来,且不能访问) ,但更重要的 是,它复制了基础类的接口。也就是说,可向基础类的对象发送的所有消息亦可原样发给 衍生类的对象。根据可以发送的消息,我们能知道类的类型。这意味着衍生类具有与基础 类相同的类型!为真正理解面向对象程序设计的含义,首先必须认识到这种类型的等价关 系。必须进行特殊的设计。也就是说,对象接收到一条特定的消息后,必须有一个

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

当前位置:首页 > 行业资料 > 其它行业文档

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