đ± 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