Постусловие - Postcondition

В компьютерное программирование, а постусловие это условие или предикат это всегда должно быть верно сразу после выполнения некоторого раздела кода или после операции в формальная спецификация. Постусловия иногда тестируются с использованием утверждения внутри самого кода. Часто постусловия просто включаются в документацию затронутого раздела кода.

Например: результат факториал всегда является целым числом и больше или равно 1. Таким образом, программа, которая вычисляет факториал входного числа, будет иметь постусловия, что результат после вычисления будет целым числом и будет больше или равен 1. Другой пример: a программа, которая вычисляет квадратный корень входного числа может иметь постусловие, что результатом будет число и что его квадрат быть равно вводу.

Постусловия в объектно-ориентированном программировании

В некоторых подходах к разработке программного обеспечения постусловия, наряду с предварительные условия и класс инварианты, являются компонентами метода построения программного обеспечения дизайн по контракту.

Постусловие для любой подпрограммы - это объявление свойств, которые гарантируются после завершения выполнения подпрограммы.[1] Поскольку это связано с контрактом подпрограммы, постусловие предлагает потенциальным вызывающим сторонам уверенность в том, что в случаях, когда подпрограмма вызывается в состоянии, в котором ее предварительное условие выполняется, гарантируются свойства, объявленные постусловием.

Пример Эйфеля

Следующий пример, написанный на Эйфель устанавливает значение атрибута класса час на основе аргумента, предоставленного вызывающим абонентом час. Постусловие следует за ключевым словом гарантировать. В этом примере постусловие гарантирует в случаях, когда предусловие выполняется (т. Е. Когда час представляет действительный час дня), что после выполнения set_hour, атрибут класса час будет иметь то же значение, что и час. Тег "hour_set:"описывает это предложение постусловия и служит для его идентификации в случае нарушения постусловия во время выполнения.

    set_hour (час: ЦЕЛОЕ)            - Установите "час" на "a_hour"        требовать            действительный_аргумент: 0 <= час и час <= 23        делать            час := час        гарантировать            hour_set: час = час        конец

Постусловия и наследование

В присутствии наследование, подпрограммы, унаследованные классами-потомками (подклассами), делают это со своими контрактами, то есть их предварительными и постусловиями, действующими. Это означает, что любые реализации или переопределения унаследованных подпрограмм также должны быть написаны в соответствии с их унаследованными контрактами. Постусловия можно изменять в переопределенных подпрограммах, но их можно только усиливать.[2] То есть переопределенная процедура может увеличить преимущества, которые она предоставляет клиенту, но не может уменьшить эти преимущества.

Смотрите также

Рекомендации

  1. ^ Мейер, Бертран, Построение объектно-ориентированного программного обеспечения, второе издание, Прентис Холл, 1997, стр. 342.
  2. ^ Мейер, 1997, стр. 570–573.