我一直在阅读按合同设计的主题,到目前为止,我写了以下注释:
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;
}
}
契约式设计说如果 in 的前置条件是“必须大于 10”,后置条件是“返回值在 20 到 50 之间”,那么' 方法的前置条件必须相同或更弱,并且后置条件将相同或更强。processInt
exampleA
exampleInt
exampleB
exampleInt
这意味着exampleB
可能的有效前提条件是,
- 大于 0
- 大于或等于 0
- 大于 -100
但无效的先决条件是,
- 大于 20
- 在 20 到 500 范围内
同样,有效的后置条件可能是,
- 25 至 45 岁之间
- 30 到 40 之间
但无效的后置条件是,
- 20 到 90 之间
- 0 到 50 之间
- 大于 0
这是对合同设计的正确解释吗?另外,我正在用 Java 学习这个,但我认为这个概念适用于任何带有 OOP 的语言?