Об'є́ктно-орієнто́ване програмува́ння (ООП, іноді об'єктно-зорієнто́ване програмува́ння; англ. Object-oriented programming, OOP) — одна з парадигм програмування, яка розглядає програму як множину «об'єктів», що взаємодіють між собою. Основу ООП складають такі концепції як: інкапсуляція, успадкування, поліморфізм та абстракція. Однією з переваг ООП є краща модульність програмного забезпечення (тисячу функцій процедурної мови, в ООП можна замінити кількома десятками класів із своїми методами). Попри те, що ця парадигма з'явилась в 1960-х роках, вона не мала широкого застосування до 1990-х, коли розвиток комп'ютерів та комп'ютерних мереж дав змогу писати надзвичайно об'ємне і складне програмне забезпечення, що змусило переглянути підходи до написання програм. На теперешній час багато мов програмування або підтримують ООП (PHP, Lua) або ж є цілком об'єкто-орієнтованими (зокрема, Java, C#, , Python, Ruby і Objective-C, ActionScript 3, Swift, Vala).
Об'єктно-орієнтоване програмування сягає своїм корінням до створення мови програмування Симула в 1960-х роках, одночасно з посиленням дискусій про [en]. Через ускладнення апаратного та програмного забезпечення було дуже важко зберегти якість програм. Об'єкто-орієнтоване програмування частково розв'язує цю проблему шляхом наголошення на модульності програми.
На відміну від традиційних поглядів, коли програму розглядали як набір підпрограм, або як перелік інструкцій комп'ютеру, ООП-програми можна вважати сукупністю об'єктів. Відповідно до парадигми об'єктно-орієнтованого програмування, кожен об'єкт здатний отримувати повідомлення, обробляти дані, та надсилати повідомлення іншим об'єктам. Кожен об'єкт — своєрідний незалежний автомат з окремим призначенням та відповідальністю.
Визначення ООП
На думку Алана Кея, розробника мови Smalltalk, якого вважають одним з «батьків-засновників» ООП, об'єкто-орієнтований підхід полягає в наступному наборі основних принципів:
- Все є об'єктами.
- Всі дії та розрахунки виконуються шляхом взаємодії (обміну даними) між об'єктами, під час якої один об'єкт потребує, щоб інший об'єкт виконав деяку дію. Об'єкти взаємодіють, надсилаючи й отримуючи повідомлення. Повідомлення — це запит на виконання дії, доповнений набором аргументів, які можуть знадобитися під час виконання дії.
- Кожен об'єкт має незалежну пам'ять, яка складається з інших об'єктів.
- Кожен об'єкт є представником (екземпляром, примірником) класу, який виражає загальні властивості об'єктів.
- У класі задається поведінка (функціональність) об'єкта. Таким чином усі об'єкти, які є екземплярами одного класу, можуть виконувати одні й ті ж самі дії.
- Класи організовані у єдину деревоподібну структуру з загальним корінням, яка називається ієрархією успадкування. Пам'ять та поведінка, зв'язані з екземплярами деякого класу, автоматично доступні будь-якому класу, розташованому нижче в ієрархічному дереві.
Таким чином, програма є набором об'єктів, що мають стан та поведінку. Об'єкти взаємодіють використовуючи повідомлення. Будується ієрархія об'єктів: програма в цілому — це об'єкт, для виконання своїх функцій вона звертається до об'єктів що містяться у ньому, які своєю чергою виконують запит шляхом звернення до інших об'єктів програми. Звісно, щоб уникнути нескінченної рекурсії у зверненнях, на якомусь етапі об'єкт трансформує запит у повідомлення до стандартних системних об'єктів, що даються мовою та середовищем програмування. Стійкість та керованість системи забезпечуються шляхом чіткого розподілу відповідальності об'єктів (за кожну дію відповідає певний об'єкт), однозначного означення інтерфейсів міжоб'єктної взаємодії та повної ізольованості внутрішньої структури об'єкта від зовнішнього середовища (інкапсуляції).
Історія
ООП виникло в результаті розвитку ідеології процедурного програмування, де дані й підпрограми (процедури, функції) їх обробки формально не пов'язані. Для подальшого розвитку об'єктоорієнтованого програмування велике значення мають поняття події (так зване подієво-орієнтоване програмування) і компоненти (компонентне програмування, КОП).
Формування КОП від ООП відбулося, так само як формування модульного від процедурного програмування: процедури сформувалися в модулі — незалежні частини коду до рівня збірки програми, так об'єкти сформувалися в компоненти — незалежні частини коду до рівня . Взаємодія об'єктів відбувається за допомогою повідомлень. Результатом подальшого розвитку ООП, мабуть, буде агентно-орієнтоване програмування, де агенти — незалежні частини коду на рівні виконання. Взаємодія агентів відбувається за допомогою зміни середовища, в якій вони знаходяться.
Мовні конструкції, конструктивно не пов'язані безпосередньо з об'єктами, але необхідні їм для їх безпечної (виняткові ситуації, перевірки) та ефективної роботи, інкапсулюються від них в аспекти (в аспектно — орієнтованому програмуванні). Суб'єктно-орієнтоване програмування розширює поняття об'єктів шляхом забезпечення більш уніфікованої і незалежної взаємодії об'єктів. Може бути перехідною стадією між ООП та агентним програмуванням в частині самостійної їх взаємодії.
Першою мовою програмування, в якій були запропоновані принципи об'єктної орієнтованості, була Симула. На момент своєї появи (в 1967 році), ця мова програмування запропонувала революційні ідеї: об'єкти, класи, віртуальні методи тощо, однак це все не було сприйнято сучасниками як щось грандіозне. Проте, більшість концепцій були розвинені Аланом Кеєм та [en] у мові Smalltalk. Саме вона стала першою широко поширеною об'єкто-орієнтованою мовою програмування.
Наразі кількість прикладних мов програмування (список мов), що реалізують об'єкто-орієнтовану парадигму, є найбільшим стосовно інших парадигм. В області системного програмування досі застосовується парадигма процедурного програмування, і загальноприйнятою мовою програмування є мова C. Хоча при взаємодії системного і прикладного рівнів операційних систем стали помітно впливати мови об'єкто-орієнтованого програмування. Наприклад, однією з найпоширеніших бібліотек мультиплатформового програмування є об'єкто-орієнтована бібліотека Qt, написана мовою .
Фундаментальні поняття
В результаті дослідження Дебори Дж. Армстронг комп'ютерної літератури, що була видана протягом останніх 40 років, вдалось відокремити фундаментальні поняття (принципи), використані у переважній більшості визначень об'єкто-орієнтованого програмування. До них належить:
Клас
Клас визначає абстрактні характеристики деякої сутності, включно з характеристиками самої сутності (її атрибутами або властивостями) та діями, які вона здатна виконувати (її поведінкою, методами або можливостями). Наприклад, клас Собака
може характеризуватись рисами, притаманними всім собакам, зокрема: порода, колір хутра, здатність гавкати. Класи вносять модульність та структурованість в об'єкто-орієнтовану програму. Зазвичай клас має бути зрозумілим для не-програмістів, що знаються на предметній області, що, своєю чергою, значить, що клас повинен мати значення в контексті. Також, код реалізації класу має бути досить самодостатнім. Властивості та методи класу, разом називаються його членами.
Об'єкт
Окремий екземпляр класу (створюється після запуску програми та ініціалізації полів класу). Клас Собака
відповідає всім собакам шляхом опису їхніх спільних рис; об'єкт Сірко
є одним окремим собакою, окремим варіантом значень характеристик. Собака
має хутро; Сірко
має коричнево-біле хутро. Об'єкт Сірко
є екземпляром (примірником) класу Собака.
Сукупність значень атрибутів окремого об'єкта називається . На основі класу Собака
можна, також, створити інший об'єкт Дружок
, який відрізнятиметься від об'єкта Сірко
своїм станом (наприклад кольором хутра). Обидва об'єкти (Сірко і Дружок) є екземплярами класу Собака
.
Метод
Можливості об'єкта. Оскільки Сірко
— Собака
, він може гавкати. Тому гавкати()
є одним із методів об'єкта Сірко
. Він може мати й інші методи, зокрема: місце()
, або їсти()
. В межах програми, використання методу має впливати лише на один об'єкт; всі Собаки
можуть гавкати, але треба, щоб гавкав лише один окремий собака.
Обмін повідомленнями
«Передача даних від одного процесу іншому, або надсилання викликів методів.»
Приховування інформації (інкапсуляція)
Приховування деталей про роботу класів від об'єктів, що їх використовують або надсилають їм повідомлення. Так, наприклад, клас Собака
має метод гавкати()
. Реалізація цього методу описує як саме повинно відбуватись гавкання (приміром, спочатку вдихнути()
, а потім видихнути()
на обраній частоті та гучності). Петро, хазяїн пса Сірка
, не повинен знати як він гавкає. Інкапсуляція досягається шляхом вказування, які класи можуть звертатися до членів об'єкта. Як наслідок, кожен об'єкт надає кожному іншому класу певний інтерфейс — члени, доступні іншим класам. Інкапсуляція потрібна для того, аби запобігти використанню користувачами інтерфейсу тих частин реалізації, які, швидше за все, будуть змінюватись. Це дасть змогу полегшити внесення змін без потреби змінювати й користувачів інтерфейсу. Наприклад, інтерфейс може гарантувати, що щенята можуть додаватись лише до об'єктів класу Собака
кодом самого класу. Часто, члени класу позначаються як публічні (англ. public), захищені (англ. protected) та приватні (англ. private), визначаючи, чи доступні вони всім класам, підкласам, або лише до класу в якому їх визначено. Деякі мови програмування йдуть ще далі: Java використовує ключове слово private для обмеження доступу, що буде дозволений лише з методів того самого класу, protected — лише з методів того самого класу і його нащадків та з класів із того ж самого пакету, C# та VB.NET відкривають деякі члени лише для класів із тієї ж збірки шляхом використання ключового слова internal (C#) або Friend (VB.NET), а Eiffel дозволяє вказувати які класи мають доступ до будь-яких членів.
Успадкування (наслідування)
Клас може мати «підкласи», спеціалізовані, розширені версії надкласу. Можуть навіть утворюватись цілі дерева успадкування. Наприклад, клас Собака
може мати підкласи Коллі
, Пекінес
, Вівчарка
тощо. Так, Сірко
може бути екземпляром класу Вівчарка
. Підкласи успадковують атрибути та поведінку своїх батьківських класів, і можуть вводити свої власні. Успадкування може бути одиничне (один безпосередній батьківський клас) та множинне (кілька батьківських класів). Це залежить від вибору програміста, який реалізовує клас та мови програмування. Так, наприклад, в Java дозволене лише одинарне успадкування, а в С++ і те й інше.
Абстрагування
Спрощення складної дійсності шляхом моделювання класів, що відповідають проблемі, та використання найприйнятнішого рівня деталізації окремих аспектів проблеми. Наприклад Собака
Сірко
більшу частину часу може розглядатись як Собака
, а коли потрібно отримати доступ до інформації специфічної для собак породи коллі — як Коллі
і як Тварина
(можливо, батьківський клас Собака
) під час підрахунку тварин Петра.
Поліморфізм
Існує декілька видів поліморфізму в програмуванні. Один реалізовується шляхом реалізації ряду підпрограм (функцій, процедур, методів тощо) з однаковими іменами, але з різними параметрами. Залежно від того, що передається, і вибирається відповідна підпрограма. Щодо власне ООП, то під поліморфізмом розуміється можливість використання об'єктів(екземплярів) підкласів взамін батьківського класу. При цьому в кожному класі реалізуються одні і ті ж підпрограми з одними і тими ж параметрами. Так можна реалізувати клас Тварина
, з підкласами Свиня
та Собака
. Оскільки підкласи матимуть один інтерфейс взаємодії, тобто в кожному реалізований метод голос()
, то можна підставляти в один і той же код, замість батьківського класу, об'єкт одного з підкласів і отримати різний звук або Гав
, або Рох-рох
. На практиці, підставновка реалізується шляхом присвоєнню змінній з типом батьківського класу (Тварина
) посилання на об'єкт підкласу (на Свиня
або Собака
).
Прототипно-орієнтоване програмування
Не всі з перелічених вище концепцій присутні в усіх об'єкто-орієнтованих мовах програмування. Зокрема, в прототипно-орієнтованому програмуванні не використовуються класи. Як наслідок, зовсім інша, але аналогічна термінологія використовується для визначення об'єкта та екземпляра в цих мовах.
Відкрита рекурсія
У мовах, які підтримують відкриту рекурсію, об'єктні методи можуть викликати інші методи того самого об'єкта (включаючи себе), як правило, використовуючи спеціальну змінну або ключове слово під назвою this
або self
. Ця змінна має ; це дозволяє методу, визначеному в одному класі, викликати інший метод, який визначено пізніше, в якомусь його підкласі.
ООП мови
Перша ООП мова — Simula (1967). Smalltalk (1972 — 1980) ще один приклад ранніх ООП мов, на якій відбувалось апробація принципів ООП. Неповний список ООП мов:
- ActionScript (3.0)
- Ada
- C#
- Cyclone
- D
- Dylan
- Eiffel
- F#
- Java
- JavaScript
- JScript. NET
- Object Pascal
- Objective-C
- Perl
- PHP
- PowerBuilder
- Python
- Ruby
- Scala
- Swift
- Vala
- VB.NET
- [ru]
- [en]
Критика
- Результати дослідження Томаса Потока та інших не показали істотної різниці у продуктивності між ООП та процедурним підходами.
- Крістофер Дейт заявляє, що критичне порівняння ООП з іншими технологіями, зокрема, реляційною практикою є дуже складним через відсутність узгодженості та чіткого визначення ООП
- Едсгер Дейкстра "… чого суспільство переважно вимагає, так це панацеї. Звісно, панацея має різноманітні назви — інакше ви не продали б нічого подібного до «Structured Analysis and Design», «Software Engineering», «Maturity Models», «Management Information Systems», «Integrated Project Support Environments» «Object Orientation» та «Business Process Re-engineering» (останні відоміші, як IPSE, OO та BPR відповідно)."
Див. також
Примітки
- object-oriented // Англійсько-українсько-англійський словник наукової мови (фізика та споріднені науки). Частина І англійсько-українська / уклад. О. Кочерга, Є. Мейнарович. — 2010.
- object-oriented // Англійсько-український словник з математики та інформатики / уклад. Є. Мейнарович, М. Кратко. — 2010.
- object-oriented // Українсько-англійський словник з радіоелектроніки / Богдан Рицар, Леонід Сніцарук, Роман Мисак. — 2015.
- Гради Буч, Роберт А. Максимчук, Майкл У. Энгл, Бобби Дж. Янг, Джим Коналлен, Келли А. Хьюстон. Объектно-ориентированный анализ и проектирование с примерами приложений. М.: Вильямс, 2008.- 720с.
- Meyer, chapter 3
- Booch, chapter 2
- Armstrong, 2006.
- Команда разработчиков BLFS, «За пределами проекта „Linux® с нуля“». Версия 7.4, Том 1, стр.622
- Java. Объектно-ориентированное программирование с интерфейсами. Архів оригіналу за 16 серпня 2019. Процитовано 31 січня 2020.
- Введение в объектно-ориентированный JavaScript
- Понимание ООП в JavaScript
- ООП в функциональном стиле JavaScript. Архів оригіналу за 14 липня 2019. Процитовано 31 січня 2020.
- Разработка под Apple. Objective-C
- PHP: Основы ООП
- Введение в объектно-ориентированное программирование (ООП) на Python. Архів оригіналу за 7 серпня 2015. Процитовано 31 січня 2020.
- Apple Inc., «The Swift Programming Language», 2014
- Объектно-ориентированное программирование на языке Vala
- Potok, Thomas; Mladen Vouk; Andy Rindos (1999). Productivity Analysis of Object-Oriented Software Developed in a Commercial Environment (PDF). Software – Practice and Experience. 29 (10): 833—847. doi:10.1002/(SICI)1097-024X(199908)29:10<833::AID-SPE258>3.0.CO;2-P. ISSN 0038-0644. Процитовано 21 квітня 2010. (англ.)
- C. J. Date, Introduction to Database Systems, 6th-ed., Page 650 (англ.)
- EWD 1175 The strengths of the academic enterprise (англ.)
Література
- Armstrong, Deborah J. (February 2006). The Quarks of Object-Oriented Development. Communications of the ACM. 49 (2): 123—128. ISSN 0001-0782. Процитовано 8 серпня 2006.
- Meyer, Bertrand (1997). [en]. Prentice Hall. .
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Ob ye ktno oriyento vane programuva nnya 1 OOP inodi ob yektno zoriyento vane programuva nnya 2 1 3 angl Object oriented programming OOP odna z paradigm programuvannya yaka rozglyadaye programu yak mnozhinu ob yektiv sho vzayemodiyut mizh soboyu 4 Osnovu OOP skladayut taki koncepciyi yak inkapsulyaciya uspadkuvannya polimorfizm ta abstrakciya Odniyeyu z perevag OOP ye krasha modulnist programnogo zabezpechennya tisyachu funkcij procedurnoyi movi v OOP mozhna zaminiti kilkoma desyatkami klasiv iz svoyimi metodami Popri te sho cya paradigma z yavilas v 1960 h rokah vona ne mala shirokogo zastosuvannya do 1990 h koli rozvitok komp yuteriv ta komp yuternih merezh dav zmogu pisati nadzvichajno ob yemne i skladne programne zabezpechennya sho zmusilo pereglyanuti pidhodi do napisannya program Na tepereshnij chas bagato mov programuvannya abo pidtrimuyut OOP PHP Lua abo zh ye cilkom ob yekto oriyentovanimi zokrema Java C C Python Ruby i Objective C ActionScript 3 Swift Vala Ob yektno oriyentovane programuvannya syagaye svoyim korinnyam do stvorennya movi programuvannya Simula v 1960 h rokah odnochasno z posilennyam diskusij pro krizu programnogo zabezpechennya en Cherez uskladnennya aparatnogo ta programnogo zabezpechennya bulo duzhe vazhko zberegti yakist program Ob yekto oriyentovane programuvannya chastkovo rozv yazuye cyu problemu shlyahom nagoloshennya na modulnosti programi 5 Na vidminu vid tradicijnih poglyadiv koli programu rozglyadali yak nabir pidprogram abo yak perelik instrukcij komp yuteru OOP programi mozhna vvazhati sukupnistyu ob yektiv Vidpovidno do paradigmi ob yektno oriyentovanogo programuvannya kozhen ob yekt zdatnij otrimuvati povidomlennya obroblyati dani ta nadsilati povidomlennya inshim ob yektam Kozhen ob yekt svoyeridnij nezalezhnij avtomat z okremim priznachennyam ta vidpovidalnistyu 6 Zmist 1 Viznachennya OOP 2 Istoriya 3 Fundamentalni ponyattya 3 1 Klas 3 2 Ob yekt 3 3 Metod 3 4 Obmin povidomlennyami 3 5 Prihovuvannya informaciyi inkapsulyaciya 3 6 Uspadkuvannya nasliduvannya 3 7 Abstraguvannya 3 8 Polimorfizm 3 9 Prototipno oriyentovane programuvannya 3 10 Vidkrita rekursiya 4 OOP movi 5 Kritika 6 Div takozh 7 Primitki 8 LiteraturaViznachennya OOPred Na dumku Alana Keya rozrobnika movi Smalltalk yakogo vvazhayut odnim z batkiv zasnovnikiv OOP ob yekto oriyentovanij pidhid polyagaye v nastupnomu nabori osnovnih principiv Vse ye ob yektami Vsi diyi ta rozrahunki vikonuyutsya shlyahom vzayemodiyi obminu danimi mizh ob yektami pid chas yakoyi odin ob yekt potrebuye shob inshij ob yekt vikonav deyaku diyu Ob yekti vzayemodiyut nadsilayuchi j otrimuyuchi povidomlennya Povidomlennya ce zapit na vikonannya diyi dopovnenij naborom argumentiv yaki mozhut znadobitisya pid chas vikonannya diyi Kozhen ob yekt maye nezalezhnu pam yat yaka skladayetsya z inshih ob yektiv Kozhen ob yekt ye predstavnikom ekzemplyarom primirnikom klasu yakij virazhaye zagalni vlastivosti ob yektiv U klasi zadayetsya povedinka funkcionalnist ob yekta Takim chinom usi ob yekti yaki ye ekzemplyarami odnogo klasu mozhut vikonuvati odni j ti zh sami diyi Klasi organizovani u yedinu derevopodibnu strukturu z zagalnim korinnyam yaka nazivayetsya iyerarhiyeyu uspadkuvannya Pam yat ta povedinka zv yazani z ekzemplyarami deyakogo klasu avtomatichno dostupni bud yakomu klasu roztashovanomu nizhche v iyerarhichnomu derevi Takim chinom programa ye naborom ob yektiv sho mayut stan ta povedinku Ob yekti vzayemodiyut vikoristovuyuchi povidomlennya Buduyetsya iyerarhiya ob yektiv programa v cilomu ce ob yekt dlya vikonannya svoyih funkcij vona zvertayetsya do ob yektiv sho mistyatsya u nomu yaki svoyeyu chergoyu vikonuyut zapit shlyahom zvernennya do inshih ob yektiv programi Zvisno shob uniknuti neskinchennoyi rekursiyi u zvernennyah na yakomus etapi ob yekt transformuye zapit u povidomlennya do standartnih sistemnih ob yektiv sho dayutsya movoyu ta seredovishem programuvannya Stijkist ta kerovanist sistemi zabezpechuyutsya shlyahom chitkogo rozpodilu vidpovidalnosti ob yektiv za kozhnu diyu vidpovidaye pevnij ob yekt odnoznachnogo oznachennya interfejsiv mizhob yektnoyi vzayemodiyi ta povnoyi izolovanosti vnutrishnoyi strukturi ob yekta vid zovnishnogo seredovisha inkapsulyaciyi Istoriyared OOP viniklo v rezultati rozvitku ideologiyi procedurnogo programuvannya de dani j pidprogrami proceduri funkciyi yih obrobki formalno ne pov yazani Dlya podalshogo rozvitku ob yektooriyentovanogo programuvannya velike znachennya mayut ponyattya podiyi tak zvane podiyevo oriyentovane programuvannya i komponenti komponentne programuvannya KOP Formuvannya KOP vid OOP vidbulosya tak samo yak formuvannya modulnogo vid procedurnogo programuvannya proceduri sformuvalisya v moduli nezalezhni chastini kodu do rivnya zbirki programi tak ob yekti sformuvalisya v komponenti nezalezhni chastini kodu do rivnya vikonannya programi Vzayemodiya ob yektiv vidbuvayetsya za dopomogoyu povidomlen Rezultatom podalshogo rozvitku OOP mabut bude agentno oriyentovane programuvannya de agenti nezalezhni chastini kodu na rivni vikonannya Vzayemodiya agentiv vidbuvayetsya za dopomogoyu zmini seredovisha v yakij voni znahodyatsya Movni konstrukciyi konstruktivno ne pov yazani bezposeredno z ob yektami ale neobhidni yim dlya yih bezpechnoyi vinyatkovi situaciyi perevirki ta efektivnoyi roboti inkapsulyuyutsya vid nih v aspekti v aspektno oriyentovanomu programuvanni Sub yektno oriyentovane programuvannya rozshiryuye ponyattya ob yektiv shlyahom zabezpechennya bilsh unifikovanoyi i nezalezhnoyi vzayemodiyi ob yektiv Mozhe buti perehidnoyu stadiyeyu mizh OOP ta agentnim programuvannyam v chastini samostijnoyi yih vzayemodiyi Pershoyu movoyu programuvannya v yakij buli zaproponovani principi ob yektnoyi oriyentovanosti bula Simula Na moment svoyeyi poyavi v 1967 roci cya mova programuvannya zaproponuvala revolyucijni ideyi ob yekti klasi virtualni metodi tosho odnak ce vse ne bulo sprijnyato suchasnikami yak shos grandiozne Prote bilshist koncepcij buli rozvineni Alanom Keyem ta Denom Ingallsom en u movi Smalltalk Same vona stala pershoyu shiroko poshirenoyu ob yekto oriyentovanoyu movoyu programuvannya Narazi kilkist prikladnih mov programuvannya spisok mov sho realizuyut ob yekto oriyentovanu paradigmu ye najbilshim stosovno inshih paradigm V oblasti sistemnogo programuvannya dosi zastosovuyetsya paradigma procedurnogo programuvannya i zagalnoprijnyatoyu movoyu programuvannya ye mova C Hocha pri vzayemodiyi sistemnogo i prikladnogo rivniv operacijnih sistem stali pomitno vplivati movi ob yekto oriyentovanogo programuvannya Napriklad odniyeyu z najposhirenishih bibliotek multiplatformovogo programuvannya ye ob yekto oriyentovana biblioteka Qt napisana movoyu C Fundamentalni ponyattyared V rezultati doslidzhennya Debori Dzh Armstrong 7 komp yuternoyi literaturi sho bula vidana protyagom ostannih 40 rokiv vdalos vidokremiti fundamentalni ponyattya principi vikoristani u perevazhnij bilshosti viznachen ob yekto oriyentovanogo programuvannya Do nih nalezhit Klasred Dokladnishe Klas programuvannya ta Diagrama klasiv Klas viznachaye abstraktni harakteristiki deyakoyi sutnosti vklyuchno z harakteristikami samoyi sutnosti yiyi atributami abo vlastivostyami ta diyami yaki vona zdatna vikonuvati yiyi povedinkoyu metodami abo mozhlivostyami Napriklad klas Sobaka mozhe harakterizuvatis risami pritamannimi vsim sobakam zokrema poroda kolir hutra zdatnist gavkati Klasi vnosyat modulnist ta strukturovanist v ob yekto oriyentovanu programu Zazvichaj klas maye buti zrozumilim dlya ne programistiv sho znayutsya na predmetnij oblasti sho svoyeyu chergoyu znachit sho klas povinen mati znachennya v konteksti Takozh kod realizaciyi klasu maye buti dosit samodostatnim Vlastivosti ta metodi klasu razom nazivayutsya jogo chlenami Ob yektred Dokladnishe Ob yekt programuvannya ta Diagrama ob yektiv Okremij ekzemplyar klasu stvoryuyetsya pislya zapusku programi ta inicializaciyi poliv klasu Klas Sobaka vidpovidaye vsim sobakam shlyahom opisu yihnih spilnih ris ob yekt Sirko ye odnim okremim sobakoyu okremim variantom znachen harakteristik Sobaka maye hutro Sirko maye korichnevo bile hutro Ob yekt Sirko ye ekzemplyarom primirnikom klasu Sobaka Sukupnist znachen atributiv okremogo ob yekta nazivayetsya stanom Na osnovi klasu Sobaka mozhna takozh stvoriti inshij ob yekt Druzhok yakij vidriznyatimetsya vid ob yekta Sirko svoyim stanom napriklad kolorom hutra Obidva ob yekti Sirko i Druzhok ye ekzemplyarami klasu Sobaka Metodred Dokladnishe Metod programuvannya Mozhlivosti ob yekta Oskilki Sirko Sobaka vin mozhe gavkati Tomu gavkati ye odnim iz metodiv ob yekta Sirko Vin mozhe mati j inshi metodi zokrema misce abo yisti V mezhah programi vikoristannya metodu maye vplivati lishe na odin ob yekt vsi Sobaki mozhut gavkati ale treba shob gavkav lishe odin okremij sobaka Obmin povidomlennyamired Dokladnishe Obmin povidomlennyami Peredacha danih vid odnogo procesu inshomu abo nadsilannya viklikiv metodiv Prihovuvannya informaciyi inkapsulyaciya red Dokladnishe Prihovuvannya informaciyi Prihovuvannya detalej pro robotu klasiv vid ob yektiv sho yih vikoristovuyut abo nadsilayut yim povidomlennya Tak napriklad klas Sobaka maye metod gavkati Realizaciya cogo metodu opisuye yak same povinno vidbuvatis gavkannya primirom spochatku vdihnuti a potim vidihnuti na obranij chastoti ta guchnosti Petro hazyayin psa Sirka ne povinen znati yak vin gavkaye Inkapsulyaciya dosyagayetsya shlyahom vkazuvannya yaki klasi mozhut zvertatisya do chleniv ob yekta Yak naslidok kozhen ob yekt nadaye kozhnomu inshomu klasu pevnij interfejs chleni dostupni inshim klasam Inkapsulyaciya potribna dlya togo abi zapobigti vikoristannyu koristuvachami interfejsu tih chastin realizaciyi yaki shvidshe za vse budut zminyuvatis Ce dast zmogu polegshiti vnesennya zmin bez potrebi zminyuvati j koristuvachiv interfejsu Napriklad interfejs mozhe garantuvati sho shenyata mozhut dodavatis lishe do ob yektiv klasu Sobaka kodom samogo klasu Chasto chleni klasu poznachayutsya yak publichni angl public zahisheni angl protected ta privatni angl private viznachayuchi chi dostupni voni vsim klasam pidklasam abo lishe do klasu v yakomu yih viznacheno Deyaki movi programuvannya jdut she dali Java vikoristovuye klyuchove slovo private dlya obmezhennya dostupu sho bude dozvolenij lishe z metodiv togo samogo klasu protected lishe z metodiv togo samogo klasu i jogo nashadkiv ta z klasiv iz togo zh samogo paketu C ta VB NET vidkrivayut deyaki chleni lishe dlya klasiv iz tiyeyi zh zbirki shlyahom vikoristannya klyuchovogo slova internal C abo Friend VB NET a Eiffel dozvolyaye vkazuvati yaki klasi mayut dostup do bud yakih chleniv Uspadkuvannya nasliduvannya red Dokladnishe Uspadkuvannya programuvannya Klas mozhe mati pidklasi specializovani rozshireni versiyi nadklasu Mozhut navit utvoryuvatis cili dereva uspadkuvannya Napriklad klas Sobaka mozhe mati pidklasi Kolli Pekines Vivcharka tosho Tak Sirko mozhe buti ekzemplyarom klasu Vivcharka Pidklasi uspadkovuyut atributi ta povedinku svoyih batkivskih klasiv i mozhut vvoditi svoyi vlasni Uspadkuvannya mozhe buti odinichne odin bezposerednij batkivskij klas ta mnozhinne kilka batkivskih klasiv Ce zalezhit vid viboru programista yakij realizovuye klas ta movi programuvannya Tak napriklad v Java dozvolene lishe odinarne uspadkuvannya a v S i te j inshe Abstraguvannyared Dokladnishe Abstraguvannya programuvannya Sproshennya skladnoyi dijsnosti shlyahom modelyuvannya klasiv sho vidpovidayut problemi ta vikoristannya najprijnyatnishogo rivnya detalizaciyi okremih aspektiv problemi Napriklad Sobaka Sirko bilshu chastinu chasu mozhe rozglyadatis yak Sobaka a koli potribno otrimati dostup do informaciyi specifichnoyi dlya sobak porodi kolli yak Kolli i yak Tvarina mozhlivo batkivskij klas Sobaka pid chas pidrahunku tvarin Petra Polimorfizmred Dokladnishe Polimorfizm programuvannya Isnuye dekilka vidiv polimorfizmu v programuvanni Odin realizovuyetsya shlyahom realizaciyi ryadu pidprogram funkcij procedur metodiv tosho z odnakovimi imenami ale z riznimi parametrami Zalezhno vid togo sho peredayetsya i vibirayetsya vidpovidna pidprograma Shodo vlasne OOP to pid polimorfizmom rozumiyetsya mozhlivist vikoristannya ob yektiv ekzemplyariv pidklasiv vzamin batkivskogo klasu Pri comu v kozhnomu klasi realizuyutsya odni i ti zh pidprogrami z odnimi i timi zh parametrami Tak mozhna realizuvati klas Tvarina z pidklasami Svinya ta Sobaka Oskilki pidklasi matimut odin interfejs vzayemodiyi tobto v kozhnomu realizovanij metod golos to mozhna pidstavlyati v odin i toj zhe kod zamist batkivskogo klasu ob yekt odnogo z pidklasiv i otrimati riznij zvuk abo Gav abo Roh roh Na praktici pidstavnovka realizuyetsya shlyahom prisvoyennyu zminnij z tipom batkivskogo klasu Tvarina posilannya na ob yekt pidklasu na Svinya abo Sobaka Prototipno oriyentovane programuvannyared Ne vsi z perelichenih vishe koncepcij prisutni v usih ob yekto oriyentovanih movah programuvannya Zokrema v prototipno oriyentovanomu programuvanni ne vikoristovuyutsya klasi Yak naslidok zovsim insha ale analogichna terminologiya vikoristovuyetsya dlya viznachennya ob yekta ta ekzemplyara v cih movah Vidkrita rekursiyared U movah yaki pidtrimuyut vidkritu rekursiyu ob yektni metodi mozhut viklikati inshi metodi togo samogo ob yekta vklyuchayuchi sebe yak pravilo vikoristovuyuchi specialnu zminnu abo klyuchove slovo pid nazvoyu this abo self Cya zminna maye piznye priv yazuvannya ce dozvolyaye metodu viznachenomu v odnomu klasi viklikati inshij metod yakij viznacheno piznishe v yakomus jogo pidklasi OOP movired Persha OOP mova Simula 1967 Smalltalk 1972 1980 she odin priklad rannih OOP mov na yakij vidbuvalos aprobaciya principiv OOP Nepovnij spisok OOP mov ActionScript 3 0 Ada C C Cyclone D Dylan 8 Eiffel F Io inshi movi Java 9 JavaScript 10 11 12 JScript NET Object Pascal Objective C 13 Perl PHP 14 PowerBuilder Python 15 Ruby Scala Swift 16 Vala 17 VB NET Visual DataFlex ru Xbase en X Kritikared Rezultati doslidzhennya Tomasa Potoka ta inshih ne pokazali istotnoyi riznici u produktivnosti mizh OOP ta procedurnim pidhodami 18 Kristofer Dejt zayavlyaye sho kritichne porivnyannya OOP z inshimi tehnologiyami zokrema relyacijnoyu praktikoyu ye duzhe skladnim cherez vidsutnist uzgodzhenosti ta chitkogo viznachennya OOP 19 Edsger Dejkstra chogo suspilstvo perevazhno vimagaye tak ce panaceyi Zvisno panaceya maye riznomanitni nazvi inakshe vi ne prodali b nichogo podibnogo do Structured Analysis and Design Software Engineering Maturity Models Management Information Systems Integrated Project Support Environments Object Orientation ta Business Process Re engineering ostanni vidomishi yak IPSE OO ta BPR vidpovidno 20 Div takozhred Mova programuvannya Paradigma programuvannya Komponentno oriyentovane programuvannya Proektuvannya za kontraktom Kompoziciya programuvannya UML Zakon Demetri Maket ob yekta Multiparadigmalna mova programuvannyaPrimitkired a b object oriented Anglijsko ukrayinsko anglijskij slovnik naukovoyi movi fizika ta sporidneni nauki Chastina I anglijsko ukrayinska uklad O Kocherga Ye Mejnarovich 2010 object oriented Anglijsko ukrayinskij slovnik z matematiki ta informatiki uklad Ye Mejnarovich M Kratko 2010 object oriented Ukrayinsko anglijskij slovnik z radioelektroniki Bogdan Ricar Leonid Snicaruk Roman Misak 2015 Gradi Buch Robert A Maksimchuk Majkl U Engl Bobbi Dzh Yang Dzhim Konallen Kelli A Hyuston Obektno orientirovannyj analiz i proektirovanie s primerami prilozhenij M Vilyams 2008 720s Meyer chapter 3 Booch chapter 2 Armstrong 2006 Komanda razrabotchikov BLFS Za predelami proekta Linux s nulya Versiya 7 4 Tom 1 str 622 Java Obektno orientirovannoe programmirovanie s interfejsami Arhiv originalu za 16 serpnya 2019 Procitovano 31 sichnya 2020 Vvedenie v obektno orientirovannyj JavaScript Ponimanie OOP v JavaScript OOP v funkcionalnom stile JavaScript Arhiv originalu za 14 lipnya 2019 Procitovano 31 sichnya 2020 Razrabotka pod Apple Objective C PHP Osnovy OOP Vvedenie v obektno orientirovannoe programmirovanie OOP na Python Arhiv originalu za 7 serpnya 2015 Procitovano 31 sichnya 2020 Apple Inc The Swift Programming Language 2014 Obektno orientirovannoe programmirovanie na yazyke Vala Potok Thomas Mladen Vouk Andy Rindos 1999 Productivity Analysis of Object Oriented Software Developed in a Commercial Environment PDF Software Practice and Experience 29 10 833 847 doi 10 1002 SICI 1097 024X 199908 29 10 lt 833 AID SPE258 gt 3 0 CO 2 P ISSN 0038 0644 Procitovano 21 kvitnya 2010 angl C J Date Introduction to Database Systems 6th ed Page 650 angl EWD 1175 The strengths of the academic enterprise angl Literaturared Armstrong Deborah J February 2006 The Quarks of Object Oriented Development Communications of the ACM 49 2 123 128 ISSN 0001 0782 Procitovano 8 serpnya 2006 Meyer Bertrand 1997 Object Oriented Software Construction en Prentice Hall ISBN 0 13 629155 4 Otrimano z https uk wikipedia org w index php title Ob 27yektno oriyentovane programuvannya amp oldid 43780723