НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ


Мова програмування Java. W3Schools українською. Уроки для початківців від hyperskill

En

Введення в ООП


Теорія

§1. Основи

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


§2. Базові принципи ООП

Є чотири базові (основні) принципи ООП. Це інкапсуляція, абстракція, наслідування та поліморфізм.

  • Інкапсуляція забезпечує об’єднання (=інкапсуляцію) даних і методів, що працюють з цими даними, в єдиний блок. Це також стосується здатності об’єкта приховувати внутрішню структуру його властивостей і методів.
  • Абстракція даних означає, що об’єкти мають надавати спрощену абстрактну версію своїх реалізацій. Деталі їхньої внутрішньої роботи зазвичай не потрібні користувачеві, тому немає потреби їх представляти. Абстракція також означає, що будуть представлені лише найбільш релевантні характеристики об’єкта.
  • Успадкування – це механізм для визначення батьківсько-дочірніх зв’язків між класами. Часто об’єкти дуже схожі, тому успадкування дозволяє програмістам повторно використовувати загальну логіку та водночас вводити унікальні концепції в класи.
  • Поліморфізм буквально означає «багато форм» і є концепцією, пов’язаною зі спадковістю. Це дозволяє програмістам визначати різні реалізації для того самого методу. Таким чином, назва (або інтерфейс) залишається незмінним, але виконувані дії можуть відрізнятися. Наприклад, уявіть веб-сайт, який розміщує три основні типи тексту: новини, оголошення та статті. Вони дещо схожі тим, що всі мають заголовок, певний текст і дату. В іншому вони відрізняються: статті мають авторів, бюлетені новин мають джерела, а оголошення мають дату, після якої вони стають неактуальними. Зручно написати абстрактний клас із загальною інформацією для всіх публікацій, щоб уникнути кожного разу його копіювання та зберігати відмінності у відповідних похідних класах.

Це ключові поняття ООП. Кожна об’єктно-орієнтована мова реалізує ці принципи по-своєму, але суть залишається незмінною від мови до мови.


§3. Об’єкти

Звичайно, ключовим поняттям ООП є об’єкт. Навколо вас багато об’єктів реального світу: домашні тварини, будівлі, машини, комп’ютери, літаки, що завгодно. Навіть комп’ютерну програму можна розглядати як об’єкт.

Можливо ідентифікувати деякі важливі характеристики об’єктів реального світу. Наприклад, для будівлі ми можемо враховувати кількість поверхів, рік будівництва та загальну площу. Інший приклад - літак, який може вмістити певну кількість пасажирів і перевезти вас з одного міста в інше. Ці характеристики складають атрибути та методи об’єкта. Атрибути характеризують стани або дані об’єкта, а методи – його поведінку.


§4. Класи

Часто багато окремих об’єктів мають схожі характеристики. Ми можемо сказати, що ці об’єкти належать до одного типу або класу.

Клас — ще одне важливе поняття ООП. Клас описує загальну структуру подібних об’єктів: їхні поля та методи. Його можна вважати шаблоном або схемою для подібних об’єктів. Об’єкт — це окремий примірник класу.

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

Давайте розглянемо кілька прикладів нижче.

Приклад 1. Клас будівлі

Клас будівлі

Абстрактна будівля для опису будівель як типу об’єкта (класу)

Кожна будівля має однакові атрибути:

  • Кількість поверхів (ціле число);
  • Площа (число з плаваючою комою, квадратні метри);
  • Рік будівництва (ціле число).

Кожен об’єкт типу будівлі має однакові атрибути, але різні значення.

Наприклад:

  • Будинок 1: кількість поверхів = 4, площа = 2400,16, рік побудови = 1966;
  • Будинок 2: кількість поверхів = 6, площа = 3200,54, рік побудови = 2001.

Досить важко визначити поведінку будівлі, але цей приклад досить добре демонструє атрибути.

Приклад 2. Клас літака

На відміну від будівлі, поведінку літака легко визначити: він може літати та переносити вас між двома точками планети.

Клас літака

Абстрактний літак для опису всіх літаків як типу об’єкта (класу).

Кожен літак має такі атрибути:

  • Назва (рядок, наприклад, "Airbus A320" або "Boeing 777");
  • Пасажиромісткість (ціле число);
  • Стандартна швидкість (ціле число);
  • Поточні координати (вони потрібні для навігації).

Крім того, у нього є поведінка (метод): пересадка пасажирів з однієї географічної точки до іншої. Така поведінка змінює стан літака, а саме його поточні координати.


§5. Об’єкти та класи

В ООП усе можна розглядати як об’єкт; клас, наприклад, також є об’єктом. Програми складаються з різних об’єктів, які взаємодіють один з одним. Стан і поведінка об’єкта зазвичай поєднуються, але це не завжди так. Іноді ми бачимо об’єкти без стану чи методів. Це, звичайно, залежить від мети програми та характеру об’єкта.

Наприклад, існує така річ, як інтерфейс. Не інтерфейс користувача, а клас, який служить лише для успадкування, щоб гарантувати інтерфейс для класів-нащадків. Це клас без громадянства. Структури існують у C++ з історичних причин. Тепер структура в C++ також є класом, але колись структура мала лише властивості і не мала методів – тип для зберігання даних і нічого більше. Це особливі випадки, і вони іноді корисні.


