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:
- Wir brauchten Unterklassen von Prozessen mit eigenen Aktionen und lokalen Datenstapeln, nicht nur von reinen Datensätzen.
- 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.