Definicja formalna / część przeciwna w matematyce dla „obiektów” modeli obiektowych


9

To pytanie zadałem na forum matematyki SE i zostałem tutaj skierowany. Oto pytanie

Jestem nowicjuszem zarówno w matematyce formalnej, jak i informatyce teoretycznej, więc proszę o wyrozumiałość, jeśli okaże się, że moje pytanie nie jest odpowiednio sformułowane. Modelowanie obiektowe wydaje się bardzo przydatne w definiowaniu złożonych interakcji podczas symulacji świata rzeczywistego. Ale jest to najczęściej używane w programowaniu. Zastanawiałem się, czy mamy podobną koncepcję w matematyce. Kiedy programujemy, możemy zrozumieć pojęcie „Obiektów” i „Programowania obiektowego” i po prostu je wdrożyć. Ale czy mamy formalną definicję „obiektów” w kategoriach teorii zbiorów? A może jakaś inna formalna teoria matematyczna?

Czy możemy wdrożyć / formalnie zdefiniować trzy podstawowe koncepcje modelowania obiektowego - 1. Enkapsulacja 2. Dziedziczenie 3. Polimorfizm

Wiem, że pytanie jest zbyt szerokie, ale naprawdę doceniłbym, gdybyś mógł podać także pewne wskazówki, aby lepiej zrozumieć te pojęcia.


2
Tak naprawdę to są dwa pytania. Prosi się o formalizm pojęć obiektowych. Drugi domaga się pojęć obiektowych w matematyce. Być może lepiej byłoby zadać dwa osobne pytania. Istnieje mnóstwo materiałów odpowiadających na pierwsze pytanie, choć prawdopodobnie tylko na trochę za drugim. (A może jutro znajdę czas, aby odpowiedzieć na pytanie.)
Dave Clarke

Dzięki .. czy mógłbyś zasugerować mi materiał do sformalizowania pojęć obiektowych, który jest uważany za standardowy lub „podręcznik”? Poczekam na twoją odpowiedź na drugą .... :)
user1260776

2
Standardowa książka (sprzed kilku lat) to Teoria przedmiotów . Nowszą pracą jest Featherweight Java . Istnieje również seria warsztatów zatytułowanych „ Podstawy języków zorientowanych obiektowo”, poświęconych tym zagadnieniom.
Dave Clarke

Dzięki! Przejdę przez nich ... Ponadto natknąłem się na "rachunek lambda", który jest ściśle związany z moim pytaniem ..
użytkownik1260776

Odpowiedzi:


9

Odpowiedź jest skomplikowana z dwóch powodów.

  1. Różni ludzie informatyki inaczej interpretują termin „obiekt”. Jednym z nich jest to, że obiekt składa się z niektórych danych i operacji spakowanych razem. Drugim jest to, że obiekt jest wszystkim, ale ma również „stan”, tj. Jest jakąś formą zmiennej bytu.

  2. Istnieją głębokie kwestie filozoficzne związane z tym, co oznacza „zmiana” (i co oznacza „byt”, ponieważ ciągle się zmienia) oraz czy opisy matematyczne rzeczywiście wychwytują zmienne byty.

Obiekt w sensie danych + operacji : jest to dość standard w matematyce. Weź dowolny podręcznik dotyczący teorii grup. Będzie miał gdzieś taką definicję jakhg(x)=gxg1. (Jest to operator koniugacji.)hgjest „przedmiotem” w tej terminologii. Zawiera pewne dane (g) i operacja xgxg1. Możesz też uczynić go bardziej obiektowym, biorąc paręg,xgxg1 lub potrójny sol,xsolxsol-1,xsol-1xsol. Możesz budować tego rodzaju „obiekty” w dowolnym funkcjonalnym języku programowania, który ma abstrakcję lambda i jakiś sposób tworzenia krotek. „Teoria przedmiotów” Abadiego i Cardellego obszernie zajmuje się przedmiotami tego rodzaju.

