Formale Definition / Gegenstück in der Mathematik für „Objekte“ objektorientierter Modelle

9

Dies ist eine Frage, die ich im Forum der Mathematik-SE gestellt habe und auf die ich hier verwiesen wurde. Also hier ist die Frage-

Ich bin ein Neuling sowohl in der formalen Mathematik als auch in der theoretischen Informatik. Bitte nehmen Sie Kontakt mit mir auf, wenn Sie feststellen, dass meine Frage nicht richtig formuliert ist. Objektorientierte Modellierung scheint sehr nützlich bei der Definition komplexer Interaktionen bei der Simulation der realen Welt zu sein. Aber es wird hauptsächlich in der Programmierung verwendet. Ich habe mich gefragt, ob wir ein ähnliches Konzept in der Mathematik haben. Wenn wir programmieren, können wir das Konzept von "Objekten" und "objektorientierter Programmierung" verstehen und es einfach implementieren. Aber haben wir eine formale Definition von "Objekten" in Bezug auf die Mengenlehre? Oder irgendeine andere formale mathematische Theorie?

Können wir drei primäre objektorientierte Modellierungskonzepte implementieren / formal definieren: 1. Kapselung 2. Vererbung 3. Polymorphismus

Ich weiß, dass die Frage zu weit gefasst ist, würde mich aber sehr freuen, wenn Sie auch einige Hinweise geben können, damit ich diese Konzepte besser verstehen kann.

user1260776
quelle
2
Aus meiner Sicht gibt es wirklich zwei Fragen. Man fordert einen Formalismus objektorientierter Konzepte. Der andere fragt nach objektorientierten Konzepten in der Mathematik. Vielleicht wäre es besser, zwei getrennte Fragen zu stellen. Es gibt viel Material, das die erste Frage beantwortet, wenn auch wahrscheinlich nur wenig für die zweite. (Und vielleicht finde ich morgen Zeit, um die Frage zu beantworten.)
Dave Clarke
Danke .. können Sie mir bitte ein Material zur Formalisierung objektorientierter Konzepte vorschlagen, das als Standard oder "Lehrbuch" gilt? Ich werde auf Ihre Antwort für die zweite warten .... :)
user1260776
2
Das Standardbuch (von vor einigen Jahren) ist A Theory of Objects . Neuere Arbeiten sind Featherweight Java . Es gibt auch eine Reihe von Workshops mit dem Titel Grundlagen objektorientierter Sprachen, die sich mit diesen Themen befassen.
Dave Clarke
Vielen Dank! Ich werde sie durchgehen ... Außerdem bin ich auf "Lambda-Kalkül" gestoßen, das eng mit meiner Frage zusammenhängt.
user1260776

Antworten:

9

Die Antwort ist aus zwei Gründen kompliziert.

  1. Verschiedene Menschen in der Informatik interpretieren den Begriff "Objekt" unterschiedlich. Zum einen besteht ein Objekt aus einigen Daten und Operationen, die zusammen gepackt sind. Das andere ist, dass ein Objekt alles ist, aber auch "Zustand" hat, dh es ist eine Form einer veränderbaren Entität.

  2. Es gibt tiefe philosophische Fragen, die damit zu tun haben, was "Veränderung" bedeutet (und was "Entität" bedeutet, da sie sich ständig ändert) und ob mathematische Beschreibungen tatsächlich veränderbare Entitäten erfassen.

Objekt im Sinne von Daten + Operationen : Das ist in der Mathematik ziemlich Standard. Nehmen Sie ein beliebiges Lehrbuch zur Gruppentheorie. Es wird irgendwo eine Definition wie . (Es ist ein Konjugationsoperator.) Das h g ist ein "Objekt" in dieser Terminologie. Es hat einige Daten ( g ) und eine Operation x g x g - 1 . Oder Sie können es mehr Objekt-y machen , indem das Paar unter g , x g x g - 1hG(x)=GxG- -1hGGxGxG- -1 Oder das Dreifachg , x g x g - 1 , x g - 1 x g . Sie können diese Art von "Objekten" in jeder funktionalen Programmiersprache erstellen, die über eine Lambda-Abstraktion verfügt und auf irgendeine Weise Tupel bildet. Abadis und Cardellis "Theory of Objects" befasst sich ausführlich mit Objekten dieser Art.G,xGxG- -1G,xGxG- -1,xG- -1xG

