IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Usage des prototypes


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2014
    Messages : 30
    Par défaut Usage des prototypes
    Je me pose des questions au sujet des prototypes. Leur intervention dans un script ajoute un traitement qui selon les tests, ralentissent l'exécution, ou bien recèle des dangers (cf. TypeScript).
    Si d'autres méthodes parviennent au même résultat pourquoi utiliser ce mécanisme ?

    Depuis que j'utilise Javascript, je n'ai jamais eu besoin des prototypes.
    J'analyses mes programme avec le concept d'objets. Dans cet esprit, je n'ai jamais eu recours aux prototypes.
    La structure de base (sans prototype) de Javascript offre une palette de possibilités qui permet de reproduire le fonctionnement des classes-Java dont j'ai besoin.. Et même plus.
    Note : en n'ajoutant aucune prothèse à Javascript, ce langage conserve ainsi toute sa richesse, dans un mode de fonctionnement optimum.

    Les scripts que j'ai pu lire, qui faisaient appel aux prototypes, pouvaient se réécrire en les supprimant.
    Je n'ai jamais rencontré d'exemple où les prototypes étaient indispensables.

    La théorie des prototypes est décrite et re-décrite un peu partout. Cette théorie serait parfaite si elle n'entraînait une perte de rentabilité.
    Auriez-vous des exemples 'concrets' qui nécessiteraient obligatoirement l'usage des prototypes ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Hola, beaucoup de choses complètement fausses dans ce message. Attention à ne pas juger trop vite un paradigme que vraisemblablement tu connais mal.

    Leur intervention dans un script ajoute un traitement qui selon les tests, ralentissent l'exécution, ou bien recèle des dangers

    Faux, les prototypes sont partout et sont la base du langage, par conséquent il n'y a de problème de performance ou de sécurité que l'on puisse imputer directement aux prototypes.

    Depuis que j'utilise Javascript, je n'ai jamais eu besoin des prototypes.

    Tu te sers très souvent des prototypes, sans t'en rendre compte. Jamais utilisé de array.map ? de element.innerHTML ? de string.trim ? Ce sont des méthodes et des propriétés issus des prototypes des objets de base en JavaScript

    J'analyses mes programme avec le concept d'objets. Dans cet esprit, je n'ai jamais eu recours aux prototypes.

    La programmation orientée prototype est une forme de programmation objet, tout aussi valable que celle orientée classes. Le truc, c'est qu'elle est méconnue et qu'elle n'est pas enseignée dans les écoles, du coup beaucoup de gens ont en tête que la seule façon de programmer façon objet est d'utiliser des classes.

    Personnellement j'ai un avis contraire, je trouve que la programmation orientée prototype se rapproche plus d'un modèle objet que la programmation orientée classes : parce qu'il n'y a pas de notion d'abstraction : tout est objet.

    Pour se représenter les choses simplement, imagine deux usines de voitures.
    La première fabrique des voitures à partir de plans, un modèle informatique avec toutes les caractéristiques techniques, le design etc... Les plans ne constituent pas la voiture en tant que tel, ils sont abstraits, mais ils donnent toutes les informations nécessaires pour construire les voitures. C'est le modèle par classe.
    La seconde a construit un prototype de voiture, qui reprend les fonctionnalités et le design désirés. C'est une vraie voiture, concrète, fonctionnelle et utilisable. L'usine construit les voitures en se calquant sur le prototype. Toutefois, il est possible de rajouter des options différentes pour chaque voiture, même si on n'a pas mis ces fonctions sur le prototype. C'est le modèle par prototype.

    Là où la programmation par prototypes marque clairement un point selon moi, c'est que si tu crées une voiture avec option autoradio à partir de la voiture prototype qui elle n'en possède pas, tu peux directement utiliser la voiture avec autoradio comme prototype pour une nouvelle chaîne de fabrication. En programmation par classes, cela obligerait à faire un héritage de classe, et donc d'avoir de nouveaux plans abstraits et non utilisables pour la voiture avec autoradio.

    Javascript offre une palette de possibilités qui permet de reproduire le fonctionnement des classes-Java dont j'ai besoin

    C'est pour moi une énorme erreur que le tournant qu'a pris JavaScript lors de l'introduction de l'opérateur new. On a voulu donner un simili-fonctionnement de classes avec une syntaxe qui plaise aux développeurs Java : ça a dénaturé complètement le JavaScript. C'est pourquoi personne ne comprend pourquoi les "classes" JS sont des fonctions, ni comment on peut retrouver une notion d'héritage multiple en JS. Avouons-le, c'est un bazar total et cela donne une très mauvaise image du JavaScript.

    Douglas CrockFord, qu'on pourrait assimiler au co-inventeur du JavaScript, a écrit cet article très intéressant :
    http://javascript.crockford.com/prototypal.html
    Je le cite :
    This indirection was intended to make the language seem more familiar to classically trained programmers, but failed to do that, as we can see from the very low opinion Java programmers have of JavaScript. JavaScript's constructor pattern did not appeal to the classical crowd. It also obscured JavaScript's true prototypal nature. As a result, there are very few programmers who know how to use the language effectively.
    Auriez-vous des exemples 'concrets' qui nécessiteraient obligatoirement l'usage des prototypes ?


    Non, comme il n'existe pas d'exemples qui nécessitent obligatoirement les classes. On parle de paradigmes de programmation, c'est-à-dire des moyens de se représenter et de coder plus facilement et intuitivement. La programmation objet n'a rien d'obligatoire, elle est juste plus simple. Et les prototypes sont simples eux aussi, malgré le fait qu'on les ait travestis en classes en JavaScript.

    Si toutefois tu cherches un exemple où la programmation par prototypes montre un avantage évident, en voici un :
    http://jsfiddle.net/yAa6u/
    Prenons le cas d'un objet Individu qui subit des mutations aléatoires qui alternent ses propriétés, en les modifiant ou en créant de nouvelles. L'Individu peut se reproduire, auquel cas l'enfant créé récupère toutes les propriétés de son parent, mais peut subir lui aussi par la suite des modifications qui lui sont propres. En programmation par classes, établir un modèle sur un schéma non prévisible est un casse-tête. On se résoudra à faire un modèle suffisamment générique pour qu'il englobe tous les cas possibles. Tandis qu'avec les prototypes, chaque Individu définit son propre modèle tout en héritant des propriétés de son parent, autrement dit son prototype.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2014
    Messages : 30
    Par défaut
    Citation Envoyé par SylvainPV Voir le message
    Si toutefois tu cherches un exemple où la programmation par prototypes montre un avantage évident, en voici un : [/COLOR]http://jsfiddle.net/yAa6u/
    Prenons le cas d'un objet Individu qui subit des mutations aléatoires qui alternent ses propriétés, en les modifiant ou en créant de nouvelles. L'Individu peut se reproduire, auquel cas l'enfant créé récupère toutes les propriétés de son parent, mais peut subir lui aussi par la suite des modifications qui lui sont propres. En programmation par classes, établir un modèle sur un schéma non prévisible est un casse-tête. On se résoudra à faire un modèle suffisamment générique pour qu'il englobe tous les cas possibles. Tandis qu'avec les prototypes, chaque Individu définit son propre modèle tout en héritant des propriétés de son parent, autrement dit son prototype.
    Dans votre exemple, j'ai l'impression que si un individu subit une mutation génétique après la naissance de son fils, ce dernier recevra cette mutation.
    Est-ce le comportement désiré ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    retrocompatibilité ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2014
    Messages : 30
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    retrocompatibilité ...
    Effectivement.
    C'est précisément un comportement des prototypes dont la pertinence est à démontrer dans cet exemple-ci.
    J'ai bien noté que le traitement par 'classe' ne serait pas pertinent.
    Je laisse les possibilités ouvertes, je ne peux exclure une troisième voie.

    Vous me proposez un exemple concret, ce qui répond exactement à ma demande, et je vous en remercie.
    Grâce à cet exemple, je vais essayer de bien comprendre, avec le plus d'exactitude possible, le rôle et la façon d'utiliser les prototypes.

    --------------------------------

    Reprenons l'analyse dans l'ordre : évaluons les besoins, ensuite nous déciderons du choix de programmation le mieux adapté.

    Etape1 : évaluons les besoins
    Des mutations génétiques se diffusent de père en fils et de nouvelles mutations apparaissent à chaque génération.
    Question ?
    Est-il logique, qu'un fils soit affecté par une mutation génétique que son père a subit après sa naissance (la naissance du fils ) ?

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Oui, je vois où tu veux en venir. L'exemple ne colle pas vraiment à la réalité des choses, vu que le parent n'est que prototype de l'enfant au moment de la procréation. J'ai cherché un exemple "parlant", mais finalement ce n'est peut-être pas le plus approprié. Enfin, là où je voulais en venir, c'est que les prototypes prennent l'avantage sur les classes dans des systèmes non déterministes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. usage des collections
    Par AlexFred dans le forum Access
    Réponses: 2
    Dernier message: 29/01/2007, 17h41
  2. Quel est le bon usage des fichiers "*.bpk" ?!
    Par bnadem35 dans le forum C++Builder
    Réponses: 3
    Dernier message: 12/09/2006, 17h31
  3. [FLASH] Usage des technologies Flash
    Par pasc1977 dans le forum Flash
    Réponses: 2
    Dernier message: 20/06/2006, 17h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo