[Résolu]Interface marqueur

Interface marqueur [Résolu] - Java - Programmation

Marsh Posté le 30-12-2005 à 12:09:43    

Bonjour,
 
J'ai bien cherché sur le net, mais je n'ai trouvé aucune réponse satisfaisante pour savoir ce qu'est une interface marqueur, et à quoi elle sert.
Quelqu'un à t'il une idée?
 
 
Merci


Message édité par milootooloo le 30-12-2005 à 16:40:15
Reply

Marsh Posté le 30-12-2005 à 12:09:43   

Reply

Marsh Posté le 30-12-2005 à 12:13:27    

elle sert à marquer ta classe [:vague nocturne]
 
 
(pour pouvoir faire des cochoncetés genre if (truc instanceof MyMarkerInterface)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-12-2005 à 12:32:47    

the real moins moins a écrit :

elle sert à marquer ta classe [:vague nocturne]
 
 
(pour pouvoir faire des cochoncetés genre if (truc instanceof MyMarkerInterface)


 
Ben c'est tout? Ca sert a rien!
 
Merci bien!

Reply

Marsh Posté le 30-12-2005 à 17:28:03    

Mais si ça sert, simplement tu n'en as jamais eu besoin donc tu n'as jamais mis le doigt sur le genre de problème que ça résolvait.
 
Problème : tu veux un gestionnaire d'accès "transparent" qui va te chercher des données soit à distance (par RMI) soit en direct (dans la même JVM, gigantesquement plus rapide), mais avec la même commande. Donc ça t'oblige à utiliser 2 classes concrètes complètement différentes "GestionnaireDonneesRMI" et "GestionnaireDonneesLocal" pour récupérer tes données avec la même méthode "getData()". Comment on rend le bousin transparent ("getData()" sur une l'instance en cours sans te soucier qu'elle soit locale ou distante) ?
 
Alors tu crées le type marker "GestionnaireDonnees" (interface qui définit la méthode "getData()" ), tu fais implémenter cette méthode (différemment évidemment) par tes 2 classes "GestionnaireDonneesRMI" et "GestionnaireDonneesLocal" qui puisque elles implémentent toutes les deux l'interface "GestionnaireDonnees" sont bien toutes les deux de ce même type marker.
 
Tu peux donc bien appeler de manière transparente la méthode "getData()" sur une instance quelconque de "GestionnaireDonnees" en te tamponnant intégralement de savoir si elle est locale ou distante, c'est une Factory qui t'aura fourni la bonne classe de toutes façons.
 
@++ !

Reply

Marsh Posté le 30-12-2005 à 17:31:46    

bugbreeder a écrit :

Mais si ça sert, simplement tu n'en as jamais eu besoin donc tu n'as jamais mis le doigt sur le genre de problème que ça résolvait.
 
Problème : tu veux un gestionnaire d'accès "transparent" qui va te chercher des données soit à distance (par RMI) soit en direct (dans la même JVM, gigantesquement plus rapide), mais avec la même commande. Donc ça t'oblige à utiliser 2 classes concrètes complètement différentes "GestionnaireDonneesRMI" et "GestionnaireDonneesLocal" pour récupérer tes données avec la même méthode "getData()". Comment on rend le bousin transparent ("getData()" sur une l'instance en cours sans te soucier qu'elle soit locale ou distante) ?
 
Alors tu crées le type marker "GestionnaireDonnees" (interface qui définit la méthode "getData()" ), tu fais implémenter cette méthode (différemment évidemment) par tes 2 classes "GestionnaireDonneesRMI" et "GestionnaireDonneesLocal" qui puisque elles implémentent toutes les deux l'interface "GestionnaireDonnees" sont bien toutes les deux de ce même type marker.
 
Tu peux donc bien appeler de manière transparente la méthode "getData()" sur une instance quelconque de "GestionnaireDonnees" en te tamponnant intégralement de savoir si elle est locale ou distante, c'est une Factory qui t'aura fourni la bonne classe de toutes façons.
 
@++ !


 
t'as pas du comprendre non plus ce que c'était [:pingouino]
 

Reply

Marsh Posté le 30-12-2005 à 17:58:57    

bugbreeder a écrit :

Alors tu crées le type marker "GestionnaireDonnees" (interface qui définit la méthode "getData()" )


 
une interface "marqueur", par définition, ne définit aucune méthode [:pingouino]
 
 
... enfin, ça explique ton pseudo [:pingouinbo]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-12-2005 à 18:53:31    

the real moins moins a écrit :

une interface "marqueur", par définition, ne définit aucune méthode


 
1) On ne doit pas avoir les mêmes lectures, "marqueur" c'est pour tout besoin d'imprimer un type particulier à une classe, ça peut donc aussi s'appliquer à une interface ou une classe abstraite si on veut. Je n'ai jamais lu jusqu'ici sur une bonne douzaine de bouquins Java qu'elle ne devait définir aucune méthode, c'est comme le coup de la classe abstraite qui peut très bien ne comporter aucune méthode abstraite. C'est valable aussi pour le coup de l'interface qui ne définit que des constantes, elle relève aussi du "marqueur" même si son usage n'est que d'être un container de constantes.
 
2) Lorsque j'ai sorti ça à Sun lors de la certification Développeur, ils n'ont rien dit, et j'ai eu le maximum de points sur cet aspect (c'est sur la partie ergonomie que j'en ai perdu), donc je ne vois pas pourquoi ce ne serait pas valable.
 
