Обєктно-орієнтоване програмування в Java. Smarty IT, Каталог статей для програмістів.

20.07.2015

Об’єктно-орієнтоване програмування в Java

Об’єктно-орієнтоване програмування в Java

Стаття написана на основі офіційної документації фірми Sun Microsystems, Inc

v:1.0 2008.05.11

Що таке об’єкт?

Об’єкт — це ключ до розуміння об’єктно-орієнтованої технології. Прямо зараз подивіться навколо і Ви побачите безліч прикладів об’єктів реального світу: Ваша собака, Ваш стіл, телевізор, велосипед.

Об’єкти реального світу наділені двома характеристиками: стан і поведінку. Собака має «стан» (кличка, масть, шерсть, апетит) і поведінка (гавкіт, виляння хвостом). Велосипед теж має стан (поточна передача, поточна швидкість) і поведінка (зміна передачі, зміна швидкості). Щоб починати думати в термінах об’єктно-орієнтованого програмування, потрібно виділити стан і поведінка об’єкта. Прямо зараз приділіть пару хвилин розгляду об’єктів реального світу, які розташовуються навколо Вас. Для кожного об’єкта, які Ви бачите, дайте відповідь на питання: «Які можливі стани може приймати цей об’єкт?», «Які дії може виконувати цей об’єкт?». Запишіть Ваші спостереження. Ви, напевно, помітили, що об’єкти різні по складності; Ваша настільна лампа має два можливих стани (включена і вимкнена) і два можливі дії (включити, вимкнути), однак настільне радіо може мати такий набір станів: увімкнено, вимкнено, поточна гучність, поточна станція; і можливі дії: увімкнути, вимкнути, збільшити гучність, зменшити гучність, шукати, станцію і т. д. Крім того, Ви можете помітити, що деякі об’єкти містять інші об’єкти. Всі ці об’єкти реального світу можуть бути переведені в об’єкти об’єктно-орієнтованого програмування.

Обєктно-орієнтоване програмування в Java. Smarty IT, Каталог статей для програмістів.

Принципово програмні об’єкти не відрізняються від об’єктів реального світу: вони всі описуються станом і поведінкою. Об’єкт зберігає свій стан в полях (змінні в деяких мовах програмування) і реалізує свою поведінку через методи (функції в деяких мовах програмування). Методи оперують з внутрішнім станом об’єкта і розглядаються як головний механізм об’єктно-орієнтованої комунікації. Приховування внутрішнього стану і вимога працювати з ним виключно через методи називається инкапсуляцией. Інкапсуляція — це фундаментальний принцип об’єктно-орієнтованого програмування.

Візьмемо для прикладу велосипед.

Обєктно-орієнтоване програмування в Java. Smarty IT, Каталог статей для програмістів.

Через атрибути стану (поточна швидкість, поточна передача) та методи зміни цього стану об’єкт зберігає коректність свого стану і показує, як може бути використаний. Наприклад, якщо велосипед має лише шість передач, метод зміни передачі не прийме значення, менше одного і не більше шести.

    Приховування коду всередині об’єкта має ряд переваг:
  • Модульність. Вихідний код об’єкта може бути написаний і змінений незалежно від коду інших об’єктів. Одного разу створений, об’єкт може бути довільно використаний в системі.
  • Приховування інформації. Всі взаємодії з об’єктом здійснюються за коштами методів, при цьому деталі реалізації внутрішньої приховані від зовнішнього світу.
  • Повторне використання коду. Якщо об’єкт вже існує (можливо, створений іншим розробником), Ви можете використовувати його в своїй програмі. При такому підході, Ви можете використовувати специфічні об’єкти, написані і протестовані вузькими спеціалістами.
  • Легкість налагодження та підключення. Якщо якийсь об’єкт працює нестабільно, Ви можете просто видалити його з додатка і замінити іншим. В якості аналогії можна привести приклад з реального світу. Якщо у Вас зламався болт, то Ви змінюєте зламаний болт, а весь механізм.

Що таке клас?

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

Нижче наведено приклад класу, одна з можливих реалізацій.

Синтаксис мови програмування Java здасться вам новим, проте логіка класу заснована на попередньому обговоренні об’єктів велосипед. Поля cadence, speed і gear — це стан об’єкта, а методи (changeCadence, changeGear, speedUp і т. д.) визначають взаємодію з зовнішнім світом.

Можливо, ви помітили, що клас Bicycle не містить метод main. А все тому, що це не закінчену додаток, це всього лише креслення велосипедів, який Ви можете використовувати в додатку. Відповідальність за використання нового об’єкта покладається на інші класи вашої програми

Нижче представлений приклад класу BicycleDemo, клас створює два окремих об’єкта Велосипед і викликає їх методи.

Ось висновок поточних станів об’єктів:

cadence:50 speed:10 gear:2

cadence:40 speed:20 gear:3

Що таке спадкування?