Objekte mit Zustand (oder Objekte, die sich ändern ): Hat die Mathematik solche Dinge? Das glaube ich nicht. Ich habe keinen Mathematiker gesehen, der über etwas gesprochen hat, das sich ändert, nicht in seinem Berufsleben. Newton schrieb für die Position eines Teilchens, das sich angeblich ändert, und ˙ x für seine Änderungsrate. Mathematiker fanden schließlich heraus, dass Newton von einer Funktion x ( t ) aus reellen Zahlen in einen Vektorraum sprach , und ˙ x war eine weitere solche Funktion, die die erste Ableitung von x ( t ) in Bezug auf t warxx˙x(t)x˙x(t)t. Daraus haben viele tief denkende Mathematiker geschlossen, dass Veränderungen nicht wirklich existieren und alles, was Sie haben, Funktionen der Zeit sind. Aber was sich in der Newtonschen Mechanik änderte, war nicht die Position, sondern das Teilchen . Die Position ist ihr augenblicklicher Zustand. Kein Mathematiker oder Physiker würde so tun, als wäre ein Teilchen eine mathematische Idee. Es ist eine physische Sache.

So ist es auch mit Objekten. Sie sind "physikalische" Dinge, und die Zustände sind ihre mathematischen Attribute. Eine ausführliche Beschreibung dieses Aspekts finden Sie in Kapitel 3 von Abelson und Sussmans Struktur und Interpretation von Computerprogrammen . Dies ist ein Lehrbuch am MIT und sie bringen es allen Wissenschaftlern und Ingenieuren bei, die meiner Meinung nach "physikalische" Dinge vollkommen verstehen.

x1(t)x2(t)

In ähnlicher Weise besteht die mathematische Standardmethode zum Modellieren objektorientierter Programme darin, jedes Objekt als Index in den Zustandsraum zu behandeln. Der einzige Unterschied besteht darin, dass Objekte kommen und gehen und die Struktur des Systems dynamisch ist. Wir müssen es auf ein "mögliches Welt" -Modell erweitern, bei dem jede Welt im Grunde eine Sammlung von Indizes ist. Die Zuweisung und Freigabe von Objekten würde den Wechsel von einer Welt in eine andere beinhalten.

Es gibt jedoch ein Problem. Anders als in der Mechanik möchten wir, dass der Zustand unserer Objekte eingekapselt wird . Aber die mathematischen Beschreibungen von Objekten setzen überall Zustände und zerstören die Kapselung vollständig. Es gibt einen mathematischen Trick namens "relationale Parametrizität", mit dem Dinge auf ihre Größe zurückgeschnitten werden können. Ich werde jetzt nicht darauf eingehen, außer um zu betonen, dass es sich um einen mathematischen Trick handelt, nicht um eine sehr konzeptionelle Erklärung der Kapselung. Eine zweite Möglichkeit, Objekte mit Kapselung mathematisch zu modellieren , besteht darin, die Zustände zu verfeinern und das Objektverhalten anhand beobachtbarer Ereignisse zu beschreiben. Für eine gute Diskussion dieser beiden Modelle kann ich Sie auf meinen Artikel mit dem Titel Objekte und Klassen in algolähnlichen Sprachen verweisen .


[Anmerkung hinzugefügt:]

Eine schöne Analyse der mathematischen Grundlagen von Objekten findet sich in William Cooks Artikel " On Understanding Data Abstraction, Revisited ".

