加强和削弱事前和事后条件



我一直在阅读合同设计的主题,到目前为止,我已经编写了以下注释:

When strengthening a condition, it means to make it 
more restrictive and weakening a condition is the opposite. 
A subclass' pre-condition is either weaker or the same as its super class'
A subclass' post-condition is either stronger or the same as its super class'

我想确认一个例子来澄清我的理解。

class exampleA {
int processInt(int exampleInt) {
return exampleInt;
}
}
class exampleB extends exampleA {
int processInt(int exampleInt) {
return exampleInt;
}
}

合同设计说,如果exampleAprocessInt先决条件是";exampleInt必须大于10;并且后条件是";返回的值在20和50之间;则exampleB的方法exampleInt的前提条件必须相同或较弱,并且后条件将相同或较强。

这意味着exampleB的有效前提条件可能是

  • 大于0
  • 大于或等于0
  • 大于-100

但无效的前提条件是,

  • 大于20
  • 在20到500之间

同样,有效的后置条件可以是,

  • 介于25和45之间
  • 30至40岁

但无效的后处理条件是,

  • 介于20和90之间
  • 介于0和50之间
  • 大于0

这是对合同设计的正确解释吗?此外,我正在Java中学习这一点,但我认为这个概念适用于任何具有OOP的语言?

是的,您的示例是正确的;是的,同样的概念适用于任何支持多态性的语言。请注意,合同设计也是利斯科夫替代原则的一部分,该原则对子类型规定了更多的限制。

相关内容

  • 没有找到相关文章

最新更新