2

我最近的任务要求我有这个遵循标准

“所有方法都有明确的后置条件和带有参数的前置条件”

我已经阅读了一些试图解释前置/后置条件的网页,但似乎可以掌握它们,有人可以向我解释它们是什么,它们的用途以及如何编写它们吗?

谢谢

(顺便说一下,我正在学习的语言是 C#)

4

3 回答 3

5

进入方法前,前提条件必须为真,否则合约无效。退出该方法后,后置编码应该为真。对不起,我不懂 C#,但如果你知道 Java,这个选择排序示例可能会有所帮助。例子:

public static void selSort(int[] a, int b) {
    //Pre-condition: array a is not null and size of unsorted section is bigger than 1.
    for(int unsortSz = b; unsortSz >1; unsortSz--) {
        int max = 0;
        for (int p = 1; p < unsortSz; p++){
            if (a[p] > a[max]){
                max = p;
            }
        }

        //Post-condition: max is the position of largest element in unsorted part. 

        // now just swap the last element in unsorted part with max
        temp = a[unsortSz-1];
        a[unsortSz] = a[max];
        a[max] = temp;
    }
}
于 2014-08-24T05:57:07.103 回答
3

这都是代码合同的一部分。输入方法或属性时,应满足先决条件。而后置条件是方法或属性代码退出时的期望。来自MSDN

前提条件指定调用方法时的状态。它们通常用于指定有效的参数值。前提条件中提到的所有成员必须至少与方法本身一样可访问;否则,方法的所有调用者可能无法理解前提条件。

后置条件是方法终止时的状态契约。在退出方法之前检查后置条件。失败的后置条件的运行时行为由运行时分析器确定。

还可以查看这篇出色的文章Preconditions, Postconditions: Design by Contract for C#

于 2014-08-24T06:02:23.150 回答
1

调用方法之前的条件称为前置条件,如方法名称、参数类型和参数数量等。后置条件是方法末尾的条件,如返回类型为 float 的方法必须返回一个 float 不一个int等

于 2014-08-24T06:01:19.190 回答