Obiekty ze stanem (lub obiekty, które się zmieniają ): Czy matematyka ma takie rzeczy? Nie wydaje mi się Nie widziałem matematyka opowiadającego o czymkolwiek, co się zmienia, nie w jego / jej życiu zawodowym. Newton pisałx dla pozycji cząsteczki, która podobno się zmienia, oraz x˙za tempo zmian. Matematycy w końcu zorientowali się, że to, o czym mówił Newton, było funkcjąx(t) z liczb rzeczywistych w przestrzeń wektorową i x˙ była kolejną taką funkcją, która była pierwszą pochodną x(t) z szacunkiem do t. Na podstawie tego wielu głęboko myślących matematyków doszło do wniosku, że zmiany tak naprawdę nie istnieją, a wszystko, co macie, to funkcje czasu. Ale w mechanice Newtona zmieniła się nie pozycja, ale cząstka . Pozycja jest stanem chwilowym. Żaden matematyk ani fizyk nie udawałby, że cząstka jest ideą matematyczną. To jest rzecz fizyczna.

Tak jest z przedmiotami. Są to rzeczy „fizyczne”, a stany są ich matematycznymi atrybutami. Miłą dyskusję na temat tego aspektu można znaleźć w rozdziale 3 Struktury i interpretacji programów komputerowych Abelsona i Sussmana . Jest to podręcznik na MIT i uczą go wszyscy naukowcy i inżynierowie, którzy, jak sądzę, doskonale rozumieją „fizyczne” rzeczy.

Fakt, że cząstki nie są matematyczne, nie oznacza, że ​​nie możemy sobie z nimi poradzić matematycznie. Jeśli poprosisz matematyka, aby wymodelował układ dwucząstkowy, natychmiast utworzy dwie funkcje i je wywołax1(t) i x2)(t). Dwie cząstki redukują się więc do dwóch bezsensownych wskaźników (1 i 2). W ten sposób matematyk mówi, że nie wiemy, czym są te cząsteczki, i nie obchodzi nas to. Musimy tylko wiedzieć, że ich stanowiska ewoluują niezależnie (lub osobno). Dlatego modelujemy je według dwóch osobnych funkcji.

Podobnie standardowym matematycznym sposobem modelowania programów zorientowanych obiektowo jest traktowanie każdego obiektu jako indeksu w przestrzeni stanu. Jedyną różnicą jest to, że skoro obiekty przychodzą i odchodzą, a struktura systemu jest dynamiczna, musimy rozszerzyć ją na model „możliwego świata”, w którym każdy świat jest w zasadzie zbiorem indeksów. Alokacja i dezalokacja przedmiotów wiązałyby się z przemieszczaniem się z jednego świata do drugiego.

Jest jednak problem. W przeciwieństwie do mechaniki chcemy, aby stan naszych obiektów był zamknięty . Ale matematyczne opisy obiektów umieszczają stany w całym miejscu, całkowicie niszcząc hermetyzację. Istnieje matematyczna sztuczka zwana „parametrycznością relacyjną”, której można użyć, aby przywrócić rzeczy do rozmiarów. Nie będę się w to teraz zajmował, poza podkreśleniem, że jest to matematyczna sztuczka, a nie bardzo koncepcyjne wyjaśnienie enkapsulacji. Drugim sposobem matematycznego modelowania obiektów z enkapsulacją jest precyzowanie stanów i opisywanie zachowania obiektu w kategoriach obserwowalnych zdarzeń. Aby dobrze omówić oba te modele, mogę odnieść się do mojego artykułu zatytułowanego Przedmioty i klasy w językach podobnych do Algolu .


[Uwaga dodana:]

Dobrą analizę matematycznych podstaw obiektów można znaleźć w artykule Williama Cooka „ O zrozumieniu abstrakcji danych, ponownie ”.


2
Wiedziałem, że ktoś tutaj będzie w stanie odpowiedzieć ...
Andrej Bauer,

Dzięki Uday, za poświęcony czas i szczegółową odpowiedź. Kiedy zadałem to pytanie, myślałem tylko w sensie „danych + operacji” i nigdy nie przyszło mi do głowy, że teoria grup może reprezentować „OBIEKT” jako „dane + operacje”. Również przejdę przez linki, o których wspomniałeś.
user1260776

