Выбор ответа Senior ООП и класс Object обновлено

Принцип подстановки Лисков

Вопрос

Square extends Rectangle переопределяет setWidth так, что меняется и высота. Какой принцип нарушен и в чём проявится проблема?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: LSP: код, ставящий ширину 5 и высоту 4, получит не площадь 20. Наследник должен работать везде, где ожидается родитель, не ломая его контракт.

Варианты ответа

  1. Инкапсуляция: квадрат раскрывает свои поля ширины и высоты наружу
  2. LSP: код, ставящий ширину 5 и высоту 4, получит не площадь 20правильный ответ
  3. Принцип открытости-закрытости: Rectangle пришлось изменить под квадрат
  4. Ничего не нарушено: квадрат это прямоугольник и в математике, и в коде

Разбор

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

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.