Формальне визначення / лічильна частина в математиці для "Об'єктів" об'єктно-орієнтованих моделей


9

Це питання, яке я задав на форумі з математики SE, і мене тут направили. Отже, ось питання -

Я новачок як в формальній математиці, так і в теоретичній інформатиці, тому, будь ласка, візьміть мене зі собою, якщо ви вважаєте, що моє питання неправильно поставлено. Об'єктно-орієнтоване моделювання здається дуже корисним у визначенні складних взаємодій при моделюванні реального світу. Але в основному використовується в програмуванні. Мені було цікаво, чи є у нас схожа концепція з математики. Коли ми займаємось програмуванням, ми можемо зрозуміти поняття "Об'єкти" та "Об'єктно-орієнтоване програмування" та просто реалізувати його. Але чи є у нас формальне визначення поняття "Об'єкти" з точки зору теорії заданих? Або з цього приводу будь-яка інша формальна математична теорія?

Чи можемо ми реалізувати / формально визначити три концепції моделювання первинного об'єктного орієнтування: 1. Інкапсуляція 2. Спадщина 3. Поліморфізм

Я знаю, що питання занадто широке, але дуже вдячний, якщо ви можете надати деякі покажчики, щоб я міг краще зрозуміти ці поняття.


2
Насправді є два питання, як я це бачу. Попросити формалізму об'єктно-орієнтованих концепцій. Інший - прохання об'єктно-орієнтованих понять з математики. Можливо, було б краще задати два окремих питання. Там багато матеріалу, що дає відповіді на перше питання, хоча, мабуть, лише трохи на друге. (І, можливо, завтра я знайду час відповісти на питання.)
Дейв Кларк

Дякую .. ви можете, будь ласка, запропонувати мені матеріал для формалізації об'єктно-орієнтованих концепцій, який вважається стандартним або «текстовою книгою»? Я зачекаю вашої відповіді на другий .... :)
користувач1260776

2
Стандартна книга (кілька років тому) - "Теорія об'єктів" . Найновіша робота - « Легка Java» . Існує також семінар семінарів під назвою " Основи об'єктно-орієнтованих мов", який займається цими питаннями.
Дейв Кларк

Дякую! Пройдемо через них ... Також я натрапив на "обчислення лямбда", яке тісно пов'язане з моїм питанням ..
user1260776

Відповіді:


9

Відповідь складна з двох причин.

  1. Різні люди з інформатики трактують термін «об’єкт» по-різному. Одне полягає в тому, що об’єкт складається з деяких даних і операцій, упакованих разом. Інша полягає в тому, що об’єкт - це все, але також має "стан", тобто це певна форма змінної сутності.

  2. Існують глибокі філософські питання, що стосуються того, що означає "зміна" (і що означає "сутність", як вона постійно змінюється), і чи фактично математичні описи фіксують змінні сутності.

Об'єкт у сенсі даних + операції : Це досить стандартно в математиці. Візьміть будь-яку підручник з теорії груп. Десь буде таке визначення, як . (Це оператор кон'югації.) - "об'єкт" у цій термінології. Він має деякі дані ( ) та операцію . Або ви можете зробити його більш об'єктним-y, взявши пару або потрійнийгодг(х)=гхг-1годггхгхг-1г,хгхг-1г,хгхг-1,хг-1хг. Ви можете сконструювати подібні "об'єкти" на будь-якій мові програмування, яка має лямбда-абстракцію та певний спосіб формування кортежів. "Теорія об'єктів" Абаді та Карделлі широко займається подібними предметами.

Об'єкти зі станом (або об'єкти, що змінюються ): Чи є в математиці такі речі? Я не думаю, що так. Я не бачив, щоб математик говорив про щось, що змінюється, не в його професійному житті. Ньютон використовував для написання позицію частинки, яка нібито змінюється, і для її швидкості зміни. Зрештою, математики з'ясували, що те, про що говорить Ньютон, - це функція від реальних чисел у векторному просторі, а - ще одна така функція, яка була першою похідноюхх˙х(т)х˙х(т) з повагою до т. Звідси багато математиків глибокого мислення дійшли висновку, що змін насправді не існує, і все, що у вас є, є функціями часу. Але те, що змінювалося в ньютонівській механіці, було не позиція, а частинка . Позиція - це миттєвий стан. Жоден математик чи фізик не претендує на те, що частинка є математичною ідеєю. Це фізична річ.

Так і з предметами. Вони - "фізичні" речі, а держави - їх математичні ознаки. Для приємного обговорення цього аспекту див. Розділ 3 Структура Абельсона та Суссмана та інтерпретація комп'ютерних програм . Це підручник у MIT, і вони навчають його всім вченим та інженерам, які, я думаю, розуміють "фізичні" речі ідеально.

Те, що частинки не є математичними, не означає, що ми не можемо мати справу з ними математично. Якщо ви попросите математика змоделювати систему з двома частинками, він одразу складе дві функції та зателефонує їмх1(т) і х2(т). Отже, дві частинки зводяться до двох безглуздих показників (1 і 2). Це математичний спосіб сказати, що ми не знаємо, що це за частинки, і нам все одно. Все, що нам потрібно знати, - це те, що їхні позиції розвиваються незалежно (або окремо). Отже, ми будемо моделювати їх за двома окремими функціями.

