Объяснение предварительных условий и постусловий?

Мое последнее задание требует от меня соблюдения следующих критериев

"Все методы имеют явное постусловие, а методы с параметрами предусловия"

Я прочитал несколько веб-страниц, пытаясь объяснить условия до/после, но, похоже, понял их, может ли кто-нибудь объяснить мне, что они собой представляют, их использование и как их написать?

Спасибо

(кстати, я изучаю язык C#)


person user3496101    schedule 24.08.2014    source источник
comment
public static int GetStringLength(string str) { if (str == null) throw new ArgumentNullException("str", "y u no respect preconditions???"); ... }. Если у вас есть некоторая структура для предварительных и постусловий, у вас также могут быть аннотации, такие как [NotNull] string str.   -  person ta.speot.is    schedule 24.08.2014


Ответы (3)


Предварительные условия должны быть истинными, прежде чем вы введете метод, иначе контракт будет аннулирован. Посткоды должны быть истинными после выхода из метода. Извините, я не знаю 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;
    }
}
person Urler    schedule 24.08.2014

Все это является частью Code Contract. При вводе метода или свойства должны быть соблюдены предварительные условия. Принимая во внимание, что постусловия — это ожидания в момент выхода из кода метода или свойства. Из MSDN

Предварительные условия определяют состояние при вызове метода. Обычно они используются для указания допустимых значений параметров. Все члены, упомянутые в предварительных условиях, должны быть как минимум такими же доступными, как и сам метод; в противном случае предварительное условие может быть понято не всеми вызывающими объектами метода.

Постусловия — это контракты на состояние метода в момент его завершения. Постусловие проверяется непосредственно перед выходом из метода. Поведение невыполненных постусловий во время выполнения определяется анализатором времени выполнения.

Также проверьте эту прекрасную статью Предварительные условия, постусловия: проектирование по контракту для C#

person Rahul Tripathi    schedule 24.08.2014
comment
Вторая ссылка битая - person Reven; 10.06.2020

условия перед вызовом метода называются предварительными условиями, такими как имя метода, тип параметров и количество параметров и т. д. постусловия — это условия, которые находятся в конце метода, как метод с возвращаемым типом. int и т. д.

person Zohaib Aslam    schedule 24.08.2014