§6. Висновок

Коротко кажучи, вам слід пам’ятати наступне:

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

Ви також можете переглянути Урок на hyperskill.org.


Практичні завдання та відповіді

Подаються завдання та варіанти відповідей. Правильний варіант виділено синім кольором.

№1. Елементи об’єктно-орієнтованої програми

Питання: кожна об’єктно-орієнтована програма, по суті, складається з набору...

Виберіть один варіант зі списку:

  • взаємодіючі об’єкти ✔
  • взаємодіючі методи
  • взаємодіючі класи
  • взаємодіючі змінні

№2. Основні принципи

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

Виберіть один варіант зі списку:

  • Абстракція передбачає надання користувачеві лише найбільш релевантних характеристик об’єкта.
  • Поліморфізм — це визначення різної логіки одного методу.
  • Інкапсуляція — це приховування внутрішніх даних об’єктів від світу.
  • Успадкування полягає в іменуванні змінних одним традиційним способом. ✔

№3. Стан і поведінка

Питання: Що можна охарактеризувати станом і поведінкою?

Виберіть один варіант зі списку:

  • метод
  • клас
  • об’єкт ✔
  • поле (або атрибут)

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


№4. Взаємодіючі об’єкти

Питання: Як правило, об’єкти взаємодіють один з одним через...

Виберіть один варіант зі списку:

  • спадкування
  • класи
  • методи ✔
  • поля

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


№5. Атрибути об’єктів

Питання: Які параметри, наведені нижче, можуть бути атрибутом об’єкта класу Car? Виберіть усі правильні параметри.

Виберіть один або кілька варіантів зі списку:

  • їздити
  • ціна ✔
  • дорожні знаки
  • подивитися на карту
  • пасажиромісткість ✔
  • марка автомобіля ✔

Пояснення: Атрибутом об’єкта класу Car можуть бути такі варіанти: ціна, пасажиромісткість, марка автомобіля. Інші варіанти не є атрибутами об’єкта класу Car. «Їздити» та «дивитися на карту» — це дії чи поведінка, які може виконувати об’єкт «Автомобіль», тоді як «дорожні знаки» не є специфічним для конкретного об’єкта «Автомобіль» і більше пов’язаний із середовищем, у якому працює автомобіль.


№6. Що таке проєкт (план)

Питання: Клас — це шаблон (або проєкт) для створення ()...

Виберіть один варіант зі списку

  • метод
  • тип
  • поле
  • об’єкт ✔

Пояснення: План належить до класу, який є шаблоном для створення об’єкта.


№7. Установіть відповідність між основними поняттями

Запитання: Установіть відповідність між поняттями та відповідними визначеннями.

Установіть відповідність між елементами лівого та правого стовпців:

  • Клас – тип об’єкта.
  • Поле – стан об’єкта.
  • Метод – поведінка об’єкта.
  • Об’єкт – окремий екземпляр класу.

№8. Заяви (твердження)

Питання: Виберіть усі правильні твердження про класи та об’єкти.

Виберіть один або кілька варіантів зі списку:

  • Клас описує спільну структуру для набору об’єктів. ✔
  • Поля зберігають стан об’єкта. ✔
  • Як правило, внутрішній стан об’єкта відкритий для всього світу.
  • Об’єкт завжди має поля.

Пояснення: Правильні твердження: Клас описує загальну структуру для набору об’єктів. Поля зберігають стан об’єкта. Об’єкт не завжди має поля. Твердження «Як правило, внутрішній стан об’єкта відкритий для всього світу» є невірним. Внутрішній стан об’єкта зазвичай прихований від зовнішнього світу, і до нього можна отримати доступ або змінити його лише за допомогою методів об’єкта.


№9. Методи

Питання: Давайте обговоримо методи. Що ми знаємо про них?

Знайдіть одне неправильне твердження!

  • Об’єкт може мати характеристики: поля та методи.
  • Об’єкти взаємодіють один з одним за допомогою методів виклику.
  • Об’єкт може взагалі не мати методів
  • Стан об’єкта представлено його методами. ✔

№10. Об’єкти та класи

Питання: Як пов’язані класи та об’єкти?

Знайдіть усі правильні твердження.

Виберіть одну або кілька опцій зі списку:

  • Об’єкт — це екземпляр деякого класу. ✔
  • Кожен клас має лише один об’єкт.
  • Класи використовуються для створення об’єктів. ✔
  • Клас — це екземпляр деякого об’єкта.

№11. Методи об’єктів

Питання: Які параметри, наведені нижче, можуть бути методом об’єкта класу Airplane? Виберіть усі правильні параметри.

Виберіть одну або кілька опцій зі списку:

  • submerge (занурюватися)
  • walk (ходити)
  • takeOff (злітати) ✔
  • goToSpace (летіти у Космос)
  • approachLanding (підходити до посадки) ✔

№12. Що таке поведінка об’єкта

Запитання: Поведінка об’єкта представлена його ...

Виберіть один варіант зі списку:

  • методи ✔
  • поля (або атрибути)
  • клас
  • вихідний код
  • друзі

№13. Де зберігається стан об’єкта

Питання: стан об’єкта зберігається в його...

Виберіть один варіант зі списку:

  • клас
  • друзі
  • поля (або атрибути) ✔
  • вихідний код
  • методи