Каковы различия предусловия, постусловия и инварианта в компьютерной терминологии

Я читаю книгу " Параллелизм Java на практике" и немного путаюсь с этими терминами:

  1. Предварительное условие
  2. Почтовое условие
  3. Инварианты

Может кто-нибудь объяснить мне их (с примером, если это возможно)?

1 ответ

Решение

У вас будет много проблем при написании Java, особенно многопоточного кода, если вы не сможете понять эти простые идеи:

  1. Предварительные условия - это то, что должно быть истинно перед вызовом метода. Метод говорит клиентам "это то, что я ожидаю от вас".
  2. Постусловия - это то, что должно быть верно после завершения метода. Метод говорит клиентам: "Это то, что я обещаю сделать для вас".
  3. Инварианты - это то, что всегда верно и не изменится. Этот метод сообщает клиентам: "Если бы это было правдой до того, как вы мне позвонили, я обещаю, что это будет правдой, когда я закончу".

Все они являются частью идеи под названием "программирование по контракту". Он был изобретен парнем по имени CAR Hoare. Бертран Мейер построил вокруг него объектно-ориентированный язык Eiffel. Никто не использует это много, но у него был день на солнце из-за этого.

Эйфелева не очень популярна. На момент написания этой статьи есть более четырех миллионов вопросов, но только 32 из них помечены как "eiffel".

Обновление: 29 июня 2016 года было получено 11 966 392 вопроса о SO. Только 92 из них были помечены как "эйфелева". Процентная доля Eiffel остается примерно постоянной и составляет около 0,00077%.

Я исправлюсь - спасибо, пламенный пингвин. Я обновил свой ответ.

Другие вопросы по тегам