Об’єктно-орієнтоване програмування (OOP – object-oriented programming)

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

OOP зосереджує основну увагу не на логіці, необхідній для маніпуляцій, а на об’єктах, з якими потрібно працювати. Такий підхід до програмування дуже підходить для великих, складних і активно оновлюваних або сервісних програм, таких як програми для виробництва та дизайну, а також мобільні додатки. Наприклад, система OOP може бути використана для створення програм для симуляцій.

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

Перший крок у OOP — це збір усіх об’єктів, з якими програміст має намір працювати, і визначення того, як ці об’єкти взаємодіють між собою. Це називається моделюванням даних (data modeling).

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

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

Яка структура об’єктно-орієнтованого програмування?

pic

Структура об’єктно-орієнтованого програмування або будівельні блоки включають наступне:

Класи (Classes) — це типи даних, визначені користувачем, які служать шаблонами для окремих об’єктів, атрибутів і методів.

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

Методи _(Methods)— це функції, які можуть виконувати об’єкти. Вони визначають поведінку об’єкта і описуються в межах класу, що визначає його властивості та методи.
У визначеннях класів кожен метод починається з посилання на об’єкт-приклад. Крім того, методи, що належать до підпрограм в межах об’єкта, називаються методами прикладу. Розробники використовують ці методи для повторного використання або збереження функціональності в межах одного об’єкта.

Атрибути (Attributes) представляють стан об’єкта. Іншими словами, це характеристики, які відрізняють класи. Об’єкти мають дані, що зберігаються в атрибутах. Атрибути класу належать самому класу і визначаються в шаблоні класу.

Які основні принципи ООП?

Об’єктно-орієнтоване програмування ґрунтується на таких принципах:

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

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

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

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

Синтаксис (Syntax).
Це набір правил, що визначає, як повинні бути організовані слова та розділові знаки в мові програмування.

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

Асоціація (Association). Це зв'язок між одним або кількома класами. Асоціації можуть бути одиничними, множинними, від одного до багатьох або багатьох до одного.

Які мови програмування є об'єктно-орієнтованими?

Хоча Simula визнана першою мовою об'єктно-орієнтованого програмування, сьогодні існує безліч інших мов програмування, що підтримують ООП. Однак деякі мови програмування краще інтегруються з ООП, ніж інші. Наприклад, чисті ООП мови програмування розглядають усе як об'єкти.
Інші мови програмування переважно орієнтовані на ООП, але водночас включають деякі процесуальні елементи.
Найбільш популярні мови програмування (most popular programming languages) деякі з яких призначені для ООП або були створені за допомогою цієї парадигми.

Наприклад, відомі чисто ООП мови:

  • Ruby.
  • Scala.
  • JADE.
  • Emerald.

Мови програмування, головним чином орієнтовані на ООП, включають:

Інші мови, які тісно пов'язані з ООП, включають:

Які переваги ООП?

Переваги ООП включають:

Модульність (Modularity).
Інкапсуляція (Encapsulation) дозволяє об’єктам самостійно зберігатися, що полегшує вирішення проблем і співпрацю при розробці.

Можливість повторного використання (Reusability). Код може бути повторно використаний через наслідування, що дозволяє команді не писати один і той самий код кілька разів.

Продуктивність (Productivity). Розробники можуть швидко створювати нові програми, використовуючи різноманітні бібліотеки та повторно використовуваний код.

Легкість оновлення та масштабування (Easily upgradable and scalable). Розробники можуть незалежно реалізовувати функціональність системи.

Опис інтерфейсів (Interface descriptions). Завдяки методам передачі повідомлень, що використовуються для об’єктної взаємодії, опис зовнішніх систем стає простим.

Безпека (Security).
Інкапсуляція (Encapsulation) та абстракція (Abstraction) дозволяють приховати складний код, що полегшує обслуговування програмного забезпечення та забезпечує захист інтернет-протоколів.

Гнучкість (Flexibility). Поліморфізм (Polymorphism) дозволяє функції адаптуватися до класу, в якому вона знаходиться. Різні об’єкти також можуть проходити через один і той самий інтерфейс.

Обслуговування коду (Code maintenance). Частини системи можуть оновлюватися та підтримуватися без необхідності великих змін.

Зниження вартості (Lower cost). Інші переваги, такі як можливість зберігання та повторного використання, зменшують витрати на розробку.

Критика OOP

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

Серед інших поширених критичних зауважень є слабкі базові класи внаслідок наслідування. Крім того, інколи об'єкти стають чіткішими, коли відокремлені, але вони можуть бути складнішими для розуміння в реальному використанні програми.

Альтернативи OOP включають наступні методи:

Функціональне програмування (Functional programming). Сюди входять мови, які використовуються для телекомунікаційних та стійких до відмов систем, такі як Erlang та Scala.

Структурне або модульне програмування (Structured or modular programming). До цієї категорії відносяться мови, як PHP та C#.

Імперативне програмування (Imperative programming). Це підхід, який зосереджений не на альтернативних моделях OOP, а на функціях. Мови імперативного програмування (Imperative programming) включають C++ та Java.

Декларативне програмування (Declarative programming).
Цей метод програмування містить заяви про завдання або бажаний результат, але не вказує, як досягти цього результату. До декларативних мов програмування відносяться Prolog та Lisp.

Логічне програмування (Logical programming). Це метод, який часто базується на формальній логіці та використовує мови, такі як Prolog. Цей метод включає набір заяв, що виражають факти чи правила, що стосуються проблемної області. Він може використовувати логічні запити, які засновані на правилах.

Багато сучасних мов програмування дозволяють розробникам комбінувати моделі, оскільки вони можуть бути використані для різних методів програмування.
Наприклад, JavaScript та Scala можуть бути використані для ООП (об'єктно-орієнтованого програмування) та функціонального програмування.

Розробники, які працюють з ООП та мікросервісами, можуть вирішувати загальні проблеми мікросервісів, застосовуючи принципи ООП (застосування принципів ООП).

Використані джерела:

[

Що таке об'єктно-орієнтоване програмування (ООП)? | Визначення від TechTarget

Дізнайтеся, як ООП організовує проектування програмного забезпечення навколо даних, або об'єктів, а не функцій і логіки. Ознайомтесь з цим…

www.techtarget.com

](https://www.techtarget.com/searchapparchitecture/definition/object-oriented-programming-OOP?source=post_page-----aa4bfef6fca9--------------------------------)

Перекладено з: Ob’ektga yo’naltirilgan dasturlash (OOP- object-oriented programming)

Leave a Reply

Your email address will not be published. Required fields are marked *