快速业务通道

诊断Java代码: 消除包间的耦合关联 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
之上定义一个函数,它可以接受 toolkit 包,并返回与 toolkit 包相关的 view 包。在 Jiazzi 中,这些函数称为 单元(unit)。

单元类似于 LEGO 积木;可以将它们拼装在一起创建一个程序。如果将单元视为函数,则可以说,Jiazzi 提供了 函数复合(functional composition)。每个单元接受一个或多个带有指定“包签名”的包,同样,可以用指定的签名导出一个或多个包。

包签名类似于类型;它们限制了包的形状。包签名会定义包中所期望的类以及这些类的方法签名等。导出包的签名可以取决于导入包的签名。

有两类单元:

原子(atom),是包之间的简单映射

复合(Compound),是其它单元的组合

原子描述了直接导入和导出的包。复合从所组合的单元继承了导入和导出的包。如果将单元视为 LEGO 积木,那么原子就是单个的 LEGO 积木,复合就是从多个 LEGO 积木构建而来的结构。

在单独的文件中,用特定的规范语言描述单元。该语言给单元输入和输出的包分配名称。例如,这里有一个简单的原子单元,它接受 toolkit 包,并输出 view 包:

atom app_view {    import toolkit: toolkit_s;    export view: view_s; }

这个单元称为 app_view 。它将“toolkit”名称分配给它所导入的包。声明这个包以与 toolkit_s 这个特定的包签名相匹配。该单元导出的包称为 view ,并声名这个包以与 view_s 签名匹配。

正如前面所提到的,包签名类似于类型;它们限制了可能传递给某个单元(或从某个单元返回)的参数的类型。例如, toolkit_s 签名可以象这样指定一组类(这些类非常类似于 javax.swing 包中的类):

signature toolkit_s {    class Frame {      public Container getContentPane();      public Component getGlassPane();      ...    }    class OptionPane {      public Object getDialog();      ...    }    ... }

我们还可以象这样指定 view_s 签名:

signature view_s {    class EditorPane {...}    class InteractionsPane {...}    ... }

诊断Java代码: 消除包间的耦合关联(3)

时间:2011-02-11 IBM Eric E. Allen

当然,在签名中所引用的某些类本身可能在单独的包中。为了解除特定包中包签名间的耦合,Jiazzi 允许对包签名使用 参数。在签名名称后的尖括号内是签名的包参数。例如,我们可能希望 toolkit_s 签名使用 awt 包参数,如下所示:

signature toolkit_s<awt> {    class Frame {      public awt.Container getContentPane();      public awt.Component getGlassPane();      ...    }    class OptionPane {      public Object getDialog();      ...    }    ... }

然后,我们必须设计新的签名(称为 awt_s ),并修改 app_view toolkit 来接受 awt 包,并用这个包实例化 toolkit_s 签名:

atom app_view {    import      my_toolkit: toolkit_s%lt;awt_s>;      my_awt: awt_s;    export my_view: view_s; }

接着,Java 源文件可以引用 my_toolkit 和 my_view 这两个已经分配的名称,就好象它们是真正的包名一样。事实上,Jiazzi 可以让我们在根本不做任何修改的情况下重新编译上面的源文件,以引用这些已经分配的名称!(请继续阅读下面的内容,其中解释了如何这样做。)

象 LEGO 积木一样,可以使用复合单元拼装单元。复合单元以特殊的“link”子句将其它单元组合起来,其中“link”子句标识出由一些单元导出的类,而这些类是由其它单元导入的。例如,可以将 app_view atom 与 default_toolkit 和 default_awt 单元按如下方式组合起来:

atom default_

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号