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.
źródło
Odpowiedzi:
Odpowiedź jest skomplikowana z dwóch powodów.
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.
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)=gxg−1 . (Jest to operator koniugacji.)hg jest „przedmiotem” w tej terminologii. Zawiera pewne dane (g ) i operacja x↦gxg−1 . Możesz też uczynić go bardziej obiektowym, biorąc parę⟨g,x↦gxg−1⟩ lub potrójny ⟨ g, x ↦ gxsol- 1, x ↦sol- 1x g⟩ . 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 ”.
źródło
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
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
źródło