Programowanie funkcjonalne ma bardzo elegancki rachunek lambda i jego warianty jako teorię kopii zapasowej. Czy istnieje coś takiego dla OOP? Czym jest abstrakcja dla modelu obiektowego?
Programowanie funkcjonalne ma bardzo elegancki rachunek lambda i jego warianty jako teorię kopii zapasowej. Czy istnieje coś takiego dla OOP? Czym jest abstrakcja dla modelu obiektowego?
Odpowiedzi:
Istnieją cztery główne podejścia, które jedynie zarysowują powierzchnię tego, co jest dostępne:
Związek między rdzeniem modelu obiektowego a teorią zbiorów opisano w następujących dokumentach:
Dokumenty przedstawiają strukturę relacji instancji i dziedziczenia między obiektami. Taką strukturę można uznać za najwyższą możliwą abstrakcję OOP. Pokazano, w jaki sposób struktura ma zastosowanie do poszczególnych języków programowania (Ruby, Python, Java, Scala, Smalltalk-80, Objective-C, CLOS, Perl, Dylan, JavaScript), a także do języków ontologii (RDF Schema i OWL 2 Full).
W dokumentach klasy są oparte na obiektach , dzięki czemu struktura rdzenia jest sortowana pojedynczo. W głównej formie strukturę można wyrazić jako (O, ϵ , ≤, .ec) gdzie
Przykładową strukturę rdzenia zgodnie z modelem obiektowym Ruby pokazano na poniższym schemacie. Zielone linki pokazują relację dziedziczenia w zwrotnej redukcji przechodniej, niebieskie linki pokazują relację członkostwa w „redukcji absencji” - niebieskie łącze od x punktów do najmniejszego kontenera x . Mapę Powerclass .ec tworzą poziome niebieskie linki. Obiekty z obrazu tej mapy to klasy mocy (w kolorze szarym). W Ruby są one nazywane klasami eigenclass lub klasami singleton (ten ostatni termin jest raczej przestarzały). Obiekty s , u i v (w kolorze różowym) są końcowe, pozostałe obiekty są potomkami korzenia dziedziczenia r .
r = BasicObject; c = Class; A = c.new(r); B = c.new(A); s = A.new; u = B.new; v = B.new; class << s; end; class << v; end
Podstawowe części modelu obiektowego wszystkich powyższych języków można traktować jako specjalizacje struktury, bez lub z kilkoma dodatkowymi składnikami. Z teoretycznego punktu widzenia najbardziej znaczącym przypadkiem dodatkowego składnika jest mapa singletonu (oznaczona .ɛϲ ) wprowadzona przez Dylana. To sprawia, że Dylan jest jedynym językiem programowania (z wyżej wspomnianego), który nie podlega warunkowi monotoniczności (≤) ○ (ϵ) ⊆ (ϵ), w którym symbol kompozycji ○ jest interpretowany od lewej do prawej.
Jednym ze sposobów sformalizowania związku między rdzeniem modelu obiektowego a teorią zbiorów jest zastosowanie rodziny struktur (O, ≤, r, .ec, .ɛϲ) zwanych strukturami metaobiektu w dokumentach, do których się odwołuje, ponieważ x.ec lub x.ɛϲ można rozważyć jako metaobiekty x . W tych strukturach x.ec jest definiowany dla każdego obiektu x, a x.ɛϲ jest definiowany dla każdego ograniczonego („małego”) obiektu x . Struktury podlegają dziewięciu poniższym aksjomatom. Aksjatyzacja wykorzystuje definicję rozszerzenia, która jest dość prosta dla pierwszych ośmiu aksjomatów ( Toznacza zbiór obiektów końcowych - tych, które nie są potomkami r , a .ec ∗ jest zwrotnym, przechodnim zamknięciem .ec ), ale raczej zaangażowanym w ostatni aksjomat.
W ostatnim aksjomacie ϖ jest liczbą porządkową o ustalonym limicie, a .d jest funkcją rangi wyprowadzoną z rozszerzenia definicji. Relacja członkostwa obiektu ϵ jest uzyskiwana jako (( .ɛϲ ) ∪ ( .ec )) ○ (≤). Zgodnie z ostatnim aksjomatem ograniczenie domenowe ϵ do zbioru ograniczonych obiektów wynosi ( .ɛϲ ) ○ (≤). W odnośnych dokumentach relacja ta nazywana jest członkostwem ograniczonym i oznaczana jest jako ∊. Jako istotna cecha ta relacja jest dobrze uzasadniona. Jest to sprzeczne z ϵ, który nie jest uzasadniony od r ϵ r. Okazuje się, że główną zgodność między (podstawową częścią) technologią obiektową a teorią zbiorów można wyrazić jako
∊ ↔ ∈
tzn. ograniczone członkostwo odpowiada członkostwu w zestawach między dobrze ugruntowanymi zbiorami. Jako szczególny przypadek częściowy wszechświat von Neumanna o randze ϖ + 1 jest strukturą metaobiektu z definicji. Zasadniczo każdy abstrakt ( ϖ + 1 ) - nadbudowa (O, ∊ ) jest definitywnie równoważny kompletnej strukturze metaobiektu. Każda struktura metaobiektu może być wiernie osadzona w kompletnej strukturze metaobiektu, która z kolei może być wiernie osadzona we wszechświecie von Neumanna.
Termin struktura podstawowa jest używany do uogólnienia struktur metaobiektu. W tym uogólnieniu, .ec i .ɛϲ mogą być (dowolnie) częściowe, być może puste. W szczególności możliwe są skończone podstawowe struktury, przy czym minimalna struktura zawiera tylko pierwiastek dziedziczenia r . Każda podstawowa struktura może zostać rozszerzona do struktury metaobiektu poprzez uzupełnienie klasy mocy, a następnie uzupełnienie pojedynczego elementu, co z kolei sprawia, że podstawowe struktury można wiernie osadzić we wszechświecie von Neumanna.