快速业务通道

诊断Java代码: “杀手组合”― mixin、Jam和单元测试 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
字: mixin 和 inherited )。无可否认,除非您正在将 Java 程序改写成 .NET 程序,否则您可以使用这种语言相当旧的版本,但是基本设计可以延用至各个更新的版本。

所提供的实现作为 Jam 到 Java 语言转换程序。注: jamc 实现不执行完整的程序类型检查。与此相反,它转换成 Java 源代码,并依赖 Java 类型检查器来捕获类型错误。这使 Jam 实现更简单,但是这也意味着要诊断从编译器上取回的错误消息会比较困难,因为我们已在实际编写的源代码上删除了这一步骤!最后,独立的 Jam 类型检查器对于生产使用是不可或缺的。

在 Jam 中,使用 mixin 类 def 内的声明来声明父类所需的方法,类似于: inherited <signature> 。

mixin 的实例化可以这样编写: class NAME = MIXIN extends CLASS {CONSTRUCTOR*}

CONSTRUCTOR 产品尾部的 * 意味着该产品可以不存在,也可以存在更多。如果在 mixin 实例化中没有指定任何构造器,那么就假定是缺省的不带参数的(zeroary)构造器。

例如,如下所示,编写 UML 图(图 2)中使用的 mixin(其中,我们在 Panes 中包含了 setVisible() 方法,在 mixin Scrollable 中包含了 maxScrollSize 字段):

清单 1. 在 Jam 中实例化 mixin

class Pane {   ...    void setVisible(boolean value) {    ...   } } class DialogBox {   ... } mixin Scrollable {   int maxScrollSize;   inherited void setVisible(boolean value); } class ScrollDialog = Scrollable extends DialogBox {   ScrollDialog() {    this.maxScrollSize = 10;   } } class ScrollPane = Scrollable extends Pane {   ScrollPane(int maxScrollSize) {    this.maxScrollSize = maxScrollSize;   } }

诊断Java代码: “杀手组合”― mixin、Jam和单元测试(3)

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

Jam 遵循著名的“用于 mixin 的复制原则”:

通过实例化父类P 上的 mixinM 而获得的类应该具有与P 的一般继承者相同的行为,其主体包含M 中定义的所有组件的副本。

尽管 mixin 的概念已经应用到了许多语言中,但是 Jam 还是很新颖,因为它在严格类型化的语言上下文中严格引入了基于 mixin 的编程。Jam 中的 mixin 与普通类相似,都定义类型;mixin 实例化拥有 mixin 的类型和父类的类型。一个 mixin 可以实现多个接口。

在 mixin 中不能声明构造器,它只适用于 mixin 实例化。就象 Jam 的设计人员所声明的,不允许构造器作为设计选择,因为它们“与它们自己类的实现紧密联系在一起,所以它们的说明往往变得非常不一般了。”

要注意这种语言的一些常规特性:

通过使用与标准 Java 语言所用的相同规则可以访问字段成员。

静态成员与 mixin 的实例化相关联;没有“可共享”的 mixin 静态成员。

另外,Jam 对 mixin 的实例化强加了五个约束:

非法覆盖/隐藏。 如果一个父类相应的“已复制”类合法,那么允许对这个父类上的方法进行意外(也称为“偶然”)覆盖(更确切地说,方法不会拥有和父类中已覆盖的方法相同的 arg类型,而是其它 return类型,或者可以拥有其它 throws子句,或诸如 静态vs. 实例那样不兼容的修饰语)。

不明确的重载。不明确的重载是个问题,因为方法参数可能是 mixin 类型,它允许两个已重载的方法可用并且这两个方法都不是比较特定的情况。如果除了某些参数具有两种不同引用类型以外,这两个方法拥有相同数目和类型的参数,那么通过禁止重载可以解决这个问题。

方法注释。用“Parent”类型来注释被继承的方法。

仅类实例化。只能根据类来实例化 Jam mixin;与 Jiazzi 中的组件不同的是,Jam 中没有 mixin 组

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