-3

让我思考的问题:

当我们谈到方法中的前提条件时,我们指的是由方法本身验证的条件(1)还是调用者验证的条件(2)?例如

(1)
    ...
    withdrawal(100);
}

void withdrawal(int v)
{
    if (v<balance)
        balance-=v;
    else
        throw new exception;
}

(2)
    ...
    if (getBalance()>100)
        withdrawal(100);
    else
        throw new exception;
}

void withdrawal(int v)
{
    balance-=v;
}

后置条件也一样?

4

1 回答 1

2

两者都在方法本身中得到验证。

有关在 Java 中编程前置条件和后置条件的建议,请参阅:https ://docs.oracle.com/javase/8/docs/technotes/guides/language/assert.html#usage-conditions

您可能还对有关按合同设计的 Wikipedia 文章感兴趣。请注意,前置条件和后置条件在不同语言中的实现方式不同,并且在没有一流 DbC 支持的语言(如 Java)中,您可以使用插件或工具来协助执行合同。例如,注解可能是 Java 中的另一种方法。

在没有其他工具的帮助下,前置条件被简单地实现为保护子句,采用防御性编程风格。在 Java 中,空检查强制执行一个普遍存在的前提条件。

于 2021-01-02T21:36:18.707 回答