Об’єктно-орієнтоване програмування (OOP) — це модель програмування, де акцент робиться не на функціях і логіці, а на даних або об’єктах, навколо яких будується дизайн програмного забезпечення. Об’єкт можна визначити як область даних з унікальними атрибутами та поведінкою.
OOP орієнтовано на те, щоб розробники зосереджували увагу не на логіці маніпулювання даними, а на об’єктах, з якими необхідно працювати. Такий підхід до програмування особливо підходить для великих, складних та активно оновлюваних або обслуговуваних програмних систем. Сюди входять як виробничі, так і проектні програми, а також мобільні додатки. Наприклад, OOP можна використовувати для розробки системи для симуляції.
Окрім цього, організація об’єктно-орієнтованого програмування полегшує роботу над проектами, розподіленими на групи для спільної розробки.
Додатковими перевагами OOP є повторне використання коду, його розширюваність і ефективність.
Першим кроком в OOP є збирання всіх об’єктів, з якими розробник планує працювати, та визначення того, як вони взаємодіятимуть між собою — це називається моделюванням даних ( data modeling.)_.
Об’єкти можуть бути різноманітними — від фізичних осіб, таких як люди, описані через характеристики на кшталт імені та адреси, до маленьких комп’ютерних програм, таких як віджети().
Після визначення об’єкта його позначають класом об’єктів, який описує тип даних, що містяться в об’єкті, та будь-яку логічну послідовність, що може їх керувати. Кожна така логічна послідовність визначається як метод.
Об’єкти можуть взаємодіяти між собою через чітко визначені інтерфейси, які називаються класами.
Яка структура об’єктно-орієнтованого програмування?
Структура об’єктно-орієнтованого програмування або його будівельні блоки включають наступні елементи:
Класи (Classes) — це типи даних, визначені користувачем, які служать шаблонами для створення окремих об’єктів, їх атрибутів і методів.
Об’єкти (Objects)— це екземпляри класів, створені з визначеними даними. Об’єкти можуть бути як реальними фізичними об’єктами, так і абстрактними концепціями. Після визначення класу, описаний клас стає шаблоном для створення конкретних об’єктів.
Методи (Methods)— це функції, які можуть виконувати об’єкти. Вони описують поведінку об’єктів і визначаються всередині класу, що їх описує.
У визначеннях класів кожен метод починається з посилання на екземпляр об’єкта. Крім того, методи, що виконуються всередині об’єкта, називаються методами екземплярів. Розробники використовують методи для повторного використання або збереження функціональності в межах одного об’єкта.
Атрибути (Attributes) відображають стан об’єкта. Іншими словами, це характеристики, що відрізняють класи один від одного. Об’єкти мають дані, що зберігаються у полях атрибутів. Атрибути класу належать самому класу і визначаються в шаблоні класу.
Які основні принципи OOP?
Об’єктно-орієнтоване програмування базується на таких принципах:
Інкапсуляція (Encapsulation). Принцип інкапсуляції (encapsulation) полягає в тому, що всі важливі дані зберігаються всередині об’єкта, і лише вибрані дані є відкритими для доступу.
Кожен об’єкт має своє виконання та стан, які зберігаються в межах конкретного класу. Інші об’єкти не мають доступу до цього класу або права змінювати його стан. Вони можуть лише викликати функції або методи, що працюють із даними. Ця властивість приховування даних забезпечує безпеку програми та запобігає некоректному зміненню даних.
Абстракція (Abstraction). Об’єкти відкривають лише внутрішні механізми, які мають значення для інших об’єктів, приховуючи непотрібний код реалізації. Отриманий клас може мати свої функціональні можливості. Ця концепція дозволяє розробникам з часом додавати нові зміни або доповнення.
Наслідування (Inheritance). Класи можуть повторно використовувати код і властивості з інших класів.
Між об’єктами можуть бути визначені відносини та створені підкласи, що дозволяє розробникам повторно використовувати загальну логіку, зберігаючи при цьому унікальну ієрархію. Наслідування змушує глибше аналізувати дані, скорочує час розробки та забезпечує високий рівень точності.
Поліморфізм (Polymorphism). Об’єкти створені для обміну поведінкою і можуть мати кілька форм. Програма визначає, яке значення або використання потрібно для кожного виконання цього об’єкта з батьківського класу, що зменшує необхідність дублювати код. Потім створюється дочірній клас, який розширює функціональність батьківського класу. Поліморфізм (Polymorphism) дозволяє різним типам об’єктів проходити через один інтерфейс.
Синтаксис (Syntax).
Це набір правил, що визначають, як слова та розділові знаки організовуються в мові програмування.
Зв’язування (Coupling). Це ступінь зв’язку між елементами програмного забезпечення. Наприклад, якщо атрибути класу змінюються, тоді будь-який інший пов’язаний клас також зміниться.
Асоціація (Association). Це зв’язок між одним або кількома класами. Асоціації можуть бути один до одного, багато до одного, один до багатьох або багато до багатьох.
Які мови програмування є об’єктно-орієнтованими?
Хоча Simula визнана першою об’єктно-орієнтованою мовою програмування, сьогодні існує багато інших мов, що підтримують ООП. Однак деякі мови програмування краще інтегруються з ООП, ніж інші. Наприклад, мови програмування, які вважаються чисто об’єктно-орієнтованими, розглядають усе як об’єкт.
Інші мови програмування в основному орієнтовані на ООП, але включають деякі процесуальні аспекти.
Деякі з найбільш популярних мов програмування ( most popular programming languages ) були створені з орієнтацією на ООП або підтримують його.
Наприклад, до популярних чистих ООП мов можна віднести:
- Ruby.
- Scala.
- JADE.
- Emerald.
Мови програмування, які переважно орієнтовані на ООП, включають:
Інші мови програмування, пов'язані з ООП, включають:
- Visual Basic .NET.
- PHP.
- JavaScript.
Які переваги має ООП?
Переваги ООП включають:
Модульність (Modularity).
Інкапсуляція (Encapsulation) дозволяє об’єктам зберігати свій стан, що спрощує вирішення проблем і полегшує командну розробку.
Можливість повторного використання (Reusability). Код можна повторно використовувати через спадкування, тобто команді не потрібно кожного разу писати однаковий код.
Продуктивність (Productivity). Розробники можуть швидко створювати нові програми за допомогою різних бібліотек і коду, що може бути повторно використано.
Легкість оновлення та масштабування (Easily upgradable and scalable). Розробники можуть реалізовувати функціональність системи незалежно одна від одної.
Опис інтерфейсів (Interface descriptions). Завдяки методам передачі повідомлень для об'єктного зв'язку описи зовнішніх систем стають простими.
Безпека (Security).
Інкапсуляція (Encapsulation) та абстракція (Abstraction) дозволяють приховувати складний код, що робить технічне обслуговування програмного забезпечення простішим, а інтернет-протоколи більш захищеними.
Гнучкість (Flexibility). Поліморфізм (Polymorphism) дозволяє одній функції адаптуватися до класу, в якому вона знаходиться. Різні об’єкти також можуть взаємодіяти через однаковий інтерфейс.
Обслуговування коду (Code maintenance). Частини системи можуть бути оновлені та підтримані без необхідності вносити суттєві зміни.
Менші витрати (Lower cost). Інші переваги, такі як можливість зберігати та повторно використовувати код, знижують витрати на розробку.
Критика OOP
Розробники критикують модель об’єктно-орієнтованого програмування з кількох причин. Найбільше занепокоєння викликає те, що OOP надає надмірну увагу компонентам даних у розробці програмного забезпечення і недостатньо уваги приділяє обчисленням або алгоритмам (algorithms).
Крім того, написання коду в OOP може бути набагато складнішим, а компіляція займає більше часу.
Серед інших поширених критичних зауважень є те, що наслідування (Inheritance) може мати слабкі основні класи. Крім того, об’єкти іноді можуть бути більш чіткими, коли вони відокремлені, але в реальній програмі їх може бути важче зрозуміти.
Альтернативи 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 можуть використовуватися як для об’єктно-орієнтованого програмування (OOP), так і для функціонального програмування.
Розробники, які працюють з OOP та мікросервісами, можуть вирішувати загальні проблеми мікросервісів, застосовуючи принципи OOP через (застосування принципів OOP).
Використані джерела:
[
What is Object-Oriented Programming (OOP)? | Definition from TechTarget
Дізнайтеся, як OOP організує дизайн програмного забезпечення навколо даних, або об’єктів, а не функцій і логіки. Досліджуйте його…
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)