Выбор ответа Senior ООП и класс Object обновлено
Принцип подстановки Лисков
Вопрос
Square extends Rectangle переопределяет setWidth так, что меняется и высота. Какой принцип нарушен и в чём проявится проблема?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: LSP: код, ставящий ширину 5 и высоту 4, получит не площадь 20. Наследник должен работать везде, где ожидается родитель, не ломая его контракт.
Варианты ответа
- Инкапсуляция: квадрат раскрывает свои поля ширины и высоты наружу
- LSP: код, ставящий ширину 5 и высоту 4, получит не площадь 20правильный ответ
- Принцип открытости-закрытости: Rectangle пришлось изменить под квадрат
- Ничего не нарушено: квадрат это прямоугольник и в математике, и в коде
Разбор
Наследник должен работать везде, где ожидается родитель, не ломая его контракт. Контракт изменяемого прямоугольника: ширина и высота меняются независимо. Квадрат это нарушает, и клиентский код получает неожиданный результат. В математике квадрат прямоугольник, а в модели с изменяемым состоянием нет. Решения: неизменяемые фигуры или общий интерфейс Shape без наследования друг от друга.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.