Skip to main content

Чому LSP пов'язаний з успадкуванням?

LSP пов'язаний з успадкуванням тому, що цей принцип визначає, як повинно працювати успадкування, щоб поліморфізм лишався коректним і безпечним.

Детальніше:

1. Успадкування передбачає підстановку дочірнього класу замість батьківського

Головна мета успадкування - дати можливість використовувати об'єкт нащадка там, де очікується об'єкт батьківського класу. Поліморфізм працює тільки тоді, коли така поведінка безпечна.

2. LSP визначає правила коректного поліморфізму

Нащадок зобов'язаний зберігати сенс і контракт батьківського класу. Якщо нащадок змінює поведінку так, що клієнтський код перестає працювати коректно, успадкування використовується неправильно.

3. Успадкування без LSP ламає систему типів

Якщо підклас не можна підставити замість базового класу, успадкування перетворюється на джерело помилок:

  • клієнт повинен перевіряти типи (if obj is Child),
  • OCP порушується,
  • абстракції перестають працювати,
  • код стає крихким. LSP запобігає таким ситуаціям.

4. Успадкування створює контракт, якого підклас зобов'язаний дотримуватися

Контракт включає:

  • допустимі вхідні параметри,
  • гарантовані результати,
  • інваріанти стану,
  • допустимі винятки. LSP каже: нащадок не має права порушувати цей контракт.

5. Без LSP успадкування втрачає сенс як механізм розширення

Якщо нащадок поводиться інакше, ніж очікує клієнт, то успадкування більше не дає переваги - воно стає джерелом регресій.

6. LSP - фундамент застосування успадкування в SOLID

Усі принципи SOLID спираються на те, що успадкування працює коректно. Якщо LSP порушено, решта принципів (SRP, OCP, ISP, DIP) теж починають ламатися, тому що абстракції перестають бути надійними.

Підсумок: LSP пов'язаний з успадкуванням, тому що саме він визначає, коли успадкування є коректним: підклас повинен повністю зберігати контракт батьківського класу, щоб його можна було підставити в будь-який код, що використовує базовий тип, без зміни поведінки програми.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.