Organizing Programs Without Classes

✒ Enzo SandrĂ© · 📆 22/11/2021 · 🔣 Science des Langages · đŸ’Ÿ Histoire de l'informatique

đŸ˜± En 1986 naĂźt la programmation orientĂ©e prototype, cĂ©lĂšbre grĂące Ă  JavaScript. Paradoxalement, ce paradigme est relativement inconnu, voire fui par les dĂ©veloppeurs JS qui prĂ©fĂšrent oublier son existence ! Quel Ă©chec pour celui qui Ă©tait vu comme rĂ©volutionnaire en 1991, au sens littĂ©ral du terme : il visait l’abolition des classes.

đŸ€ł Aujourd’hui un papier historique de 4 chercheurs de Stanford, dont David Ungar, le crĂ©ateur de Self, premier langage orientĂ© prototype.

đŸ—‘ïž Les auteurs y dĂ©fendent une thĂšse osĂ©e : les classes sont inutiles Ă  la programmation orientĂ©e objet, voire mĂȘme gĂȘnantes. Tout ce que font les classes peut ĂȘtre fait plus simplement par la copie de prototypes : hĂ©ritage, composition, encapsulation, polymorphisme. Mieux, les prototypes apportent l’hĂ©ritage dynamique et la modification du comportement hĂ©ritĂ© par les enfants.

đŸ•”ïž L’intĂ©rĂȘt de ce papier est surtout historique, 30 ans aprĂšs, un bilan s’impose :
❌ Les classes sont bien vivantes et les pratiques actuelles tendent vers des systùmes de typage de plus en plus forts.
❌ JavaScript vit sans assumer son paradigme historique (cocasse pour quelque chose de rĂ©volutionnaire), en tĂ©moigne le succĂšs des diverses surcouches et frameworks (NodeJS, TypeScript, etc.).
❌ L’hĂ©ritage dynamique n’a pas trouvĂ© d’usage.
❌ La modification du comportement hĂ©ritĂ© est vue comme un antipattern en OrientĂ© Objet car il brouille la comprĂ©hension.
❌ En dehors de LUA, tous les autres langages orientĂ© prototype sont tombĂ©s dans l’oubli.
✔ Le principal hĂ©ritage de l’orientĂ© prototype est l’idĂ©e de traits, prĂ©sents dans la plupart des langages OO de nos jours, sous diverses formes.
✔ La notion de dĂ©lĂ©guĂ© pourrait venir de l’orientĂ© prototype mais son origine est plus floue.

🛑 Bien qu’élĂ©gante sur le papier, l’idĂ©e des langages a prototypes a souffert de sa courbe d’apprentissage exĂ©crable, totalement incompatible avec la cible de son principal porte-drapeau : JS, le langage des dĂ©butants par excellence. Peu sont mĂȘme au courant du paradigme auquel obĂ©it ce langage. La plupart ont adoptĂ© les codes de la programmation fonctionnelle ou impĂ©rative lorsqu’ils programment en JS.

SOURCE

Chambers, Craig & Ungar, David & Chang, Bay-Wei & Hölzle, Urs. (1991). Organizing Programs Without Classes.. Lisp and Symbolic Computation. 4. 223-242. 10.1007/BF01806107.

Enzo Sandré


DOIs: 10.1007/BF01806107