Абстракція Принципів ООП
Свайпніть щоб показати меню
Абстракція
Отже, ми дійшли до останнього, але дуже важливого принципу OOP: Абстракція. Слово «абстракція» звучить досить абстрактно, і коротко цей принцип означає, що ми повинні залежати від абстракції, а не від конкретної реалізації. Проте зараз це може здаватися складним. Почнемо з визначення:
Наприклад, у нас є клас Person,, і від нього наслідуються різні класи. Person має різні поля та методи, спільні для всіх класів. Однак, коли у нас є клас BasketballPlayer,, характеристика height стає вирішальною, тоді як для класу Driver height є несуттєвою і неважливою. Саме тут і застосовується абстракція. Наслідуючи абстракцію, ми можемо зробити параметр height необов’язковим, щоб не використовувати його там, де це не потрібно.
Це може здаватися складним, тому перейдемо до прикладу:
Car.java
123456789public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
Клас Car не представляє щось конкретне. Не існує просто Car; є седани, вантажівки, трактори. Тому ми будемо залежати від абстракції під назвою Car. Щоб спростити:
Car — це шаблон, на основі якого створюються конкретні класи автомобілів.
Зверніть увагу на синтаксис:
public abstract class className{ }.
Це синтаксис для оголошення абстрактного класу. Також зверніть увагу на синтаксис оголошення абстрактного методу:
public abstract returnValue methodName();
Абстрактний метод не має тіла; це його головна характеристика. Підкласи абстрактного класу будуть перевизначати цей абстрактний метод, щоб визначити власну реалізацію, використовуючи поліморфізм.
Розглянемо детальніше, що таке абстрактний клас:
Зверніть увагу, що не можна створити об'єкт абстрактного класу; це призведе до помилки:
Абстрактні класи звільняють нас від роботи лише з «об'єктами»; вони надають базовий стан і поведінку. Візьмемо для прикладу автомобілі: кожен автомобіль повинен мати модель, рік випуску, максимальну швидкість та колір. Вони також повинні мати можливість рухатись і зупинятись. Це все; далі ви створюєте свої конкретні класи на основі цього абстрактного шаблону.
Правила створення абстрактного класу
- Абстрактний клас — це клас, який містить щонайменше один абстрактний метод. Ви можете створити абстрактний клас без абстрактних методів, але тоді він не матиме сенсу. Ви не зможете створити об'єкти абстрактного класу;
- Абстрактні методи можуть існувати лише в абстрактному класі; не можна створювати абстрактні методи поза абстрактним класом;
- Методи в абстрактному класі можуть бути як абстрактними, так і з реалізацією;
- Клас, який наслідує абстрактний клас, повинен перевизначити всі абстрактні методи;
- Можна наслідуватися максимум від одного класу (абстрактного чи звичайного);
- Абстрактний клас має представляти спільні властивості та поведінку своїх класів-нащадків. Детальніше це розглянемо під час вивчення принципів SOLID.
Розглянемо приклад, щоб зрозуміти, як підкласи повинні перевизначати абстрактні методи, наслідуючи абстрактний клас, на прикладі дочірнього класу Truck:
Ось код із скріншоту, переписаний для кращої читабельності та зрозумілості:
Car.java
Truck.java
Main.java
123456789public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
Розгляньмо детальніше, що написано вище:
-
Перший слайд: Створюється підклас
Truck, який успадковується від абстрактного класуCar. IDE підказує реалізувати обов'язкові методи; -
Другий слайд: Перевизначаються необхідні методи. Наприклад, буде вказано, що
Truckпочав рух і потім зупинився; -
Третій слайд: Створюється об'єкт у методі
main. Зверніть увагу на використаний синтаксис:Car name = new Truck();. Створення об'єкта починається через абстракцію і завершується конкретною реалізацією. Це називається композицією. Далі за потреби присвоюються значення полям і викликаються перевизначені методи.
Voilà! Якщо все зрозуміло, ви навчилися використовувати абстрактний клас!
Підсумок
Абстракція — це, ймовірно, найскладніший для розуміння принцип ООП, і цілком можливо, що зараз ви ще не все засвоїли. Але не думайте, що ви в цьому самі. Абстракція — це концепція, яку спочатку важко зрозуміти більшості розробників. З часом ви краще зрозумієте, як ефективно працювати з абстракцією та абстрактними класами. Абстракція — це ключовий принцип, оскільки вона дозволяє робити програми розширюваними та дуже гнучкими.
1. Що таке абстракція в об'єктно-орієнтованому програмуванні?
2. Які з наведених тверджень є правильними щодо абстракції?
3. Яке призначення абстрактного класу в Java?
4. Як абстракція сприяє підтримці коду?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат