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