我一直在阅读合同设计的主题,到目前为止,我已经编写了以下注释:
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;
}
}
合同设计说,如果exampleA
中processInt
的先决条件是";exampleInt
必须大于10;并且后条件是";返回的值在20和50之间;则exampleB
的方法exampleInt
的前提条件必须相同或较弱,并且后条件将相同或较强。
这意味着exampleB
的有效前提条件可能是
- 大于0
- 大于或等于0
- 大于-100
但无效的前提条件是,
- 大于20
- 在20到500之间
同样,有效的后置条件可以是,
- 介于25和45之间
- 30至40岁
但无效的后处理条件是,
- 介于20和90之间
- 介于0和50之间
- 大于0
这是对合同设计的正确解释吗?此外,我正在Java中学习这一点,但我认为这个概念适用于任何具有OOP的语言?
是的,您的示例是正确的;是的,同样的概念适用于任何支持多态性的语言。请注意,合同设计也是利斯科夫替代原则的一部分,该原则对子类型规定了更多的限制。