Privacy Policy Cookie Policy Terms and Conditions

[HOME PAGE] [STORES] [CLASSICISTRANIERI.COM] [FOTO] [YOUTUBE CHANNEL]


Programmation orientée prototype

Programmation orientée prototype

Cet article est une ébauche concernant l’informatique.
Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants.
Cet article ne cite pas suffisamment ses sources (juin 2008).
Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références » (modifier l'article, comment ajouter mes sources ?).

La programmation orientée prototype est une forme de programmation orientée objet sans classe, basé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'ils renvoient à des attributs ou à des méthodes, sont appelés slots ; il n'y a pas la 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 à classes 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.

Comparaison des modèles à classes et à prototypes

Objets à classes :

  • Une classe définie par son code source est statique ;
  • Elle représente une définition abstraite de l'objet ;
  • Tout objet est instance d'une classe ;
  • L'héritage se situe au niveau des classes.

Objets à prototypes :

  • Un prototype défini par son code source est mutable ;
  • Il est lui-même un objet au même titre que les autres ;
  • Il a donc une existence physique en mémoire ;
  • Il peut être modifié, appelé ;
  • Il est obligatoirement nommé ;
  • Un prototype peut être vu comme un exemplaire modèle d'une famille d'objet ;
  • Un objet hérite des propriétés (valeurs et méthodes) de son prototype ;

Intérêt de la programmation orientée prototype

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. À noter également qu'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.

Exemple : l'héritage en JavaScript

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.

En ECMAScript/JavaScript, l'écriture foo.bar s'interprète de la façon suivante :

  1. Le nom foo est recherché dans la liste des identifieurs déclarés dans le contexte d'appel de fonction courant (déclarés par var, ou comme paramètre de la fonction) ;
  2. S'il n'est pas trouvé :
    • Continuer la recherche (retour à l'étape 1) dans le contexte de niveau supérieur (s'il existe),
    • Sinon, le contexte global est atteint, et la recherche se termine par une erreur de référence.
  3. Si la valeur associée à foo n'est pas un objet, il n'a pas de propriétés ; la recherche se termine par une erreur de référence.
  4. La propriété bar est d'abord recherchée dans l'objet lui-même ;
  5. Si la propriété ne s'y trouve pas :
    • Continuer la recherche (retour à l'étape 4) dans le prototype de cet objet (s'il existe) ;
    • Si l'objet n'a pas de prototype associé, la valeur indéfinie (undefined) est retournée ;
  6. Sinon, la propriété a été trouvée et sa référence 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 à A =  new Object()
var B = ( function() {
        var F = function () {};
        F.prototype = A;
        return new F();
        }());         // à partir de JavaScript 1.8.5 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.

Langages

  • ActionScript
  • Actor-Based Concurrent Language, ABCL: ABCL/1, ABCL/R, ABCL/R2, ABCL/c+
  • Agora
  • Cecil
  • Cel
  • ColdC
  • JavaScript
  • Factor
  • Falcon
  • Io
  • Lisaac
  • Logtalk
  • Lua
  • LPC
  • MOO
  • NewtonScript
  • Obliq
  • OpenLaszlo
  • Oris
  • Perl 6
  • REBOL
  • Self
  • Slate
  • Squeak quand on l'utilise pour manipuler les composants du framework Morphic
  • TADS
  • Urbiscript

Voir aussi

Articles connexes

Liens externes

  • Adobe, « Object - Référence du langage et des composants ActionScript 3.0 », sur help d'adobe, Adobe, (consulté le 7 mai 2009)
  • Christophe Dony, Jacques Malendant, Daniel Bardou, « Les Langages à Prototypes », paru dans Langages et Modèles à Objets : États des recherches et perspectives, INRIA - Collection Didactique, chapitre 9, pages 227-256, Editeurs R. Ducournau, J. Euzenat, G. Masini, A. Napoli,
  • Portail de la programmation informatique
This article is issued from Wikipédia - version of the Tuesday, October 28, 2014. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.
Contents Listing Alphabetical by Author:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Unknown Other

Contents Listing Alphabetical by Title:
# A B C D E F G H I J K L M N O P Q R S T U V W Y Z Other

Medical Encyclopedia

Browse by first letter of topic:


A-Ag Ah-Ap Aq-Az B-Bk Bl-Bz C-Cg Ch-Co
Cp-Cz D-Di Dj-Dz E-Ep Eq-Ez F G
H-Hf Hg-Hz I-In Io-Iz J K L-Ln
Lo-Lz M-Mf Mg-Mz N O P-Pl Pm-Pz
Q R S-Sh Si-Sp Sq-Sz T-Tn To-Tz
U V W X Y Z 0-9

Biblioteca - SPANISH

Biblioteca Solidaria - SPANISH

Bugzilla

Ebooks Gratuits

Encyclopaedia Britannica 1911 - PDF

Project Gutenberg: DVD-ROM 2007

Project Gutenberg ENGLISH Selection

Project Gutenberg SPANISH Selection

Standard E-books

Wikipedia Articles Indexes

Wikipedia for Schools - ENGLISH

Wikipedia for Schools - FRENCH

Wikipedia for Schools - SPANISH

Wikipedia for Schools - PORTUGUESE

Wikipedia 2016 - FRENCH

Wikipedia HTML - CATALAN

Wikipedia Picture of the Year 2006

Wikipedia Picture of the Year 2007

Wikipedia Picture of the Year 2008

Wikipedia Picture of the Year 2009

Wikipedia Picture of the Year 2010

Wikipedia Picture of the Year 2011