Uday Reddy
quelle
2
Ich wusste, dass jemand hier antworten kann ...
Andrej Bauer
Vielen Dank Uday für Ihre Zeit und die ausführliche Antwort. Als ich diese Frage stellte, dachte ich nur im Sinne von "Daten + Operationen", und mir kam nie der Gedanke, dass die Gruppentheorie "OBJEKT" als "Daten + Operationen" darstellen kann. Ich werde auch die Links durchgehen, auf die Sie verwiesen haben.
user1260776
@AndrejBauer. Ja, ich bin wahrscheinlich über Bord gegangen. Das OP verwendete wahrscheinlich "Mathematik" nur als Wort für Formalisierung im Gegensatz zu einer Disziplin.
Uday Reddy
@Uday, ich habe die Frage vielleicht nicht richtig formuliert, aber als ich "Mathematik" meinte, meinte ich eindeutig formale Mathematik. Mein Gedanke war, dass "Mengenlehre" die Grundlage der Mathematik bildet, wie man Objekte der OO-Modellierung in Bezug auf Mengenlehre "erklärt" oder "ableitet". Wie setzen wir all diese zusammen - Mengenlehre, Objekte und formale Logik (wie z Logik erster Ordnung) ... "Obwohl ich Ihre Antwort nicht vollständig verstehe, kann ich" verstehen ", was Sie gesagt haben, und ich versichere Ihnen, dies ist die Antwort, die ich erwartet hatte. Vielen Dank !! (meine Ideen sind nicht vollständig organisiert, bitte verzeihen Sie mir, ich bin noch Neuling :))
user1260776
2
@ user1260776. Ich verstehe. Mein Punkt ist jedoch, dass "formal" und "Mathematik" unterschiedliche Ideen sind. Sie können Konzepte formalisieren, ohne sie auf Mathematik zu reduzieren (oder daraus abzuleiten). Newton formalisierte die Mechanik, machte sich aber nicht die Mühe, "Partikel" auf "Mengen" zu reduzieren. Ich persönlich bin sehr glücklich, Newtons Führung zu folgen und Dinge zuzugeben, die ich nicht auf Sets reduziere. Aber ich denke, wir müssen wissen, wann wir reduzieren müssen und wann nicht. Nachdem ich eine Ausbildung zum Physiker gemacht habe, finde ich das ziemlich einfach. Für viele andere Informatiker ist es vielleicht nicht so einfach.
Uday Reddy
0

Ich denke, es gibt eine ziemlich gute theoretische Beschreibung von Objekten in dem alten klassischen Buch "Struktur und Interpretation von Computerprogrammen" [1] von abelson & sussman, basierend auf dem Schema (eine Lisp-Variante). jetzt kostenlos online! Dies zeigt, wie das Konzept der Objektorientierung sogar in den Lambda-Kalkül (~ aka Lisp) eingebettet werden kann, wenn Sie über einen Mechanismus zum Speichern des lokalen Status verfügen. So wie ich es verstehe, war dies für viele Jahre ein Standard-MIT-Lehrbuch. nicht zu sagen, dass dies der beste Hinweis auf das Thema ist; Ich bin mir sicher, dass es in diesem Punkt noch andere bessere gibt.

Ich glaube nicht, dass dies irgendwo, wo ich davon gehört habe, vollständig formalisiert wurde, aber lose gesprochene Objekte bestehen im Wesentlichen aus Code + Daten in Form von

  • Methoden (mit Parametern)
  • Zustand, dh Instanzvariablen

in gekapselter Form. Andere Aspekte wie die Vererbung sind wohl nicht grundlegend. wie in abelson & sussman angegeben, was sie "syntaktischen zucker" nennen.

[1] Struktur und Interpretation von Computerprogrammen durch abelson & sussman

vzn
quelle
3
Natürlich wurden Objekte im Sinne der objektorientierten Programmierung formalisiert. Es gibt Bücher von Abadi & Cardelli, Castanga und Kim Bruce, die sich diesem Thema widmen. In der FOOL-Reihe gab es 10 Jahre Workshops, die sich mit den Grundlagen der objektorientierten Programmierung befassten. Die Konferenzen ECOOP und OOPSLA hatten regelmäßig Vorträge über die Grundlagen von OO. In der Tat ist das erste Papier über die Semantik von OO ungefähr 20 Jahre alt.
Dave Clarke
@vzn, danke für die Antwort. Ich werde die Bücher durchgehen, die Sie vorgeschlagen haben ...
user1260776
DC - Ich habe das schlecht formuliert. Genauer gesagt kann man mit Sicherheit sagen, dass formale Definitionen dessen, was genau ein "Objekt" darstellt oder was die Schlüssel- / Grundkomponenten von OOP sind, in der Literatur tendenziell erheblich variieren. Die Definitionen haben sich im Laufe der Zeit wahrscheinlich erheblich erweitert. Ich vermute zum Beispiel, dass die Vererbung später hinzugefügt wurde und die ursprüngliche Idee hauptsächlich aus Code + Daten in gekapselter Form bestand.
vzn
Ein weiteres Beispiel für eine OOP-Funktion, die nach meinem Kenntnisstand nicht als grundlegend eingestuft wird, ist die Mehrfachvererbung, die beispielsweise in C ++ zu sehen ist, in Java jedoch absichtlich zugunsten von Schnittstellen vermieden wird. etc
vzn