当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

诊断Java代码: Fictitious Implementation错误情势,第1部份[Java编程]

赞助商链接



  本文“诊断Java代码: Fictitious Implementation错误情势,第1部份[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

Java 语言接口是一种强盛的工具.它具有多担当的很多长处,而没有什么问题.为客户但愿利用的全部服务指定一个接口,使得在需求时插进这种接口的差别实现成为大概.

遗憾的是,标准中可以被表达的部份只有办法阐明.对任何实现来说,极大概还有很多别的不变量但愿被掌握,但是 Java 语言没有供应查抄它们的工具.

臆想错误情势

由于这种限制,极大概“实现”了一个接口而实际上没有满意预期的语义.由这种 Fictitious Implementation招致的错误就是本周专栏的主题.

比方,请看一看下面这个仓库的接口:

清单 1. 仓库的接口

public interface Stack {
  public Object pop();
  public void push(Object top);
  public boolean isEmpty();
}

从 Java 范例查抄器的角度看,包含符合如上阐明的办法的任何类可以作为 Stack 的合理实现.但是实际上,我们但愿仓库能满意一些别的的要求.比方:

假如一个对象 o 被压入仓库 s ,并且在仓库上举行的下一步操作是 pop ,那么这个操作的返回值应当是 o .

假如关于一个给定的仓库 s , s.isEmpty() 的返回值是 true ,并且在这个仓库上举行的下一步操作是 pop ,那么调用 pop 应当抛出一个 RuntimeException 非常.

还有大量别的的可以指定的不变量.我们但愿仓库怎么处理多次 push 操作?关于多线程会有什么行为?很难通过编程来实施这些不变量.我们可以(并且应当)在文档编写时说起它们,但是编写实现的开辟者大概简单忽视它们.假如发生这种情形,那么依靠这些不变量的客户将不能完成这种实现,就形成了错误.我称这种情势的错误为 Fictitious Implementation ,因为我公道地将其归咎于实现而不是客户.正如任何错误都有自己的情势一样,Fictitious Implementation 大概不能立即看出,而是暗藏,一向躲藏到某种不普通的履行途径发现它.

不要责备 Java 语言!

在持续这篇专栏前,我要指出我并非批判 Java 语言不能指定这种不变量.答应这种标准的任何机制城市有很多随之而来的缺陷.首先,我们想要指定的很多不变量不能被静态地查抄.固然范例阐明只表达了不变量的一小部份,但是比上面我们概述的用于仓库的这类约束简单查抄.

在接口中答应更多可表达标准有另一方面的缺陷:这样做,很简单让 Java 语言背负很多问题,使得语言中处处都是多担当.请看下面的接口:

清单 2. 弹出器接口

public interface Popper {
  public Object pop();
}


  以上是“诊断Java代码: Fictitious Implementation错误情势,第1部份[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 诊断Java代码 - 筹划"可测试的"操纵程序
  • <b>诊断Java代码: 臆想实现错误情势,第2部份</b>
  • 诊断Java代码: 筹划可扩大的操纵程序,第2部份
  • 诊断Java代码::Split Cleaner错误情势
  • 诊断Java代码: Fictitious Implementation错误情势,第1部份
  • 诊断Java代码:筹划可扩大的操纵程序,第1部份
  • 诊断Java代码:孤线程(Orphaned Thread)错误情势
  • 诊断Java代码
  • 诊断Java代码: 单元测试与自动化代码解析协同工作
  • 诊断Java代码: Repl供应交互式评价
  • 诊断Java代码: Liar View错误情势
  • 诊断Java代码: Java编程中的断言和时态逻辑
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .