Frage

Es gibt eine Art Schönheit in Auflebende Beziehungen. Betrachten Sie die folgenden Beispiele:

  1. Atome bestehen aus subatomaren Partikeln, Moleküle bestehen aus Atomen, Zellen bestehen aus Molekülen, Organe bestehen aus Zellen, Menschen bestehen aus Organen, Gesellschaften bestehen aus Menschen.
  2. Die komplexen Strategien der Game of Go sind auf der Notwendigkeit aufgebaut, Strukturen mit "zwei Augen" herzustellen, damit sie überleben werden - aber das "zwei Augen" wird in den Regeln nie angegeben, sondern ist selbst eine aufstrebende Eigenschaft der sehr einfachen Regeln von GO.
  3. Die Vollständigkeit von Conway's_game_of_life kann in Bezug auf nachgewiesen werden Segelflugzeuge, Waffen und Raumschiffe, die auf dem Konzept von und aus und aus und aus und aus und aus und aus und aus Sehr einfache Regeln.

In allen Fällen führen letztendlich ein minimaler Satz von Objekten und eine minimale Regelung von Regeln zu einer sehr komplexen Struktur.

Meine erste Frage: Ist es möglich, einen kleinen und minimalistischen Satz von Programmierobjekten und "Regeln" zu skizzieren, mit denen eine OOP -Sprache aufgebaut werden kann?

Jetzt die clever Informatiker wird wahrscheinlich auf die Vollständigkeit von Turing von verweisen Regel 110 Und sagen Sie, dass dies alles ist, was Sie brauchen! Aber das ist nicht ganz das, wonach ich suche. Was sind die einfachsten, menschlich verständlichen Konzepte, die in eine objektorientierte Programmiersprache integriert werden können?

Für ein schlechtes und unvollständiges Beispiel, das auf das hinweist, was ich will, definieren Sie drei konzeptionelle Objekte: a Hinweis, a Funktion, und ein Informationsinhaber. Dann (Stufe 2?) Definieren a Struktur Um ein Informationsinhaber zu sein, der andere Informationen über Verweise auf andere Informationsordner enthält. Ein rudimentäres Klasse (Stufe 3?) Würde Strukturen mit Verweise auf Funktionen erweitern, aber zusätzliche Struktur müsste entwickelt werden, um Konzepte privater und öffentlicher Funktionen zu bewältigen. Letztendlich sollten wir zu einer vollgestützten OOP-Sprache kommen, die ausschließlich auf grundlegenden Konzepten aufgebaut wurde, und nirgendwo haben wir uns schummeln durch Hardcoding -Optimierungen oder syntaktisches Salz mit Maschinencode. Und im Idealfall wäre das Endergebnis immer noch attraktiv und lesbarer Code.

Meine zweite Frage: Gibt es da draußen OOP -Sprachen, die sich dem bereits nähern?

War es hilfreich?

Lösung

Prototypen

Das Io Sprachreferenz gibt einen guten Hinweis - der einfachste Anhang für OOP scheint zu sein Prototypbasierte Programmierung. Alles was Sie brauchen ist im Grunde genommen assoziative Arrays und erstklassige Funktionen.

Da viele Datenstrukturen einschließlich des Wörterbuchs implementiert werden können in Begriffen von Funktionen sind wir bald auf einen Syntaxzucker und bis auf Lambda -Kalkül, das ein ganzes Turing-Complete-Modell der Berechnung abdeckt.

Andere Tipps

io ist wahrscheinlich die engste Sprache da draußen zu dem, wonach Sie suchen.

Interessante Frage, aber ich bin mir nicht ganz sicher, ob es sinnvoll ist.

Bedenken Sie, dass 1 und 0 unsere Atome in der Informatik sind. Sie sind streng unteilbar. Und unterschiedliche Kombinationen von ihnen führen zu Programmen mit allen möglichen erstaunlichen Eigenschaften. Es ist jedoch nicht angemessen, in 1 und 0 zu schreiben, da die Abstraktionsniveau zu niedrig ist.

Ich denke, das gleiche Problem würde Ihre Sprache treffen. Wenn es flexibel genug wäre, um die Konstruktion von irgendetwas zu ermöglichen, wäre es unbrauchbar, und wenn dies nicht der Fall wäre, würde es Ihre Anforderungen nicht erfüllen.

SmallTalk basiert auf sehr begrenzten Primitiven, aber dort sind OO -Ideoms atomar. Theoretisch können Sie eine willkürliche komplexe Sprache über eine Basis erstellen, die so einfach ist wie SK -Logik oder Lambda -Kalkül. OO -Merkmale sind nicht unterschiedlich, sie können auf ein primitiveres Set reduziert werden. Jedes OO -System über einem primitiven Lisp -Makros kann ein gutes Beispiel sein.

Aktualisieren: und werfen Sie einen Blick auf Term Rewriting Systems Im Allgemeinen ist es eine leistungsstarke Technik, um komplexe Semantik auf einfacheren Dingen zu definieren.

Ich würde auch empfehlen, ein Buch zu lesen http://www.cambridge.org/gb/knowledge/isbn/item1132720/?site_locale=en_gb

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top