IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Héritage et champs statiques


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 99
    Points : 66
    Points
    66
    Par défaut Héritage et champs statiques
    Bonjour,

    J'ai une question concernant le design lié à l'héritage et aux champs statiques.

    Je sais qu'il n'est pas possible de redéfinir un champ statique dans une classe fille.

    Mais dans le cas où l'on souhaite définir une constante qui varie d'une classe fille à l'autre, comment peut-on garder une notion d'héritage ?

    Par exemple, j'ai une classe Véhicule, dont hérite une classe Voiture, et une classe Moto.
    Je souhaite définir, dans la classe Véhicule, une méthode getNombreRoue() qui renvoie le nombre de roues du véhicule. Ce nombre est bien sûr constant pour les classes filles :
    - Une voiture aura 4 roues
    - Une moto aura 2 roues.
    Mais je ne peux pas mettre dans ma classe mère un champ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static final NB_ROUE;
    et le redéfinir dans les classes filles, ce qui serait pourtant tentant.

    Bien sûr, je peux faire par exemple dans ma classe Voiture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public int getNombreRoue(){
        return 4;
    }
    Mais le 4 est en dur dans le code, ce qui n'est pas top...

    Le mieux est-il tout simplement de définir dans chaque classe fille une variable statique NB_ROUE, et la renvoyer dans le getter, ou y'a-t-il un meilleur design pour implémenter ma méthode getNombreRoue() tout en gardant un aspect paramétrable à la valeur NB_ROUE pour chaque classe fille ?

    Merci pour vos réponses !

    Bomehc

  2. #2
    Membre actif Avatar de hbennou
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 162
    Points : 205
    Points
    205
    Par défaut
    Bonjour,

    Soit tu utilises un attribut non final et non static dans la classe mère puis tu fais appel au setter de la classe mère au niveau de la classe fille, soit tu les déclares comme étant des constantes dans tes classes filles.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 613
    Points
    21 613
    Par défaut
    Citation Envoyé par bomehc Voir le message
    Je sais qu'il n'est pas possible de redéfinir un champ statique dans une classe fille.
    Ni quoi que ce soit d'autre qu'une méthode non-static, d'ailleurs.

    Citation Envoyé par bomehc Voir le message
    Le mieux est-il tout simplement de définir dans chaque classe fille une variable statique NB_ROUE, et la renvoyer dans le getter,
    Non, le mieux est de laisser le nombre en dur. Il n'y a rien de "pas top" à ça. C'est vrai qu'en général on évite de laisser des nombres magiques codés en dur dans le code, mais il y a des raisons à ça. Voici ces raisons:

    - Un nombre codé en dur, on ne sait pas d'où il sort, comment on a décidé de mettre ce nombre, ce qu'il veut dire, pourquoi c'est lui ou pas un autre, bref, on sait pas ce que c'est, c'est pas clair du tout.
    Alors qu'une constante porte un nom, et ce nom est censé décrire à quoi correspond la constante.

    - Si un jour la valeur doit changer, et qu'on a mis des codes en dur, il va falloir revérifier tout le code, partout, pour retrouver ces 4 et les remplacer par la nouvelle valeur. Et attention il ne faut changer que ceux qui doivent en effet être changés, pas les autres.
    Alors qu'en utilisant une constante, on ne change que la valeur de la constante et c'est fini.

    Dans ton cas :
    - Ce nombre est dans un getter, d'une ligne, qui ne fait que return 4; et qui s'appelle getNombreRoue(). A priori on a peu de chances de penser que ce 4 soit le nombre de tranches de jambon à couper. Il est assez clair que c'est le nombre de roues du véhicule.

    - Cette méthode centralise l'information du nombre de roues de cette classe, tout aussi bien qu'une constante le ferait.


    ... Mais si vraiment quelque chose en toi s'oppose à mettre des nombres en dur ailleurs que dans une constante, alors oui. Le mieux c'est de définir une constante et de la renvoyer dans le getter.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 99
    Points : 66
    Points
    66
    Par défaut
    Merci pour vos réponses. Ca répond tout à fait à ma question.
    Je vais donc devoir prendre la dure décision de choisir entre les nombres magiques ou les constantes !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Héritage et champ statique
    Par Aedelon dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 10/08/2012, 14h36
  2. Réponses: 9
    Dernier message: 13/07/2007, 11h03
  3. Réponses: 4
    Dernier message: 13/09/2006, 16h02
  4. [héritage] Héritage et champs statiques.
    Par salome dans le forum Langage
    Réponses: 4
    Dernier message: 03/04/2005, 20h21
  5. [héritage] Héritage et champs statiques.
    Par salome dans le forum Langage
    Réponses: 2
    Dernier message: 02/04/2005, 00h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo