Ти тут

Абстрактний клас і метод: опис, характеристики та особливості. Чим відрізняється абстрактний клас від інтерфейсу

Кожен, хто має хоч мінімальні знання в програмуванні, задавався питанням про те, навіщо існують абстрактні базові класи. Яке їхнє призначення? Як створити абстрактний клас? Які переваги вони дають на практиці? Навіщо вони потрібні в програмуванні і які особливості їх реалізації необхідно враховувати?

абстрактні класи

абстрактний класТак в програмуванні називають одиницю програмного коду, на основі якої не можуть створюватися об`єкти. Слід зазначити, що спадкоємці даного класу можуть бути не абстрактними. Тому створення об`єктів на їх основі є цілком можливим. Якщо розглядати приклад з Java, то побудуємо таку модель: ми можемо описати конструктори в класі А. Але ось скористатися ними ми не зможемо. Виходом з цієї ситуації є оголошення якийсь змінної як посилання. Причому необхідно чітко прописати, щоб вона вказувала на об`єкт класу А. А ось як це можна зробити? У цьому нам допоможе приведення. При цьому необхідно враховувати, що клас-батько завжди вважається більш універсальним, ніж нащадок. У багатьох мовах програмування приведення використовується автоматично. Але якщо немає впевненості в наявності такого механізму, значить, необхідно явно вказати посилання на об`єкт.

абстрактні методи

Що вони собою являють? Абстрактними називають ті методи, які не мають реалізації в розглянутому класі. Так, після круглих дужок (в яких перераховуються використовувані в них аргументи) ставлять не відкривають фігурні (після чого розміщується блок опису методу), а тільки крапку з комою. Таким чином, в даному випадку відсутня інформація про те, що він робить. Тут можна задати питання: "А навіщо метод без реалізації?" Адже він не підлягає використанню! Звичайно, в тому класі, де він був описаний, таке не є можливим. А ось якщо розглядати цю ситуацію з точки зору нащадка, то його можна буде викликати. І функціонувати він буде по конкретному опису, наявного в даному класі.

Особливості абстрактних методів



створити абстрактний класІснують обмеження в їх використанні. Розглянемо це на прикладі мови програмування Java. Тут є така вимога: якщо в класі є хоча б один такий метод, то він обов`язково повинен бути абстрактним. А в яких випадках доречно використовувати такі конструкції? Давайте розберемося з цим на прикладі класів домашніх тварин. Для початку слід усвідомити, що немає такого звуку, який би видавали вони все. Тому в найзагальнішому класі не задається реалізація методу звучання. Але для нього створюється тіло, яке відокремлено за допомогою блоків. А вже в наступному, коли буде створюватися клас собаки, кота чи хом`ячка, буде прописуватися окремий метод для нього, в рамках якого будуть розкриватися все особливості.

інтерфейс

чим відрізняється абстрактний класУ програмуванні створено багато інструментів, мета яких - допомогти людині зробити продукт гарної якості. І в рамках даної теми необхідно приділити увагу і цьому аспекту, щоб кожен знав відміну абстрактного класу від інтерфейсу. Так, особливістю останнього є те, що у нього не може бути властивостей, і у методів не визначені тіла. Досліджуючи, чим відрізняється абстрактний клас від інтерфейсу, слід зупинитися ще на одній особливості. Так, перший успадковується, тоді як другий - реалізується. Людині недосвідченому може здатися це несуттєвим. Але справа в тому, що успадковуватися може тільки один клас, а реалізовуватися - хоч греблю гати. Ось чим відрізняється інтерфейс від абстрактного класу. Java має ще ті особливості, що в ньому можуть бути описані виключно абстрактні публічні методи і статичні константи. Але при цьому інтерфейси також можуть успадковуватися. При цьому необхідно вказувати, що використовуються оператори публічні за допомогою public.

Множинне спадкування інтерфейсів



чим відрізняється абстрактний клас від інтерфейсуТака функція не є доступною для класів у багатьох мовах програмування (наприклад, в розглянутому нами Java). Це пов`язано з виникненням ряду проблем. Серед таких вказують на неоднозначність, які виникають при спадкуванні. Це і послужило причиною введення множинного спадкоємства інтерфейсів. Це частково вирішує наявні проблеми, але не всі. Так, завдяки принципам інкапсуляції і поліморфізму, інтерфейси можуть бути успішно реалізовані в різних класах за різними методиками (хоча вони і будуть володіти одним і тим же ім`ям). Але не варто забувати і про наявні проблеми. Так, при роботі з декількома інтерфейсами доведеться завжди вказувати, кого ж ми маємо на увазі. Також проблеми будуть і при спробі працювати з двома однойменними методами - в такому випадку ними неможливо буде скористатися. Тому на такі випадки необхідно подбати про наявність загальної реалізації.

