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 :

[débutant] transmission d'une référence d'objet d'une classe à l'autre


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 80
    Points
    80
    Par défaut [débutant] transmission d'une référence d'objet d'une classe à l'autre
    bonjour bonjour,

    après des années de programmation structurée (aaah, le plaisir des premières années de basic il y a ... 11 ans, quand il fallait taper soi-même le code des jeux sur des bécanes sans DD, le Pascal, et la découverte du C et de ses plaisirs), j'ai enfin décidé il y a 10 jours de me mettre à la POO. et donc de me lancer dans Java.

    alors bon je reprends mes premiers programmes de C, je change les algo et j'apprends les nouvelles syntaxes.

    cepandant j'avoue avoir un souci récurrent, sur lequel j'ai déjà passé 3 soirées difficiles, et malgré les livres que je me suis offert et les tutos que j'ai pu lire (merci à Doudoux au passage, pour l'instant le meilleur que j'ai lu par sa clarté et sa précision) je bloque tout le temps sur le même souci.

    je m'explique:

    voulant apprendre la manipulation d'objet et comprendre l'encapsulation et la différenciation entre constructeur, méthodes et paramètres, j'essaie de manipuler une instanciation de classe au sein d'une autre classe.

    du genre:

    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
     
    classe fenêtre extends JFrame implements ActionListener {
     
       fenêtre () {
       // définition de la fenêtre avec 2 JTextField, dont le 2ème est setEditable(false)
       // écouteur sur JTF1 
       }
     
       evenement (ActionEvent ev) {
          si ev=JTF1 {
              mess=JTF1.getText();
              classe objetmes=new classe(mess);
              }
       }
     
       private classe objetmes;
       private String mess;
       private int appel;
    }
     
    classe {
      classe (message) {
          mot=message;
          }
     
      private String mot;
    }
     
     
    class MonProgramme {
       main (args) {
          fenêtre fen=new fenêtre();
          fen.setVisible(true);
       }
    }
    donc 1 classe 'classe' dont chaque objet contient pour paramètre une chaîne mot et est instancié avec l'argument String transmis par l'utilisateur dans JTF1.

    mon souci, c'est que je voudrais dans une méthode de la classe fenêtre, récupérer ce paramètre 'mot' pour l'afficher dans JTF2. comme ce paramètre est encapsulé, impossible de l'appeler directement (ça j'ai compris). donc je cherche, comme on me le conseille dans les tutos, à faire dans la classe 'classe' une méthode publique qui renvoie l'argument String correspondant au paramètre privé 'mot'.

    j'appelle cette méthode depuis une fenêtre.méthode() qui est appelée dans la méthode d'écouteur d'évènement.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    classe fenêtre extends JFrame implements ActionListener {
     
       fenêtre () {
       // définition de la fenêtre avec 2 JTextField, dont le 2ème est setEditable(false)
       // écouteur sur JTF1 
       }
     
       evenement (ActionEvent ev) {
          si ev=JTF1 {
              mess=JTF1.getText();
              classe objetmes=new classe(mess);
              reponse=fenêtre.choppeparamètre();
              JTF2.setText(reponse);
              }
       }
     
       private String choppeparamètre () {
              retour=classe.donneparamètre(objmes);
              return retour;
       }
     
       private classe objetmes;
       private String mess, reponse, retour;
       private int appel;
    }
     
    classe {
      classe (message) {
          mot=message;
          }
     
       public String donneparamètre ( ....) {
          retour=this.mot;
          return retour;
     
      private String mot, retour;
    }
     
     
    class MonProgramme {
       main (args) {
          fenêtre fen=new fenêtre();
          fen.setVisible(true);
       }
    }

    le souci, c'est que j'obtiens ce superbe message d'erreur sur ma fenêtre.méthode quand je zappe dans l'appel de classe.donneargument la référence à l'objet en cours: non-static method cannot machin static method etc ...

    normal

    mais je n'arrive pas à trouver comment transmettre à cette méthode "eeeh mon gars c'est cet objet-là dont je veux pour retour son paramètre 'mot' !" ..
    quand je lui mets Objmes en argument de définition : donneparamètre(Objmes), il ne le reconnaît pas (Objmes.Objmes not resolved). Tous mes autres essais et bricolages se sont révélés infructueux.

    c'est un pur problème de Syntaxe sans doute, mais je ne trouve pas malgré de nombreuses heures de recherche.

    alors certes c'est un algorithme un peu lourd pour un traitement aussi léger, mais cela me permettrait de comprendre les interactions entre les classes, et de complêter certains programmes en cours qui sont, disons un peu plus lourds (avec plusieurs classes, et plusieurs paramètres encapsulés à récupérer).

    merci à vous si vous savez (très certainement) et si vous me renseignez.

    et bien entendu tout conseil intercurrent constructif sur la structure algorithmique que vous voudriez me donner serait le bienvenu.

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Arg !

    Il te manque un peu les bases des langages OO, a savoir la difference entre une classe et une instance.

    Enfin, pour repondre a ta question, la syntaxe pour appeler une methode d'instance est: {variable}.{nom de methode}

    Toi tu as fait: {nom de classe}.{nom de methode} qui est la syntaxe pour appeler une methode de classe (celles qui commencent par static)

    Donc tu dois remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       evenement (ActionEvent ev) {
          si ev=JTF1 {
              mess=JTF1.getText();
              classe objetmes=new classe(mess);
              reponse=fenêtre.choppeparamètre();
              JTF2.setText(reponse);
              }
       }
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       evenement (ActionEvent ev) {
          si ev=JTF1 {
              mess=JTF1.getText();
              classe objetmes=new classe(mess);
              reponse=objetmes.donneparamètre();
              JTF2.setText(reponse);
              }
       }
    et tu peux virer ta fonction String choppeparamètre() qui ne sert plus a rien.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 80
    Points
    80
    Par défaut
    effectivement, les bases vont finir par rentrer.
    merci pour la modification de l'appel, je prends bonne note, ça me sauve beaucoup de situations.

    concernant la choppeparamètre() je préfère la garder pour m'entraîner à appeler une méthode publique de classe depuis une méthode privée d'une autre, et non systématiquement depuis une méthode d'évenement..

    merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/12/2010, 15h50
  2. Réponses: 5
    Dernier message: 28/04/2010, 14h54
  3. Réponses: 4
    Dernier message: 23/06/2008, 17h10
  4. Réponses: 2
    Dernier message: 29/05/2008, 15h59

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