Alan Kay hat keine Objekte erfunden

Die Leute argumentieren weiterhin, dass moderne objektorientierte Sprachen tatsächlich "nicht ganz objektorientiert" sind, weil sie nicht der Definition von OOP von Alan Kay entsprechen. Meiner Meinung nach ist dies sinnvoll, obwohl ich der Schlussfolgerung nicht zustimme. Kürzlich habe ich Leute getroffen, die sagen, dass es Kay war, der die Objekte erfunden hat. Das ist eigentlich nicht wahr.


Alan Kay hat keine Objekte erfunden. Sie befanden sich in Simula , was zu Smalltalk-72 als Hauptinspirationsquelle führt (S. 117). In einer 1981 erschienenen Ausgabe von Byte, einer beliebten Zeitschrift, die Smalltalk und OOP populär machte, heißt es : "Die Grundidee von Objekten, Nachrichten und Klassen stammt von SIMULA." Es heißt, dass Simula es Benutzern ermöglicht, "objektorientierte Systeme" zu erstellen, die zwar zu viel, aber dennoch zu viel sind. Das Smalltalk-Team kannte das Simula-Objektsystem gut und ließ sich davon inspirieren.


Einer der Gründe, warum ein solcher Mythos noch lebt, war das, was Kay selbst 1998 sagte:


Ich möchte Sie nur daran erinnern, dass ich bei der letzten OOPSLA versucht habe, allen zu vermitteln, dass Smalltalk nicht nur KEINE Syntax oder Klassenbibliothek ist, sondern nicht einmal Klassen. Es tut mir sehr leid, dass ich zuvor den Begriff „Objekte“ für dieses Thema geprägt habe, da sich viele Menschen auf eine kleinere Idee konzentrieren.

Und weiter in diesem Interview fährt er fort:


Ich meine, ich habe den Begriff "Objekte" erfunden. Da wir zuerst Objekte hergestellt haben, gab es keine anderen Objekte, um dies zu radikalisieren.

Später hörte er auf, dies zu sagen , aber die Leute verwenden dieses Zitat immer noch als Tatsache.


Alan Kay erfand den Begriff "Objektorientierte Programmierung"


Das ist absolut wahr.


OOP war in Klassen und Objekten


In letzter Zeit argumentieren viele weiterhin, dass OOP tatsächlich nicht in Klassen und Objekten enthalten ist und dass dies tatsächlich die wichtigsten Nachrichten sind. In einem Post von 1998, nachdem Kay gesagt hat, er bedauere "Objekte", sagt er auch, dass "eine großartige Idee das Versenden von Nachrichten ist". Er schreibt weiter:


OOP ist für mich nur Nachrichten, lokales Halten und Schützen, das Verstecken des Staates und später das Binden von allem. Dies kann in Smalltalk und in LISP erfolgen. Es gibt wahrscheinlich andere Systeme, in denen dies möglich ist, aber ich weiß nichts darüber.

In der frühen OOP wurden Nachrichten weitgehend als wichtig angesehen, vor allem für Serviceeinrichtungen. So erklärt Don Ingalls OOP in seiner Einführung zu Smalltalk-76 :


Smalltalk ist eher objektorientiert als funktionsorientiert, und dies verwirrt Menschen häufig mit Erfahrung in der Informatik. Wenn Sie beispielsweise <someobject>+4 als Nachricht +4 Objekt senden. Der Hauptunterschied besteht darin, dass alles vom Objekt gesteuert wird, nicht + . Wenn <someobject> eine Ganzzahl von 3 ist, ist das Ergebnis eine Ganzzahl von 7. Wenn <someobject> jedoch die Zeichenfolge 'Meta' , könnte das Ergebnis Meta4 . Somit geht die semantische Last mit den Objekten des Systems einher, und der Code bleibt eine abstrakte Form, die einfach den Nachrichtenfluss steuert.

In Microelectronics and the Personal Computer spricht Kay über ein Message-to-Action-System, in dem „jede Aktion einer Familie gehört“, und über die Ausweitung von Aktivitäten unter dem Gesichtspunkt der Objektbeziehungen als zukünftige Grenze. Im Smalltalk-72-Handbuch schreibt er (S. 18):


Die Hauptidee beim Schreiben von Small Talk-Programmen besteht darin, Klassen zu definieren, die die Beziehungen zwischen Objekten in der erstellten Umgebung behandeln.

Beim Betrachten früher Quellen wird das Bild gebildet, dass OOP aus drei Hauptideen besteht: Klassen, die das Protokoll und die Implementierung definieren, Objekte als Instanzen von Klassen und Nachrichten als Kommunikationsmittel. Die Idee, dass Klassen und Objekte Nachrichten nachgeordnet sind, kam viel später.


Smalltalk war die erste echte objektorientierte Sprache


