加强和削弱前和 post 条件
Strengthening and Weakening of pre and post conditions
我一直在阅读 Design By Contract 的主题,到目前为止已经写了以下笔记:
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;
}
}
Design by Contract 表示如果 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 的语言?
是的,你的例子是正确的;是的,相同的概念适用于任何支持多态性的语言。请注意,按合同设计也是 Liskov Substitution Principle 的一部分,它对子类型规定了更多限制。
我一直在阅读 Design By Contract 的主题,到目前为止已经写了以下笔记:
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;
}
}
Design by Contract 表示如果 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 的语言?
是的,你的例子是正确的;是的,相同的概念适用于任何支持多态性的语言。请注意,按合同设计也是 Liskov Substitution Principle 的一部分,它对子类型规定了更多限制。