what is abstraction java learn with examples
Цей підручник пояснює, що таке абстракція в Java, а також приклади програмування. Ви також дізнаєтесь, що таке абстрактний клас і чому він використовується:
У цій серії JAVA ми обговоримо важливі особливості об’єктно-орієнтованого програмування (ООП), які також відомі як чотири стовпи, тобто Абстракція, Інкапсуляція, Спадкування та Поліморфізм.
алгоритм сортування вставки c ++
Перший стовп ООП - “Абстракція”. 'Абстракція - це процес відбору даних, щоб показати користувачеві лише відповідну інформацію'.
=> Подивіться тут посібник для початківців Java.
Що ви дізнаєтесь:
Абстракція в ООП
Простіше кажучи, абстракція «відображає» лише відповідні атрибути об’єктів і «приховує» непотрібні деталі.
Наприклад, коли ми керуємо автомобілем, нас турбує лише керування автомобілем, як запуск / зупинка автомобіля, прискорення / розрив тощо. Нас не турбує те, як діє власне механізм запуску / зупинки або процес прискорення / гальмування. Нас ці деталі просто не цікавлять.
Нас турбує «абстрактний» погляд на ці операції, який допоможе нам просунути машину вперед і дійти до пункту призначення. Це простий приклад абстракції.
Таким чином, автомобіль має всі механізми та процеси на місці, але з точки зору кінцевого користувача, тобто з точки зору водія автомобіля, він / вона буде зацікавлений лише у абстрактному вигляді цих процесів.
Абстракція зменшує зусилля з програмування, а отже, і складність. Кінцевого користувача, який використовує програму, не повинно турбувати питання про те, як реалізована певна функція. Він / вона може просто використовувати функції, як потрібно.
Таким чином, в абстракції ми маємо справу з ідеями, а не з подіями. Це означає, що ми приховуємо деталі реалізації від користувача і надаємо кінцевому користувачеві лише функціонал. Таким чином, користувач буде знати лише 'що він робить', а не 'як це робить'.
Абстракція в ООП може бути двох типів.
# 1) Абстракція даних
В абстракції даних ми в основному створюємо складні типи даних і приховуємо їх реалізацію. Ми виставляємо лише операції з маніпулювання цими типами даних, не вдаючись до деталей їх реалізації.
Однією з переваг цього підходу є те, що ми можемо змінити реалізацію в будь-який час, не змінюючи поведінку, яку зазнає користувач.
# 2) Контрольна абстракція
Абстракція управління збирає всі оперативні елементи управління, які є частиною програми, і представляє їх як одиницю. Ця функція використовується, коли нам доводиться виконувати робочу функцію за допомогою цього блоку управління.
Абстракція управління утворює основну одиницю структурованого програмування, і за допомогою абстракції управління ми можемо визначити прості функції до складних фреймворків.
Що таке абстракція в Java
Оскільки Java є мовою ООП, абстракція може розглядатися як одна з важливих особливостей та будівельних блоків мови Java. У Java абстракція реалізована за допомогою абстрактного класу та інтерфейсу.
Тож як ми реалізуємо абстракцію на Java? Java пропонує модифікатор, що не має доступу, “abstract” для реалізації абстракції. Цей абстрактний модифікатор можна використовувати з класами та методами, але не зі змінними.
Інтерфейс забезпечує повну абстракцію, тобто він надає лише прототипи методів, а не їх реалізацію. Абстрактний клас забезпечує часткову абстракцію, в якій не слід застосовувати принаймні один метод.
У цьому підручнику ми детально обговоримо абстракцію з абстрактними класами. Ми детально вивчимо інтерфейси в наступних навчальних посібниках.
Приклад абстракції Java
Давайте розглянемо наведений нижче приклад.
//abstract class abstract class Car{ abstract void accelerate(); } //concrete class class Suzuki extends Car{ void accelerate(){ System.out.println('Suzuki::accelerate'); } } class Main{ public static void main(String args()){ Car obj = new Suzuki(); //Car object =>contents of Suzuki obj.accelerate(); //call the method } }
Вихід:
Простий приклад абстракції, наведений вище, має клас Car. У цьому класі Car ми маємо абстрактний метод прискорення (). Тоді ми успадковуємо цей клас у класі Suzuki. Всередині класу Suzuki ми застосовуємо метод акселерації.
Наведений вище приклад просто показує спосіб, яким абстрактний клас визначається, успадковується і потім використовується в програмі.
Що таке абстрактний клас Java
Ми вже згадували, що Java реалізує абстракцію з використанням абстрактних класів та інтерфейсів. Давайте спочатку вивчимо все про абстрактний клас.
Абстрактний клас може бути визначений як клас, оголошений із ключовим словом 'абстрактний', і має обмеження, що його неможливо створити.
Абстрактний клас може мати або не мати абстрактних методів (метод без реалізації). Що стосується JVM, абстрактний клас - це неповний клас, який не має повноцінної поведінки.
Загальний синтаксис абстрактного класу наведено нижче:
abstract class { public abstract void abstractMethod(); public void normalMethod() { //method body } }
Як показано в синтаксисі вищезазначеного абстрактного класу, ми можемо мати як абстрактні, так і не абстрактні методи в абстрактному класі. Ключове слово ‘abstract’ передує оголошенню класу.
У двох словах, абстрактний клас можна описати, як показано нижче.
Абстрактний метод на Java
Абстрактний метод - це метод, якому передує ключове слово 'abstract' без будь-якої реалізації. Абстрактний метод оголошується всередині абстрактного класу.
Абстрактний метод - це той, що робить клас неповним, оскільки він не має реалізації. Отже, коли ми включаємо абстрактний метод до класу, природно клас стає неповним.
Ми можемо використовувати абстрактний метод, реалізуючи його в підкласі, тобто клас успадковує абстрактний клас, а потім реалізує або надає код для всіх абстрактних методів, оголошених в абстрактному класі, замінюючи їх.
Таким чином, стає обов'язковим замінити абстрактний метод у підкласі. Якщо абстрактний метод також не реалізований у підкласі, тоді ми повинні оголосити підклас також 'абстрактним'.
Загальна декларація абстрактного методу:
реферат порожнеча methodName (список_параметрів);
Під час написання абстрактного методу нам слід пам’ятати наступні правила:
- Клас, що містить один або кілька абстрактних методів, є абстрактним класом.
- Деякі інші ключові слова не слід використовувати з абстрактним ключовим словом.
Таким чином, наступні комбінації є незаконними в Java.
- остаточний
- абстрактний рідний
- абстрактний статичний
- реферат приватний
- реферат синхронізований
- реферат Strogifp
Давайте реалізуємо приклад абстрактного класу та абстрактного методу.
//abstract class abstract class Bank{ abstract int getInterestRate(); } //concrete class class Citi extends Bank{ int getInterestRate(){return 7;} } //concrete class class HSBC extends Bank{ int getInterestRate(){return 6;} } class Main{ public static void main(String args()){ Bank b; b = new Citi (); // concrete class object System.out.println('Citi Rate of Interest is: '+b.getInterestRate()+'%'); b = new HSBC (); // concrete class object System.out.println('HSBC Rate of Interest is: '+b.getInterestRate()+'%'); } }
Вихід:
У наведеному вище прикладі ми маємо клас Bank. У цьому класі ми маємо абстрактний метод getInterestRate (). Потім ми оголошуємо два класи - ICICI та BOI, які успадковуються від класу Bank. Обидва ці класи реалізують метод getInterestRate () шляхом повернення відповідних процентних ставок.
Тоді в основному методі ми створюємо об’єкт банку. По-перше, об'єкт банку містить об'єкт класу ICICI і відображає процентну ставку. Далі створюється об’єкт BOI, на якому відображається процентна ставка.
Таким чином, ми можемо припустити, що клас Банку - це свого роду ескіз або структура, яка дозволяє нам отримати процентну ставку. З цієї структури ми можемо створити стільки конкретних класів, скільки хочемо, а потім отримати відповідні процентні ставки для кожного об’єкта банку (це показано в основному методі).
Що таке абстрактний клас у Java
Чому ми використовуємо абстрактний клас, коли насправді він не має власної реалізації?
Разом з відповіддю на вищезазначене питання ми також проілюструємо, як використовувати абстрактний клас у прикладі, що далі.
Давайте розглянемо приклад транспортних засобів. Ми знаємо, що транспортні засоби можуть бути багатьох типів. Ми можемо мати автомобілі, скутери, велосипеди, мопеди, автобуси тощо. Хоча існує багато типів транспортних засобів, вони мають деякі властивості або властивості, загальні для всіх транспортних засобів, незалежно від їх типу.
Наприклад, кожен транспортний засіб має модель, номер шасі, колір і т. д. Кожен із них має такі функції, як запуск, зупинка, прискорення, гальмування тощо. Тепер кожен транспортний засіб матиме вищезазначені властивості та методи, загальні для інших. У той же час, як користувач транспортного засобу, нас можуть не цікавити деякі аспекти.
Наприклад, якщо людина керує автомобілем, то, що її зацікавить, це просто запустити і зупинити транспортний засіб або прискорити або загальмувати транспортний засіб. Йому / їй не буде цікаво знати, як транспорт заводиться або зупиняється. Нас цікавить лише абстрактна робота функцій, а не їх деталі.
Тепер, якщо ми хочемо представити наведений вище приклад системи в програмному додатку, то як же ми її розробляємо? Перш за все, ми реалізуємо певну абстракцію. Тепер ми знаємо, що деякі функції є загальними, але в залежності від кожної моделі реалізація цих функцій буде різною.
Для початку ми оголошуємо абстрактний клас «Автомобіль».
Ми показали цю систему нижче:
Отже, ми матимемо абстрактний клас Автомобіль, і буде конкретний клас, що представляє кожну модель транспортного засобу. Для ілюстрації ми використали лише три моделі, тобто автомобіль, велосипед та скутер.
Нижче наведено ієрархію класів із наведеної системи.
abstract class Vehicle{ abstract void start () ; abstract void stop (); abstract void accelerate (); abstract void brake (); } class Car extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} } class Bike extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} } class Scooter extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} }
Тож ми матимемо клас абстрактних автомобілів та три класи Автомобіль, Велосипед та Скутер. Кожен із цих класів розширить клас Vehicle і замінить кожен з абстрактних методів.
Таким чином, загалом, коли нам доводиться представляти таку систему, яка має загальні методи або операції для представлення, а потім, щоб представити користувачеві лише зовнішню перспективу, ми йдемо на абстракцію. В результаті ми вилучаємо загальні методи і представляємо їх як абстрактні методи та збираємо ці абстрактні методи в загальний абстрактний клас.
Отримавши схему системи, представлену як абстрактний клас, а операції як абстрактні методи, ми можемо потім вивести будь-яку кількість класів із даного абстрактного класу і замінити абстрактні методи для реалізації цих операцій для кожного класу.
Таким чином стає корисним проектувати систему.
Абстрактний клас та інтерфейс
Вище ми бачили абстрактний клас. Інтерфейси - це ще інші будівельні блоки, що реалізують абстракцію. Інтерфейси - це контракти, і класи, що реалізують інтерфейс, повинні виконувати ці контракти.
Контракти в інтерфейсах - це не що інше, як методи, які не реалізовані. Усередині інтерфейсів ми матимемо лише прототипи методів. Всередині інтерфейсів не буде єдиної реалізації методів.
Якщо ми маємо декларацію інтерфейсу наступним чином:
public interface interfaceA{ void myInterfaceMethod (); }
Тоді будь-який клас, який реалізує interfaceA, повинен замінити ‘myInterfaceMethod’.
Якщо взагалі ми не замінюємо метод у класі, то цей клас представляється як абстрактний.
веб-сайти, які дозволяють завантажувати відео з YouTube
abstract class TestClass implements interfaceA{ // not a compulsion to override myInterfaceMethod. }
Пізніше у нас буде окремий підручник з інтерфейсу.
Далі обговоримо деякі відмінності між абстрактними класами та інтерфейсами в Java.
Різниця між абстрактним класом та інтерфейсом
Абстрактний клас | Інтерфейс |
---|---|
Абстрактний клас може мати приватні або захищені члени даних, крім загальнодоступних. | Учасники інтерфейсу за замовчуванням є загальнодоступними. |
Абстрактний клас може мати абстрактні та / або не абстрактні методи. | Інтерфейс може мати лише абстрактні методи. |
Реферат може містити або не містити кінцевих змінних. | Інтерфейси можуть остаточні змінні як змінні за замовчуванням. |
Абстрактний клас може мати кінцеві, статичні або нестатичні або не кінцеві змінні. | Інтерфейси можуть мати лише кінцеві та статичні змінні. |
Абстрактний клас може забезпечити реалізацію інтерфейсу. | Інтерфейси не можуть реалізувати абстрактний клас. |
Абстрактний клас успадковується за допомогою ключового слова “extends”. | Інтерфейс реалізований за допомогою ключового слова “implements”. |
Абстрактний клас може розширити інші класи або реалізувати кілька інтерфейсів. | Інтерфейс може реалізовувати лише інший інтерфейс. |
Коли використовувати абстрактний клас та інтерфейс у Java
Рішення про те, коли використовувати абстрактний клас і коли використовувати інтерфейси у програмі Java, слід приймати розумно, ретельно зрозумівши проблему. Є два аспекти, які ми повинні розглянути, як показано нижче.
Анотація занять з частковою поведінкою
Ми знаємо, що абстрактні класи не можуть бути повністю реалізовані менше. Вони можуть мати часткову поведінку. З іншого боку, інтерфейси не мають жодної реалізації. Отже, коли нам доводиться вибирати між абстрактним класом та реалізацією, тоді нам потрібно врахувати цей аспект нашого додатку.
Це означає, що ми повинні спочатку вирішити, чи має додаток, який ми розробляємо, загальну часткову реалізацію, яку ми можемо розділити в абстрактному класі.
Наприклад, вважаємо, що ми розробляємо веб-додаток. Для цього нам доведеться використовувати деякі веб-технології, такі як Servlet, REST API тощо. Тепер кожна з цих веб-технологій має деякі методики або кроки, які мають бути реалізовані незалежно від програми, яку ми розробляємо. Потім ми створюємо наш індивідуальний додаток.
Тож у цьому випадку певний код, який веб-технологія повинна виконувати, може бути поміщений в абстрактний клас. Чи можемо ми мати інтерфейс для цього? Ні. Це тому, що інтерфейс не може мати реалізацію.
Інтерфейси лише за контрактом
Ми знаємо, що інтерфейси мають контракти або методи, які є його частиною. Ці методи є лише прототипами. Ми повинні реалізувати ці інтерфейси в класі, а потім замінити методи.
Тепер розглянемо інтерфейс Map Java Collections Framework. Багато класів, таких як HashMap, TreeMap, HashTable тощо, реалізують цей інтерфейс. Кожен із цих класів має різну реалізацію. Вони не мають загальної поведінки, яку можна представити в абстрактному класі.
Отже, що ми робимо, ми розробляємо інтерфейс з прототипами методів, а потім реалізуємо кожен із класів.
Таким чином, ми повинні правильно зважити кожен фактор, перш ніж обирати абстрактний клас та інтерфейс.
Різниця між абстракцією та інкапсуляцією
Давайте обговоримо деякі відмінності між абстракцією та ще однією важливою особливістю ООП, тобто інкапсуляцією.
Абстракція | Капсуляція |
---|---|
Процес отримання та абстрагування інформації | Процес прив'язки інформації. |
Техніка абстракції знаходиться на рівні дизайну або інтерфейсу. | Механізм інкапсуляції знаходиться на рівні реалізації. |
Абстракція приховує деталі. | Інкапсуляція пов'язує інформацію в одному блоці, забезпечуючи інформаційну безпеку. |
Абстракція реалізована за допомогою абстрактних класів та інтерфейсів. | Модифікатори доступу, а саме загальнодоступні, приватні та захищені, а за замовчуванням відіграють роль в інкапсуляції. |
В абстракції користувачеві представлений єдиний абстрактний вигляд, тоді як складні та докладні дані приховані від користувача. | При інкапсуляції дані об’єднуються як одиниця, і їх можна захистити або зробити доступними за допомогою модифікаторів доступу та методів getter та setter. |
Часті запитання
Q # 1) Чи абстракція та дані приховують однаково?
Відповідь: Ні, абстракція та приховування даних - це не те саме. Але обидві важливі особливості об’єктно-орієнтованого програмування. Хоча абстракція - це процес приховування фонових деталей, приховування даних - це техніка ізоляції даних від прямого доступу.
Питання 2) Які переваги абстракції?
Відповідь: Нижче наведено кілька переваг абстракції:
- Приховуючи фонові деталі та надаючи користувачеві лише абстрактний вигляд, абстракція робить код простішим і читабельнішим.
- Оскільки абстракція захищає зайві деталі, це робить код меншим.
- Обслуговування коду може стати складним і складним без абстрагування.
Q # 3) Чому абстракція так важлива?
Відповідь: Абстракція дозволяє нам приховувати деталі фону, які є важливими і можуть призвести до хаосу, якщо проникнути у світ. Приховуючи фонові деталі та надаючи користувачеві лише необхідний інтерфейс, абстракція спрощує програми.
Q # 4) Поясніть абстракцію на прикладі в реальному часі.
Відповідь: Є багато прикладів абстракції в режимі реального часу, включаючи геометричні фігури, транспортні засоби тощо. Ще одним прикладом є банкомат (автоматизована касова машина). Банкомат підтримує такі операції, як зняття готівки, перевірка балансу, переказ грошей тощо. Але ми не знаємо, як ці операції працюють внутрішньо.
Нам надається лише монітор з користувацьким інтерфейсом для вибору та виконання необхідних операцій.
Q # 5) Чи можемо ми досягти абстракції без інкапсуляції?
Відповідь: Абстракція захищає деталі реалізації, а інкапсуляція приховує деталі об’єкта. Об'єкт є абстрактною формою реального світу, а його деталі приховані за допомогою інкапсуляції. Таким чином, для абстракції потрібна інкапсуляція.
Висновок
У цьому підручнику ми детально обговорили абстракцію на Java. Абстракція - це техніка приховування непотрібних деталей від користувача. Користувачеві надається доступ лише до релевантних деталей. Операції на транспортних засобах або операції з банкоматами є класичними прикладами абстракцій у реальному світі.
Коли ми використовуємо банкомат, ми зацікавлені лише у здійсненні таких операцій, як зняття готівки тощо, без необхідності знати подробиці про те, як саме ця операція виконується внутрішньо.
Java забезпечує абстракцію через абстрактні класи та інтерфейси. Хоча інтерфейси забезпечують 100% абстракцію, абстрактні класи забезпечують часткову абстракцію. Вибір між інтерфейсами та абстрактними класами слід робити залежно від програми, що розробляється, а також від того, яка інформація має бути доступною для користувача.
У цьому посібнику ми також обговорили абстрактні методи, а також відмінності між абстрактними класами та інтерфейсами.
=> Перевірте ВСІ підручники Java тут.
Рекомендована література
- Інтерфейс Java та підручник з абстрактних класів із прикладами
- Java Integer та клас Java BigInteger з прикладами
- Підручник з класу сканера Java із прикладами
- Що таке Java Java | Підручник з класу Java Vector з прикладами
- Java Enum: Підручник з перелічення Java з прикладами
- Основи Java: Синтаксис Java, клас Java та основні концепції Java
- Підручник JAVA для початківців: 100+ практичних відео-підручників Java
- Java Iterator: Навчіться використовувати ітератори в Java на прикладах