3) Si tu as un meilleur exemple, on attend le tien, ça serait beaucoup plus constructif.

Reply

Marsh Posté le 30-12-2005 à 19:30:49    

bugbreeder a écrit :

1) On ne doit pas avoir les mêmes lectures, "marqueur" c'est pour tout besoin d'imprimer un type particulier à une classe, ça peut donc aussi s'appliquer à une interface ou une classe abstraite si on veut. Je n'ai jamais lu jusqu'ici sur une bonne douzaine de bouquins Java qu'elle ne devait définir aucune méthode, c'est comme le coup de la classe abstraite qui peut très bien ne comporter aucune méthode abstraite. C'est valable aussi pour le coup de l'interface qui ne définit que des constantes, elle relève aussi du "marqueur" même si son usage n'est que d'être un container de constantes.
 
2) Lorsque j'ai sorti ça à Sun lors de la certification Développeur, ils n'ont rien dit, et j'ai eu le maximum de points sur cet aspect (c'est sur la partie ergonomie que j'en ai perdu), donc je ne vois pas pourquoi ce ne serait pas valable.
 
3) Si tu as un meilleur exemple, on attend le tien, ça serait beaucoup plus constructif.


1)le probleme c'est que tu as illustre une interface marqueur avec une interface banale ...
2)comment t'as une grosse bite [:pingouino]
3)Serializable

Reply

Marsh Posté le 30-12-2005 à 19:38:38    

Oui j'ai lu aussi qu'un interface marqueur n'avais pas de méthodes..
Enfin, a mon avis, ya une définition stricte et un définition utilitaire..
 
Sinon heu.. l'interface Serialisable est simplement définie comme ca?
 

Code :
  1. interface Serialisable{
  2.     //Parce qu'en plus d'abord
  3. }


 
Ou bien.. g rien compris??
 
 
Ca rend malpoli le java ou coi? Bordel?
 
Sinon, ya un topic encore plus classe sur les classes mutables et immutables..
Allez vous engueuler la bas ca m'aide.. (merci qd meme de vos réponses)

Message cité 1 fois
Message édité par milootooloo le 30-12-2005 à 19:45:26
Reply

Marsh Posté le 30-12-2005 à 19:45:31    

bugbreeder a écrit :

1) On ne doit pas avoir les mêmes lectures, "marqueur" c'est pour tout besoin d'imprimer un type particulier à une classe, ça peut donc aussi s'appliquer à une interface ou une classe abstraite si on veut.


 
ok, alors tu m'expliques pourquoi on appelerait une interface non-vide "marqueur" .. mais pas toutes les interfaces ?  
 
(je passe sur ton étalage pour le reste de ton post :sarcastic: )


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-12-2005 à 19:45:31   

Reply

Marsh Posté le 30-12-2005 à 19:46:45    

milootooloo a écrit :

Oui j'ai lu aussi qu'un interface marqueur n'avais pas de méthodes..
Enfin, a mon avis, ya une définition stricte et un définition utilitaire..
 
Sinon heu.. l'interface Serialisable est simplement définie comme ca?
 

Code :
  1. interface Serialisable{
  2.     //Parce qu'en plus d'abord
  3. }


 
Ou bien.. g rien compris??


ben.. oui t'as compris, mais tu sais que t'as les sources, avec ton jdk ? [:boidleau]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-12-2005 à 22:07:41    

the real moins moins a écrit :

ben.. oui t'as compris, mais tu sais que t'as les sources, avec ton jdk ? [:boidleau]


Jme suis dit que tu me répondrait ca en ecrivant ma réponse.. enfin. Je vais aller regarder qd meme!
Merci


Message édité par milootooloo le 30-12-2005 à 22:08:25
Reply

Marsh Posté le 30-12-2005 à 22:23:04    

souk a écrit :

1)le probleme c'est que tu as illustre une interface marqueur avec une interface banale ...


 
Comme "milootoolo" l'a fait remarquer il y a une définition stricte et un définition utilitaire, on peut très bien utiliser une interface banale pour marquer un type sans s'intéresser aux fonctionnalités derrière, dans mon exemple c'était l'aspect "transparent" qui comptait donc seulement le type.
Ce n'est pas que je tienne à avoir raison, si plusieurs personnes ont lu qu'une interface marqueur n'avais pas de méthodes ça doit être vrai et je dois avoir tort. Moi je ne suis jamais tombé dessus, seulement sur l'usage sémantique de la chose...
 

souk a écrit :

