Каковы различия предусловия, постусловия и инварианта в компьютерной терминологии
Я читаю книгу " Параллелизм Java на практике" и немного путаюсь с этими терминами:
- Предварительное условие
- Почтовое условие
- Инварианты
Может кто-нибудь объяснить мне их (с примером, если это возможно)?
1 ответ
У вас будет много проблем при написании Java, особенно многопоточного кода, если вы не сможете понять эти простые идеи:
- Предварительные условия - это то, что должно быть истинно перед вызовом метода. Метод говорит клиентам "это то, что я ожидаю от вас".
- Постусловия - это то, что должно быть верно после завершения метода. Метод говорит клиентам: "Это то, что я обещаю сделать для вас".
- Инварианты - это то, что всегда верно и не изменится. Этот метод сообщает клиентам: "Если бы это было правдой до того, как вы мне позвонили, я обещаю, что это будет правдой, когда я закончу".
Все они являются частью идеи под названием "программирование по контракту". Он был изобретен парнем по имени CAR Hoare. Бертран Мейер построил вокруг него объектно-ориентированный язык Eiffel. Никто не использует это много, но у него был день на солнце из-за этого.
Эйфелева не очень популярна. На момент написания этой статьи есть более четырех миллионов вопросов, но только 32 из них помечены как "eiffel".
Обновление: 29 июня 2016 года было получено 11 966 392 вопроса о SO. Только 92 из них были помечены как "эйфелева". Процентная доля Eiffel остается примерно постоянной и составляет около 0,00077%.
Я исправлюсь - спасибо, пламенный пингвин. Я обновил свой ответ.