Базові концепції ООП (абстракція, інкапсуляція, спадкування, поліморфізм)

Розділ: Основи мов програмування

📌 Про що ця тема


Об'єктно-орієнтоване програмування (ООП) — це спосіб організації коду навколо об'єктів, що поєднують дані й поведінку. На іспиті перевіряють розуміння чотирьох принципів ООП: абстракція, інкапсуляція, спадкування, поліморфізм. Ключове поняття — КЛАС і створений на його основі ОБ'ЄКТ.


📖 Головне


• Клас — це шаблон (опис), який задає поля (дані) та методи (дії). Об'єкт — конкретний екземпляр класу зі своїми значеннями полів.

• Поле (атрибут, властивість) — змінна всередині класу. Метод — функція всередині класу.

• АБСТРАКЦІЯ — виділення лише суттєвих характеристик об'єкта й приховування деталей. Ми описуємо «що робить» об'єкт, а не «як саме». Приклад: клас «Автомобіль» має метод «їхати», а внутрішню роботу двигуна ми не описуємо.

• ІНКАПСУЛЯЦІЯ — об'єднання даних і методів в одному класі + приховування внутрішніх даних від прямого доступу ззовні. Доступ дають через спеціальні методи.

• Модифікатори доступу: private (доступ лише всередині класу), public (доступ звідусіль), protected (клас і нащадки). Приховані поля читають/змінюють через методи get/set (геттери й сеттери).

• СПАДКУВАННЯ — створення нового класу (нащадка, похідного) на основі наявного (батьківського, базового). Нащадок отримує поля й методи батька та може додавати свої.

• Спадкування реалізує відношення «є різновидом»: клас «Кіт» є різновидом класу «Тварина».

• ПОЛІМОРФІЗМ — здатність методу з однаковою назвою працювати по-різному залежно від об'єкта. Нащадок може ПЕРЕВИЗНАЧИТИ (override) метод батька.

• Переваги ООП: повторне використання коду, легше супроводжувати й розширювати програму, структурованість.


🔢 Як це працює на прикладі


Створюємо клас «Тварина» з полем name та методом voice() (подає голос).

1. Абстракція: ми вирішили, що тварині важливі лише ім'я та вміння подавати голос — решту ігноруємо.

2. Інкапсуляція: поле name робимо private, а доступ даємо через getName() і setName().

3. Спадкування: клас «Собака» успадковує «Тварина», тож одразу має поле name.

4. Поліморфізм: у «Собака» перевизначаємо voice() так, щоб повертав «Гав», а в класі «Кіт» — «Мяу». Виклик animal.voice() дасть різний результат залежно від того, який це об'єкт.


⚠️ Типові помилки


• Плутають КЛАС і ОБ'ЄКТ: клас — опис, об'єкт — конкретний екземпляр у пам'яті.

• Плутають абстракцію та інкапсуляцію: абстракція — ЩО показати (суттєве), інкапсуляція — приховати доступ до даних і зібрати їх разом.

• Вважають, що нащадок — це копія батька; насправді він розширює/змінює його.

• Плутають перевантаження (overload — кілька методів з однаковою назвою й різними параметрами) та перевизначення (override — заміна методу батька в нащадку).

• Думають, що private-поля взагалі не можна використати ззовні — можна, але лише через public-методи.


🎯 Що завчити напам'ять


• Чотири принципи ООП: абстракція, інкапсуляція, спадкування, поліморфізм.

• Клас = шаблон, об'єкт = екземпляр.

• Модифікатори: private, public, protected.

• Інкапсуляція = об'єднання + приховування; доступ через get/set.

• Спадкування = «є різновидом»; поліморфізм = одна назва — різна поведінка.


🧠 Перевір себе


1. Чим клас відрізняється від об'єкта?

2. Який принцип ООП відповідає за приховування внутрішніх даних?

3. Що таке перевизначення методу (override)?

4. Яке відношення між класами реалізує спадкування?


Відповіді: 1 — клас це опис/шаблон, об'єкт це конкретний екземпляр класу; 2 — інкапсуляція; 3 — заміна методу батьківського класу власною реалізацією в класі-нащадку; 4 — «є різновидом» (нащадок є частковим випадком базового класу).

Перевірити себе на практиці

Прочитати — половина справи. Далі потрібні завдання цієї ж теми з розбором кожної відповіді: саме на них видно, чи справді тема закрита.