Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Наведіть приклад порушення LSP». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Приклад порушення LSP** - це ситуація, коли нащадок ламає очікування, задані базовим класом. Один з найвідоміших прикладів - відношення прямокутника і квадрата. **Ключове:** `Square` не може замінювати `Rectangle`, хоча формально успадковується від нього - це класичне порушення принципу підстановки Лісков.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняПриклад порушення LSP - це ситуація, коли нащадок **ламає очікування**, задані базовим класом. Один з найвідоміших прикладів - відношення *прямокутника і квадрата*. ### Приклад: Базовий клас: ```python class Rectangle: def __init__(self, width, height): self.width = width self.height = height def set_width(self, w): self.width = w def set_height(self, h): self.height = h def area(self): return self.width * self.height ``` Підклас: ```python class Square(Rectangle): def set_width(self, w): self.width = w self.height = w # порушує контракт def set_height(self, h): self.width = h self.height = h # порушує контракт ``` ### Чому це порушення LSP: 1. **Підклас змінює сенс поведінки методів.** У `Rectangle` `set_width()` змінює тільки ширину. У `Square` - ширину *та висоту*. Клієнтський код не очікує такої поведінки. 2. **Клієнтський код починає працювати некоректно.** Наприклад: ```python def resize(rect: Rectangle): rect.set_width(10) rect.set_height(20) return rect.area() ``` Очікувана поведінка для прямокутника: ```javascript area = 10 * 20 = 200 ``` Фактична поведінка для квадрата: ```javascript set_width(10) → width=10, height=10 set_height(20) → width=20, height=20 area = 20 * 20 = 400 # неправильно відносно очікувань ``` 3. **Підклас змушує клієнта робити перевірки типу.** ```python if isinstance(rect, Square): ... ``` Це пряме доведення порушення LSP. ### Підсумок `Square` **не може замінювати** `Rectangle`, хоча формально успадковується від нього - і це класичне порушення принципу підстановки Лісков.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.