Постусловие - Postcondition
В компьютерное программирование, а постусловие это условие или предикат это всегда должно быть верно сразу после выполнения некоторого раздела кода или после операции в формальная спецификация. Постусловия иногда тестируются с использованием утверждения внутри самого кода. Часто постусловия просто включаются в документацию затронутого раздела кода.
Например: результат факториал всегда является целым числом и больше или равно 1. Таким образом, программа, которая вычисляет факториал входного числа, будет иметь постусловия, что результат после вычисления будет целым числом и будет больше или равен 1. Другой пример: a программа, которая вычисляет квадратный корень входного числа может иметь постусловие, что результатом будет число и что его квадрат быть равно вводу.
Постусловия в объектно-ориентированном программировании
В некоторых подходах к разработке программного обеспечения постусловия, наряду с предварительные условия и класс инварианты, являются компонентами метода построения программного обеспечения дизайн по контракту.
Постусловие для любой подпрограммы - это объявление свойств, которые гарантируются после завершения выполнения подпрограммы.[1] Поскольку это связано с контрактом подпрограммы, постусловие предлагает потенциальным вызывающим сторонам уверенность в том, что в случаях, когда подпрограмма вызывается в состоянии, в котором ее предварительное условие выполняется, гарантируются свойства, объявленные постусловием.
Пример Эйфеля
Следующий пример, написанный на Эйфель устанавливает значение атрибута класса час
на основе аргумента, предоставленного вызывающим абонентом час
. Постусловие следует за ключевым словом гарантировать
. В этом примере постусловие гарантирует в случаях, когда предусловие выполняется (т. Е. Когда час
представляет действительный час дня), что после выполнения set_hour
, атрибут класса час
будет иметь то же значение, что и час
. Тег "hour_set:
"описывает это предложение постусловия и служит для его идентификации в случае нарушения постусловия во время выполнения.
set_hour (час: ЦЕЛОЕ) - Установите "час" на "a_hour" требовать действительный_аргумент: 0 <= час и час <= 23 делать час := час гарантировать hour_set: час = час конец
Постусловия и наследование
В присутствии наследование, подпрограммы, унаследованные классами-потомками (подклассами), делают это со своими контрактами, то есть их предварительными и постусловиями, действующими. Это означает, что любые реализации или переопределения унаследованных подпрограмм также должны быть написаны в соответствии с их унаследованными контрактами. Постусловия можно изменять в переопределенных подпрограммах, но их можно только усиливать.[2] То есть переопределенная процедура может увеличить преимущества, которые она предоставляет клиенту, но не может уменьшить эти преимущества.
Смотрите также
- Предварительное условие
- Дизайн по контракту
- Логика Хоара
- Инварианты поддерживается условиями
- Триггер базы данных
Рекомендации
- ^ Мейер, Бертран, Построение объектно-ориентированного программного обеспечения, второе издание, Прентис Холл, 1997, стр. 342.
- ^ Мейер, 1997, стр. 570–573.