Что может произойти в программе, где подкласс усиливает предпосылки переопределенного метода? - PullRequest
0 голосов
/ 04 июня 2018

Я ломаю голову над этим вопросом.Я был бы рад узнать, какой ответ правильный и почему?

Принцип подстановки Лискова гласит, что это позволяет ослабить предварительные условия в переопределенных методах.Что может произойти в программе, где подкласс усиливает предварительные условия в переопределенном методе?

  1. Код после вызова переопределенного метода может быть поврежден, поскольку он делает предположения относительно возвращаемого значения из переопределенного метода.
  2. Возможно, не удастся вызвать переопределенный метод, поскольку код предполагает более слабые предварительные условия.
  3. Ничего не произойдет - код всегда будет работать правильно, как и раньше.
  4. Если коднаписано на Java, может не скомпилироваться.

Спасибо за совет!

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

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

  1. Если усиленное предварительное условие не завершится неудачей (т. Е. Если вызывающий код передал значение в подмножестве, принятом усиленным предварительным условием), то метод вернет тот же результат, что иэто было бы для метода базового класса (как того требует LSP).Следовательно, код вызова не может взломать после вызова.

  2. Это правильный ответ.Рассмотрим метод, определенный для любых целых чисел, который переопределяется, чтобы принимать только положительные целые числа.Вызывающий не мог бы знать об усиленном предварительном условии, так как он полиморфно обращается к подклассу, и если он передал отрицательное целое число (которое было допустимо ранее), вызов завершится ошибкой для переопределенного метода подкласса.

  3. Это может иметь место, но не обязательно верно.

  4. Это может иметь место, но не обязательно верно.

Подробнее см. Википедия: Ковариация и контравариантность - тип аргумента ковариантного метода

0 голосов
/ 04 июня 2018

Я бы пошел с:

  1. Верно, потому что предварительные условия, влияющие на параметры, могут повлиять на возвращаемое значение.Возьмем, к примеру, математическую функцию, которая может принимать только положительные числа и давать неожиданные результаты с другими.
  2. Ложно, если метод переопределен, он принимает те же типы параметров и имеет тот же тип возврата и может быть вызван.
  3. Не обязательно верно и, следовательно, ложно из-за 1.
  4. Является ложным по той же причине 2. ложно.
...