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

Langage Java Discussion :

[Conception][abstract] obligation d'initialiser une variable ?


Sujet :

Langage Java

  1. #1
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut [Conception][abstract] obligation d'initialiser une variable ?
    Bonjour,

    J'aimerai pouvoir rendre obligatoire l'initialisation d'une variable dans une classe dérivant d'une autre classe abstraite.

    mais il est imossible de déclaré une variable abstract, comment puis je faire ?

    cette variable est en faite une tableau de String

    si vous avez besoin d'un bout de code ou de plus d'explication, je suis là ;-)

    merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Le problème est surtout qu'il n'y a jamais de variables dans une classe abstraite. Donc tes variables sont forcèment contenues dans les classes qui éventuellement en héritent.

    A première vue, je ne pense donc pas que l'on puisse faire comme pour les méthodes avec les variables. Ou alors je ne m'en souviens pas.

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Je crois qu'il y a confusion entre classe abstraite dans laquelle on peut placer des attributs et une interface où ce n'est pas possible (uniquement des constantes). Dans ce cas si l'attribut, quel qu'il soit, du moment où il s'agit d'un objet provoquera une erreur lors de son utilisation s'il n'a pas été initialisé avant.


    Cordialement, Julp

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 29
    Points : 34
    Points
    34
    Par défaut
    en effet les variables dans le interfaces sont implicitement déclarées public static final (donc des constantes). Par contre dans les classes abstraites je crois pas qu'il y ait de contraintes...

    Pour répondre à la question, tu places ton tableau de String en private et tu créés des méthodes d'initalisation et d'accés en publique dans lesquelles tu verifieras que la variable est bien initialisée.

    ps : j'ai pas teste.

  5. #5
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    Si cette initialisation est toujours la même et facil, tu peu le faire de facon "passive", c'est a dire sur la même ligne que sa déclaration


  6. #6
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    justement elle est pas passive et depend de chacune des classes dérivées...
    donc si j'ai bien compris je peux pas la déclaré en interface car elle doit pas etre final, je veux pouvoir la modifier.

    et en abstract j'ai pas moyen de forcé l'initialisation.
    est ce qu'on peut forcer un type de constructeur ? c'est à dire le forcer avec un certain type de parametre qui se retrouverai etre comme de par hazard un tableau ? ... ;-)

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Si tu a nécéssité de faire initialiser une variable dans une classe abstraite, tu ne pourras pas le faire de cette manière. De même, la surcharge ne concerne QUE les méthodes.

    Le plus simple est de déclarer une méthode abstraite pour te fournir la valeur, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public abstract class Test {
      private String[] _values = null;
     
      public abstract String[] getValues();
    }
    Ainsi, tu force l'implémentation à te fournir ton tableau de chaine.

  8. #8
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Pour pousser plus loin la solution d'Alwin, voici ce que tu peux faire:

    Une methode dans ta classe mere qui verifie que la variable est initialisee
    Une methode abstraite qui initialise la variable (abstraite donc a implementee par les classes filles)

    La premiere appelle la deuxieme, et la premiere est appellee dans le constructeur de la classe mere

    Un bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
    public abstract class Mere
    {
       protected String laVariable;
     
       protected abstract void initLaVariable();
     
       protected void assertInitLaVariable() throws Exception
       {
          initLaVariable();
          if (null == laVariable)
          {
             throw new Exception("laVariable n'est pas initialisee");
          }
        }
     
       public Mere() throws Exception
       {
         assertInitLaVariable();
       }
    }
     
     
    public class Fille extends Mere
    {
       public Fille() throws Exception
       {
          super();
       }
     
       protected void initLaVariable()
       {
          laVariable = "toto";
       }
    }
    Avec cette technique tu verifies bien l'init de la variable de la classe mere, si une classe fille ne fournit pas un init pour laVariable une exception sera levee..

    Bulbo

  9. #9
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    Pas mal le coup du constructeur dans la classe abstraite J'ai toujours cru qu'on ne pouvait pas en mettre J'ai du faire un test pour le croire ! merci Bulbo

  10. #10
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    merci beaucoup, une vrai bonne solution clair et net merci a vous tous de votre aide !
    tjr ossi fort sur developpezzzz ;-)

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

Discussions similaires

  1. initialiser une variable de type long
    Par obydissonn dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2006, 18h35
  2. [MFC] initialiser une variable a l'heure courante
    Par jiraya43 dans le forum MFC
    Réponses: 4
    Dernier message: 09/05/2006, 17h13
  3. Réponses: 4
    Dernier message: 19/04/2006, 17h03
  4. Réponses: 6
    Dernier message: 04/04/2006, 14h12
  5. [VB6]Initialiser une variable Static dans un évenement
    Par loverdose dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 20/01/2005, 15h57

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