008-1.13.2_客户端编程[5._.NET和C#、6.Internet与Intranet]、1.13.3服务器端编程、1.14总结

1.13.2 客户端编程

  1. .NET和C#
    曾几何时,Java applet的主要竞争对手是微软的Active X——尽管它要求客户端必须运行Windows平台。全面竞争
    .NET平台大致相当于Java虚拟机(JVM,即执行Java程序的软件平台)和Java类库
    这是自从Java出现以来,Java所碰到的真正的竞争
    目前,.NET主要受攻击的地方和人们所关心的最重要的问题就是,微软是否会允许将它完全地移植到其他平台上
    但是,在该实现完成及微软不会排斥其中的任何部分之前,.NET作为一种跨平台的解决方案仍旧是一场高风险的赌博

  2. Internet与Intranet
    Web是最常用的解决客户/服务器问题的方案
    当Web技术仅限用于特定公司的信息网络时,它就被称为Intranet(企业内部网)。
    Intranet比Internet提供了更高的安全性,因为可以物理地控制对公司内部服务器的访问。
    安全问题把我们带到了一个领域,这似乎是在客户端编程世界自动形成的。
    在安装升级程序时所浪费的时间是迁移到浏览器方式上的最主要的原因
    如果你身处这样Intranet之中,那么最有意义的方式就是选择一条能够使用现有代码库的最短的捷径,而不是用一种新语言重新编写你的代码。
    当面对各种令人眼花缭乱的解决客户端编程问题的方案时,最好的方法就是进行性价比分析。
    认真考虑问题的各种限制,然后思考哪种解决方案可以成为最短的捷径
    既然客户端编程仍然需要编程,那么针对自己的特殊应用选取最快的开发方式总是最好的做法。
    为那些在程序开发中不可避免的问题提早作准备是一种积极的态度

1.13.3 服务器端编程
前面的讨论忽略了服务器端编程的话题,它是Java已经取得巨大成功的因素之一
更复杂的对服务器的请求通常涉及数据库事务
常见的情形是复杂的数据库搜索请求,然后服务器将结果进行格式编排,使其成为一个HTML页面发回给客户端。
另一种常见情形是,当你要加入一个团体或下订单时,可能想在数据库中注册自己的名字,这将涉及对数据库的修改。
这些数据库请求必须通过服务器端的某些代码来处理,这就是所谓的服务器端编程。
服务器端编程的话题在《企业Java编程思想》(Thinking in Enterprise Java)一书中有所论述。

1.14 总结
你知道过程型语言看起来像什么样子:数据定义和函数调用。
它们使用的表示术语更加面向计算机而不是你要解决的问题。
你会感到很惊喜:编写良好的Java程序通常比过程型程序要简单得多,而且也易于理解得多。
你看到的只是有关下面两部分内容的定义:
用来表示问题空间概念的对象(而不是有关计算机表示方式的相关内容),
以及发送给这些对象的用来表示在此空间内的行为的消息
面向对象程序设计带给人们的喜悦之一就是:对于设计良好的程序,通过阅读它就可以很容易地理解其代码。
通常,其代码也会少很多,因为许多问题都可以通过重用现有的类库代码而得到解决。

OOP和Java也许并不适合所有的人。
重要的是要正确评估自己的需求,并决定Java是否能够最好地满足这些需求,还是使用其他编程系统(包括你当前正在使用的)才是更好的选择

文章目录

  • 第1章 对象导论
    • 1.13 Java与Internet
      • 1.13.2 客户端编程
        • 5. .NET和C#
        • 6. Internet与Intranet
      • 1.13.3 服务器端编程
    • 1.14 总结

第1章 对象导论

1.13 Java与Internet

1.13.2 客户端编程

5. .NET和C#

曾几何时,Java applet的主要竞争对手是微软的Active X——尽管它要求客户端必须运行Windows平台。
从那以后,微软以.NET平台和C#编程语言的形式推出了与Java全面竞争的对手
.NET平台大致相当于Java虚拟机(JVM,即执行Java程序的软件平台)和Java类库,而C#无疑问与Java有类似之处。
这当然是微软在编程语言与编程环境这块竞技场上所做出的最出色的成果。
当然,他们有相当大的有利条件:他们可以看得到Java在什么方面做得好,在什么方面做得还不够好,然后基于此去构建,并要具备Java不具备的优点。
这是自从Java出现以来,Java所碰到的真正的竞争。
因此,Sun的Java设计者们已经认真仔细地去研究了C#,以及为什么程序员们可能会转而使用它,然后通过在Java SE5中对Java做出的重大改进而做出了回应。

目前,.NET主要受攻击的地方和人们所关心的最重要的问题就是,微软是否会允许将它完全地移植到其他平台上。
微软宣称这么做没有问题,而且Mono项目(www.go-mono.com)已经有了一个在Linux上运行的 .NET的部分实现;
但是,在该实现完成及微软不会排斥其中的任何部分之前, .NET作为一种跨平台的解决方案仍旧是一场高风险的赌博。

6. Internet与Intranet

**Web是最常用的解决客户/服务器问题的方案,**因此,即便是解决这个问题的一个子集,特别是公司内部的典型的客户/服务器问题,
也一样可以使用这项技术,如果采用传统的客户/服务器方式,可能会遇到客户端计算机有多种型号的问题,也可能会遇到安装新的客户端软件的麻烦,
而它们都可以很方便地通过Web浏览器和客户端编程得以解决。
当Web技术仅限用于特定公司的信息网络时,它就被称为Intranet(企业内部网)。
Intranet比Internet提供了更高的安全性,因为可以物理地控制对公司内部服务器的访问。
从培训的角度看,似乎一旦人们理解了浏览器的基本概念后,对他们来说,处理网页和applet的外观差异就会容易得多,因此对新型系统的学习曲线也就减缓了。

安全问题把我们带到了一个领域,这似乎是在客户端编程世界自动形成的。
如果程序运行在Internet之上,那么就不可能知道它将运行在什么样的平台之上,因此,要格外小心,不要传播有bug的代码。
你需要跨平台的、安全的语言,就像脚本语言和Java。

如果程序运行与Intranet上,那么可能会受到不同的限制。
企业内所有的机器都采用Intel/Windows平台并不是什么稀奇的事。
在Intranet上,你可以对你自己的代码质量负责,并且在发现bug之后可以修复它们。
此外,你可能已经有了以前使用更传统的客户/服务器方式编写的遗留代码,因此,你必须在每一次升级时都要物理地重装客户端程序。
在安装升级程序时所浪费的时间是迁移到浏览器方式上的最主要的原因,因为在浏览器方式下,升级是透明的、自动的(Java Web Start也是解决此问题的方式之一)。
如果你身处这样Intranet之中,那么最有意义的方式就是选择一条能够使用现有代码库的最短的捷径,而不是用一种新语言重新编写你的代码。

当面对各种令人眼花缭乱的解决客户端编程问题的方案时,最好的方法就是进行性价比分析。
认真考虑问题的各种限制,然后思考哪种解决方案可以成为最短的捷径。
既然客户端编程仍然需要编程,那么针对自己的特殊应用选取最快的开发方式总是最好的做法。
为那些在程序开发中不可避免的问题提早作准备是一种积极的态度。

1.13.3 服务器端编程

前面的讨论忽略了服务器端编程的话题,它是Java已经取得巨大成功的因素之一
当提出对服务器的请求后,会发生什么呢?
大部分时间,请求只是要求“给我发送一个文件”,之后浏览器会以某种适当的形式解释这个文件,
例如将其作为HTML页面、图片、Java applet或脚本程序等来解释。

更复杂的对服务器的请求通常涉及数据库事务。
常见的情形是复杂的数据库搜索请求,然后服务器将结果进行格式编排,使其成为一个HTML页面发回给客户端。
(当然,如果客户端通过Java或脚本程序具备了更多的智能,那么服务器可以将原始的数据发回,然后在客户端进行格式编排,这样会更快,而且服务器的负载将更小。)
另一种常见情形是,当你要加入一个团体或下订单时,可能想在数据库中注册自己的名字,这将涉及对数据库的修改。
这些数据库请求必须通过服务器端的某些代码来处理,这就是所谓的服务器端编程。
过去,服务器端编程都是通过使用Perl、Python、C++或其他某种语言编写CGI程序而实现的,但却造成了从此之后更加复杂的系统。
其中就包括基于Java的Web服务器,它让你用Java编写被称为servlet的程序来实现服务器端编程。
servlet及其衍生物JSP,是许多开发网站的公司迁移到Java上的两个主要的原因,尤其是因为它们消除了处理具有不同能力的浏览器时所遇到的问题。
服务器端编程的话题在《企业Java编程思想》(Thinking in Enterprise Java)一书中有所论述。

1.14 总结

你知道过程型语言看起来像什么样子:数据定义和函数调用
想了解此类程序的含义,你必须忙上一阵,需要通读函数调用和低层概念,以在脑海里建立一个模型。
这正是我们在设计过程式程序时,需要中间表示形式的原因。
这些程序总是容易把人搞糊涂,因为它们使用的表示术语更加面向计算机而不是你要解决的问题

因为OOP在你能够在过程型语言中找到的概念的基础上,又添加了许多新概念,所以你可能会很自然地假设:由此而产生的Java程序比等价的过程型程序要复杂得多。
但是,你会感到很惊喜:编写良好的Java程序通常比过程型程序要简单得多,而且也易于理解得多。
你看到的只是有关下面两部分内容的定义:
用来表示问题空间概念的对象(而不是有关计算机表示方式的相关内容),
以及发送给这些对象的用来表示在此空间内的行为的消息。
面向对象程序设计带给人们的喜悦之一就是:对于设计良好的程序,通过阅读它就可以很容易地理解其代码。
通常,其代码也会少很多,因为许多问题都可以通过重用现有的类库代码而得到解决。

OOP和Java也许并不适合所有的人。
重要的是要正确评估自己的需求,并决定Java是否能够最好地满足这些需求,还是使用其他编程系统(包括你当前正在使用的)才是更好的选择。

如果知道自己的需求在可预见的未来会变得非常特殊化,并且Java可能不能满足你的具体限制亨那么就应该去考察其他的选择(我特别推荐读者看看Python,参见www.Python.org)。
即使最终仍旧选择Java作为编程语言,至少也要理解还有哪些选项可供选择,并且对为什么选择这个方向要有清楚的认识。

你可能感兴趣的:(【文摘】Think,In,Java编程思想(第4版))