诊断Java代码: 消除包间的耦合关联 - 编程入门网
诊断Java代码: 消除包间的耦合关联时间:2011-02-11 IBM Eric E. Allen测试优先编程(test-first programming)中反复遇到的一个问题是,似乎不可能对程序的许多部分进行自动测试。尤其当程序在很大程度上要利用外部资源和库时,似乎很难对它进行测试,因为没有很好的方法来模拟程序与这些外部资源的连接。 然而,虽然只使用 Java 代码很难测试这样的程序,但有一种类型的编程(带有开发工具)可以解决这个问题 ― 基于组件的编程。 基于组件的编程和 Java 语言 我所说的基于组件的编程是指什么?我只是指,编程时程序的各个单元处于分布状态,而不是象 JavaBeans 或类似技术这样的运行时“组件”。 从概念上讲,这些分布的各个单元大致类似于 Java 包。然而,Java 语言中的包非常受限,因为它们相互之间是耦合的。每个包中的类与它们导入的包之间是硬连接的(因为这些类必须显式地引用所导入的包)。 由于这些包之间是相互耦合的,因此很难统一用提供同一功能的其它包的引用来替代程序中这些包的引用。 同样,独立开发的各个团队可能偶尔会用到重复的包名,这些团队试图使用对方的包时,就会引起问题。为确保包名的唯一性,Sun 强烈主张每个开发团队使用这样的约定:用倒序排列的因特网地址作为团队开发的所有包的前缀。开发人员通常都遵守这个约定,但未必总是如此。 然而即便严格遵守了这个包命名约定,仍然有其它一些原因使程序员想解除组件之间的耦合。其中一个原因是,这样可以更有效地测试这些组件 ― 在谈到基于组件的编程工具(Jiazzi 组件系统)时,会解释这一点。 Jiazzi:针对 Java 语言的组件系统 Jiazzi 是一个富有前途的、用 Java 语言进行基于组件编程的系统,它与 JVM 完全兼容,并且完全解除了各组件间的耦合,它是犹他大学计算机科学系所开发的一个项目。这个系统使程序员可以叠加组件,并在现有 Java 代码之上将这些组件连接起来。而不需修改 Java 语言或 JVM。 开发人员的描述 Jiazzi 开发人员是这样描述的: ……是这样一个系统,支持用 Java 编写的大规模二进制组件的构造 [添加了对用 Java 编写的大规模二进制组件的支持]。可以将 Jiazzi 组件看成是对 Java 包的泛化,同时向这些 Java 包添加了外部链接和独立编译的支持。Jiazzi 组件很实用,因为它们是从标准 Java 源代码构造出来的。Jiazzi 既不需要对 Java 语言扩展,也不需要对编写 Java 源码进行特殊的约定,这些扩展和约定将写在组件内部。我们的组件是富有表现力的,因为 Jiazzi 支持循环组件链接和 mixin,在开放的类模式中一起使用了循环组件链接和 mixin,这种模式支持将具有新特性的模块添加到现有的类。 当前的 Jiazzi 实现用 链接程序(linker,用于操作组件)和 存根生成器(使 Jiazzi 可以与常规的 Java 源码编译器共同使用)集成进了 Java 平台。Jiazzi 中的组件可以包含、导入和导出 Java 类,可以跨组件边界使用 Java 平台的用于继承的语言内支持。除了富有表现力之外,这些组件还很健壮 ― 可以分别对组件的实现和链接进行类型检查。 观察解除组件的耦合 让我们研究一个 Java 包 view 的简短示例,来看一下 Jiazzi 如何解除组件间的耦合,这个示例用到了 GUI 库包。我们将调用 toolkit 包。为了引用该包中的所有类,在我们的包中源文件的开头,放置了一条 import 语句:
诊断Java代码: 消除包间的耦合关联(2)时间:2011-02-11 IBM Eric E. Allen通常,这会将 view 包与 toolkit 包联系起来。但可以设想一下,我们希望编译这个源文件,却不能确定我们实际上正在导入哪个包。我们没有将 toolkit 与 view 包硬连接起来,而是设想在这两个包 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |