9.1.2. Базові концепції об’єктно-орієнтованого програмування: абстракція, інкапсуляція, спадкування, поліморфізм
9.1.2. Базові концепції об’єктно-орієнтованого програмування:
абстракція, інкапсуляція, спадкування, поліморфізм
Абстракція в ООП – це виділення загальних характеристик об’єктів, їхніх властивостей і методів, при ігноруванні деталей реалізації. Цей процес дає змогу створювати простіші моделі складних систем, які містять тільки необхідні елементи для розв’язання задачі.
Різновиди абстракції в ООП. В ООП класи та об’єкти є основними формами абстракції. Клас визначає загальні властивості та методи, які можуть бути використані об’єктами цього класу, а об’єкт є конкретною реалізацією класу і містить властивості та методи, визначені в класі. Вона дає змогу створювати об’єкти, які можуть бути використані в різних контекстах, не знаючи всіх деталей їхньої реалізації.
Для створення абстракції в ООП використовуються інтерфейси та абстрактні класи. Інтерфейс визначає тільки сигнатури методів, але не містить реалізації. Абстрактний клас може містити як абстрактні методи, так і реалізації методів, але не може бути інстантований безпосередньо.
Рівні абстракції в програмуванні включають фізичний рівень, рівень реалізації, рівень інтерфейсів і рівень поведінки.
Класи та об’єкти як основні форми абстракції в ООП визначають структуру та поведінку об’єктів, а об’єкти представляють конкретні екземпляри класів. Класи визначають властивості (атрибути) і дії (методи), які можуть бути виконані об’єктами цього класу. Інтерфейси та абстрактні класи є ще одним способом створення абстракції в ООП.
Приклади використання абстракції в ООП.
1. Приклад використання абстракції на рівні класів. Припустимо, у нас є клас “Тварина”, який має кілька спадкоємців: “Собака”, “Кішка”, “Корова”, “Кролик” тощо. Кожен спадкоємець має свої унікальні властивості та методи, але всі вони успадковують загальні властивості та методи від класу “Тварина”. Клас “Тварина” – це абстрактний клас, оскільки ми не створюємо його екземпляри безпосередньо, а використовуємо тільки для створення спадкоємців. Він надає абстракцію для всіх його спадкоємців, об’єднуючи їх під загальною назвою “Тварини”.
2. Приклад використання абстракції на рівні інтерфейсів. Інтерфейс – це абстрактний тип даних, що визначає деякий набір методів, які мають бути реалізовані в класах, що реалізують цей інтерфейс. Інтерфейси використовуються для опису функціональності без визначення конкретної реалізації. Припустимо, у нас є інтерфейс “Фігура”, який визначає метод “площа”. Класи “Коло”, “Квадрат” і “Прямокутник” можуть реалізувати цей інтерфейс і надавати свою власну реалізацію методу “площа”. Таким чином, ми можемо працювати з об’єктами різних класів, які реалізують інтерфейс “Фігура”, не знаючи конкретних деталей їхньої реалізації.
3. Приклад використання абстракції на рівні методів. Методи також можуть бути абстрактними. Абстрактний метод – це метод, який оголошений, але не має реалізації в абстрактному класі. Реалізація цього методу залишається для конкретних спадкоємців. Припустимо, у нас є абстрактний клас “Фігура”, який має абстрактний метод “периметр”. Класи “Коло”, “Квадрат” і “Прямокутник” успадковують клас “Фігура” і повинні реалізувати метод “периметр” відповідно до їхніх унікальних властивостей і форми.
Інкапсуляція — один з трьох основних механізмів об'єктно-орієнтованого програмування. Інкапсуляція досягається шляхом вказування, які класи можуть звертатися до членів об'єкта. Як наслідок, кожен об'єкт надає кожному іншому класу певний інтерфейс — члени, доступні іншим класам. Інкапсуляція потрібна для того, аби запобігти використанню користувачами інтерфейсу тих частин реалізації, які, швидше за все, будуть змінюватись. З принципу інкапсуляції безпосередньо виникає безліч паттернів GRASP. Наприклад, патерн GRASP “Information expert” – це пряма імплементація паттерна інкапсуляції.
Наслідування, успадкування (англ. inheritance) — один з принципів об'єктно-орієнтовного програмування, який дає класу можливість використовувати програмний код іншого (базового) класу, доповнюючи його своїми власними деталями реалізації. Іншими словами, під час наслідування відбувається отримання нового (похідного) класу, який містить програмний код базового класу з зазначенням власних особливостей використання. Наслідування належить до типу is-a відношень між класами. Наслідування є механізмом повторного використання коду (англ. code reuse) і сприяє незалежному розширенню програмного забезпечення через відкриті класи (англ. public classes) та інтерфейси (англ. interfaces).
Наслідування буває одиночне (просте) і множинне. Одиночне — це коли один або кілька класів наслідуються тільки від одного базового класу. Множинне наслідування — коли клас наслідується від декількох базових класів.
Поліморфізм — концепція в програмуванні та теорії типів, в основі якої лежить використання єдиного інтерфейсу для різнотипних сутностей або у використанні однакового символу для маніпуляцій над даними різного типу.
Поліморфізм — один з трьох найважливіших механізмів об'єктно-орієнтованого програмування. Поліморфізм дозволяє створювати абстрактніші програми та підвищити коефіцієнт повторного використання коду. Поліморфізм дозволяє створювати абстрактніші програми та підвищити коефіцієнт повторного використання коду.
Типи поліморфізму:
Спеціалізований поліморфізм — коли функції з однаковою назвою реалізовують різну логіку для різних типів вхідних параметрів. Підтримується в багатьох мовах програмування через перевантаження функцій.
Параметричний поліморфізм — коли код написаний без указування конкретного типу параметрів. В ООП це називається узагальнене програмування. Це основний тип поліморфізму в функційному програмуванні.
Поліморфізм підтипів — коли під одним ім'ям може використовуватись декілька типів похідних від одного базового. Основний тип поліморфізму в ООП.
Опорний конспект
Базові концепції об’єктно-орієнтованого програмування (ООП)
1. Абстракція (Abstraction). Виділення суттєвих характеристик об’єкта та приховування другорядних деталей.
Суть: працюємо з уявною моделлю, не заглиблюючись у реалізацію.
Мета: спростити складність системи.
Приклад (C++):
class Animal {
public:
virtual void makeSound() = 0; // абстрактний метод
};
Ключові слова: abstract, interface, virtual, pure virtual
2. Інкапсуляція (Encapsulation). Об’єднання даних та методів, які з ними працюють, у межах одного класу; контроль доступу до внутрішнього стану об’єкта.
Суть: доступ до змінних — лише через публічні методи (гетери/сетери).
Мета: захист від помилок, приховування реалізації (інформаційна безпека).
Приклад (C++):
class Account {
private:
double balance;
public:
void setBalance(double b) { balance = b; }
double getBalance() { return balance; }
};
Ключові слова: модифікатори доступу: private, protected, public
3. Спадкування (Inheritance). Механізм, за допомогою якого один клас (похідний) може наслідувати властивості та методи іншого класу (базового).
Суть: дозволяє створювати нові класи на основі вже існуючих.
Мета: повторне використання коду та логіки.
Приклад (C++):
class Animal {
public:
void eat() { cout << "Eating..."; }
};
class Dog : public Animal {
public:
void bark() { cout << "Barking..."; }
};
Ключові слова: типи спадкування: public, protected, private
4. Поліморфізм (Polymorphism). Здатність одного інтерфейсу набувати різних форм (реалізацій).
Види:
- Скомпільований (compile-time / static): перевантаження функцій (function overloading), операторів.
- Динамічний (run-time / dynamic): перевизначення методів у спадкоємцях (через virtual).
Приклад (C++):
class Animal {
public:
virtual void speak() { cout << "Animal sound"; }
};
class Dog : public Animal {
public:
void speak() override { cout << "Woof"; }
};
| Концепція | Суть | Мета | Ключові елементи |
| Абстракція | Приховування складності | Спрощення | Інтерфейси, абстрактні класи |
| Інкапсуляція | Обмеження доступу | Захист, безпека | Модифікатори доступу |
| Спадкування | Наслідування властивостей | Повторне використання | extends, : |
| Поліморфізм | Різні реалізації одного інтерфейсу | Гнучкість | virtual, override |
Підсумок для ЄФВВ:
Об'єктно-орієнтоване програмування базується на чотирьох основних принципах:
- Абстракція — приховує деталі.
- Інкапсуляція — захищає дані.
- Спадкування — забезпечує повторне використання.
- Поліморфізм — надає гнучкість у виклику методів.
Шрифти
Розмір шрифта
Колір тексту
Колір тла
Кернінг шрифтів
Видимість картинок
Інтервал між літерами
Висота рядка
Виділити посилання
Вирівнювання тексту
Ширина абзацу