快速业务通道

跨越边界:浅谈Java模型以外的类型策略 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
序和其他高性能系 统代码的最常用的语言。这又经常导致动态语言的支持者指责静态语言总是太低级,用它们来编写应用程 序生产率很低 —— 但那是一种很狭隘的观点。OCaml 语言是一种很高级的语言,支持面向对象程序设计 、函数式程序设计(如 Lisp 或 Erlang)或传统的结构化程序设计。其类型模型是静态的,很多人说它 的性能甚至比 C++ 的性能还好(参见 参考资料)。使用 OCaml 时,静态类型导致的开销很小,因为这 种语言是类型推断式的。虽然付出了这一点成本,但可以得到非常好的性能,编译时类型检查,以及一个 非常高级的语言。即使是 duck typing 最顽固的支持者也不得不承认那些优点。

Java 语言中的类型限制

Java 开发人员充分利用静态类型。他们有最好的开发工具,这些工具带有代码完成和重构等功能,这 些都倾向于静态类型。现在开始利用测试优先开发的很多 Java 程序员获得了更大的稳定性,因为编译器 可以捕捉与类型相关的 bug。新的类型特性,例如泛型,增强了类型模型,并为编译器提供更多的信息。 但 Java 开发人员常常对动态类型的优点一无所知。

运行时绑定

动态类型的灵活性比您想像的更重要。在某些方面,Java 开发人员试图通过使用更多的 XML(这样可 以推迟到运行时进行绑定)和字符串(这样可以表示很多不同的类型)来突破静态类型的限制。Ruby 中 的配置通常采用 Ruby 代码的形式,而 Java 编程中的配置通常采用 XML 的形式。考虑 Spring 框架( 参见 参考资料):为了配置一个一般的 Spring bean,您使用 XML。您必须提供一个有效的 Java 类名 ,并为每个变量设置属性。例如,持久引擎(如 Hibernate)需要一个会话工厂(参见 参考资料)。用 Java 语法配置一个数据访问对象很轻松:

Dao myDataAccessObject = Dao.new(sessionFactory);

问题是,这行代码是在编译时绑定的,这就太静态了。为了测试,您常常需要用其他东西,例如一个 模拟的数据访问对象来替换会话工厂或数据访问对象。所以,您不必像前面那样硬编码这个例子,而是使 用一个 Spring 之类的框架,以 XML 来配置项目,如下所示(摘自名为 petclinic 的 Spring Framework 例子):

<bean id="myDao" class="org.springframework.samples.petclinic.hibernate.HibernateClinic"> <property name="sessionFactory" ref="sessionFactory"> </bean>

Spring 框架是目前 Java 社区中最重要、最有影响力的框架之一,因为它使您可以延迟绑定,并使系 统主要元素之间的耦合性更为松散。而且,您不需要关心继承就可以去耦。在 Java 编程中,尤其是在编 写越来越多的 POJO(plain old Java object)的时候,使用继承时必须特别小心,因为在 Java 语言中 只有一次这样的机会。

在动态语言,例如 Ruby 中,解决方案就截然不同。首先,我倾向于使用一个 mix-in 来实现持久性 。所有关联只在 mix-in 中发现一次。可以把一个 mix-in 想像成一个接口,其背后有一个实现。换句话 说,通过 mix-in,可以添加多个功能到同一个对象中,而不必使用多重继承。实际上,Active Record 通过继承一个公共基类来解决这个问题,这个公共基类混合了多种功能:

class Pojo < ActiveRecord::Base

在 Ruby 中,您不必关心继承,因为使用开放的类(允许动态添加功能)和模块(允许混入其他功能 ),您可以随意添加更多的功能到对象中。那么紧密耦合呢?如果您想按 Java 的方式实现该类,那么可 以看到:

class MyClass attr_accessor myDao #defines getters and setters for myDao def initialize(session_factory) myDao = Dao.new(session_factory) end ...

跨越边界:浅谈Java模型以外的类型策

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号