Я не можу придумати кращого місця серед рідних побратимів, щоб поставити таке питання. Спочатку я хотів запитати "Чи пітон чиста мова ОО"? але враховуючи неприємності та певний дискомфорт, які люди відчувають, намагаючись визначити термін, я вирішив почати з отримання чіткого визначення самого терміна.
Починати було б досить справедливо з листування доктора Алана Кей, який придумав цей термін (зверніть увагу на натхнення в біологічній аналогії з клітинами або іншими живими об'єктами).
Існують такі способи підходу до завдання:
- Дайте порівняльний аналіз, перерахувавши мови програмування, які можуть демонструвати (або не робити цього) певні властивості, унікальні та достатні для визначення терміна (хоча Smalltalk, Scala,
Javaтощо) - можливі приклади, але IMO цей спосіб не здається дійсно завершеним ні плідно ) - Дайте формальне визначення (або близьке до нього, наприклад, більш академічним чи математичним стилем).
- Дайте філософське визначення, яке б повністю спиралося на семантичний контекст конкретної мови або апріорний досвід програмування (повинен бути певний шанс на успішне пояснення громадою).
Моя поточна версія: "Якщо певна мова програмування ( формальна ), яка може ( граматично ) диференціювати операції та операнди, а також робити висновок про тип кожного операнду, чи є цей тип об'єктом (у значенні OOP) чи ні, ми називаємо така мова є мовою ОО, якщо існує хоча б один тип цієї мови, який є об'єктом. Нарешті, якщо всі типи мови також є об'єктами, ми визначаємо, що така мова є чистою (сильною) мовою ОО ".
Буду вдячний за будь-яке можливе його вдосконалення. Як ви бачите, я просто зробив визначення залежним від терміна "об'єкт" (часто повністю посилається на клас об'єктів).
[EDIT]
Крім того, я використовую (на щастя добре зрозуміле) поняття типу, як у набраних мовах. Програмування типу даних або орієнтоване на тип програмування - це не лише синтаксична інтерпретація (програмного тексту, тобто способу поводження з певними значеннями літералів та змінних даних - те, що перетворюється на безпеку типу), але може бути віднесено до граматики мови та вивчатися формально (використовуючи математичну логіку) як так звані системи типів . Зауважте, що вимога системи конкретного типу мати так званий універсальний тип - це один із способів визначення чистоти мови ОО (є шляхи розширення цієї семантичної форми).
NB
як відповісти :
- це допомагає, якщо ви вказали книгу чи довідник, який підтримує / пояснює ваше розуміння термінології та понять (зазвичай, хороше визначення охоплює або посилається на всі залежні поняття, крім елементарних).
- по можливості вкажіть відступну категорію вашої відповіді / визначення, якщо не зрозуміло інакше (див. вище: 1 - на прикладі мови, 2 - математична логіка, 3 - технічний опис та філософія програмування)
- класифікація є важливою (а також тому, що термін pure-OO включений у термін OO), відповідаючи на спробу змістити елементи парадигми OO з інших добре відомих методологій (і аж ніяк не переплутати / перекривати їх, наприклад, як правило, елементи модульного програмування можуть бути охоплені / втілена у програмуванні OO): спробуйте відрізнити OOP від (включаючи або бути частиною) функціонального програмування, логічного програмування (особливо сильно спеціалізованого), типів даних Abstarct (ADT), модульного, метапрограмування (генерики та час розширення LISP), Контракти (наприклад, Ейфелева), орієнтована на аспекти (AO) (різниця між декларативною та функціональною класифікацією, а також історичними визначеннями структурованої Діккстри є чіткою)
про складність дати формальне визначення : на диво досить легко дати математичний опис ООП у формі певної логічної (формальної) системи (найімовірніше, типу) і визначати одне поняття за іншим. Можна навіть спробувати зробити щось більш практичне, застосувавши цей формалізм для перевірки безпеки або нових аспектів дизайну мови, ніж просто абстрактні розваги чи заняття (також формулювання пошуку OOP в інтуїціоністській теорії типу , залежних типів , незалежно, у формаціях FOL як лямбдальне числення і просто за допомогою теорії категорій). Тут головним є те, що не дивнотакі формулювання IMO сильно упереджені (хибні), швидше за все, спочатку неповне розуміння ООП (в комп'ютерній інженерії) і в кінцевому підсумку після цього практично недоступне (таким чином, навряд чи сприяє тому назад у програмуванні - можливо, за винятком певного відсотка, що знаходить додатки назад із формального світу, будучи інтегрована в популярні мови ).
Так що так, важко дати саме «добре» визначення, а не лише визначення. Але я з позитивом запитую це через ваш досвід та безпосередню участь, хлопці.