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 :

Stocker la valeur d'une variable issue d'une classe B dans une classe C


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2016
    Messages : 24
    Points : 30
    Points
    30
    Par défaut Stocker la valeur d'une variable issue d'une classe B dans une classe C
    Bonjour à tous,

    Dans mon programme, j'ai trois classes.

    La classe A, la B et la C.

    Les classes B et C étendent la classe A.

    La classe B me sert à prendre en charge un agent. Une fois les actions de celle-ci terminée, mon agent est créé et est associé à un matricule que je ne connais donc qu'à la fin de ma classe.

    La classe C me permet de réaliser différentes action pour cet agent.

    Mon problème est que je dois lancer la classe B, récupérer le matricule "en dur" avant de pouvoir lancer la classe C.

    Je souhaiterai donc savoir comment récupérer et stocker le matricule de ma classe B pour l'utiliser ensuite dans ma classe C.

    J'ai essayé en indiquant des getters et setters dans la classe A mais le matricule reste null dans la class C.


    Merci

    Hadrien

  2. #2
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    C étend aussi A ?
    tu es sûr de cette propriété?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class C { //extends A?
      // on peut lui demander des tas de choses dont des actions héritées de A par B
     // comme quoi un exemple réel serait plus pertinent
      private B collègue;
      // on ne peut créer de C que quand on a un B
      // mais ça fait bizarre cette relation en tuyau de poële
      // quoique dans le pattern "décorateur" ...
      public C(Schtroumpf str, B collègue) {
        super(str) ;
       this.collègue = collègue ;
      }
      // demande n'importe quoi à B
    }
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Tu pourrais être plus précis dans les rôles des 3 classes ?

    Ce que je comprends :
    - une classe A qui représente une chose
    - une classe B qui est une spécialisation de A (avec certainement des attributs particuliers)
    - une classe C qui est en quelque sorte un processeur d'actions sur des classes A ou B

    Pour des actions particulières sur classe B, elle doit récupérer un matricule... c'est ça ou tout autre chose ?

    Si on est dans ce registre :
    Au niveau de la classe C, j'imagine alors une boucle de traitement sur une liste d'objets A (puisque B étend A)
    Pour discriminer, il suffirait de tester l'appartenance à B (instanceof par exemple) et dans ce cas caster l'objet A en B pour avoir accès au matricule....

    Bref... j'attends tes explications...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2016
    Messages : 24
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    professeur shadoko, oui je suis sure.

    En fait, ma classe A me sert à définir tout ce qui est commun à au moins deux autres classe (ici B et C).


    OButterlin, je ne suis pas clair en effet.

    En fait, comme je l'ai dit plus haut, ma classe A regroupe ce qui est générique et je me sers des éléments de cette classe dans toutes les autres.

    Les classes B et C n'ont rien en commun à part la classe A.

    De ce fait, je pensais pouvoir faire une méthode dans ma classe A qui stockerait la valeur du matricule obtenue à la fin des traitements ma classe B puis lancer les traitements de ma classe C avec cette valeur.

    J'espère avoir été plus clair.

    Merci pour votre aide

  5. #5
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par hadrien4789 Voir le message
    .
    De ce fait, je pensais pouvoir faire une méthode dans ma classe A qui stockerait la valeur du matricule obtenue à la fin des traitements ma classe B puis lancer les traitements de ma classe C avec cette valeur.

    J'espère avoir été plus clair.
    non ... je n'y voit goutte (en particulier je ne vois pas pourquoi A "connaitrait" B et C).
    En exemple réel nous servirait davantage.
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    J'ai du mal à comprendre, pourquoi parles-tu de "à la fin des traitements ma classe B puis lancer les traitements de ma classe C" ?

    Tu as soit une classe A, soit une classe B, soit une classe C... ce n'est pas un traitement séquentiel là.
    Tu fais un new A() ou new B() ou new C(), quel rapport avec B puis les traitements de C ?

    Comme professeur shadoko, je souhaiterais un exemple de ce que tu veux faire pour comprendre ta problématique.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2016
    Messages : 24
    Points : 30
    Points
    30
    Par défaut
    Bonjour à tous,

    Voici un exemple 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
     public classs A{
     
    public String matricule ;
     
    public String getMatricule() {
        return matricule;
      }
     
     public void setMatricule(String newMatricule) {
        this.matricule = newMatricule;
      }    
    }
     
    public class B extends A{
    	set matricule = 'toto';
    }
     
    public class C extends A{
    	 System.out.println(toto);
    }
     
     
    // Lancement des éléments de la classe B puis de la classe C
    @RunWith(Suite.class)				
    @Suite.SuiteClasses({				
      B.class,
      C.class,  			
    })		
     
    public class JunitTest {				
     
    }
    J'espère être plus clair.

    Merci

    Hadrien

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2016
    Messages : 24
    Points : 30
    Points
    30
    Par défaut
    Pardon, il y a une erreur dans mon code,

    Dans la classe c j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class C extends A{
     
    	 System.out.println(matricule);
     
    }
    Et je veux pour résultat toto.

    Merci

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Mais voyons, ce que tu fais avec un objet ne regarde pas ce que tu fais avec un autre objet.

    Les trucs spécifiques de ta classe B ne peuvent pas avoir le moindre effet sur la classe C.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2016
    Messages : 24
    Points : 30
    Points
    30
    Par défaut
    thelvin, ce que tu dis est valable même si ils ont la classe A en commun ?


    Je ne pourrais pas stocker le résultat dans une variable qui serait valable à la fois pour les instances de la classe B et de la classe C ?

  11. #11
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ben, c'est pas fait pour ça, quoi.

    Disons que tu pourrais toujours faire ça avec un truc static. Mais à ce niveau-là, ça ne sert pas à grand-chose qu'elles aient la même classe parente. Tu pourrais mettre cette variable static n'importe où pour avoir la même chose. Et du coup en y réfléchissant bien ça sert à rien non plus que la variable soit static, ça peut être n'importe quelle variable stockée n'importe où par tes objets de classe B, pour que ceux de classe C aille la lire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2016
    Messages : 24
    Points : 30
    Points
    30
    Par défaut
    ça marche, merci beaucoup.

    Mais du coup, je n'ai pas de solution à mon problème.

    En extrapolant ce que tu me dis, comment puis je créer une variable définie dans ma classe b, stocker sa valeur puis récupérer celle-ci dans am class c ?

    Merci

  13. #13
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ça n'a pas vraiment d'importance. Crée juste une variable accessible d'où que tu veux.

    Mettons que tu crées une classe ConteneurInformation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class ConteneurInformation {
      private String matricule;
     
      public String getMatricule() {
        return matricule;
      }
     
      public void setMatricule(String matricule) {
        this.matricule = matricule;
      }
    }
    Ta classe B pourrait faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class B {
      private ConteneurInformation info;
     
      public B(ConteneurInformation info) {
        this.info = info;
      }
     
      public void faireDesTrucsDeB() {
        info.setMatricule("un-joli-matricule");
      }
    }
    et C pourrait faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class C {
      private ConteneurInformation info;
     
      public C(ConteneurInformation info) {
        this.info = info;
      }
     
      public void faireDesAutresTrucs() {
        System.out.println(info.getMatricule());
      }
    }
    ce qui pourrait s'utiliser comme ça dans un programme entier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ConteneurInformation info = new ConteneurInformation();
     
    B b = new B(info);
    C c = new C(info);
     
    b.faireDesTrucsDeB();
    c.faireDesAutresTrucs();


    ********************

    Évidemment, ça illustre le concept de stocker quelque chose quelque part pour que différents composants puissent y lire ou y écrire.

    Mais si ton flot c'est que B crée une valeur et que C doit attendre cette valeur et s'en servir, il est évidemment plus intelligent de ne stocker la valeur nulle part. A la place, B la renvoie avec un return, et C prend cette valeur en paramètre.

    Un truc genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String matricule = b.genererUnMatricule();
    c.utiliserUnMatricule(matricule);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2016
    Messages : 24
    Points : 30
    Points
    30
    Par défaut
    Merci beaucoup,

    Peux-tu me dire à quoi corresponds le .info.

    Si tu as une documentation je prends.

    Merci encore

  15. #15
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    ?

    info c'est juste le nom que j'ai choisi pour certaines variables. Tu peux le remplacer par zorglub, c'est pareil.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/05/2014, 10h23
  2. Réponses: 4
    Dernier message: 10/11/2008, 08h04
  3. stocker la valeur d'une cellule effacée au cours de la procédure
    Par NATOU2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/10/2008, 18h10
  4. Réponses: 2
    Dernier message: 06/06/2008, 16h18
  5. Réponses: 2
    Dernier message: 10/04/2008, 11h48

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