Об'єктно-орієнтоване програмування
Об'є́ктно-орієнто́ване програмува́ння[1] (ООП, іноді об'єктно-зорієнто́ване програмува́ння[2][1][3]; англ. object-oriented programming, OOP) — одна з парадигм програмування, яка розглядає програму як множину «об'єктів», що взаємодіють між собою.[4] Основу ООП складають такі концепції як: інкапсуляція, успадкування, поліморфізм та абстрагування. Однією з переваг ООП є краща модульність програмного забезпечення. Попри те, що ця парадигма з'явилась в 1960-х роках, вона не мала широкого застосування до 1990-х, коли розвиток комп'ютерів та комп'ютерних мереж дав змогу писати надзвичайно об'ємне і складне програмне забезпечення, що змусило переглянути підходи до написання програм. Нині багато мов програмування або підтримують ООП (PHP, Lua) або ж є цілком об'єкто-орієнтованими (зокрема, Java, C#, C++, Python, Ruby і Objective-C, ActionScript 3, Swift, Vala). Об'єктно-орієнтоване програмування сягає своїм корінням до створення мови програмування Симула в 1960-х роках, одночасно з посиленням дискусій про кризу програмного забезпечення[en]. Через ускладнення апаратного та програмного забезпечення було дуже важко зберегти якість програм. Об'єкто-орієнтоване програмування частково розв'язує цю проблему шляхом наголошення на модульності програми[5]. На відміну від традиційних поглядів, коли програму розглядали як набір підпрограм, або як перелік інструкцій комп'ютеру, ООП-програми можна вважати сукупністю об'єктів. Відповідно до парадигми об'єктно-орієнтованого програмування, кожен об'єкт здатний отримувати повідомлення, обробляти дані, та надсилати повідомлення іншим об'єктам. Кожен об'єкт — своєрідний незалежний автомат з окремим призначенням та відповідальністю[6]. Визначення ООПНа думку Алана Кея, розробника мови Smalltalk, якого вважають одним з «батьків-засновників» ООП, об'єкто-орієнтований підхід полягає в наступному наборі основних принципів:
Таким чином, програма є набором об'єктів, що мають стан та поведінку. Об'єкти взаємодіють використовуючи повідомлення. Будується ієрархія об'єктів: програма в цілому — це об'єкт, для виконання своїх функцій вона звертається до об'єктів що містяться у ньому, які своєю чергою виконують запит шляхом звернення до інших об'єктів програми. Звісно, щоб уникнути нескінченної рекурсії у зверненнях, на якомусь етапі об'єкт трансформує запит у повідомлення до стандартних системних об'єктів, що даються мовою та середовищем програмування. Стійкість та керованість системи забезпечуються шляхом чіткого розподілу відповідальності об'єктів (за кожну дію відповідає певний об'єкт), однозначного означення інтерфейсів міжоб'єктної взаємодії та повної ізольованості внутрішньої структури об'єкта від зовнішнього середовища (інкапсуляції). ІсторіяООП виникло в результаті розвитку ідеології процедурного програмування, де дані й підпрограми (процедури, функції) їх обробки формально не пов'язані. Для подальшого розвитку об'єктоорієнтованого програмування велике значення мають поняття події (так зване подієво-орієнтоване програмування) і компоненти (компонентне програмування, КОП). Формування КОП від ООП відбулося, так само як формування модульного від процедурного програмування: процедури сформувалися в модулі — незалежні частини коду до рівня збірки програми, так об'єкти сформувалися в компоненти — незалежні частини коду до рівня виконання програми. Взаємодія об'єктів відбувається за допомогою повідомлень. Результатом подальшого розвитку ООП, мабуть, буде агентно-орієнтоване програмування, де агенти — незалежні частини коду на рівні виконання. Взаємодія агентів відбувається за допомогою зміни середовища, в якій вони знаходяться. Мовні конструкції, конструктивно не пов'язані безпосередньо з об'єктами, але необхідні їм для їх безпечної (виняткові ситуації, перевірки) та ефективної роботи, інкапсулюються від них в аспекти (в аспектно — орієнтованому програмуванні). Суб'єктно-орієнтоване програмування розширює поняття об'єктів шляхом забезпечення більш уніфікованої і незалежної взаємодії об'єктів. Може бути перехідною стадією між ООП та агентним програмуванням в частині самостійної їх взаємодії. Першою мовою програмування, в якій були запропоновані принципи об'єктної орієнтованості, була Симула. На момент своєї появи (в 1967 році), ця мова програмування запропонувала революційні ідеї: об'єкти, класи, віртуальні методи тощо, однак це все не було сприйнято сучасниками як щось грандіозне. Проте, більшість концепцій були розвинені Аланом Кеєм та Деном Інгаллсом[en] у мові Smalltalk. Саме вона стала першою широко поширеною об'єкто-орієнтованою мовою програмування. Наразі кількість прикладних мов програмування (список мов), що реалізують об'єкто-орієнтовану парадигму, є найбільшим стосовно інших парадигм. В області системного програмування досі застосовується парадигма процедурного програмування, і загальноприйнятою мовою програмування є мова C. Хоча при взаємодії системного і прикладного рівнів операційних систем стали помітно впливати мови об'єкто-орієнтованого програмування. Наприклад, однією з найпоширеніших бібліотек мультиплатформового програмування є об'єкто-орієнтована бібліотека Qt, написана мовою C++. Фундаментальні поняттяВ результаті дослідження Дебори Дж. Армстронг[7] комп'ютерної літератури, що була видана протягом останніх 40 років, вдалось відокремити фундаментальні поняття (принципи), використані у переважній більшості визначень об'єкто-орієнтованого програмування. До них належить: КласКлас визначає абстрактні характеристики деякої сутності, включно з характеристиками самої сутності (її атрибутами або властивостями) та діями, які вона здатна виконувати (її поведінкою, методами або можливостями). Наприклад, клас Об'єктОкремий екземпляр класу (створюється після запуску програми та ініціалізації полів класу). Клас МетодМожливості об'єкта. Оскільки Обмін повідомленнями«Передача даних від одного процесу іншому, або надсилання викликів методів.» Приховування інформації (інкапсуляція)Приховування деталей про роботу класів від об'єктів, що їх використовують або надсилають їм повідомлення. Наприклад, клас Інкапсуляція досягається шляхом вказування, які класи можуть звертатися до членів об'єкта. Як наслідок, кожен об'єкт надає кожному іншому класу певний інтерфейс — члени, доступні іншим класам. Інкапсуляція потрібна для того, аби запобігти використанню користувачами інтерфейсу тих частин реалізації, які, швидше за все, будуть змінюватись. Це дасть змогу полегшити внесення змін без потреби змінювати й користувачів інтерфейсу. Наприклад, інтерфейс може гарантувати, що щенята можуть додаватись лише до об'єктів класу Успадкування (наслідування)Клас може мати «підкласи», спеціалізовані, розширені версії надкласу. Можуть навіть утворюватись цілі дерева успадкування. Наприклад, клас АбстрагуванняСпрощення складної дійсності шляхом моделювання класів, що відповідають проблемі, та використання найприйнятнішого рівня деталізації окремих аспектів проблеми. Наприклад ПоліморфізмІснує декілька видів поліморфізму в програмуванні. Один реалізовується шляхом реалізації ряду підпрограм (функцій, процедур, методів тощо) з однаковими іменами, але з різними параметрами. Залежно від того, що передається, і вибирається відповідна підпрограма. Щодо власне ООП, то під поліморфізмом розуміється можливість використання об'єктів(екземплярів) підкласів взамін батьківського класу. При цьому в кожному класі реалізуються одні і ті ж підпрограми з одними і тими ж параметрами. Так можна реалізувати клас Прототипно-орієнтоване програмуванняНе всі з перелічених вище концепцій присутні в усіх об'єкто-орієнтованих мовах програмування. Зокрема, в прототипно-орієнтованому програмуванні не використовуються класи. Як наслідок, зовсім інша, але аналогічна термінологія використовується для визначення об'єкта та екземпляра в цих мовах. Відкрита рекурсіяУ мовах, які підтримують відкриту рекурсію, об'єктні методи можуть викликати інші методи того самого об'єкта (включаючи себе), як правило, використовуючи спеціальну змінну або ключове слово під назвою ООП мовиПерша ООП мова — Simula (1967). Smalltalk (1972 — 1980) ще один приклад ранніх ООП мов, на якій відбувалось апробація принципів ООП. Неповний список ООП мов:
Критика
Див. також
Примітки
Література
|
Portal di Ensiklopedia Dunia