Comment appelaient-ils la programmation orientée objet avant qu'Alan Kay n'invente le terme?


22

Alan Kay affirme que "j'ai inventé le terme" orienté objet ", et je peux vous dire que je n'avais pas C ++ en tête." Ce qu'il avait en tête, bien sûr, c'était Smalltalk. Mais il n'a pas inventé lui-même la programmation orientée objet; il a obtenu les idées de base de Simula. Donc, si le terme n'avait pas encore été inventé, comment appelaient-ils à l'origine la programmation orientée objet dans Simula?

Réponses:


39

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:

  1. 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.
  2. 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.


2
+1 Comme d'habitude, excellente réponse Yannis! J'en ai beaucoup appris.
Jonathan Henson

6
En fait, il y a beaucoup de débats, et c'est une bonne raison. Malgré la revendication auto-aggrandissante d'Alan Kay d'un «nouveau paradigme», il n'y a pratiquement aucun moyen de définir «orienté objet» qui inclut Smalltalk mais exclut Simula. L'idée "tout est un objet" était présente dans certaines implémentations (et c'est aussi principalement un concept dans Smalltalk - en tant qu'optimisation, les petits objets entiers ont une représentation qui est à peu près indiscernable de ce que quelque chose comme C ou Pascal utiliserait).
Jerry Coffin

1
@JerryCoffin Je ne suis pas en désaccord avec le fait que la plupart des concepts et principes étaient là, rien de nouveau sous le soleil, sur La petite histoire de Smalltalk Kay fait même référence à Platon comme source d'inspiration pour l'orientation des objets, parmi une tonne d'autres influences. Personnellement, je continuerai à penser que Smalltalk a introduit le paradigme, car il s'agissait de la première implémentation à être conçue avec le paradigme à l'esprit, tandis que sur les implémentations précédentes, les concepts connexes étaient des fonctionnalités, essentielles ou mineures, mais pas la philosophie de conduite qui a amené la langue.
yannis

1
@JerryCoffin (suite ...) C'est cependant un territoire de guerre des flammes, et je ne pense vraiment pas que cela soit important. Je pense que la citation de Sutherland que j'ai incluse présente adéquatement le fait que tout le monde n'est pas d'accord que Kay a "inventé" le paradigme, et mon opinion personnelle sur la question n'est rien de plus qu'une note de bas de page.
yannis

5
En fait, le concept central n'est pas "chaque entité est un objet" mais plutôt "chaque action est un message envoyé". Alan Kay dit même qu'il regrette de l'avoir appelé "orienté objet" et que quelque chose comme "orienté message" aurait été un meilleur terme.
Jörg W Mittag
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.