Страницы

понеділок, 8 серпня 2016 р.

Абстракція(Abstraction) в Java.

Абстракція - це відокремленя загальних характеристик, виключаючи набір незначних.
Наприклад, розглянемо випадок відправки електронної пошти. Складні деталі, такі що відбувається коли ви відправляєте електронну почту, який протокол використовується в вашому поштовому сервері та деякі інші приховані від користувача. Для відправки електронної пошти вам просто потрібно ввести текст повідомлення, додати адресу одержувача і натиснути відправити.
В об'єктно-орієнтованому програмуванні абстракція це процес приховування деталей реалізації від користувача, користувачеві надані тільки функціональні можливості. Іншими словами користувач матиме лише інформацію про те, що об'єкт робить замість того, як він це робить.
У Java абстракція досягається за допомогою абстрактних класів і інтерфейсів.
Коротко про абстрактний клас.
·     якщо клас який містить в своїй назві ключове слово "abstract" то він називається абстрактним класом.
·     абстрактні класи можуть містити а можуть і не містити абстрактні методи, тобто методи без тіла(public void get();)
·     якщо клас має принаймні один абстрактний метод, то клас мусить бути оголошений абстрактним.
·     неможна сторити обєкт класу, якщо він оголошений абстрактним.
·     щоб скористатись функціоналом абстрактного класу, ви повинні наслідуватись від нього, і забезпечити реалізацію абстрактних методів в дочірному класі(ви повинні реалізувати всі методи які помічені як абстракнті, інакше ваш дочірний клас також буде абстрактним).
Приклад.
Тут наведено приклад абстрактного класу. Щоб створити абстрактний клас, вам просто необхідно використати ключове слово "abstract" в оголошенні класу.
Ви можете помітити, що методи абстрактного класу Employee такі ж, як у нормальному Java-класі. Він містить три поля, сім методів, і один конструктор.
Тепер спробуємо створити екземпляр класу Employee і скомпілюємо наступний код:
Коли ми скомпілюємо цей клас то отримаємо повідомлення про помилку:

Employee.java:46: Employee is abstract; cannot be instantiated
      Employee e = new Employee("George W.", "Houston, TX", 43);
                   ^
1 error

Наслідування абстрактного класу:
Ми можемо наслідувати властивості класу Employee так само, як наслідується звичайний Java-клас, приклад нижче демонструє це:
Тут ми не можемо створити новий екземпляр Employee, але ми можемо створити екземпляр класу Salary і за допомогою екземпляру класу Salary ми можемо отримати доступ до всіх методів класу Employee, як це показано нижче.
Ми отримаємо наступний результат:
Constructing an Employee
Constructing an Employee
Call mailCheck using  Salary reference --
Within mailCheck of Salary class
Mailing check to Mohd Mohtashim with salary 3600.0

Call mailCheck using Employee reference--
Within mailCheck of Salary class
Mailing check to John Adams with salary 2400.

Абстрактні методи:
Якщо ви хочете щоб клас містив конкретний метод, але ви хочете щоб фактична реалізація цього методу, була визначена класах наслідниках, тоді ви можете оголосити такий метод в батьківському класі, і позначити його abstract.
·  "abstract" ключове слово використовується для оголошення методу як абстрактного(і позначення класу як абстрактного також).
·      ключове слово "abstract" завжди повинно бути перед ім'ям методу в оголошенні методу.
·   абстрактний метод складається з сигнатури методу, але без тіла методу, і після його оголошення ставиться крапка з комою, а не фігурні дужки.
Виглядає це так:
Оголошення методу абстрактним має два результати:
·     якщо клас має хоча б один абстрактний метод, то даний клас повинен бути визначений як абстрактний.
·     похідний клас зобов'язаний перевизначити і реалізувати всі абстрактні методи, які є у базовому абстрактному класі, або він також буде оголошений як абстрактний, і будь-який з їхніх класів нащадків повинні будуть перевизначити цей метод.

Примітка: В кінці кінців, клас нащадок буде повинен реалізувати абстрактний метод, в іншому випадку, ви отримаєте ієрархію абстрактних класів екземпляр класу яких не можна створити.

Якщо Salary розширює клас Employee, тоді він повинен реалізувати метод computePay(), як показано нижче:

Немає коментарів:

Дописати коментар