Уже з назви видно, що об’єктно-орієнтоване програмування (OOP) передбачає використання об'єктів у мовах програмування. Об’єктно-орієнтоване програмування орієнтоване на реалізацію реальних об’єктів, таких як наслідування (inheritance), приховування (hiding), поліморфізм (polymorphism) тощо. Основною метою OOP є зв’язування даних та функцій, що з ними працюють, таким чином, щоб жодна частина коду не могла отримати доступ до цих даних, крім цієї функції.
Основні поняття OOP:
Клас (Class)
Об’єкти (Objects)
Абстракція даних (Data Abstraction)
Інкапсуляція (Encapsulation)
Наслідування (Inheritance)
Поліморфізм (Polymorphism)
Динамічне зв’язування (Dynamic Binding)
Передача повідомлень (Message Passing)
- Клас (Class):
Клас — це тип даних, визначений користувачем.
Ці дані складаються з членів даних та членів функцій, доступ до яких можна отримати через створення екземпляра цього класу. Клас виражає набір властивостей або методів, спільних для всіх об'єктів одного типу. Клас є своєрідним кресленням для об’єкта.
Наприклад: Розглянемо клас Автомобіль. Можна мати багато автомобілів з різними марками та назвами, але всі вони матимуть кілька спільних характеристик, наприклад, чотири колеса, обмеження швидкості, пробіг і так далі. Отже, у цьому випадку класом є Автомобіль, а колеса, обмеження швидкості та пробіг є його властивостями.
2. Об’єкти (Objects):
Об’єкт є основною одиницею об'єктно-орієнтованого програмування і відображає реальні об’єкти в житті. Об’єкт є екземпляром класу. Коли клас визначено, пам’ять не виділяється, але коли створюється об’єкт (тобто екземпляр класу), пам’ять виділяється.
Об'єкт має свої унікальні характеристики, стан і поведінку. Кожен об'єкт має дані та код для маніпулювання цими даними. Об'єкти можуть взаємодіяти один з одним, не знаючи подробиць про дані або код іншого, достатньо знати тип отриманого повідомлення і тип відповіді, яку поверне об'єкт.
Наприклад, "Собака" є реальним об'єктом, який має такі характеристики, як колір, порода, шерсть, сон і харчування.
3. Абстракція даних (Data Abstraction)
Абстракція даних є однією з найважливіших і основних характеристик об'єктно-орієнтованого програмування. Абстракція даних означає надання лише важливої інформації про дані зовнішньому світу, приховуючи фонові деталі або реалізацію. Розгляньмо приклад життя людини за кермом автомобіля.
Чоловік тільки знає, що натискання на газ збільшує швидкість машини, а натискання на гальмо зупиняє її, але він не знає, як саме збільшується швидкість при натисканні на газ. Він не знає про внутрішні механізми машини або про такі деталі, як прискорювач, гальмо та інші елементи, які виконуються в автомобілі. Це і є абстракція.
4. Інкапсуляція (Encapsulation)
Інкапсуляція визначається як об'єднання даних в одну одиницю. Це механізм, який об'єднує код і дані, якими він управляє. В інкапсуляції змінні або дані класу приховані від інших класів і доступ до них можливий тільки через функції-члени цього класу.
Як і в інкапсуляції, дані класу приховані від інших класів, тому це також називається приховуванням даних.
Реальний приклад інкапсуляції можна побачити в компанії, де є різні відділи, такі як відділ обліку, фінансовий відділ, відділ продажу та інші. Фінансовий відділ управляє всіма фінансовими операціями та реєструє всі фінансові дані. Точно так само відділ продажу управляє всіма активностями, що стосуються продажу, та зберігає записи про всі продажі. Тепер може виникнути ситуація, коли з якоїсь причини посадова особа фінансового відділу потребує всі дані про продажі за певний місяць. У такому випадку він не має безпосереднього доступу до даних відділу продажу.
Перш за все, він повинен зв’язатися з іншим офіцером відділу продажу, а потім попросити його надати певну інформацію. Це і є інкапсуляція. Тут дані відділу продажу та співробітники, які можуть ними управляти, зібрані під єдиним ім’ям "відділ продажу".
5. Спадкування (Inheritance)
Спадкування є важливою частиною ООП (об’єктно-орієнтоване програмування). Це здатність класу отримувати властивості та характеристики від іншого класу. Коли ми пишемо клас, ми отримуємо властивості від інших класів через спадкування. Таким чином, коли ми створюємо клас, нам не потрібно щоразу переписувати всі властивості та функції, оскільки вони можуть бути успадковані від іншого класу, який їх має. Спадкування дозволяє користувачеві максимально використовувати код і зменшувати його надлишковість.
6.
Поліморфізм (Polymorphism)
Поліморфізм означає наявність багатьох форм. Простими словами, ми можемо визначити поліморфізм як здатність повідомлення з'являтися в різних формах. Наприклад, людина може одночасно мати різні риси. Людина одночасно може бути батьком, чоловіком, працівником. Тож одна людина має різну поведінку в різних ситуаціях. Це і є поліморфізм.
7. Динамічне зв'язування (Dynamic Binding)
У динамічному зв'язуванні код, що виконується у відповідь на виклик функції, визначається під час виконання програми. Динамічне зв'язування означає, що код, пов'язаний з викликом певної процедури, стає відомим тільки на момент виконання цього виклику. Однією з основних переваг динамічного зв'язування є те, що деякі отримані з класу D члени можуть бути успадковані від його основного класу B.
Якщо D не приховує загальні члени B, об'єкт D може виражати B в будь-якому контексті. Тут можна використовувати B. Це властивість називається поліморфізмом підтипу.
8. Передача повідомлень (Message Passing)
Це форма комунікації, яка використовується в об'єктно-орієнтованому програмуванні, а також в паралельному програмуванні. Об'єкти спілкуються між собою, передаючи і отримуючи дані. Повідомлення для об'єкта — це запит на виконання процедури, і тому об'єкт-одержувач викликає функцію, що генерує необхідні результати. Передача повідомлення включає в себе вказівку на ім'я об'єкта, ім'я функції та передані дані.
Чому нам потрібно об'єктно-орієнтоване програмування?
Для спрощення розробки проєктів та обслуговування.
Забезпечення безпеки шляхом надання властивості приховування даних.
Якщо ми використовуємо об'єктно-орієнтоване програмування, ми можемо вирішувати реальні проблеми.
Це забезпечує повторне використання коду.
Це дозволяє нам писати загальний код, який працює з різними даними, тому нам не потрібно писати основні частини знову і знову.
Використані джерела:
[
Вступ до об'єктно-орієнтованого програмування - GeeksforGeeks
Портал для гіків з комп'ютерних наук. Містить добре написані, продумані та добре пояснені статті з комп'ютерних наук та…
www.geeksforgeeks.org
](https://www.geeksforgeeks.org/introduction-of-object-oriented-programming/?source=post_page-----de66c60c17a2--------------------------------)
Перекладено з: Ob’ektga yo’naltirilgan dasturlashga kirish (Introduction of Object Oriented Programming)