Alan Kay n'a pas inventé d'objets

Les gens continuent de soutenir que les langages orientés objet modernes ne sont en fait "pas tout à fait orientés objet" car ils ne répondent pas à la définition de la POO Alan Kay. À mon avis, cela a du sens, même si je ne suis pas d'accord avec la conclusion. Récemment, j'ai rencontré des gens qui disent que c'est Kay qui a inventé les objets. Ce n'est en fait pas vrai.


Alan Kay n'a pas inventé d'objets. Ils étaient à Simula , ce qui conduit à Smalltalk-72 comme principale source d'inspiration (p. 117). Un numéro de 1981 de Byte, un magazine populaire qui a popularisé Smalltalk et OOP, a déclaré que "l'idée de base des objets, des messages et des classes venait de SIMULA." Il dit que Simula permet aux utilisateurs de créer des "systèmes orientés objet", ce qui peut être trop, mais néanmoins. L'équipe Smalltalk connaissait bien le système d'objets Simula et s'en est inspirée.


L'une des raisons pour lesquelles un tel mythe est toujours vivant est ce que Kay lui-même a déclaré en 1998 :


Je vous rappelle juste que lors du dernier OOPSLA, j'ai essayé de faire comprendre à tout le monde que Smalltalk n'est pas seulement PAS une bibliothèque de syntaxe ou de classe, mais pas même des classes. Je suis vraiment désolé d'avoir déjà inventé le terme «objets» pour ce sujet, car cela fait que beaucoup de gens se concentrent sur une idée plus petite.

Et plus loin dans cette interview, il continue:


Je veux dire, j'ai inventé le terme «objets». Depuis que nous avons fait des objets d'abord, il n'y avait pas d'autres objets pour radicaliser cela.

Plus tard, il a cessé de le dire , mais les gens continuent d'utiliser cette citation comme un fait.


Alan Kay a inventé le terme «programmation orientée objet»


C’est absolument vrai.


La POO était dans les classes et les objets


Récemment, beaucoup continuent de soutenir que la POO n'est en fait pas dans les classes et les objets, et qu'en fait, les messages sont les plus importants. Dans un article de 1998, après que Kay eut dit qu'il regrettait les «objets», il a également déclaré qu '«une excellente idée est la messagerie». Il écrit en outre:


La POO n'est pour moi que des messages, une prise et une protection locales, cachant l'état et plus tard tout liant. Cela peut être fait dans Smalltalk et dans LISP. Il existe probablement d'autres systèmes où cela est possible, mais je ne les connais pas.

Au début de la POO, les messages étaient largement considérés comme importants, principalement pour l'entretien des installations. Voici comment Don Ingalls explique la POO dans son introduction à Smalltalk-76 :


Smalltalk est plus orienté objet plutôt que fonction, ce qui confond souvent les gens avec une expérience en informatique. Par exemple, <someobject>+4 signifie envoyer +4 objet sous forme de message. La principale différence est que tout est contrôlé par l'objet, pas + . Si <someobject> est un entier de 3, alors le résultat est un entier de 7. Cependant, si <someobject> était la chaîne 'Meta' , le résultat pourrait être Meta4 . Ainsi, la charge sémantique accompagne les objets du système, et le code reste une forme abstraite, dirigeant simplement le flux de messages.

Dans Microelectronics and the Personal Computer, Kay parle d'un système de message-à-action dans lequel «chaque action appartient à une famille», et parle d'élargir les activités au «point de vue» des relations d'objet comme la future frontière. Dans le manuel Smalltalk-72, il écrit (p. 18):


L'idée principale lors de l'écriture de programmes Small Talk est de définir des classes qui gèrent les relations entre les objets dans l'environnement créé.

Lors de la visualisation des premières sources, l'image est formée que la POO se compose de trois idées principales: des classes qui définissent le protocole et l'implémentation, des objets en tant qu'instances de classes et des messages en tant que moyens de communication. L'idée que les classes et les objets étaient secondaires aux messages est venue beaucoup plus tard.


Smalltalk a été le premier véritable langage orienté objet


