En fait, Alan Kay n'avait pas Smalltalk en tête quand il est venu avec le terme "programmation orientée objet":
À Utah quelque temps après le 66 novembre, lorsque, influencé par Sketchpad, Simula, la conception de l'ARPAnet, le Burroughs B5000 et ma formation en biologie et mathématiques, j'ai pensé à une architecture pour la programmation. C'était probablement en 1967 quand quelqu'un m'a demandé ce que je faisais et j'ai dit: "C'est une programmation orientée objet".
Sa conception originale comportait les parties suivantes.
- Je pensais que les objets étaient comme des cellules biologiques et / ou des ordinateurs individuels sur un réseau, seulement capables de communiquer avec des messages (donc la messagerie est arrivée au tout début - il a fallu un certain temps pour voir comment faire la messagerie dans un langage de programmation suffisamment efficacement pour sois utile).
- Je voulais me débarrasser des données. Le B5000 l'a presque fait via son architecture HW presque incroyable. J'ai réalisé que la métaphore cellule / ordinateur entier se débarrasserait des données, et que "<-" ne serait qu'un autre jeton de message (il m'a fallu un certain temps pour y réfléchir parce que je pensais vraiment à tous ces symboles comme des noms pour fonctions et procédures.
- Mes connaissances en mathématiques m'ont fait réaliser que chaque objet pouvait avoir plusieurs algèbres associées, et qu'il pouvait y avoir des familles de celles-ci, et que celles-ci seraient très très utiles. Le terme "polymorphisme" a été imposé beaucoup plus tard (je pense par Peter Wegner) et il n'est pas tout à fait valable, car il vient vraiment de la nomenclature des fonctions, et je voulais un peu plus que des fonctions. J'ai inventé un terme de "généricité" pour traiter des comportements génériques sous une forme quasi-algébrique.
- Je n'aimais pas la façon dont Simula I ou Simula 67 faisait l'héritage (même si je pensais que Nygaard et Dahl n'étaient que d'énormes penseurs et concepteurs). J'ai donc décidé de laisser l'héritage en tant que fonctionnalité intégrée jusqu'à ce que je le comprenne mieux.
Smalltalk était le résultat de cette conception, empruntant et étendant les concepts d '"objet" et de "classe" de Simula, que Simula a hérité à son tour d'ALGOL, comme décrit sur "Le développement des langages Simula" par Kristen Nygaard et Ole-Johan Dahl (1978, page 253):
Dans ALGOL, les blocs (y compris les procédures) sont considérés en externe comme des opérations généralisées. En introduisant des mécanismes de séquençage quasi-parallèle, ~ essentiellement la même construction pourrait jouer le rôle de processus en parallèle, et grâce à des mécanismes pour nommer les instances de bloc et accéder à leur contenu, ils pourraient fonctionner comme des objets de données généralisés. Les avantages essentiels de la combinaison des données et des opérations dans une seule construction étaient déjà là pour être explorés.
Un résultat de cette exploration a été la découverte que les «attributs de procédure» pourraient être utiles. L'exemple suivant d'une classe d'objets de voiture «abstraits» est cité dans le document Language Definition (Dahl et Nygaard 1965), sect. 5.3.
Une autre source d'inspiration, en particulier pour la sous-classification, a été la classe record de CAR Hoare (page 258):
L'idée de sous-classe de Hoare (68) était un point de départ naturel, mais il y avait deux difficultés:
- Nous avions besoin de sous-classes de processus avec leurs propres actions et piles de données locales, pas seulement de purs enregistrements de données.
- Nous devions également regrouper les propriétés de processus communes de manière à ce qu'elles puissent être appliquées plus tard, dans une variété de situations différentes qui ne sont pas nécessairement connues à l'avance.
Beaucoup de temps a été consacré à l'automne 1966 à essayer d'adapter la construction de la classe de disques de Hoare pour répondre à nos exigences, sans succès. La solution est venue subitement, avec l'idée de "préfixer", en décembre 1966. Nous pensions en termes de cabine d'atoll sur un pont, avec une file d'attente de voitures qui étaient soit des camions soit des bus. (Cet exemple réapparaît dans (Dahl et Nygaard 1968)).
Les termes "classe" et "objet" apparaissent également sur SIMULA 67 COMMON BASE LANGUAGE d'Ole-Johan Dahl, Bjorm Myhrhaug et Kristen Nygaard (pages 4-5):
Le concept de bloc correspond à la notion intuitive de "sous-problème" ou de "sous-algorithme" qui est une unité de décomposition utile dans les domaines d'application orthodoxes.
Un bloc est une description formelle, ou "modèle" d'une structure de données agrégées et des algorithmes et actions associés.
...
Un concept de bloc étendu est introduit par le biais d'une déclaration de "classe" et d'un mécanisme d'interaction associé tels que des "références d'objet" (pointeurs), un accès à distance ", une opération" quasi-parallèle "et une" concaténation "de bloc.
Les classes sont abordées plus en détail au chapitre 1.3.3 (page 5):
Un nouveau concept central dans Simula 67 est "l'objet". Un objet est un programme autonome (instance de bloc), ayant ses propres données et actions locales définies par une "déclaration de classe". La déclaration de classe définit un modèle de programme (données et action), et les objets conformes à ce modèle sont dits "appartenir à la même classe".
...
Ainsi, bien que le terme "orienté objet" n'ait pas encore été inventé, "classe" et "objet" ont été utilisés de manière similaire à leur utilisation moderne avant qu'Alan Kay ne commence à développer Smalltalk en 1969.
Ivan Sutherland va jusqu'à identifier Simula comme le premier langage de programmation orienté objet, sur Sketchpad: Un système de communication graphique homme-machine (page 4), reconnaissant également les influences de CAR Hoare, Douglas T. Ross , ALGOL et Sketchpad:
Néanmoins, la tentative de Sutherland de supprimer la division entre les utilisateurs et les programmeurs n'était pas le seul système qui, en ne le faisant pas, a fourni le saut imaginatif à un nouveau paradigme de programmation. Simula [7] de Nygaard et Dahl a été le premier langage de programmation conventionnel incorporant les principes de l'orientation des objets, mais la mise en œuvre par Sketchpad de l'héritage basé sur les classes et les instances (bien que non appelés objets) a précédé Simula de plusieurs années.
Il semble y avoir eu une influence commune à travers les travaux de Douglas T. Ross, qui est mentionné dans les remerciements de cette thèse et également cité dans le rapport technique du MIT Lincoln Laboratory sur la base de celle-ci. Ross a siégé au comité Algol 68 avec CAR Hoare au milieu des années 1960, où ses travaux antérieurs sur une structure de données de type enregistrement (appelé un plex) ont influencé les propres idées de Hoare sur les types de données abstraits [3], créditées plus tard par Nygaard et Dahl comme origine des mécanismes de définition de classe dans Simula [7].
Le projet fondateur d'Ayn Kay Dynabook, qui a conduit à la fois au Xerox Star et à l'explosion d'intérêt pour la programmation orientée objet à travers son langage Smalltalk, a été directement influencé par Sketchpad. Kay a écrit sur le fait que la genèse de Smalltalk résidait dans l'apparition par hasard sur son bureau à la fois d'une bande de distribution de Simula et d'une copie de la thèse de Sutherland Sketchpad [5]. Kay a reconnu que les deux systèmes étaient basés sur les mêmes concepts de type sous-jacents (apparemment dérivés via deux itinéraires différents du plex de Ross), et que ceux-ci pourraient former la base d'un système de programmation plus largement utilisable. En comparant ces deux voies d'influence, Simula était un projet beaucoup plus vaste que Sketchpad, reconnu à juste titre comme le premier langage de programmation orienté objet,
Cependant, Alan Kay, évidemment, considère Smalltalk comme le premier langage orienté objet :
Bien qu'il ait en effet de nobles ancêtres, la contribution de Smalltalk est un nouveau paradigme de conception - que j'ai appelé orienté objet - pour attaquer les gros problèmes du programmeur professionnel et rendre les petits possibles pour l'utilisateur novice. La conception orientée objet est une tentative réussie d'améliorer qualitativement l'efficacité de la modélisation des systèmes dynamiques et des relations utilisateur de plus en plus complexes rendus possibles par l'explosion de silicium.
et après avoir inventé le terme, je pense qu'il n'y a pas beaucoup de débat là-bas.
Pour enfin répondre à votre question: certains des concepts fondamentaux de l'orientation des objets existaient sur Simula, et sur des langues antérieures comme Algol et LISP, mais le paradigme lui-même ne l'était pas, donc il n'y avait pas vraiment besoin d'un nom.
Smalltalk a été conçu en tenant compte de l'orientation des objets, du moins ce que Alan Kay pensait de l'orientation des objets :
Pour moi, la POO signifie uniquement la messagerie, la conservation et la protection locales et la dissimulation du processus étatique, et la liaison tardive extrême de toutes choses. Cela peut être fait dans Smalltalk et dans LISP. Il existe peut-être d'autres systèmes dans lesquels cela est possible, mais je ne les connais pas.
L'architecture peut sembler un amalgame de concepts antérieurs, mais ses concepts centraux ont été introduits par Smalltalk, marquant ainsi la première mise en œuvre du paradigme.