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