Аналогічно стандартним математичним способом моделювання об'єктно-орієнтованих програм є трактування кожного об'єкта як індексу в просторі стану. Єдина відмінність полягає в тому, що оскільки об’єкти приходять і йдуть, а структура системи є динамічною, нам потрібно поширити її на модель "можливого світу", де кожен світ - це сукупність індексів. Виділення та розміщення предметів передбачало б перехід від одного світу до іншого.

Однак є проблема. На відміну від механіки, ми хочемо, щоб стан наших об’єктів був інкапсульований . Але математичні описи об'єктів ставлять стани всюди, повністю руйнуючи інкапсуляцію. Існує математичний трюк під назвою "реляційна параметричність", який можна використовувати для скорочення речей. Я зараз не буду займатися цим, окрім наголосу, що це математичний трюк, а не дуже концептуальне пояснення інкапсуляції. Другий спосіб моделювання об'єктів математично, за допомогою інкапсуляції, полягає в тонкому стані та описі поведінки об'єкта з погляду спостережуваних подій. Для гарного обговорення обох цих моделей я можу віднести вас до моєї статті під назвою « Об’єкти» та класів на мовах, схожих на алголь .


[Примітка додано:]

Приємний аналіз математичної основи об'єктів можна знайти у статті Вільяма Кука " Про розуміння абстракції даних, переглянута ".


2
Я знав, що хтось тут зможе відповісти ...
Андрій Бауер

Дякую Удай, за ваш час та детальну відповідь. Коли я задав це запитання, я думав лише в сенсі "дані + операції", і мені ніколи не спадало на думку, що теорія груп може представляти "ОБ'ЄКТ" як "дані + операції". Також я перейду за посиланнями, які ви вказали.
користувач1260776

@AndrejBauer Так, я, певно, перебрався за борт. ОП, ймовірно, використовував "математику" просто як слово для формалізації, на відміну від дисципліни.
Удай Редді

@Uday, у мене, можливо, не було правильно поставлених питань, але коли я мав на увазі "математика", я чітко мав на увазі формальну математику. Моя думка полягала в тому, що "теорія множин" формує основу математики, як "пояснити" або "вивести" об'єкти OO-моделювання з точки зору теорії множин. Як ми з’єднаємо всі ці теорії, об'єкти та формальну логіку (наприклад, логіка першого порядку) ... "Хоча я не розумію вашої відповіді в повній мірі, я можу зрозуміти те, що ви сказали, і я запевняю вас, ця відповідь я очікувала. Дякую !! (мої ідеї г не повністю організовані, пробачте, я все ще новачок :))
користувач1260776

2
@ user1260776. Я розумію. Але моя думка полягає в тому, що «формальність» і «математика» - це різні ідеї. Ви можете формалізувати поняття, не зводячи їх до математики (або виводячи їх з них). Ньютон формалізував механіку, але не намагався зменшити "частинки" до "наборів". Я особисто дуже радий слідувати керівництву Ньютона і визнавати речі, які я не зводя до наборів. Але, я думаю, ми повинні знати, коли зменшити, а коли не зменшити. Пройшовши стажування фізика, мені здається, що це зробити досить просто. Для багатьох інших вчених-комп'ютерів це може бути не так просто.
Удай Редді

0

Думаю, є досить хороший теоретичний опис об'єктів у старої класичної книги "Структура та інтерпретація комп'ютерних програм" [1], зробленої abelson & sussman, на основі схеми (ліпський варіант). тепер безкоштовно онлайн! це показує, як поняття орієнтації на об'єкт можна вбудовувати навіть в обчислення лямбда (~ aka Lisp), якщо у вас є якийсь механізм для зберігання локального стану. наскільки я розумію, це був STD підручник для багатьох років. не кажучи, що це найкраща відповідь на subj; я впевнений, що є інші кращі у цього птаха

Я не думаю, що це було повністю формалізовано де завгодно, що я чув, але об'єкти, що говорять слабко, в основному складаються з коду + даних у вигляді

  • методи (з параметрами)
  • стан, тобто змінні екземпляри

в деякій капсульованій формі. Можливо, інші аспекти, такі як спадкування, не є принциповими. як зазначено в abelson & sussman, те, що вони називають "синтаксичним цукром".

[1] структура та інтерпретація комп'ютерних програм abelson & sussman


3
Звичайно об'єкти в об'єктно-орієнтованому програмуванні були формалізовані. Є книги Абаді та Карделлі, Кастанга та Кіма Брюса, присвячені цій темі. Проведено 10 років семінарів із серії FOOL, присвячених основам об'єктно-орієнтованого програмування. Конференції ECOOP та OOPSLA регулярно мали доповіді про основи ОО. Дійсно, перший документ про семантику ОО - близько 20 років.
Дейв Кларк

@vzn, дякую за відповідь. Я перегляну запропоновані вами книги ...
user1260776

DC-- Я погано сформулював це. точніше, вважати безпечним сказати, що формальні визначення того, що саме є "об'єктом" або які ключові / основні компоненти ООП, як правило, істотно відрізняються в літературі. визначення, ймовірно, з часом значно розширилися. наприклад, я підозрюю, що спадкування було додано пізніше, і первісна ідея була головним чином просто кодом + даними у капсульованому вигляді.
vzn

Інший приклад функції OOP, яка не узгоджена як основна з того, що я можу сказати, - це багатократне успадкування, яке бачимо, наприклад, на C ++, але навмисно уникається в Java на користь інтерфейсів. тощо
vzn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.