Абстракція Принципів ООП
Абстракція
Отже, ми дійшли до останнього, але дуже важливого принципу 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. Як абстракція сприяє підтримці коду?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you explain the difference between abstraction and encapsulation?
Can you give more real-world examples of abstraction in Java?
How do interfaces relate to abstraction in OOP?
Awesome!
Completion rate improved to 4.76
Абстракція Принципів ООП
Свайпніть щоб показати меню
Абстракція
Отже, ми дійшли до останнього, але дуже важливого принципу 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. Як абстракція сприяє підтримці коду?
Дякуємо за ваш відгук!