Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/06/2011, 11h30   #1
Membre habitué
 
Homme
Étudiant
Inscription : mai 2011
Messages : 226
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 226
Points : 126
Points : 126
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 !
Sharcoux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h32   #2
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 019
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 30 019
Points : 45 114
Points : 45 114
firebug sous firefox ?
__________________
Ma page 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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h47   #3
Membre habitué
 
Homme
Étudiant
Inscription : mai 2011
Messages : 226
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 226
Points : 126
Points : 126
Lol, non, je parlais en termes de programation. L'équivalent de

Code :
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?
Sharcoux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 12h34   #4
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 421
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 421
Points : 2 809
Points : 2 809
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
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 14h57   #5
Membre régulier
 
Inscription : octobre 2010
Messages : 65
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 65
Points : 87
Points : 87
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 :
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
p3ga5e est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/06/2011, 17h24   #6
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 421
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 421
Points : 2 809
Points : 2 809
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
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 17h55   #7
Membre régulier
 
Inscription : octobre 2010
Messages : 65
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 65
Points : 87
Points : 87
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
p3ga5e est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 10h46   #8
Membre habitué
 
Homme
Étudiant
Inscription : mai 2011
Messages : 226
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 226
Points : 126
Points : 126
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 !
Sharcoux est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h09.


 
 
 
 
Partenaires

Hébergement Web