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 :

[Portée] portée des variables


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 69
    Points : 80
    Points
    80
    Par défaut [Portée] portée des variables
    salut,
    je cherche à recuperer et modifier une variable depuis une autre classe.
    ça n'est pas clair, je m'explique :

    j'ai une classeA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class classeA{
      void methode(){
        System.out.println(maVariable); // une variable de la classe principale
        maVariable++; // une variable de la classe principale
      }
    }
    et une classe principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class principale{
      int maVariable = 0;
      public static void main(String[] args) {
        classeA obj = new classeA();
        obj.methode();
      }
    }
    je voudrai donc récuperer une variable de la classe qui a instancié la classe dans laquelle je travaille.


    évidement, c'est un exemple hyper simplifié, mais je cherche à recuperer des éléments généraux dans mes classes... à modifier l'interface graphique depuis plusieurs classes...


    c'est une question assez basique, mais je ne trouve pas de réponse...
    dois-je créer une classe de stockage avec des propriétés static ?

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2003
    Messages : 69
    Points : 59
    Points
    59
    Par défaut
    En fait, pour coder correctement, les règles usuelles de l'encapsulation voudraient que la variable maVariable de la classe principale soit déclarée comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private int maVariable = 0;
    et que cette variable soit accessible depuis l'extérieur grâce aux méthodes suivantes de la classe principale:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public int getMaVariable(){ return maVariable; }
    public void setMaVariable(int v) { this.maVariable=v; }
    Ainsi, elle peut être modifiée depuis la classe classeA de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    principale.setMaVariable((int)nouvelleValeur);
    ou récupérée de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int v = principale.getMaVariable();
    Voilà
    Pascal

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 69
    Points : 80
    Points
    80
    Par défaut
    en clair, je peux appeller la classe principale comme si elle avait été instanciée avec le nom principale...

    c'est bien ça ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    C'est à ça que servent les paramètres qu'on peut passer à une méthode

    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
     
    public class classeA{
         int methode(int maVariable){
              System.out.println(maVariable);
              return maVariable+1;
         }
    }
     
    public class principale{
         int maVariable = 0;
     
         public static void main(String[] args){
              classeA obj = new classeA();
              maVariable = obj.methode(maVariable);
         }
    }
    Hoooo!!
    Mais ce n'est pas qu'une question de moyens !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 69
    Points : 80
    Points
    80
    Par défaut
    si, mais quand tu en a 10, tu te dis que la méthode n'est peut-être pas la meilleur.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par parksto
    en clair, je peux appeller la classe principale comme si elle avait été instanciée avec le nom principale...

    c'est bien ça ?
    Pour utiliser des méthodes d'une classe sans instancier cette classe, il faut que ces méthodes soient déclarées static
    Hoooo!!
    Mais ce n'est pas qu'une question de moyens !

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2003
    Messages : 69
    Points : 59
    Points
    59
    Par défaut
    Tu as deux possibilités :

    Soit tu crées une instance de principale (que je te recommande d'appeller "Principale") et donc, depuis ClasseA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Principale p = new Principale();
    int v = p.getMaVariable();
    Soit tu implémentes des méthodes statiques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public static void setMaVariable...
    public static int getMaVariable...
    Et ainsi tu peux appeller la plasse principale sans créer une instance de cette classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int v = Principale.getMaVariable();
    Pascal

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 69
    Points : 80
    Points
    80
    Par défaut
    excellent, c'est exactement ça...

    merci beaucoup Pascmar et vlio

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

Discussions similaires

  1. Compteur XSL...Portée des variables limitée
    Par lanfeustdetroy dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 03/06/2005, 14h12
  2. Réponses: 8
    Dernier message: 17/02/2005, 09h05
  3. [FLASH MX] Portée des variables ???
    Par mic79 dans le forum Flash
    Réponses: 2
    Dernier message: 08/02/2005, 10h21
  4. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  5. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34

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