[Java] interface: heritage de methodes statiques

interface: heritage de methodes statiques [Java] - Java - Programmation

Marsh Posté le 17-11-2003 à 01:56:11    

J'ai une jolie interface en Java

Code :
  1. interface Server extends Runnable {
  2. static void setPort(int port);
  3. static int getPort();
  4. void setSocket(Socket socket);
  5. void run(); //pas trop utilise celui-la hum?
  6. }


 
Le probleme est que l'on ne peut pas heriter/implementer des methodes statiques en Java.
 
J'aurais aime savoir pourquoi (j'imagine qu'une methode statique ca fait pas tres objet et donc pas d'heritage) et surtout comment je peux remedier a ce probleme en utilisant une autre methode simple (classe abstraite, classe normale ou un jolie design pattern mais lequel?)
 
Evidemment je compte manipuler l'interface sans avoir connaissance de l'implementation.
 
merci

Reply

Marsh Posté le 17-11-2003 à 01:56:11   

Reply

Marsh Posté le 17-11-2003 à 09:05:03    

ca existe pas les méthodes statiques dans les interfaces ... Il compile pas le code que tu as donné. D'ailleur ca aurait vraiment aucun sens ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 17-11-2003 à 09:32:07    

tanguy a écrit :


Le probleme est que l'on ne peut pas heriter/implementer des methodes statiques en Java.


 
relis mieux le message du compilateur la prochaine fois ;)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-11-2003 à 10:30:57    

benou a écrit :

ca existe pas les méthodes statiques dans les interfaces ... Il compile pas le code que tu as donné. D'ailleur ca aurait vraiment aucun sens ...


DarkLord a écrit :


 
relis mieux le message du compilateur la prochaine fois ;)


 

tanguy a écrit :


J'aurais aime savoir pourquoi


 
 :pfff:
répondez-lui au lui de faire  vos boulets[:kiki]


Message édité par the real moins moins le 17-11-2003 à 10:31:22

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

Marsh Posté le 17-11-2003 à 10:36:23    

Tu ne peux pas manipuler une interface avec une méthode statique, à un moment donné tu dois avoir une 'instance' de l'interface pour appeller une méthode dessus. Donc si tu veux utiliser l'interface dans ton code, tu devras tjrs passer une instance (ce qui est logique finalement)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-11-2003 à 10:44:37    

Perso je préconise l'utilisation d'une classe abstraite pour ce genre de cas :o
Mais chu une tanche en modélisation et tout ça, donc chu pas une référence [:ddr555] Ca n'est que ce qui me semble le plus logique ici a priori.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 17-11-2003 à 10:48:36    

Taiche a écrit :

Perso je préconise l'utilisation de SWT pour ce genre de cas :o


[:tapai]

Reply

Marsh Posté le 17-11-2003 à 10:48:59    

the real moins moins a écrit :


 :pfff:
répondez-lui au lui de faire  vos boulets[:kiki]


toi même lis son post :o
 
le

Citation :

J'aurais aime savoir pourquoi

fait référence à

Citation :

Le probleme est que l'on ne peut pas heriter/implementer des methodes statiques en Java.  


et pas à savoir si l'interface était correcte ...
 
D'autant plus que l'héritrage de méthode statique, ca marche :o


Message édité par benou le 17-11-2003 à 10:49:54

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 17-11-2003 à 10:53:01    

benou a écrit :


le

Citation :

J'aurais aime savoir pourquoi

fait référence à

Citation :

Le probleme est que l'on ne peut pas heriter/implementer des methodes statiques en Java.  


et pas à savoir si l'interface était correcte ...

'as le cerveau monté à l'envers toi ou quoi?
tu me fais cette remarque et justement TU lui répond que son interface n'est pas correcte, alors que c'est pas sa question et que manifestement il le sait, en plus, qu'elle n'est pas correcte...


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

Marsh Posté le 17-11-2003 à 10:53:15    