Багато видів об’єктів часто містять багато спільного. Наприклад, гірський велосипед, шосейний велосипед, тандем, у всіх цих об’єктів є загальні велосипедні властивості (поточна швидкість, темп крутіння педалей, поточна передача). Однак у цих видів велосипедів є і відмінності: тандем має два сидіння, два керма; шосейний велосипед має модифікований кермо, деякі гірські велосипеди мають додаткову ланцюгову шестірню зниженої передачі.

Об’єктно-орієнтоване програмування дозволяє класів успадковувати часто використовувані поведінку і стан іншого класу. Наприклад, Велосипед є суперкласом для класів ГорныйВелопед, ШоссейныйВелосипед і Тандем. У мові програмування Java кожен клас може мати тільки один суперклас, проте один суперклас може мати необмежену кількість нащадків.

Обєктно-орієнтоване програмування в Java. Smarty IT, Каталог статей для програмістів.

Синтаксис створення класу нащадка аналогічний типового класу. Спочатку оголошення класу, використовуючи ключове слово extends, вкажіть ім’я класу, від якого треба наслідувати.

Таким чином, ГорныйВелосипед має всі поля і методи класу Велосипед, крім того він містить специфічні особливості, що роблять цей клас унікальним. Цей підхід робить клас-нащадок простим для розуміння. Проте, Вам необхідно подбати про належному документуванні стану і поведінки суперкласу, т. до. цей код увійде до складу всіх класів-нащадків.

Що таке інтерфейс?

Як Ви вже знаєте, об’єкт визначає свою взаємодію з зовнішнім світом через публічні методи. Методи — це інтерфейс об’єкта з зовнішнім світом. Наприклад, кнопки на лицьовій стороні Вашого телевізора — це інтерфейс між Вами та електронними частинами всередині пластикової коробки. Ви натискаєте кнопку «Харчування», щоб увімкнути або вимкнути телевізор.

У загальному вигляді, інтерфейс — це група споріднених методів з порожніми тілами. Поведінку велосипеда, визначається як інтерфейс, може бути представлено наступним чином:

Щоб реалізувати цей інтерфейс, Ви повинні створити свій клас з іншим ім’ям (наприклад, ACMEBicycle), а в декларації класу треба використовувати спеціальний ключове слово.

Реалізація інтерфейсу дозволяє створювати більш стандартизовані класи, з більш передбачуваним поведінкою. Інтерфейс — це контракт взаємодії між класом і зовнішнім світом, і цей контракт перевіряється компілятором під час компіляції класу. Щоб файл успішно скомпілювати, необхідно написати тіла для всіх методів, оголошених в інтерфейсі.

Примітка: Щоб скомпілювати клас ACMEBicycle, Вам треба додати ключове слово public на початок інтерфейсних методів.

Що таке пакет?

Пакет — це простір імен, в якому містяться споріднені класи та інтерфейси. Концептуально Ви можете думати про пакети, як про різних папках на комп’ютері. Ви можете зберігати сторінки HTML в одній папці, картинки в інший, скрипти та програми в третій. Оскільки програма на мові Java може складатися із сотень або тисяч окремих класів, наявність способи упорядкованого зберігання споріднених класів і інтерфейсів виглядає дуже привабливо і логічно.

Платформа Java пропонує величезну бібліотеку класів (набір пакетів), готових для використання в Ваших додатках. Ця бібліотека відома як Інтерфейс Програмування Додатків («Application Programming Interface») або API. Ці пакети виконують найбільш часто зустрічаються задачі програмування. Наприклад, об’єкт String містить стан і поведінку символьних рядків; об’єкт File дозволяє програмісту легко здійснювати операції (створювати, видаляти, перейменовувати і т. д.) з файлами операційної системи; об’єкт Socket дозволяє створювати і використовувати мережеві сокети; різні GUI (графічний інтерфейс користувача) об’єкти: кнопки, chekbox’и і т.д. можуть бути використані для створення графічного интефейса. Ви можете вибирати буквально з тисяч класів. Це дозволяє розробнику сфокусуватися на створенні логіки програми і не відволікатися на технічні деталі реалізації.

java.sun.com/javase/6/docs/api/index.html містить повний список всіх пакетів, інтерфейсів, класів, полів і методів, які надає Java Platform 6, Standard Edition. Важко переоцінити важливість цієї сторінки для програміста, зробіть на неї закладки в Вашому веб-браузері.

Петрелевич Сергій

Короткий опис статті: об’єктно орієнтоване програмування На простих прикладах пояснюються принципи об’єктно-орієнтованого програмування на мові Java. PHP, Zend Framework, Oracle, Java, PL/SQL, CSS, HTML, UTF8, Статті з програмування

Джерело: Об’єктно-орієнтоване програмування в Java. Smarty IT — Каталог статей для програмістів. PHP, Zend Framework, Oracle PL/SQL

Також ви можете прочитати