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 :

équivalent interface Java en javascript


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Points : 417
    Points
    417
    Par défaut équivalent interface Java en javascript
    Bonjour,

    Existe-t-il en javascript un équivalent des interfaces en Java?

    En fait, j'ai besoin d'un moyen de vérifier qu'un objet donné vérifie une API. Comment, je peux faire ça?

    Merci !

  2. #2
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    firebug sous firefox ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Points : 417
    Points
    417
    Par défaut
    Lol, non, je parlais en termes de programation. L'équivalent de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public interface monInterface {...}
    En Java, un objet implémentant une interface est sûr de respecter l'API de l'interface, càd qu'il possède bien toutes les méthodes décrites dans l'interface. Existe-t-il un équivalent en Javascript?

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Javascript est un langage à base de prototype.

    un objet ne se conforme donc pas à quoi que se soit.

    un objet est construit totalement dynamiquement. on peut lui ajouter ou lui supprimer des méthodes, ou membres à n'importe quel moment.


    donc se conformer à une interface n'a absolument aucun sens.

    imagine en java que tu définisse un interface avec la méthode boolean test();
    tu fais une classe A qui implémentent cette interface.
    puis dans un code tu instancie un objet le la classe A.
    l'objet en question possède la méthode test().

    maintenant un code s'applique à l'objet et lui supprime la méthode test()
    A est une classe implémentant test() mais ton objet de cette classe n'a pas cette méthode.

    en javascript tu n'a pas de classe tu ajoute ou supprime les méthodes dynamiquement.
    Tu peux tester si un objet possède un membre particulier ou une méthode particulière. mais ton objet n'appartient à aucune classe.

    la notion d'interface est un artifice ajouté dans la théorie des langage à objet à base de classe pour résoudre des problèmes de transversalité que n'offrent pas les langage à base de classes.

    javascript n'ayant pas ces contrainte la notion d'interface n'a aucune raison d'exister. elle ne sert à rien.
    ton objet n'a pas la méthode désirée tu lui ajoute à la volée.

    A+JYT

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Points : 545
    Points
    545
    Par défaut
    Je nuancerai quelque peu les propos de sekaijin

    C’est justement parce que les objets JavaScript n’ont pas de notion de meta-donnée (class en Java) et qu’ils évoluent dynamiquement dans le temps, que la notion d’interface peut prendre tous son sens.

    Pour répondre à Sharcoux, il n’existe pas de mécanique d’interface en JavaScript, personnellement je prototype l’objet javascript pour y ajouter une methode Implements qui vérifie la présence ainsi que le type, des propriétés de l’objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    /***
     * return true if this object implements the interface 
     */
    Object.prototype.Implements = function(interface)
    { 
        for(var property in interface)
        {
            if( typeof interface[property] != "string")
                continue;
     
            if(this[property]==undefined || typeof this[property] != interface[property] )
                return false;
        }
        return true;
    };
     
    /**
     * Interface IRender
     */
    var IRender = 
    {
         Color : "number",
         Matrix : "object",
         Render : "function"
    };
     
    var Shape = 
    {   Name : "House",
        Matrix : [ 1, 0, 0, 0,
                   0, 1, 0, 0,
                   0, 0, 1, 0,
                   0, 0, 0, 1],
     
         Render : function ()
         {
             alert('Rendering ' + this.Name);
         }
     
    };
     
    alert(Shape.Implements(IRender));// false : il manque la propriétée Color!
    Shape.Color = 0xFF0000; 
     
    alert(Shape.Implements(IRender)); // true

  6. #6
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    c'est bien mon propos on teste la présence d'attributs ou de méthodes
    car ceux-ci peuvent être ajouté ou supprimé dynamiquement
    et non pas l’appartenance à une classe ou l'implémentation d'une interface.

    ensuite on peut se définir des liste à vérifier et les nommer "interfaces" mais ce sont toujours les attributs et méthodes qu'on teste au final.

    si je fais une pseudo classe qui implémente une "Interface" que j'instancie un objet de la classe et lui retire une méthode de la dite "Interface"
    lorsque je ferais le test de vérification sur l'interface je ne peux pas me fier à l'héritage (ni à de quelques métadonnée que j'aurais implémenté dans la classe) pour m'assurer que mon objet est conforme à l'interface. ce n'est plus le cas.

    A+JYT

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Points : 545
    Points
    545
    Par défaut
    Je suis d’accord avec toi ! Et j’irai même plus loin, toute mécanique de déclaration ou structuration d’Objet en javascript est une erreur.

    De nombreux Framework permet de développer en utilisant une approche Orienté Objet, pourtant avec le peu de recule (ca fait que 1 ans que j’ai découvert ce language ) je trouve l’approche générique plus adapté. La réflexivité en Javascript ne coute rien en performance contrairement au language typé comme le C#, alors pourquoi sans priver …
    en gros écrire des fonctions générique sans ce soucier du type des objets

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Points : 417
    Points
    417
    Par défaut
    Merci beaucoup pour vos réponses !

    Je suis toujours impressionné par la rapidité et la qualité des réponse qu'on obtient sur ce forum. Merci !

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

Discussions similaires

  1. [Réseau]Interface Java + .net
    Par norwy dans le forum Général Java
    Réponses: 8
    Dernier message: 20/09/2005, 22h51
  2. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 13/09/2005, 12h21
  3. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/09/2005, 12h04
  4. [Applet] appel de methodes java en javascript
    Par soulhouf dans le forum Applets
    Réponses: 16
    Dernier message: 06/09/2005, 14h18
  5. Variable Java dans JavaScript
    Par blaiseac dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/12/2004, 14h09

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