[:david bowie]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 17-11-2003 à 10:53:15   

Reply

Marsh Posté le 17-11-2003 à 10:53:37    

benou a écrit :


D'autant plus que l'héritrage de méthode statique, ca marche :o


 
si ce n'est que tu est obligé de lui filer un comportemnet par défaut (donc pas question de faire public abstract static ... alors que finalement ca pourrait etre le but recherché de l'interface via une classe abstraite)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-11-2003 à 10:58:35    

the real moins moins a écrit :

'as le cerveau monté à l'envers toi ou quoi?


ca va hein :o reste poli  

the real moins moins a écrit :


tu me fais cette remarque et justement TU lui répond que son interface n'est pas correcte, alors que c'est pas sa question et que manifestement il le sait, en plus, qu'elle n'est pas correcte...


je vois pas ce qui te fais dire qu'il sait que son interface est incorecte, et si c'était le cas, je comprend pas le sens de sa question : remédier à quel "problème" ?? Ou est ce qu'il y a un "problème" ??


Message édité par benou le 17-11-2003 à 10:59:02

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 17-11-2003 à 11:03:58    

:sleep:


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

Marsh Posté le 17-11-2003 à 11:07:37    


 :pfff:  
ils sont super constructifs tes posts ???
à part gueuler et dormir, tu sers à quoi ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 17-11-2003 à 11:15:08    

Citation :

t'es comme le H dans Hawaï, tu sers à rien

:o


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

Marsh Posté le 17-11-2003 à 11:41:48    

rock`n`roll ce topic [:necris]
Faisez du C++ au moins y'a pas d'interface :O


Message édité par chrisbk le 17-11-2003 à 11:43:49
Reply

Marsh Posté le 17-11-2003 à 12:04:58    

tanguy a écrit :

J'ai une jolie interface en Java

Code :
  1. interface Server extends Runnable {
  2. static void setPort(int port);
  3. static int getPort();
  4. void setSocket(Socket socket);
  5. void run(); //pas trop utilise celui-la hum?
  6. }


 
Le probleme est que l'on ne peut pas heriter/implementer des methodes statiques en Java.
 
J'aurais aime savoir pourquoi (j'imagine qu'une methode statique ca fait pas tres objet et donc pas d'heritage) et surtout comment je peux remedier a ce probleme en utilisant une autre methode simple (classe abstraite, classe normale ou un jolie design pattern mais lequel?)
 
Evidemment je compte manipuler l'interface sans avoir connaissance de l'implementation.
 
merci

Tu as un petit problème de modélisation.
En gros, ton type Server, tu voudrais qu'il représente un serveur sur le réseau, de manière opaque et suivant l'implémentation, ça sera un serveur HTTP, FTP, de temps, de bière ou de pizzas à domicile.
Première remarque, le port est l'identifiant du serveur (FTP, HTTP, NTP tournent chacun sur leurs ports, assignés pas l'iana), sachant ça, tu t'es dit que tous les serveurs web sont sur le port 80 et tous les serveur FTP sont sur le heu, 'me sousviens plus ; et que tu allais stocker le numéro du port dans la classe concrète, comme ça tous les serveur web seront sur le 80 et tous les serveur de mail sur le 25. C'est une erreur, car tu n'es sensé n'avoir qu'un seul serveur sur un port, et tu peux placer un deuxième serveur du même type sur un autre port, par exemple le serveur WEB sur le port 80 et le serveur de gestion électronique de documents sur le 8000 pour l'intérieur de l'entreprise.
 
Donc clairement, c'est dans l'instance qu'il faut mettre les histoires de port.
 
Concernant l'héritage de la partie statique d'une interface, il n'y en a pas du tout en java, pour une raison simple, en java, le principe a été de virer l'héritage multiple, par conviction religieuse. Si tu mets un héritage de code statique définit dans les interfaces, tu recommences tout le problème de l'héritage multiple, dont les interfaces sont les assassins.
 
