Постусловия в программировании: определение и применение
Postcondition
Постусловие в программировании: что это такое и зачем нужно? Узнайте о проверке условий после выполнения кода, использовании утверждений и документации.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
В компьютерном программировании посткондиция — это условие или предикат, который всегда должен быть истинным непосредственно после выполнения некоторого участка кода или после операции в формальной спецификации. Посткондиции иногда проверяются с помощью утверждений непосредственно в коде. Часто посткондиции просто включаются в документацию к соответствующему участку кода. Например: результат вычисления факториала всегда является целым числом и больше или равен 1. Следовательно, программа, вычисляющая факториал входного числа, должна удовлетворять посткондициям, согласно которым результат после вычисления является целым числом и больше или равен 1. Другой пример: программа, вычисляющая квадратный корень входного числа, может иметь посткондиции, согласно которым результат является числом и его квадрат равен входному числу.
In computer programming, a postcondition is a condition or predicate that must always be true just after the execution of some section of code or after an operation in a formal specification. Postconditions are sometimes tested using assertions within the code itself. Often, postconditions are simply included in the documentation of the affected section of code. For example: The result of a factorial is always an integer and greater than or equal to 1. So a program that calculates the factorial of an input number would have postconditions that the result after the calculation be an integer and that it be greater than or equal to 1. Another example: a program that calculates the square root of an input number might have the postconditions that the result be a number and that its square be equal to the input.
Посткондиции в объектно-ориентированном программировании
В некоторых подходах к разработке программного обеспечения посткондиции, вместе с предусловиями и инвариантами класса, являются составными частями метода разработки программного обеспечения "проект по контракту". Посткондиция для любой процедуры – это описание свойств, которые гарантированно будут выполнены после завершения её работы. В контексте контракта процедуры, посткондиция предоставляет гарантию потенциальным вызывающим сторонам, что если процедура вызвана в состоянии, удовлетворяющем её предусловиям, то свойства, указанные в посткондиции, будут обеспечены.
In some software design approaches, postconditions, along with preconditions and class invariants, are components of the software construction method design by contract. The postcondition for any routine is a declaration of the properties which are guaranteed upon completion of the routine's execution. As it relates to the routine's contract, the postcondition offers assurance to potential callers that in cases in which the routine is called in a state in which its precondition holds, the properties declared by the postcondition are assured.
Последующие условия и наследство
При наследовании, рутинные процедуры, унаследованные дочерними классами (подклассами), сохраняют свои контракты, то есть свои предусловия и постусловия, в силе. Это означает, что любая реализация или переопределение унаследованных процедур также должно соответствовать унаследованным контрактам. Постусловия могут быть изменены в переопределенных процедурах, но только с усилением. То есть, переопределенная процедура может увеличить преимущества, которые она предоставляет клиенту, но не может уменьшить эти преимущества.
In the presence of inheritance, the routines inherited by descendant classes (subclasses) do so with their contracts, that is their preconditions and postconditions, in force. This means that any implementations or redefinitions of inherited routines also have to be written to comply with their inherited contracts. Postconditions can be modified in redefined routines, but they may only be strengthened. That is, the redefined routine may increase the benefits it provides to the client, but may not decrease those benefits.