你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Java专栏
跨越边界:浅谈Java模型以外的类型策略(3)
 
例如,为了添加一个拦截器,只需重新命名一个方法,并为原有的方法创建一个新的实现。为了拦截 new,可以编写以下代码:class Class
alias_method :old_new, :new
def new(*args)
puts "Intercepted new" #do interception work here
old_new(*args)
end
end

  您不需要 AspectJ 库、字节码增强或一大堆的库。您可以直接编写所需的拦截器。

  动态类型在原始代码行方面也可以节省精力。由于动态语言几乎都是类型推断式的,所以您不需要花多大力气来表达基本思想。变量无需声明即可直接使用。您也不必表达参数类型的所有可能排列,只需输入一组名称。您的代码可以更加具有多态性 —— 任何对一种类型的方法有反应的对象都可以看作这种类型 —— 所以通常可以比其他语言更精简地表达思想。代码中的耦合也可以变得更松散。当您想改变某个东西的类型时,这种变化所波及的范围很有限,所以不需要在更多的地方作出相应的更改。

  安全性还是灵活性

  从某种意义上说,语言的静态与动态之争的关键在于安全性与灵活性之间的取舍。静态语言的支持者相信更安全的语言更好。而动态语言的支持者却不愿意为安全性付出任何代价。对于他们而言,对一种语言的衡量标准在于能多快地表达思想,目标在于最大化程序员的效率。而另一方面,静态语言专家则说,如果能 在早期捕捉到 bug,那么就应该 这么做,而且工具可以弥补语言中的限制。

  生产率提高的最后一个原因是减少了编译环节。很多动态类型语言是解释性的,所以在编写程序后可以立即看到变化。即使没有惯用的调试器,在 Ruby 中探索库和应用程序代码的行为也更为容易,因为您可以打开一个解释器,通常可以直接在调试会话中打开,然后随意探索。

但是……

  然而,编译不只是支持静态类型。静态类型的支持者还认为可以获得更好的性能。很多静态语言,例如 Java 代码、C 和 C++,都被称作系统语言,因为它们是构建操作系统、设备驱动程序和其他高性能系统代码的最常用的语言。这又经常导致动态语言的支持者指责静态语言总是太低级,用它们来编写应用程序生产率很低 —— 但那是一种很狭隘的观点。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 语法配置一个数据访问对象很轻松:

(编辑:aniston)

  推荐精品文章

·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 
·2023年7月目录
·2023年6月目录 
·2023年5月目录
·2023年4月目录 
·2023年3月目录 
·2023年2月目录 
·2023年1月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089