Wie nannten sie objektorientierte Programmierung, bevor Alan Kay den Begriff erfand?

22

Alan Kay behauptet, dass "ich den Begriff" objektorientiert "erfunden habe, und ich kann Ihnen sagen, dass ich nicht an C ++ gedacht habe." Was er vorhatte, war natürlich Smalltalk. Aber er hat die objektorientierte Programmierung selbst nicht erfunden; er bekam die Grundideen von Simula. Also, wenn der Begriff noch nicht erfunden worden war, was nannten sie ursprünglich objektorientierte Programmierung in Simula?

Mason Wheeler
quelle

Antworten:

39

Eigentlich hatte Alan Kay Smalltalk nicht im Sinn, als er den Begriff "objektorientierte Programmierung" einführte:

Irgendwann nach dem 66. November in Utah, als ich, beeinflusst von Sketchpad, Simula, dem Design für das ARPAnet, den Burroughs B5000 und meinem Hintergrund in Biologie und Mathematik, an eine Architektur für die Programmierung dachte. Es war wahrscheinlich im Jahr 1967, als mich jemand fragte, was ich tue, und ich sagte: "Es ist objektorientierte Programmierung".

Die ursprüngliche Konzeption hatte die folgenden Teile.

  • Ich dachte an Objekte, die wie biologische Zellen und / oder einzelne Computer in einem Netzwerk sind und nur mit Nachrichten kommunizieren können (Messaging stand also am Anfang - es dauerte eine Weile, bis ich herausgefunden hatte, wie Messaging in einer Programmiersprache effizient genug ist, um zu funktionieren nützlich sein).
  • Ich wollte Daten loswerden. Der B5000 hat dies dank seiner fast unglaublichen HW-Architektur beinahe geschafft. Ich erkannte, dass die Metapher für die Zelle / den gesamten Computer keine Daten mehr enthält und dass "<-" nur ein weiteres Nachrichtentoken ist (es dauerte eine Weile, bis ich mir das überlegte, weil ich all diese Symbole wirklich als Namen für diese Symbole angesehen hatte Funktionen und Verfahren.
  • Durch meinen mathematischen Hintergrund wurde mir klar, dass mit jedem Objekt mehrere Algebren verknüpft sein könnten und dass es Familien von diesen geben könnte, und dass diese sehr, sehr nützlich wären. Der Begriff "Polymorphismus" wurde viel später auferlegt (ich denke von Peter Wegner) und ist nicht ganz gültig, da er wirklich aus der Nomenklatur der Funktionen stammt und ich ziemlich viel mehr als Funktionen wollte. Ich habe mir einen Begriff "Generizität" ausgedacht, um mit generischen Verhaltensweisen in einer quasi-algebraischen Form umzugehen.
  • Mir hat nicht gefallen, wie Simula I oder Simula 67 geerbt haben (obwohl ich dachte, Nygaard und Dahl wären nur großartige Denker und Designer). Deshalb habe ich beschlossen, die Vererbung als integrierte Funktion wegzulassen, bis ich sie besser verstanden habe.

Smalltalk war das Ergebnis dieser Konzeption, bei der die Konzepte "Objekt" und "Klasse" von Simula übernommen und erweitert wurden, die Simula wiederum von ALGOL geerbt hatte, wie in "Die Entwicklung der Simula-Sprachen" von Kristen Nygaard und Ole-Johan beschrieben Dahl (1978, Seite 253):

In ALGOL werden Blöcke (einschließlich Prozeduren) extern als verallgemeinerte Operationen betrachtet. Durch die Einführung von Mechanismen zur quasi-parallelen Sequenzierung könnte im Wesentlichen dasselbe Konstrukt die Rolle von Prozessen parallel spielen, und durch Mechanismen zum Benennen von Blockinstanzen und Zugreifen auf deren Inhalt könnten sie als verallgemeinerte Datenobjekte fungieren. Die wesentlichen Vorteile der Kombination von Daten und Operationen in einem einzigen Konstrukt konnten bereits untersucht werden.

Ein Ergebnis dieser Untersuchung war die Entdeckung, dass "Prozedurattribute" nützlich sein könnten. Das folgende Beispiel einer Klasse von "abstrakten" Autoobjekten wird aus dem Dokument zur Sprachdefinition (Dahl und Nygaard 1965), Kap. 5.3.

Weitere Inspiration, insbesondere für die Unterklassifizierung, war die Rekordklasse von CAR Hoare (Seite 258):

Die Idee der Unterklasse von Hoare (68) war ein natürlicher Ausgangspunkt, aber es gab zwei Schwierigkeiten:

  1. Wir brauchten Unterklassen von Prozessen mit eigenen Aktionen und lokalen Datenstapeln, nicht nur von reinen Datensätzen.
  2. Wir mussten auch gemeinsame Prozesseigenschaften so gruppieren, dass sie später in einer Vielzahl von Situationen angewendet werden konnten, die nicht unbedingt im Voraus bekannt waren.

Im Herbst 1966 wurde viel Zeit darauf verwendet, Hoares Rekordklassenkonstrukt an unsere Anforderungen anzupassen, ohne Erfolg. Die Lösung kam plötzlich im Dezember 1966 mit der Idee des "Präfixierens". Wir dachten an einen Atollstand auf einer Brücke mit einer Schlange von Autos, die entweder Lastwagen oder Busse waren. (Dieses Beispiel taucht in (Dahl und Nygaard 1968) wieder auf.)

Die Begriffe "Klasse" und "Objekt" erscheinen auch in SIMULA 67 COMMON BASE LANGUAGE von Ole-Johan Dahl, Bjorm Myhrhaug und Kristen Nygaard (Seiten 4-5):

Das Blockkonzept entspricht dem intuitiven Begriff "Unterproblem" oder "Unteralgorithmus", der in orthodoxen Anwendungsgebieten eine nützliche Zerlegungseinheit darstellt.

Ein Block ist eine formale Beschreibung oder ein "Muster" einer aggregierten Datenstruktur und der zugehörigen Algorithmen und Aktionen.

...

Ein erweitertes Blockkonzept wird durch eine "Klassen" -Deklaration und zugehörige Interaktionsmechanismen wie "Objektreferenzen" (Zeiger), Fernzugriff "," Quasi-Parallel "-Operation und" Blockverkettung "eingeführt.

Weitere Informationen zu Klassen finden Sie in Kapitel 1.3.3 (Seite 5):

Ein zentrales neues Konzept in Simula 67 ist das "Objekt". Ein Objekt ist ein eigenständiges Programm (Blockinstanz) mit eigenen lokalen Daten und Aktionen, die durch eine "Klassendeklaration" definiert werden. Die Klassendeklaration definiert ein Programmmuster (Daten- und Aktionsmuster), und Objekte, die diesem Muster entsprechen, sollen "zur selben Klasse gehören".

...

Obwohl der Begriff "objektorientiert" noch nicht erfunden wurde, wurden sowohl "Klasse" als auch "Objekt" ähnlich wie in der heutigen Zeit verwendet, bevor Alan Kay 1969 mit der Entwicklung von Smalltalk begann.

Ivan Sutherland geht so weit, Simula als erste objektorientierte Programmiersprache auf Sketchpad zu identifizieren : Ein grafisches Mensch-Maschine-Kommunikationssystem (Seite 4), das auch die Einflüsse von CAR Hoare, Douglas T. Ross , ALGOL und Sketchpad erkennt :

Trotzdem war Sutherlands Versuch, die Trennung zwischen Benutzern und Programmierern aufzuheben, nicht das einzige System, das den einfallsreichen Sprung zu einem neuen Programmierparadigma ermöglichte. Nygaards und Dahls Simula [7] war die erste konventionelle Programmiersprache, die die Prinzipien der Objektorientierung enthielt, aber Sketchpads Implementierung der klassen- und instanzbasierten Vererbung (obwohl sie nicht als Objekte bezeichnet wird) lag mehrere Jahre vor Simula.

Es scheint einen gemeinsamen Einfluss durch die Arbeit von Douglas T. Ross gegeben zu haben, der in den Anerkennungen dieser Dissertation erwähnt und auch im darauf basierenden technischen Bericht des MIT Lincoln Laboratory zitiert wird. Ross saß Mitte der 1960er Jahre mit CAR Hoare im Algol 68-Komitee, wo seine frühere Arbeit an einer rekordähnlichen Datenstruktur (Plex) Hoares eigene Ideen zu abstrakten Datentypen beeinflusste [3], die später von Nygaard und Dahl zugeschrieben wurden als Ursprung der Klassendefinitionsmechanismen in Simula [7].

Alan Kays wegweisendes Dynabook-Projekt, das sowohl zum Xerox Star als auch zur Explosion des Interesses an objektorientierter Programmierung durch seine Sprache Smalltalk führte, wurde direkt von Sketchpad beeinflusst. Kay hat darüber geschrieben, dass die Entstehung von Smalltalk in der zufälligen Erscheinung eines Verteilungsbandes von Simula und einer Kopie von Sutherlands Sketchpad-These [5] auf seinem Schreibtisch lag. Kay erkannte, dass die beiden Systeme auf den gleichen zugrunde liegenden Typkonzepten basierten (offenbar auf zwei unterschiedlichen Wegen von Ross 'Plex abgeleitet) und dass diese die Grundlage für ein breiter einsetzbares Programmiersystem bilden könnten. Beim Vergleich dieser beiden Einflussmöglichkeiten war Simula ein weitaus größeres Projekt als Sketchpad, das zu Recht als erste objektorientierte Programmiersprache anerkannt wurde.

Alan Kay betrachtet Smalltalk jedoch offensichtlich als die erste objektorientierte Sprache :

Obwohl es in der Tat edle Vorfahren hat, ist Smalltalks Beitrag ein neues Design-Paradigma - das ich objektorientiert nannte -, um große Probleme des professionellen Programmierers anzugreifen und kleine für den unerfahrenen Benutzer zu ermöglichen. Objektorientiertes Design ist ein erfolgreicher Versuch, die Effizienz der Modellierung der immer komplexer werdenden dynamischen Systeme und Benutzerbeziehungen, die durch die Siliziumexplosion ermöglicht werden, qualitativ zu verbessern.

und nachdem ich den Begriff geprägt habe, denke ich, dass es dort nicht viel Debatte gibt.

Um Ihre Frage endlich zu beantworten: Einige der Kernkonzepte der Objektorientierung existierten auf Simula und in früheren Sprachen wie Algol und LISP, aber das Paradigma selbst tat es nicht, weshalb es nicht wirklich notwendig war, einen Namen zu verwenden.

Smalltalk wurde unter Berücksichtigung der Objektorientierung entwickelt, zumindest was Alan Kay als Objektorientierung ansah :

OOP bedeutet für mich nur Nachrichtenübermittlung, lokale Aufbewahrung und Schutz sowie das Verstecken von staatlichen Prozessen und extrem spätes Binden aller Dinge. Dies kann in Smalltalk und in LISP erfolgen. Es gibt möglicherweise andere Systeme, in denen dies möglich ist, aber ich kenne sie nicht.

Die Architektur mag wie eine Verschmelzung früherer Konzepte erscheinen, aber ihre zentralen Konzepte wurden von Smalltalk eingeführt und markieren damit die erste Umsetzung des Paradigmas.

yannis
quelle
2
+1 Wie immer, gute Antwort Yannis! Ich habe einiges daraus gelernt.
Jonathan Henson
6
Tatsächlich gibt es viele Debatten und gute Gründe dafür. Trotz Alan Kays selbstverherrlichendem Anspruch auf ein "neues Paradigma" gibt es praktisch keine Möglichkeit, "objektorientiert" zu definieren, das Smalltalk einschließt, aber Simula ausschließt. Die Idee "Alles ist ein Objekt" gab es in einigen Implementierungen (und es ist meistens auch ein Konzept in Smalltalk - als Optimierung haben kleine Ganzzahlobjekte eine Darstellung, die sich kaum von der von C oder Pascal unterscheiden lässt).
Jerry Coffin
1
@JerryCoffin Ich bin nicht anderer Meinung, dass die meisten Konzepte und Prinzipien in der Frühgeschichte von Smalltalk da waren, nichts Neues unter der Sonne. Kay bezieht sich unter vielen anderen Einflüssen sogar auf Platon als Inspiration für die Objektorientierung. Persönlich werde ich Smalltalk weiterhin als das Paradigma einführend betrachten, da es die erste Implementierung war, die im Hinblick auf das Paradigma entworfen wurde, wohingegen bei früheren Implementierungen die zugehörigen Konzepte Merkmale, Kern oder Nebeneffekte, aber nicht die treibende Philosophie enthielten, die sie hervorbrachten her die Sprache.
Yannis
1
@JerryCoffin (Forts.) Das ist jedoch Flammenkriegsgebiet, und ich glaube wirklich nicht, dass es wichtig ist. Ich denke, das Sutherland-Zitat, das ich beigefügt habe, stellt die Tatsache angemessen dar, dass nicht jeder zustimmt, dass Kay das Paradigma "erfunden" hat, und meine persönliche Meinung zu diesem Thema ist nichts weiter als eine Fußnote.
Yannis
5
Tatsächlich ist das zentrale Konzept nicht "jede Entität ist ein Objekt", sondern "jede Aktion ist eine gesendete Nachricht". Alan Kay sagt sogar, dass er es bedauert, ihn "objektorientiert" genannt zu haben, und dass so etwas wie "nachrichtenorientiert" ein besserer Begriff gewesen wäre.
Jörg W Mittag