ACM präsentierte Dahl und Nyugor die Turing-Premiere und nannte sie "PLO-Co-Autoren". Byte schreibt auch, dass Simula objektorientiert war, und in dem Artikel "Die Computerrevolution hat noch nicht stattgefunden" nennt Kay Sketchpad "sehr objektorientiert". Meiner Meinung nach werden die Vorzüge von Smalltalk dadurch nicht angemessen anerkannt. Im Gegensatz zu anderen Systemen wird in Smalltalk:


  • Es gab keine objektlosen Grundelemente: Zahlen waren Objekte, Fehler waren Objekte, Klassen waren Objekte, Nachrichten waren Objekte.
  • Sie können eine Nachricht an jedes Objekt übergeben, einschließlich anderer Nachrichten.
  • Methoden und Implementierungen wurden Objekten zugeordnet, nicht einer Sitzung.

Der letzte Punkt ist der schwierigste und möglicherweise der wichtigste, obwohl niemand wirklich erklärt, was ihn so besonders macht. In Simula verursacht das Aufrufen einer fehlenden Methode einen Fehler. Dies ist Teil der Simula-Spezifikation. Wenn in Smalltalk-80 keine Methode mit der Nachricht übereinstimmt, gibt das Standardobjekt eine doesNotUnderstand Nachricht zurück. Der Anrufer kann darauf antworten, eine Nachricht weiterleiten oder einen Fehler signalisieren. Eine Klasse kann auch die Standardaktion überschreiben und etwas anderes als die Rückgabe von doesNotUnderstand .


Dies bedeutet auch, dass das Nachrichtensystem nicht von der internen Struktur von Objekten abhängt. Sie müssen nicht einmal Teil eines Projekts sein. Daraus folgt, dass Sie beispielsweise Nachrichten an Objekte senden können, die in verschiedenen Sprachen geschrieben wurden, Objektdefinitionen per Post senden, Nachrichten per SMS senden usw. Meiner Meinung nach ist dies genau die Kraft des "Messaging", aber gleichzeitig einer der am wenigsten untersuchten Aspekte.


Smalltalk hatte einen Umgebungskontext


Menschen erfinden Werkzeuge nicht spontan. Sie haben bestimmte Situationen und Aufgaben und versuchen, eine Lösung für diese Probleme zu finden. Innovationen in Smalltalk und OOP sind keine Ausnahme.


Alan Kay interessierte sich für das Thema Personal Computer. Darauf baut seine Arbeit an FLEX, Dynabook und Smalltalk auf. Seiner Meinung nach sollte der PC vollständig unter der Kontrolle des Benutzers stehen. Alles, von der Logik des Kerns des Systems bis zum grafischen Rendering, konnte während des Betriebs eingerichtet und untersucht werden. Das Weiterleiten von Nachrichten und das späte Binden lösen eine Reihe von Problemen. Wenn ein Kind ein neues Spiel installiert, muss ich das gesamte Betriebssystem neu kompilieren, um das neue Programm verwenden zu können? Nein: Ermöglichen Sie das Senden einer beliebigen Nachricht an ein beliebiges Objekt und verlassen Sie sich während der Arbeit auf die Protokollverarbeitung, um die Aufgabe abzuschließen. (*) Wenn eine Person gegen die Logik des Soundsystems verstößt, sollte das gesamte Betriebssystem ausfallen? Natürlich nicht, also lassen Sie die Objekte entscheiden, wie die Nachrichten selbst verarbeitet werden sollen. Objekte funktionieren hier gut.


Ole Dahl und Kirsten Nyugor versuchten ein ganz anderes Problem zu lösen. Sie waren an der Simulation interessiert. Eine Studie im Simula-Leitfaden modelliert die Ausbreitung von Infektionen unter einer festen Population. Das System ist vollständig geschlossen: Sie haben einen festen Codesatz, führen die Simulation aus und erhalten das Ergebnis. Für sie ist Messaging nutzlos. Die Fähigkeit, Simulationen anhand anderer Simulationen zu definieren, Entitäten zu spezialisieren und die Zeit als Objekt der ersten Klasse zu modellieren, ist jedoch unglaublich nützlich. Auch hier funktionieren Objekte gut.


Also, wer hat die Objekte "richtig" benutzt? Dies ist eine unvernünftige Frage. Sie haben verschiedene Dinge getan, weil sie unterschiedliche Aufgaben hatten. Unsere moderne OOP-Idee ist eine Synthese all ihrer Ideen sowie der Ideen von Adele Goldberg, Barbara Liskov, David Parnassus, Bertrand Meyer, Gul Ag und vielen anderen. Aber keiner von ihnen kann sagen, was "OOP" ist. Konzepte entwickeln sich ebenso wie Aufgaben.


tl; dr


Interviews, die vor mehr als 30 Jahren geführt wurden, sind keine guten Quellen.




* Vielleicht macht dies Powershell zum spirituellen Nachfolger von Smalltalk.

Source: https://habr.com/ru/post/de455638/


All Articles