Dans le monde d'aujourd'hui, Programmation orientée prototype a acquis une grande importance dans divers aspects de la vie quotidienne. Tant sur le plan personnel que professionnel, la présence de Programmation orientée prototype est devenue un facteur déterminant qui façonne nos décisions, opinions et comportements. Avec les progrès de la technologie et de la mondialisation, Programmation orientée prototype a réussi à transcender les frontières et les barrières culturelles, devenant un sujet d'intérêt général et un point de rencontre pour la société moderne. De son impact sur l’économie à son influence sur la politique et la culture, Programmation orientée prototype a tissé un réseau de connexions qui touche tous les coins de la planète. Dans cet article, nous explorerons de près le rôle fondamental que joue Programmation orientée prototype dans notre vie quotidienne et comment il a réussi à s'imposer comme un élément clé dans l'évolution de la société actuelle.
En informatique, plus précisément en développement logiciel, la programmation orientée prototype est une forme de programmation orientée objet sans classe, fondée sur la notion de prototype. Un prototype est un objet à partir duquel on crée de nouveaux objets. Dans le langage de programmation orientée prototype Self, les propriétés d'un objet, qu'elles renvoient à des attributs ou à des méthodes, sont appelés slots ; il n'y a pas la même distinction entre les slots de données et les slots de code qu'on a avec les classes. La grande différence avec la programmation objet à classe est qu'on peut remplacer le contenu des slots, en ajouter d'autres ou changer la hiérarchie d'héritage que cela soit prévu dans l'objet original ou pas.
Self fut le premier langage à prototypes. Il a été conçu dans les laboratoires de Sun dans les années 1990. Le plus connu actuellement est JavaScript.
Objets à classes :
Objets à prototypes :
Un des intérêts majeurs des prototypes est l'héritage dynamique : tout objet peut changer de parent à l'exécution, n'importe quand.
On peut matérialiser les paradigmes objet à prototypes et objet à classes en constatant la différence d'utilisation de la mémoire.
Il existe à l'heure actuelle plusieurs langages à base d'objets à prototypes : Self, Lisaac, ou encore les langages implémentant la spécification ECMAScript (JavaScript, ActionScript, JScript). Self et JavaScript sont des langages à typage dynamique et sont interprétés. Lisaac et ActionScript sont à typage statique et compilés. Au sein de ActionScript 3.0, l’héritage de prototype ne constitue pas le principal mécanisme d’héritage car ce rôle incombe également à l'héritage de classe désormais présent dans cette version.
Les propriétés des objets se recherchent, dans la chaîne des héritages, de la même façon que la valeur des variables dans la pile des contextes d'exécution.
L'écriture foo.bar s'interprète de la façon suivante :
foo est recherché dans la liste des identifiants déclarés dans le contexte d'appel de fonction courant (déclarés par var ou par les paramètres de la fonction).foo n'est pas un objet, il n'a pas de propriétés et la recherche se termine par une erreur de référence.bar est d'abord recherchée dans l'objet lui-même.undefined) est retournée.Il ne s'agit pas d'une copie statique de la variable ; chaque fois que le compilateur (interpréteur) rencontre l'identifiant, il l’interprète comme indiqué.
Une propriété déclarée dans l'objet étant trouvée en premier, elle masque celles de même nom qui auraient pu exister dans les prototypes dont l'objet hérite. Par exemple, le prototype de l'objet Object possède une méthode toString qui renvoie une description de l'objet, pour n'importe quel type d'objet. Les objets construits par Date() héritent du prototype de cette fonction, dont une méthode toString qui renvoie des informations plus utiles ; celle-ci masque la méthode toString de Object.prototype.
Un objet hérite du prototype de son constructeur. Si on ne se sert pas de constructeur pour initialiser un objet, on peut utiliser une fonction vide pour créer ce lien.
var A = {}; // identique à « var A = new Object(); »
var B = (function () {
function F() {}
F.prototype = A;
return new F();
}()); // depuis JavaScript 1.8.5 la méthode « Object.create(A); » a le même effet
// à présent A est dans la chaîne de recherche d'identifiants de B
A.compte = 0;
A.separ = ": ";
B.separ = ", ";
for (A.compte = 0; A.compte < 10; A.compte++) {
document.write(B.compte + B.separ) // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
}
Cet exemple montre l'héritage d'une propriété qui renvoie à une valeur de type nombre ; l'héritage de références à un objet, y compris une méthode, s'effectue de la même manière.