interface: heritage de methodes statiques [Java] - Java - Programmation
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 ...
Marsh Posté le 17-11-2003 à 09:32:07
tanguy a écrit : |
relis mieux le message du compilateur la prochaine fois
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 : |
tanguy a écrit : |
répondez-lui au lui de faire vos boulets
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)
Marsh Posté le 17-11-2003 à 10:44:37
Perso je préconise l'utilisation d'une classe abstraite pour ce genre de cas
Mais chu une tanche en modélisation et tout ça, donc chu pas une référence Ca n'est que ce qui me semble le plus logique ici a priori.
Marsh Posté le 17-11-2003 à 10:48:36
ReplyMarsh Posté le 17-11-2003 à 10:48:59
the real moins moins a écrit : |
toi même lis son post
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
Marsh Posté le 17-11-2003 à 10:53:01
benou a écrit :
fait référence à
|
'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...
Marsh Posté le 17-11-2003 à 10:53:15
Marsh Posté le 17-11-2003 à 10:53:37
benou a écrit : |
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)
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 reste poli
the real moins moins a écrit : |
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" ??
Marsh Posté le 17-11-2003 à 11:03:58
ReplyMarsh Posté le 17-11-2003 à 11:07:37
ils sont super constructifs tes posts ???
à part gueuler et dormir, tu sers à quoi ?
Marsh Posté le 17-11-2003 à 11:15:08
Citation : t'es comme le H dans Hawaï, tu sers à rien |
Marsh Posté le 17-11-2003 à 11:41:48
rock`n`roll ce topic
Faisez du C++ au moins y'a pas d'interface
Marsh Posté le 17-11-2003 à 12:04:58
tanguy a écrit : J'ai une jolie interface en Java
|
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.
Marsh Posté le 17-11-2003 à 12:06:09
ftp > 21
Marsh Posté le 17-11-2003 à 12:10:22
nraynaud a écrit : Tu as un petit problème de modélisation. |
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...
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.
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". |
Ah oui ok... j'avais pas fais gaffe au static
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". |
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.
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.
Marsh Posté le 17-11-2003 à 01:56:11
J'ai une jolie interface en Java
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