абстрактні дані

абстрактний клас і інтерфейсЦе поняття ключове в програмуванні. В даному випадку під абстракцією розуміють незалежний розгляд і розподіл інтерфейсу і його реалізації. Давайте розглянемо приклад. У нас є телевізор, який є об`єктом або модулем. Він має інтерфейс. У цій іпостасі виступають засоби управління ним, а також відтворення звуку і зображення. Чим досконаліший інтерфейс застосовується, тим зручніше телевізор в процесі використання. Ми можемо перемикати програми, натискаючи на якісь кнопки. При цьому немає потреби думати про фізичні процеси в телевізорі. Про них піклуються фахівці, які збирають пристрій. Нас як користувачів цікавлять тільки властивості. Повертаючись до програмування, можна сказати, що ними за такою аналогією є інтерфейс і реалізація. Також, якщо людина впевнена в своїх знаннях, то він може «зняти» кришку у нашого гіпотетичного телевізора і вдосконалити його. Хоча це може призводити до локальних успіхів, в більшості випадків кінцевий результат негативний. Тому в програмуванні підтримується заборона доступу і приховування внутрішніх компонентів для абстрактних даних. Принцип цього механізму передбачає наявність способів запобігання навмисного або випадкового зміни внутрішніх компонентів. І коли говорять про абстрактні типи даних, то мають на увазі їх сукупність з безліччю операцій, які можуть бути виконані над ними.

об`єкти

Ми вже розглянули абстрактний клас і інтерфейс в цілому і загальному. Зараз давайте трохи деталізуємо наші знання. Для початку приділимо увагу об`єктам. Під ними в загальному випадку розуміють частину навколишньої дійсності, яка існує в просторі і часі. Але формально визначити об`єкти в рамках програмування досить складно (з філософсько-теоретичної точки зору). Тому це робиться завдяки його властивостям. Як приклад можна навести таке: об`єкт може бути однозначно ідентифікований (володіє унікальним ім`ям), він знаходиться в певному стані і використовує певну модель поведінки.

спадкування

абстрактні базові класиОскільки програмування будується на побудові ієрархічного дерева зв`язків між об`єктами, то піднімається питання про те, щоб нижчого типам були передані властивості батьківських бібліотек коду. Під спадкуванням розуміють відносини, коли хтось один повторює поведінку і структуру чогось іншого. У звичайному житті це можна зустріти повсюдно. Подібне було перенесено і в програмування щодо абстрактних елементів. В якості порівняння можна навести той факт, що немає такого організму, як птах. Це абстрактна назва. Як конкретний примірника призводять чайку, солов`я або горобчика. Завдяки наявності успадкування ми можемо використовувати бібліотеки класів, а також розвивати їх для конкретної програми. Такий інструмент дозволяє нам створювати нові об`єкти, попутно доповнюючи або змінюючи властивості вже створеного. Спадкоємець отримує все методи і поля свого предка і при необхідності обзаводиться своїми власними атрибутами. Завдяки тому що є абстрактні елементи і принцип спадщини, існують широкі можливості для модифікації в рамках об`єктно-орієнтованого програмування. До того ж це дозволяє гнучко підходити до вирішення поставлених завдань. При спадкуванні в новий клас передаються дані і функції.

поліморфізм

відміну абстрактного класу від інтерфейсуВін необхідний для того, щоб застосовувати однакові функції для вирішення різних типів завдань. В даному випадку передбачається наявність можливості здійснення різних дій, зміст яких буде залежати від типу об`єкта, з яким ведеться робота. Під поліморфізмом розуміють властивість елементів, які мають одного загального батька, виконувати схожі в смисловому значенні проблеми різними способами. Проведемо аналогію з тваринами. Є така дія - бігти. Всі ми розуміємо, як воно відбувається. Але різними тваринами (левом, слоном, шимпанзе, крокодилом, черепахою) ця дія буде виконуватися по-різному. В даному випадку за їх переміщення відповідає розробник, який при потребі може викликати для конкретного випадку певну підпрограму, розробивши алгоритм і успішно реалізувавши його. Це робиться за допомогою набору методів. При цьому в кожному окремому класі програмістом вказується, якого об`єкту які властивості притаманні. Змінюючи щось в нащадках, можна домогтися виконання певних, потрібних в даному випадку дій. Такий вплив називається поліморфізмом об`єктів. В цілому абстрактний клас є надзвичайно корисним інструментом програмування.

Поділися в соц мережах:

Увага, тільки СЬОГОДНІ!

Схожі повідомлення


Увага, тільки СЬОГОДНІ!