2)comment t'as une grosse bite


 
D'une part le niveau Développeur c'était jusqu'à très récemment le 2ème sur une échelle de 6 (SCJP, SCJD, SCWCD, SCBCD, SCDJWS, SCEA) donc "plus complètement débutant", alors il me semble que tu as une vision extrêmement malformée des choses si tu estimes que c'est si élevé que ça. D'autre part en très clair ça voulait dire que si les experts en Java de chez Sun qui me notaient n'ont pas jugé utile de me sanctionner sur ce point alors qu'ils ne se gêneraient pas pour le faire à la moindre erreur, alors c'est qu'il est au moins acceptable d'un certain point de vue. Même si tu es un expert de chez Sun comme Alexis Moussine-Pouchkine habilité à certifier les autres, ce dont je doute énormément vu la teneur gratuitement insultante de cette réponse, ça ne te donne pas droit de parler à quelqu'un sur ce ton. Les mecs vraiment bons sont tous capables d'expliquer n'importe quoi sans insulter qui que ce soit, surtout dans le domaine technique.
 

souk a écrit :

3)Serializable


 
Oui et non. Oui au sens du commentaire de l'API "The serialization interface has no methods or fields and serves only to identify the semantics of being serializable", car il y a bien de la fonctionnalité derrière qui va transformer l'objet en fichier ".ser", ce n'est pas qu'une question de marquage de type mais bien une demande de prise en compte automatique de fonctionnalité. Donc non au sens de la question de "milootoolo", qui attend toujours un exemple montrant l'utilité de typer un objet avec une interface "marker" sans utiliser la moindre fonctionnalité derrière, sinon une classe ou une interface normale suffiraient...

Reply

Marsh Posté le 31-12-2005 à 00:20:21    

bugbreeder a écrit :

Comme "milootoolo" l'a fait remarquer il y a une définition stricte et un définition utilitaire, on peut très bien utiliser une interface banale pour marquer un type sans s'intéresser aux fonctionnalités derrière, dans mon exemple c'était l'aspect "transparent" qui comptait donc seulement le type.
Ce n'est pas que je tienne à avoir raison, si plusieurs personnes ont lu qu'une interface marqueur n'avais pas de méthodes ça doit être vrai et je dois avoir tort. Moi je ne suis jamais tombé dessus, seulement sur l'usage sémantique de la chose...

c'est quoi pour toi marquer un type ? bon sinon fait deux trois recherche sur les marker interfaces et comme ca tu l'auras lu qu'elles n'ont pas de methodes.  
 
 

bugbreeder a écrit :


D'une part le niveau Développeur c'était jusqu'à très récemment le 2ème sur une échelle de 6 (SCJP, SCJD, SCWCD, SCBCD, SCDJWS, SCEA) donc "plus complètement débutant", alors il me semble que tu as une vision extrêmement malformée des choses si tu estimes que c'est si élevé que ça. D'autre part en très clair ça voulait dire que si les experts en Java de chez Sun qui me notaient n'ont pas jugé utile de me sanctionner sur ce point alors qu'ils ne se gêneraient pas pour le faire à la moindre erreur, alors c'est qu'il est au moins acceptable d'un certain point de vue. Même si tu es un expert de chez Sun comme Alexis Moussine-Pouchkine habilité à certifier les autres, ce dont je doute énormément vu la teneur gratuitement insultante de cette réponse, ça ne te donne pas droit de parler à quelqu'un sur ce ton. Les mecs vraiment bons sont tous capables d'expliquer n'importe quoi sans insulter qui que ce soit, surtout dans le domaine technique.

 
 [:souk]  
 

bugbreeder a écrit :


Oui et non. Oui au sens du commentaire de l'API "The serialization interface has no methods or fields and serves only to identify the semantics of being serializable", car il y a bien de la fonctionnalité derrière qui va transformer l'objet en fichier ".ser", ce n'est pas qu'une question de marquage de type mais bien une demande de prise en compte automatique de fonctionnalité. Donc non au sens de la question de "milootoolo", qui attend toujours un exemple montrant l'utilité de typer un objet avec une interface "marker" sans utiliser la moindre fonctionnalité derrière, sinon une classe ou une interface normale suffiraient...


c'est la que tu n'as pas compris, et c'est bien tout ce qu'on dit depuis le debut. Une interface marker est une interface qui n'induit pas de comportement dans l'objet qui l'implemente (ie, pas de methodes propres a l'interface), elle sert juste a marquer cet objet de telle sorte que d'autres objets le reconnaissent et le traitent en consequence. aujourd'hui avec java5, si on reecrivait toute l'API java, typiquement, on utiliserait des annotations pour faire ce genre de trucs....Il n'y a typiquement pas de fonctionnalite derriere une interface marker.... reprenons Serializable par exemple... La JVM sait serializer n'importe quel objet qui implemente Serializable, sachant que Serializable n'inclut aucun code, la JVM peut donc serializer tout ce qu'elle veut, mais se restraint uniquement aux objets marques comme tels. enfin bref.... j'ai pas envie de m'etaler sur un truc que la moindre recherche google va eclairer.....

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed