Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Як реалізувати OCP через успадкування?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**OCP через успадкування** реалізується так, що базовий клас лишається незмінним, а нова поведінка додається у вигляді підкласів, які перевизначають потрібні методи. **Ключове:** успадкування реалізує OCP, коли базовий клас задає контракт, а нова поведінка додається виключно шляхом створення нових підкласів, не змінюючи наявні.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняOCP через успадкування реалізується так, що **базовий клас лишається незмінним**, а нова поведінка додається у вигляді **підкласів**, які перевизначають потрібні методи. Таким чином, розширення відбувається за рахунок нових класів, а не зміни старих. Детальніше: ## 1. Базовий клас задає спільний інтерфейс У ньому визначаються методи, які дочірні класи повинні реалізувати. Цей клас лишається «закритим для модифікації»: його код не змінюється при появі нових варіантів поведінки. ## 2. Нові типи поведінки створюються через нових нащадків Коли потрібен новий функціонал, створюється новий підклас, який реалізує або перевизначає потрібні методи. Це забезпечує «відкритість для розширення»: поведінка системи зростає, не змінюючи наявні файли. ## 3. Клієнтський код працює через базовий тип Незалежно від того, скільки підкласів існує, зовнішній код використовує тільки базовий інтерфейс. Це означає, що додавання нових реалізацій не вимагає змін у логіці, яка викликає ці об'єкти. Приклад: ```python class PaymentMethod: def pay(self, amount): raise NotImplementedError ``` Дочірні класи: ```python class CardPayment(PaymentMethod): def pay(self, amount): print("Оплата карткою:", amount) class PayPalPayment(PaymentMethod): def pay(self, amount): print("Оплата через PayPal:", amount) ``` Розширення: ```python class CryptoPayment(PaymentMethod): def pay(self, amount): print("Оплата криптовалютою:", amount) ``` ## Чому це відповідає OCP 1. **Базовий клас не змінювався** Він лишився закритим для модифікації. 2. **Нова поведінка додана через нового нащадка** CryptoPayment - новий варіант, який не вимагає переписування старих класів. 3. **Клієнтський код використовує єдиний інтерфейс** Наприклад: ```python def checkout(payment: PaymentMethod, amount): payment.pay(amount) ``` Цей код не потребує змін при додаванні нових способів оплати. Підсумок: **Успадкування реалізує OCP, коли базовий клас задає контракт, а нова поведінка додається виключно шляхом створення нових підкласів, не змінюючи наявні.**Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.