`

讨论有可能挑战Java开发优势的四种技术

阅读更多

讨论有可能挑战Java开发优势的四种技术

 
发布时间:2008.01.31 05:02     来源:赛迪网    作者:DenialSu

Java是一种杰出的产业开发语言,这是因为它带来了伟大的统一和对事实上以前并不存在的重要标准的关注。但是和所有语言一样,Java将来也会褪色。依据我做的超越Java的研究,一个重复出现的主题是有越来越多的人相信Java已不再足够的有效率。以下一组技术可以使你更有效率。他们不是对所有的工程都适合,但当被应用于适合的工程时,他们是优秀的工具。


1.动态语言

动态语言可以比像C++或Java这样的静态语言更加有效率。他们可以让你用更少的语言表达更多的意思。这里,我会关注现在新出现最流行的动态语言Ruby。用Ruby的"Hello, World"和Java的作一个比较:
puts "Hello, world."

这显然既简单又明了。你不需要写一些其他的代码去做这件事。下面是用Java语言的描述:

class HelloWorld {  public static void main(String[] args) {    System.out.println("Hello World!")  }}

在Java中,类型是静态的。这就代表了编译器要检查所有的类型;你必须建立和编译一个完整的程序。在Ruby中,类型是动态的,所以你不需要去声明他们,你可以马上编写和运行他们。下面是用两种语言描述的Fibonacci 序列:

First, Ruby:x1, x2 = 0, 1                    //110.times do  puts x2   x1, x2 = x2, x1+x2         //4end

注意到在第一、四行同时声明两个变量,让你可以简洁地表达两种不同的声明形式。
另外,注意到10是一个对象,它支持方法,如:times。再另外,在do和end之间是一个代码块。
Ruby代码块可以让你把代码块传入方法。。这种技术导致了难以置信的效率和简洁的代码。

接下来,看一看用Java实现的代码:

class Fib {  public static void main (String args[]) {    int x1 = 0;    int x2 = 1;    int total = 1;     for (int i=0; i<10; i++) {      System.out.println(total);      total = x1+x2;      x1 = x2;      x2 = total;    }   }}

你需要去声明所有的变量,以及详细地写出来你用for循环实现的迭代。每个变量都是独立的,所以你必须有一个临时变量用于存放total。
相比,动态语言更为简洁。按照一个普通的规则,如果你可以写更少的代码而不牺牲可读性,这些代码将导致更高的效率。
(但是你不可以牺牲可读性来达到这一步,我们可以以Perl举例作为结尾。)

更为重要的是,动态语言在Java开发者想要去解决的重要问题上表现得更好,如: 元编程。 Hibernate 使用元编程技术使对象持久化。

Spring使用元编程来为Java对象增加服务,而免除你为他们构建额外支持的烦恼。在Rails框架上,当红的Ruby利用了自己能力来构建某种已存的
最有效率的应用开发框架。

令人惊讶的是,许多Java开发者采用了Ruby。Ant和Tomcat的发明者James Duncan Davidson正在Rails上使用Ruby,以及Java的畅销书作者之一,JSP专家组的
成员David Geary正在写一本关于Rails上的Rub的书y。许多在Java社区里有着聪明思想的人都转向使用像Ruby一样的动态语言。这是因为这种新出现的语言能更好的解决最有兴趣的问题。动态语言将不会完全取代Java,但是他们会适合于解决小的,轻量级的问题。


2。Continuation 服务

Web编程绝对是个的灾难。在Java诞生十年后,我们仍旧不能构建一个使返回按钮正确的框架。Web应用是无国界的,所以Web应用会发展得更好。但是很难去构建无国界的应用,而我们现有的框架不能给与我们足够的帮助。你使用大多数Java的Web框架时,从根本上说,你构建了许多
不相关的使用servlets或JSP技术的应用。然后通过手工保存对象来把他们集成起来,这些对象就是你需要的,用来暂时存储对象的会话。


Continuation是语言的构造器,它可以使你快速存储某个线程的状态,过后执行这个线程。基于 Continuation的web框架总体上是通过模拟一个监控状态的应用来使web开发变得更为容易。当你的应用需要从用户那取得数据时,这种框架使用continuation来自动保存应用程序的状态。如果用户按下返回按钮或者通过浏览器的历史纪录回到以前的页面,应用程序可以重新读取一个continuation。

基于continuation最好的框架是用动态语言来开发的。到目前为止,最健壮的框架是Seaside。他是基于一种Smalltalk的Squeak语言的框架。Seaside支持很好的调试功能,你可以实时检查、调试以及在浏览器里改动你的代码。Borges、Iowa和Wee都是基于Ruby且支持continuation的框架。

Java不支持continuations,但是一些在特殊限制下构造的Java框架支持模拟continuations。这些框架具有用其他语言编写的continuations框架的某些特征。
。流行的框架是用了一些高级的技术,如:字节码增强、反射以及特殊类的装载器。这些技术用Java部分地实现了continuations。
。Cocoon 2在Rhino JavaScript 虚拟机中增加了continuations,用来模拟监控状态的应用。
。Spring Webflow使用了状态机来提供对返回按钮良好的支持,以及其他一些continuation服务的特征。
。Lakeshore使用了悬挂的线程来模拟continuations。这种方法不像其他方法一样有可扩展性,同时还缺乏对返回按钮完整的支持,但是这些预计在将来
都会具有。

每个月都会有新的框架出现。我认为在未来的三年内,我们都会使用支持基于continuations的方法的web开发框架,这种框架是由一种语言或者其他语言
编写的。

3.惯例超越配置

Java开发者经常探索用于改进配置的方法。新的框架越来越多的使用Java 5批注来进行配置。其他的框架是用一种不同的方法。Rails中的Ruby常用惯例来推断需要在其他框架进行配置的联系。例如:在结束的时候,一个叫BlogController且有一个show方法的Rails控制器,会自动在blog_controller目录里提交一个叫show.rhtml的视图。Rails还使用命名惯例来绑定数据库表里持久化的类。默认情况下,Perosn类会与用英语的复数people与表进行匹配。
新的框架将会支持惯例,而不是配置。


4.元编程

就像前面提到的一样,在Rails编程框架上的Ruby里,存在着许多hype的。我认为这种hype是正确的。在Rails上的Ruby让你比起java,可以在一个更抽象的层次上编写你的程序。有了Rails上的Ruby,你可以创建域对象,这种对象可以发现相关联的数据库表的内容。例如:你可以写这样简单的模型对象:

class Person < ActiveRecord::Baseend

这种类表面看起来相当的受限制。但是一旦你执行它,Rails就会展现它的神奇。这种实现了持久化Rails的活动纪录框架与相关的数据库关联,以及为了表定义扫描系统表,还发现数据库里列项。然后,活动记录为数据库中的每一列增加一个属性,为数据库中id列名在类中增加一个独一无二的标示符。你可以用下面的类去编写代码:

person=Person.newperson.name='Bruce Tate'person.email='bruce.tate@j2life.nospam.com'person.save

数据库的列名和行为都会在运行时后加入Person类。你可以很容易的扩展Person类:

class Person < ActiveRecord::Base  has_many :carsend

通过Ruby中一个belongs_to的简单方法和:department标示符,我实现了所有我想做的。活动记录隐式调用了Ruby的元编程来添加了所有的方法和变量,这些方法和变量用来管理一个任何一个部门之间的一对多关系。Rails用户使用域语言来管理像继承这样的关系,另外可以用Ruby语言在一个更抽象的层次上工作。Rails无缝扩展了Ruby语言。

Rails会不会是下一代伟大的框架?有可能。要做一个选择的话,Rails应该会是在使用Ruby或是其他动态编程语言的元编程框架潮流中的第一个。或者,你可能看到Rails会作为某些松散对齐技术的中枢,它是以元编程作为基础的。在任何情况下,你都会更有效率。

总结

在《超越Java》这本书中,我表达了Java还不会淘汰意思,但是在最近的十年,我们目睹了在Java领域之外引人注目的创新。这四种技术会在不远的将来起到重要的作用。请密切关注他们。
         (责任编辑:包春林)

 

 

 

分享到:
评论

相关推荐

    java数据库开发案例精选

    在“Java数据库开发案例精选”中,我们主要探讨的是如何使用Java编程语言与各种数据库进行交互,实现数据的存储、查询、更新和删除等操作。Java数据库开发是软件开发中的重要组成部分,尤其在构建Web应用、企业级...

    基于java的移动通讯技术研究

    Java移动通信技术是现代通信行业中不可或缺的一部分,尤其在智能手机和平板电脑等移动设备上发挥着重要作用。...这篇毕业设计论文将有助于读者深入理解Java在这一领域的应用实践和技术挑战,为相关项目开发提供指导。

    计算机软件开发的JAVA编程语言及其实际应用分析.pdf

    最后,文档提及了Java语言在未来软件开发中的发展趋势和可能面临的挑战,这表明Java语言仍将在计算机软件开发领域扮演重要角色,并可能通过新技术和方法得到进一步的优化和提升。总的来说,文档不仅为我们提供了Java...

    java面试宝典2018版

    在框架部分,可能会讨论Spring框架,包括依赖注入、AOP(面向切面编程)、Spring Boot、Spring Cloud等,这些都是企业级Java开发的常用工具。此外,MyBatis、Hibernate等持久层框架也可能有所涉及,帮助你理解数据库...

    《Java 2游戏编程》

    这本书深入浅出地介绍了如何使用Java 2平台进行游戏开发,涵盖了从基础到高级的各种主题,旨在帮助读者掌握游戏开发的核心技术。 Java作为一种跨平台的编程语言,其强大的性能和丰富的库支持使得它在游戏开发领域...

    进击的Java 第16期

    - **背景与挑战**:在大型项目中,Java可能会显得有些繁琐和笨重。本文作者Ben Evans从实际应用场景出发,探讨了Java语言中的某些不足之处,并指出其向函数式编程发展的趋势。 - **示例解析**:通过一个交易处理系统...

    Java 开发基于J2EE的B2C电子商务系统开发(论文+系统+开题报告+任务书+答辩PPT+中期报表+外文文献)

    它可能会详细讨论如何利用J2EE的特性,如Servlets、JSP(JavaServer Pages)和JDBC(Java Database Connectivity)进行Web应用开发,以及如何与数据库交互来存储和检索用户信息、商品数据等。 "文献综述"是对相关...

    分布式java应用_林昊_电子版

    14. **DevOps实践**:介绍持续集成与持续部署(CI/CD)在Java开发中的重要性,以及相关的工具链如Jenkins、GitLab CI等。 15. **安全性**:讨论Java在分布式环境下的安全问题,如SSL/TLS加密、OAuth2认证授权等。 ...

    软件开发技术的选择.pdf

    对于彩票行业,可能需要关注互联网技术、数据分析、安全性能等方面,因此,面向网络的开发技术(如Java和.NET)以及相关框架可能是理想的选择。 总结来说,软件开发技术的选择应基于公司的战略规划、市场定位和技术...

    车牌识别java代码

    - "anpr.pdf" 可能是项目的技术文档,包含了系统设计、实现方法以及使用指南等内容,对于理解和使用这个车牌识别系统非常有价值。 - "javaanpr" 文件可能包含了项目的源代码,用户可以直接编译运行,也可以参考其...

    基于java五子棋游戏开发.pdf

    - 论文作者可能会讨论开发过程中遇到的挑战,解决方法,以及游戏性能优化的策略。 6. **关键词**: - **Java语言**:开发工具的核心,提供了实现游戏所需的各种功能。 - **棋牌游戏**:五子棋属于此类,表明游戏...

    深度剖析Ruby vs Java误区

    误区四讨论了Rails创新的复制性。虽然Rails的一些理念可以应用于其他语言,但有些特性如Ruby的open class是Rails独特且强大的工具,提高了代码的可读性和表达力。这些细微的差异累积起来,使得Rails的实现方式在某些...

    Java并发编程的艺术

    本书开篇即指出,随着现代计算机系统越来越依赖于多核处理器的并行计算能力,Java开发人员面临着前所未有的并发编程挑战。这些挑战包括但不限于数据一致性问题、死锁、资源竞争等。为了克服这些困难,作者们在第一章...

    JAVA设计文档

    关键技术解决部分详细介绍了在实际开发过程中遇到并解决的技术挑战。这可能包括如何整合JSP(JavaServer Pages)技术来构建动态网页,JAVA如何与SQL Server 2000数据库进行交互,以及如何实现数据备份与恢复以确保...

    关于Java程序设计的教学思考.pdf

    四、Java 程序设计语言在教学中的挑战 Java 程序设计语言在教学中的挑战也有很多。首先,多媒体教学方法需要教师具备专业的技术知识和教学经验。如果教师缺乏这些知识和经验,那么多媒体教学方法可能会对学生的学习...

    基于Java3D的网络三维技术的设计与实现(包含源代码及论文)

    Java3D是Oracle公司开发的一种用于构建和展示三维图形的应用编程接口(API),它是Java平台上的一个组件,允许程序员创建和操纵复杂的3D场景。基于Java3D的网络三维技术,主要是指通过Java3D库在互联网上实现交互式...

    基于JAVA的飞机大战游戏的设计与实现计算机毕业设计论文

    - **游戏难点分析**:讨论在开发过程中可能遇到的技术难题,如性能优化、多线程处理等。 #### 飞机大战功能实现 - **游戏首页的实现**:设计游戏的启动页面,包括游戏logo、开始按钮等元素,为用户提供友好的界面...

    看来 c 移植成 java 不难嘛

    在描述中,虽然没有具体的内容,但我们可以推测博主在博文中可能分享了他/她进行C到Java移植的实际经验,包括可能遇到的挑战、解决方法以及对这两种语言之间差异的理解。 从标签“源码”和“工具”来看,这篇博客...

Global site tag (gtag.js) - Google Analytics