Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1586 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java] interface: heritage de methodes statiques

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] interface: heritage de methodes statiques

n°568570
tanguy
Posté le 17-11-2003 à 01:56:11  profilanswer
 

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

mood
Publicité
Posté le 17-11-2003 à 01:56:11  profilanswer
 

n°568651
benou
Posté le 17-11-2003 à 09:05:03  profilanswer
 

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
n°568665
darklord
You're welcome
Posté le 17-11-2003 à 09:32:07  profilanswer
 

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
n°568695
the real m​oins moins
Posté le 17-11-2003 à 10:30:57  profilanswer
 

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 ?
n°568698
darklord
You're welcome
Posté le 17-11-2003 à 10:36:23  profilanswer
 

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
n°568700
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 17-11-2003 à 10:44:37  profilanswer
 

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.
n°568702
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-11-2003 à 10:48:36  profilanswer
 

Taiche a écrit :

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


[:tapai]

n°568703
benou
Posté le 17-11-2003 à 10:48:59  profilanswer
 

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
n°568705
the real m​oins moins
Posté le 17-11-2003 à 10:53:01  profilanswer
 

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 ?
n°568706
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 17-11-2003 à 10:53:15  profilanswer
 


[: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.
mood
Publicité
Posté le 17-11-2003 à 10:53:15  profilanswer
 

n°568709
darklord
You're welcome
Posté le 17-11-2003 à 10:53:37  profilanswer
 

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
n°568715
benou
Posté le 17-11-2003 à 10:58:35  profilanswer
 

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
n°568728
the real m​oins moins
Posté le 17-11-2003 à 11:03:58  profilanswer
 

:sleep:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°568735
benou
Posté le 17-11-2003 à 11:07:37  profilanswer
 


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


---------------
ma vie, mon oeuvre - HomePlayer
n°568746
the real m​oins moins
Posté le 17-11-2003 à 11:15:08  profilanswer
 

Citation :

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

:o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°568787
chrisbk
-
Posté le 17-11-2003 à 11:41:48  profilanswer
 

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
n°568818
nraynaud
lol
Posté le 17-11-2003 à 12:04:58  profilanswer
 

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
n°568821
darklord
You're welcome
Posté le 17-11-2003 à 12:06:09  profilanswer
 

ftp > 21


---------------
Just because you feel good does not make you right
n°568833
R3g
fonctionnaire certifié ITIL
Posté le 17-11-2003 à 12:10:22  profilanswer
 

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.
n°568843
nraynaud
lol
Posté le 17-11-2003 à 12:16:13  profilanswer
 

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
n°568898
R3g
fonctionnaire certifié ITIL
Posté le 17-11-2003 à 12:56:44  profilanswer
 

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.
n°570814
tanguy
Posté le 19-11-2003 à 15:50:50  profilanswer
 

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.

n°570821
nraynaud
lol
Posté le 19-11-2003 à 15:55:49  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java] interface: heritage de methodes statiques

 

Sujets relatifs
[Java] socket: faire tourner plusieurs serveurs sur le meme port[java] c'est à n'y rien comprendre !
[JAVA] java 3D : tutoriaux[java] newbye : rentrer des valeurs dans mon programme à l'exécution
[Java] Tri d'un vecteur[Java] [DEFI] Voir les partie de quake en cours....
[JAVA] Packager un jar contenant des jars utilisant des jars , etc ...aidez-moi à faire mon devoir de Java svp..... please !!!
[Java] Problème avec JPopupMenu [résolu][Java]Appeler une méthode d'une classe à partir d'1 String [Résolu]
Plus de sujets relatifs à : [Java] interface: heritage de methodes statiques


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR