Gibt es eine Theorie / Abstraktion hinter OOP?

13

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?

Viclib
quelle
5
Lasten und Lasten. Haben Sie Google ausprobiert? Zum Beispiel gibt es eine Workshop-Reihe namens FOOL, die sich seit 1993 mit den Grundlagen objektorientierter Sprachen befasst. Das kratzt nur an der Oberfläche.
Dave Clarke
@ DaveClarke. Da stimme ich nicht ganz zu Die Lambda-Rechnung ist eine Grundlage für die funktionale Programmierung in einem sehr präzisen Sinne. In einem Haskell-Bericht heißt es beispielsweise, dass die gesamte Haskell-Sprache lediglich als syntaktischer Zucker für eine Kernsprache betrachtet werden kann, die dem typisierten Lambda-Kalkül entspricht. Ich kenne keine objektorientierte Sprache, die einen ähnlichen Anspruch in Bezug auf einen Kalkül erhebt. Sie haben also Recht, dass es "Lasten" gibt. Aber nichts davon ist richtig.
Uday Reddy
@UdayReddy: Das liegt vielleicht am Reichtum der objektorientierten Sprache.
Dave Clarke
1
@ DaveClarke Der Reichtum eines Themas kann bedeuten, dass (1) es ein gutes Schlagwort ist, (2) wir das Thema nicht wirklich genug verstehen, um einen Konsens zu erzielen, (3) wir mischen mehrere Themen, die ziemlich orthogonal sind . Obwohl ich die (aktuelle) Literatur zur OO-Programmierung nicht genau verfolgt habe, hatte ich immer das Gefühl, dass es sich um eine Mischung von Themen handelte, ohne sehr deutlich zu sein (dies gilt natürlich mehr für Sprachen als für theoretische Arbeiten). Zu diesen Problemen gehören Typisierung, Abstraktion, Statefulness, Parallelität und Wiederverwendung von Code. Es ist unwahrscheinlich, dass eine (eine) Theorie alle Varianten berücksichtigt.
Babou

Antworten:

15

Es gibt vier Hauptansätze, die jedoch nur die Oberfläche der verfügbaren Elemente verkratzen:

  • via lambdas und records: die idee ist, objekte, klassen und methoden in traditionelleren konstrukten zu kodieren. Die Arbeit von Benjamin Pierce aus der Mitte der 90er Jahre ist repräsentativ für diesen Ansatz.
  • Abadi und Cardellis Objektkalküle (siehe Abadi und Cardellis Buch A Theory of Objects) : Ihre Hauptabstraktion ist eine Aufzeichnung von Methoden, und der Ansatz ist näher an der prototypbasierten Realisierung objektorientierter Programmierung, obwohl Klassen und Vererbung in codiert werden können Begriffe der primitiveren Elemente.
  • Castagnas Multimethodenkalkül (siehe Castagnas Buch Object-Oriented Programming A Unified Foundation ): Sein Ansatz geht davon aus, dass Multimethoden die Schlüsselabstraktion sind.
  • Klassenbasierte Kalküle (wie in Kim Bruces Buch Grundlagen objektorientierter Sprachen: Typen und Semantik oder Federgewicht-Java ): Diese Ansätze zielen darauf ab, das Wesentliche der klassenbasierten Programmierung zu erfassen und sich auf Klassen und Vererbung zu konzentrieren.
Dave Clarke
quelle
11

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

  • O ist die Menge der Objekte ,
  • ϵ ist die (Objekt-) Zugehörigkeitsrelation , eine Verfeinerung der Beziehungsinstanz,
  • ≤ ist die Vererbungsrelation , und
  • .ec ist die Powerclass-Map, die eine unterscheidbare, möglicherweise leere Subrelation von ϵ ist.

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.

  1. Die Vererbung ist eine Teilordnung.
  2. Die Powerclass Map .ec ist eine Einbettung von (O, ≤) in sich.
  3. Objekte aus T.ec sind minimal.
  4. Jede Machtklasse ist ein Nachkomme von r .
  5. Die Menge r.ec hat keine Untergrenze.
  6. Die Singleton-Map, .ɛϲ , ist injektiv.
  7. Objekte aus O.ɛϲ.ec sind minimal.
  8. Für jedes Objekt x , y, so dass x.ɛϲ definiert ist, ist x.ɛϲ ≤ y.ec ↔ x ≤ y .
  9. Für jedes Objekt x ist x.ɛϲxd <ϖ definiert .

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.

paon
quelle
@Raphael Viel besser - danke, Paon!
David Richerby