Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Наведіть приклад дотримання LSP». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Приклад дотримання LSP** - це ситуація, коли підклас розширює поведінку батьківського класу, не порушуючи його контракт, і може повністю замінити базовий клас у клієнтському коді. **Ключове:** класи `EmailNotifier` і `SmsNotifier` повністю зберігають контракт `Notifier`, не змінюють сенс поведінки і можуть безпечно використовуватися там, де очікується базовий тип.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняПриклад дотримання LSP - це ситуація, коли підклас **розширює поведінку батьківського класу, не порушуючи його контракт**, і може повністю замінити базовий клас у клієнтському коді. Нижче коректний приклад: базовий клас описує інтерфейс сповіщення, а підкласи реалізують різні способи відправки. --- ### Базовий клас (контракт) ```python class Notifier: def send(self, message: str): raise NotImplementedError ``` --- ### Підкласи, які дотримуються LSP ```python class EmailNotifier(Notifier): def send(self, message: str): print(f"Відправлення email: {message}") class SmsNotifier(Notifier): def send(self, message: str): print(f"Відправлення SMS: {message}") ``` --- ### Чому це дотримується LSP: 1. **Підкласи не змінюють сенс методу** `send()` Вони просто реалізують його по-своєму. Базовий контракт: «відправити повідомлення». Обидва підкласи дотримуються цього контракту. 2. **Підкласи не посилюють вхідні обмеження** Метод приймає будь-який рядок - і Email, і SMS приймають будь-який рядок. 3. **Підкласи не послаблюють гарантії результату** Обіцянка базового класу: *«операція відправки виконується»*. Обидві реалізації виконують це. 4. **Немає потреби перевіряти тип** Клієнтський код: ```python def notify(notifier: Notifier, msg): notifier.send(msg) ``` Можна підставити будь-який підклас: ```python notify(EmailNotifier(), "Привіт!") notify(SmsNotifier(), "Привіт!") ``` І програма буде працювати **коректно** і **передбачувано**, без змін. 5. **Не порушуються інваріанти** У базового класу взагалі немає стану, а отже, нащадки нічого не псують. --- ### Підсумок Класи `EmailNotifier` і `SmsNotifier` *повністю зберігають контракт* `Notifier`, не змінюють сенс поведінки і можуть безпечно використовуватися там, де очікується базовий тип - це і є коректне дотримання LSP.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.