快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
合的概念(但是,Jam 团队有意探究这样的扩展)。有关 Jiazzi 和基于组件编程的更多信息,请参阅 参考资料。

不能传递“this”。可能的显示阻塞(show-stopper)将“this”作为参数从 mixin 内部传递给方法或构造器,这是被禁止的!这个 Jam 特性是保护类型系统的稳固性所必不可少的。没有它,就无法确保 Jam mixin 类型将在所有可能的实例化上都是有效的。然而它仍是一个非常遗憾的约束,因为它限制了适合于转换成 mixin 的类集合。

内幕:对实现的简要一瞥

要转换成 Java 语言,Jam mixin 类型就要被表示成接口,这是由实例化来实现的(所有实例化都是静态的)。要处理 mixin 中引入的字段,在接口中引入了 getter/setter 方法: M_$get 诊断Java代码: “杀手组合”― mixin、Jam和单元测试 - 编程入门网 - 凌众科技

快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
content

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

f 和 M_$set 诊断Java代码: “杀手组合”― mixin、Jam和单元测试 - 编程入门网 - 凌众科技
快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
content

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

f 。然后在每个实例化中将 f 声明为字段,并相应实现这两个方法(同样,对 来自外部代码的静态类型 M 的表示进行的所有字段访问都转换成调用 getter/setter)。mixin 中的静态字段不可以在各个 mixin 实例化上共享,因此只能分别将它们插入到每个实例化中。

mixin 的每个实例化被编译成独立的 Java 类;各个副本上不存在任何共享的字节码。还为 mixin 的父类构造了一个接口。这个父类接口是由 mixin 接口继承而来的(而不是由父类的实例化继承而来的)。

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

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

mixin 和单元测试

mixin 的每个实例化被编译成独立的 Java 类;各个副本上不存在任何共享的字节码。还为 mixin 的父类构造了一个接口。这个父类接口是由 mixin 接口继承而来的(而不是由父类的实例化继承而来的)。

mixin 一般作为一种重新获得一种语言中多重继承的强大功能,同时不带有任何缺陷的方法来激励程序员。但是很重要的是,要注意它们还向我们提供了测试现有类的新继承的功能强大的方法,特别是当父类的本质是很难对它直接进行测试的时候,此方法很有用(如同在 GUI 元素或 RMI 代理类中)。

事实上,就如同 Jiazzi 向我们提供了在与这些包导入的包无关的情况下测试这些包的方法,Jam(或任何其它基于 mixin 的Java 语言扩展)允许我们在与父类无关的情况下测试这些类,即使那些父类存在于同一个包中。执行清单 3 中的示例,我们可以用 Recorder 为只记录所有超级方法调用的父类实例化我们的 mixin:

清单 2. 与 mixin 实例化无关的情况下测试 mixin

class TestLog {   private StringBuffer recording = new StringBuffer("");   public void record(String message) {    recording.append(message);   }   public String toString() {    return recording.toString();   } } class WidgetRecorder {   public TestLog testLog;   public void setVisible(boolean value) {    testLog.record("setVisible(" + value + "); ");   } } class ScrollableWidgetRecorder = Scrollable extends WidgetRecorder {   public TestScrollable() {    this.maxScrollSize = 10;   } }

随后我们可以根据预期的调用序列检查这个日志:

清单 3. 用于 mixin 的 JUnit TestCase

import junit.framework.*; public class ScrollableTest extends TestCase {   public ScrollableTest(String name) {super(name);}   public void testSetVisible() {    ScrollableWidgetRecorder test = new ScrollableWidgetRecorder();    test.initialize();    assertEquals("Scrollable initialization should''ve called setVisible(true)",          "setVisible(true); ",          test.testLog.t

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