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.
Antworten:
Die Antwort ist aus zwei Gründen kompliziert.
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.
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 ) = gx g- 1 hG G x ↦ gx g- 1 Oder das Dreifach ⟨ g , 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, X ↦ gx g- 1⟩ ⟨ g, X ↦ gx g- 1, X ↦ g- 1x g⟩
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 warx x˙ 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.
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 ".
quelle
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
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
quelle