Funktionale Programmierung hat den sehr eleganten Lambda-Kalkül und seine Varianten als Backup-Theorie. Gibt es so etwas für OOP? Was ist eine Abstraktion für das objektorientierte Modell?
Funktionale Programmierung hat den sehr eleganten Lambda-Kalkül und seine Varianten als Backup-Theorie. Gibt es so etwas für OOP? Was ist eine Abstraktion für das objektorientierte Modell?
Antworten:
Es gibt vier Hauptansätze, die jedoch nur die Oberfläche der verfügbaren Elemente verkratzen:
Die Verbindung zwischen Objektmodellkern und Mengenlehre wird in den folgenden Dokumenten beschrieben:
Die Dokumente zeigen die Struktur von Instanz- und Vererbungsbeziehungen zwischen Objekten. Eine solche Struktur kann als höchstmögliche Abstraktion von OOP angesehen werden. Es wird gezeigt, wie die Struktur für bestimmte Programmiersprachen (Ruby, Python, Java, Scala, Smalltalk-80, Objective-C, CLOS, Perl, Dylan, JavaScript) und auch für Ontologiesprachen (RDF Schema und OWL 2 Full) gilt.
In den Dokumenten wird der Ansatz Klassen sind Objekte gewählt , so dass die Kernstruktur einsortiert ist. In der Hauptform kann die Struktur ausgedrückt werden als (O, ϵ , ≤, .ec) wobei
Ein Beispiel für eine Kernstruktur gemäß dem Ruby-Objektmodell ist in der folgenden Abbildung dargestellt. Grüne Links zeigen die Vererbungsrelation in der reflexiven transitiven Reduktion, blaue Links zeigen die Zugehörigkeitsrelation in der "Subsumption Reduction" - eine blaue Verknüpfung von x Punkten zum kleinsten Container von x . Die Powerclass Map .ec besteht aus horizontalen blauen Links. Objekte aus dem Bild dieser Karte sind Powerclasses (in grau). In Ruby werden sie Eigenklassen oder auch Singleton-Klassen genannt (letzterer Begriff ist eher veraltet). Objekte s , u und v (in pink) sind terminal die übrigen Objekte sind Nachkommen der Vererbungswurzel 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
Kernteile des Objektmodells aller oben genannten Sprachen können als Spezialisierungen der Struktur ohne oder mit nur wenigen zusätzlichen Bestandteilen angesehen werden. Aus theoretischer Sicht ist der bedeutendste Fall eines zusätzlichen Bestandteils die von Dylan eingeführte Singleton-Karte (mit .ɛϲ bezeichnet ). Dies macht Dylan zur einzigen Programmiersprache (aus dem oben Erwähnten), die nicht der Monotonie-Bedingung (≤) ○ (ϵ) ⊆ (ϵ) unterliegt, bei der das Kompositionssymbol ○ von links nach rechts interpretiert wird.
Eine Möglichkeit, die Verbindung zwischen Objektmodellkern und Mengenlehre zu formalisieren, besteht in der Familie von Strukturen (O, ≤, r, .ec, .ɛϲ), die in den referenzierten Dokumenten als Metaobjektstrukturen bezeichnet werden, da x.ec oder x.ɛϲ in Betracht gezogen werden können als Metaobjekte von x . In diesen Strukturen ist x.ec für jedes Objekt x und x.ɛϲ für jedes begrenzte ("kleine") Objekt x definiert . Die Strukturen unterliegen den folgenden neun Axiomen. Die Axiomatisierung verwendet eine definitive Erweiterung, die für die ersten acht Axiome recht einfach ist ( Tbezeichnet die Menge der terminalen Objekte - diejenigen, die nicht Nachkommen von r sind , und .ec ∗ ist der reflexive transitive Abschluss von .ec ), sondern für das letzte Axiom beteiligt.
Im letzten Axiom ist ϖ eine feste Grenzwert-Ordnungszahl, und .d ist die Rangfunktion , die von der Definitionserweiterung abgeleitet wird. Die Objektmitgliedschaftsrelation relation wird erhalten als (( .ɛϲ ) ∪ ( .ec )) ○ (≤). Gemäß dem letzten Axiom ist die Domänenbeschränkung von ϵ auf die Menge der begrenzten Objekte gleich ( .ɛϲ ) ○ (≤). In den genannten Dokumenten wird diese Beziehung als gebundene Mitgliedschaft bezeichnet und mit ∊ bezeichnet. Diese Beziehung ist als wesentliches Merkmal begründet. Dies steht im Gegensatz zu ϵ, das seit r ϵ r nicht mehr begründet ist. Es zeigt sich, dass die Hauptkorrespondenz zwischen (dem Kern der) Objekttechnologie und der Mengenlehre ausgedrückt werden kann als
∊ ↔ ∈
dh eine beschränkte Mitgliedschaft entspricht einer Mengenmitgliedschaft zwischen begründeten Mengen. Als Sonderfall ist das partielle von Neumann-Universum mit Rang ϖ + 1 eine Metaobjektstruktur in definitorischer Erweiterung. Im Allgemeinen entspricht jede abstrakte ( ϖ + 1 ) - Überstruktur (O, ∊ ) definitiv einer vollständigen Metaobjektstruktur. Jede Metaobjektstruktur kann getreu in eine vollständige Metaobjektstruktur eingebettet werden, die wiederum getreu in das von Neumann-Universum eingebettet werden kann.
Der Begriff Grundstruktur wird zur Verallgemeinerung von Metaobjektstrukturen verwendet. In dieser Verallgemeinerung dürfen .ec und .ɛϲ (willkürlich) partiell, möglicherweise leer sein. Insbesondere sind endliche Grundstrukturen möglich, wobei die Minimalstruktur nur die Vererbungswurzel r enthält . Jede Grundstruktur kann durch eine Powerclass-Vervollständigung gefolgt von einer Singleton-Vervollständigung zu einer Metaobjekt-Struktur erweitert werden, wodurch Grundstrukturen originalgetreu in das von Neumann-Universum eingebettet werden können.