@AndrejBauer. Tak, prawdopodobnie wypadłem za burtę. OP prawdopodobnie używał „matematyki” jako słowa formalizacji, a nie dyscypliny.
Uday Reddy

@Nie mogłem poprawnie sformułować pytania, ale kiedy miałem na myśli matematykę, miałem na myśli matematykę formalną. Myślałem, że „teoria mnogości” stanowi podstawę matematyki, jak „wyjaśnić” lub „wyprowadzić” obiekty modelowania OO w kategoriach teorii mnogości. logika pierwszego rzędu) ... „Chociaż nie rozumiem w pełni twojej odpowiedzi, jestem w stanie„ wyczuć ”to, co powiedziałeś, i zapewniam cię, że takiej odpowiedzi się spodziewałem. Dziękuję !! (moje pomysły nie są w pełni zorganizowane, proszę, wybacz mi, wciąż jestem nowicjuszem :))
user1260776

2
@ user1260776. Rozumiem. Chodzi mi jednak o to, że „formalne” i „matematyczne” to różne pomysły. Możesz sformalizować pojęcia bez ograniczania ich do matematyki (lub czerpania z niej). Newton sformalizował mechanikę, ale nie zadał sobie trudu zredukowania „cząstek” do „zbiorów”. Osobiście jestem bardzo szczęśliwy, mogąc podążać za przykładem Newtona i przyznać, że nie ograniczam się do setów. Ale myślę, że musimy wiedzieć, kiedy zmniejszyć, a kiedy nie. Po przeszkoleniu jako fizyk jest to dość łatwe do zrobienia. Dla wielu innych informatyków może to nie być takie proste.
Uday Reddy

0

myślę, że istnieje całkiem dobry teoretyczny opis obiektów w starej klasycznej książce „struktura i interpretacja programów komputerowych” [1] autorstwa Abelsona i Susmana, opartej na schemacie (wariant seplenienia). teraz za darmo online! pokazuje to, w jaki sposób pojęcie orientacji obiektu może być osadzone nawet w rachunku lambda (~ aka Lisp), jeśli masz jakiś mechanizm do przechowywania stanu lokalnego. jak rozumiem, był to podręcznik std MIT dla wielu lat. nie mówienie, że jest to najlepsza referencja na temat; jestem pewien, że są inne lepsze w tym pt.

Nie wydaje mi się, żeby zostało to całkowicie sformalizowane w dowolnym miejscu, o którym słyszałem, ale luźno mówiąc obiekty składają się zasadniczo z kodu + danych w postaci

  • metody (z parametrami)
  • stan, tj. zmienne instancji

w jakiejś zamkniętej formie. prawdopodobnie inne aspekty, takie jak dziedziczenie, nie są fundamentalne. jak stwierdzono w abelson & sussman, co nazywają „cukrem syntaktycznym”.

[1] struktura i interpretacja programów komputerowych autorstwa abelsona i sussmana


3
Oczywiście obiekty w sensie programowania obiektowego zostały sformalizowane. Są książki Abadi i Cardelli, Castanga i Kim Bruce poświęcone temu tematowi. W serii FOOL odbyło się 10 lat warsztatów poświęconych podstawom programowania obiektowego. Konferencje ECOOP i OOPSLA regularnie miały dokumenty na temat podstaw OO. Rzeczywiście, pierwszy artykuł na temat semantyki OO ma około 20 lat.
Dave Clarke

@vzn, dzięki za odpowiedź.
Przejdę

DC - źle to sformułowałem. dokładniej, można śmiało powiedzieć, że formalne definicje tego, co dokładnie stanowi „przedmiot” lub jakie są kluczowe / podstawowe elementy OOP, różnią się znacznie w literaturze. z czasem definicje prawdopodobnie znacznie się rozszerzyły. na przykład podejrzewam, że dziedziczenie zostało dodane później, a pierwotnym pomysłem był głównie kod + dane w postaci enkapsulowanej.
vzn

innym przykładem funkcji OOP, która nie jest uzgodniona jako podstawowa z tego, co mogę powiedzieć, jest wielokrotne dziedziczenie widoczne w np. C ++, ale celowo unikane w java na rzecz interfejsów. itd.
2012 r
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.