ACM a présenté la première de Turing à Dahl et Nyugor, et les a appelés "co-auteurs de l'OLP". Byte écrit également que Simula était orientée objet, et dans l'article "La révolution informatique n'a pas encore eu lieu", Kay appelle Sketchpad "très orienté objet". À mon avis, cela ne reconnaît pas adéquatement les mérites de Smalltalk. Contrairement à d'autres systèmes, dans Smalltalk:


  • Il n'y avait pas de primitives sans objet: les nombres étaient des objets, les erreurs étaient des objets, les classes étaient des objets, les messages étaient des objets.
  • Vous pouvez transmettre un message à n'importe quel objet, y compris à d'autres messages.
  • Les méthodes et implémentations étaient associées à des objets, pas à une session.

Le dernier point est le plus délicat et peut-être le plus important, bien que personne n'explique vraiment ce qui le rend si spécial. Dans Simula, l'invocation d'une méthode manquante provoque une erreur. Cela fait partie de la spécification Simula. Dans Smalltalk-80, si aucune méthode ne correspond au message, l'objet par défaut renvoie un message doesNotUnderstand . L'appelant peut y répondre, transmettre un message ou signaler une erreur. Une classe peut également remplacer l'action par défaut et faire autre chose que renvoyer doesNotUnderstand .


Cela signifie également que le système de messagerie ne dépend pas de la structure interne des objets. Ils n'ont même pas à faire partie d'un projet. Il s'ensuit que vous pouvez faire des choses comme envoyer des messages à des objets écrits dans différentes langues , envoyer des définitions d'objet par courrier , envoyer des messages via SMS, etc. À mon avis, c'est précisément le pouvoir de la «messagerie», mais en même temps c'est l'un des aspects les moins étudiés.


Smalltalk avait un contexte ambiant


Les gens n'inventent pas spontanément des outils. Ils ont des situations et des tâches spécifiques, et ils essaient de trouver une solution à ces problèmes. Les innovations dans Smalltalk et OOP ne font pas exception.


Alan Kay s'intéressait au sujet des ordinateurs personnels. Son travail sur FLEX, Dynabook et Smalltalk se construit autour de cela. À son avis, le PC aurait dû être entièrement sous le contrôle de l'utilisateur; tout, de la logique du cœur du système au rendu graphique, peut être mis en place et exploré en cours de fonctionnement. La transmission de messages et la liaison tardive résolvent un certain nombre de problèmes. Si un enfant installe un nouveau jeu, dois-je recompiler l'intégralité du système d'exploitation pour utiliser le nouveau programme? Non: permet d'envoyer un message arbitraire à n'importe quel objet et de s'appuyer sur le traitement du protocole pendant le travail pour terminer la tâche. (*) Si une personne viole la logique du système audio, le système d'exploitation devrait-il tomber? Bien sûr que non, alors laissez les objets décider comment traiter les messages eux-mêmes. Les objets fonctionnent bien ici.


Ole Dahl et Kirsten Nyugor ont essayé de résoudre un problème complètement différent. Ils étaient intéressés par la simulation . Une étude du guide Simula modélise la propagation de l'infection au sein d'une population fixe. Le système est complètement fermé: vous disposez d'un ensemble de code fixe, vous lancez la simulation et obtenez le résultat. Pour eux, la messagerie est inutile. Mais la capacité de définir des simulations en termes d'autres simulations, de spécialiser des entités et de modéliser le temps en tant qu'objet de première classe est incroyablement utile. Les objets fonctionnent également bien ici.


Alors, qui a utilisé les objets "correctement"? C'est une question déraisonnable. Ils ont fait des choses différentes parce qu'ils avaient des tâches différentes. Notre idée moderne de POO est une synthèse de toutes leurs idées, ainsi que les idées d'Adele Goldberg, Barbara Liskov, David Parnassus, Bertrand Meyer, Gul Ag et bien d'autres. Mais aucun d'entre eux ne peut dire ce qu'est «OOP». Les concepts évoluent, tout comme les tâches.


tl; dr


Les interviews réalisées il y a plus de 30 ans ne sont pas de bonnes sources.




* Cela fait peut-être de Powershell le successeur spirituel de Smalltalk.

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


All Articles