跨越边界:浅谈Java模型以外的类型策略 - 编程入门网
序和其他高性能系 统代码的最常用的语言。这又经常导致动态语言的支持者指责静态语言总是太低级,用它们来编写应用程 序生产率很低 —— 但那是一种很狭隘的观点。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 例子):
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 的方式实现该类,那么可 以看到:
跨越边界:浅谈Java模型以外的类型策 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |