加强和削弱前和 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 表示如果 exampleAprocessInt前提条件 是“exampleInt 必须大于 10”,并且后置条件是“返回值在 20 到 50 之间”,那么 exampleB 的方法 exampleInt 的前提条件必须相同或更弱,并且后置条件将相同或更强。

这意味着 exampleB 的有效先决条件可以是,

但是无效的先决条件是,

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

但是无效的后置条件是,

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

是的,你的例子是正确的;是的,相同的概念适用于任何支持多态性的语言。请注意,按合同设计也是 Liskov Substitution Principle 的一部分,它对子类型规定了更多限制。