Eiffel: ослабление предварительных условий и ужесточение постусловий? - PullRequest
4 голосов
/ 10 сентября 2010

В Eiffel сказано, что мы должны «ослабить предварительные условия и ужесточить постусловия», но я не уверен, что это значит. Какую пользу получает это преимущество / подклассификация?

Спасибо

1 Ответ

7 голосов
/ 10 сентября 2010

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

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

На стороне результата вы должны убедиться, что результат от производной функции соответствует всем требованиям, предъявляемым к базовой функции, но он также может добавить больше ограничений. Например, производная версия функции, приведенной выше, может принять решение о выдаче только результатов, кратных 8. Каждое значение, кратное 8, является четным, поэтому оно все еще соответствует требованию базовой функции, но также наложило дополнительное ограничение.

Обратное не будет работать: если функция базового класса допускает неотрицательные целые числа в качестве входных данных, то производный класс должен продолжать принимать все неотрицательные целые числа в качестве входных данных. Попытка изменить его так, чтобы он принимал только положительные целые числа (то есть отклонить 0, что разрешено базовым классом), не будет разрешена - ваш производный класс больше не сможет заменить базовую версию при любых обстоятельствах.

Аналогично с результатами: если базовый класс наложил на результат требование «кратно 8», производная версия должна также обеспечить, чтобы все результаты были кратны 8. Возвращение 2 или 4 нарушило бы это требование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...