Concernant l'héritage de la partie statique d'une classe, il n'y en a pas non plus, car c'est plus simple, s'il y a quelquechose à hériter, c'est dans des instances et si tu avait envie de faire hériter des choses statiques, il faut "prendre de la hauteur", créer un objet qui représentera la partie de la classe qui t'intéresse (le plus souvent, ça sera par le pattern Factory). Les instances ayant de l'héritage, ça fonctionne.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 17-11-2003 à 12:06:09    

ftp > 21


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-11-2003 à 12:10:22    

nraynaud a écrit :

Tu as un petit problème de modélisation.
En gros, ton type Server, tu voudrais qu'il représente un serveur sur le réseau, de manière opaque et suivant l'implémentation, ça sera un serveur HTTP, FTP, de temps, de bière ou de pizzas à domicile.
Première remarque, le port est l'identifiant du serveur (FTP, HTTP, NTP tournent chacun sur leurs ports, assignés pas l'iana), sachant ça, tu t'es dit que tous les serveurs web sont sur le port 80 et tous les serveur FTP sont sur le heu, 'me sousviens plus ; et que tu allais stocker le numéro du port dans la classe concrète, comme ça tous les serveur web seront sur le 80 et tous les serveur de mail sur le 25. C'est une erreur, car tu n'es sensé n'avoir qu'un seul serveur sur un port, et tu peux placer un deuxième serveur du même type sur un autre port, par exemple le serveur WEB sur le port 80 et le serveur de gestion électronique de documents sur le 8000 pour l'intérieur de l'entreprise.
 
Donc clairement, c'est dans l'instance qu'il faut mettre les histoires de port.

J'comprends pas trop là... le port il est en dur nul part, tout ce qui est dit ici c'est que tous les serveurs doivent avoir une méthode pour assigner un port, et une pour le connaitre. Je vois pas le problème...


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 17-11-2003 à 12:16:13    

R3g a écrit :

J'comprends pas trop là... le port il est en dur nul part, tout ce qui est dit ici c'est que tous les serveurs doivent avoir une méthode pour assigner un port, et une pour le connaitre. Je vois pas le problème...  

relis bien son code. Je suppose qu'il a pas mis la variable statique représentant le port parce que "c'est une interface, donc on met pas de code".
 
J'ai peut-être fabulé sur le raisonement qu'il a tenu pour écrire son code, mais je le sens bien comme ça.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 17-11-2003 à 12:56:44    

nraynaud a écrit :

relis bien son code. Je suppose qu'il a pas mis la variable statique représentant le port parce que "c'est une interface, donc on met pas de code".
 
J'ai peut-être fabulé sur le raisonement qu'il a tenu pour écrire son code, mais je le sens bien comme ça.

Ah oui ok... j'avais pas fais gaffe au static :/


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 19-11-2003 à 15:50:50    

nraynaud a écrit :

relis bien son code. Je suppose qu'il a pas mis la variable statique représentant le port parce que "c'est une interface, donc on met pas de code".
 
J'ai peut-être fabulé sur le raisonement qu'il a tenu pour écrire son code, mais je le sens bien comme ça.


 
R3g a raison :)
 
Dans mes classes HTTP, FTP, biere ect... j'ai une variable statique qui contient le port avec des setPort_static() et getPort_static() non herites evidemment.
 
Donc pour le moment ca marche puisque je fais des HttpServer.setPort_static() mais je voudrais un truc generique du genre Server.setPort() avec Server une interface (et que l'interface appelle le setPort_static() de l'implementation).
 
Bref je recherche un truc propre et generique a ce probleme pour pouvoir modifier les ports de mes differents serveurs sans devoir les instancier.

Reply

Marsh Posté le 19-11-2003 à 15:55:49    

Il te faut le pattern "Factory", mais sans généricité et si tu es débutant, ça peut être chaud.
 
Comme je suis naze en vulgarisation je laisse le soin à quelqu'un d'autre de t'expliquer.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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