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