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]probleme d'acces


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 7
    Points
    7
    Par défaut [Conception]probleme d'acces
    Bonsoir à tout le monde,

    Voilà mon probleme, j'ai une classes A qui est composé de 3 champs private dont j'aimerais avoir accés dans ma classe B, pour ce faire j'ai crée dans ma classe A 2 services get qui retourne simplement les champs en question en lecture seul. donc ma question est comment recuperer ces champs depuis ma classe B ?

    merçi à vous

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    Eh bien c'est une pure question d'objet!

    En fait si j'ai compris ta une classe A :
    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
    public class Toto {
    private String champ1;
    private String champ2;
    private String champ3;
     
    public Toto(String champ1, String champ2, String champ3) {
    	// TODO Auto-generated constructor stub
    	this.champ1 = champ1;
    	this.champ2 = champ2;
    	this.champ3 = champ3;
    }
    public Toto()
    {
    	this.champ1 = "";
    	this.champ2 = "";
    	this.champ3 = "";
    }
    public String getChamp1() {
    	return champ1;
    }
    public void setChamp1(String champ1) {
    	this.champ1 = champ1;
    }
    public String getChamp2() {
    	return champ2;
    }
    public void setChamp2(String champ2) {
    	this.champ2 = champ2;
    }
    public String getChamp3() {
    	return champ3;
    }
    public void setChamp3(String champ3) {
    	this.champ3 = champ3;
    }
     
    }
    Pour avoir accès a ta classe A depuis ta class B il faut que tu instancie ta classe A cad que tu dois créer un objet de type A comme tu fais pour créer un int (int toto = new Integer()

    et bien la tu va faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Toto maClasseA = new Toto();
    ensuite tu auras donc accès a tous les champs privé de a.Donc à tes getters.

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class B {
     
    	public B()
    	{
    		//on crée un objet de type Toto =on crée une instance de toto
    		toto monToto = new toto();
     
    		//on a accès a tous les champs privés de Toto
    		monToto.getChamp1();
    	}
    }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Je te remerci me m'avoir repondu mais justement en fait dans ma classe B j'ai aussi 3 autres champs egalement private qui eux sont dejà du type de la classe A.

    Dans ma classe B j'ai aussi defini 3 services get qui sont censé me retourné les champs de la classe A par une simple instruction return champ A.
    c'est tout.
    Enfin toujours est-il que jamais j'aurais pensé me prendre la tete avec un service si simple en apparence puisque normalement un simple return nonDuChamp est le tour est joué

  4. #4
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par etan01
    Je te remerci me m'avoir repondu mais justement en fait dans ma classe B j'ai aussi 3 autres champs egalement private qui eux sont dejà du type de la classe A.

    Dans ma classe B j'ai aussi defini 3 services get qui sont censé me retourné les champs de la classe A par une simple instruction return champ A.
    c'est tout.
    Enfin toujours est-il que jamais j'aurais pensé me prendre la tete avec un service si simple en apparence puisque normalement un simple return nonDuChamp est le tour est joué
    Si j'ai bien compris t'as trois instance de A dans B.
    Donc pour accéder aux attributs des instances de A dans B il faut faire (comme dit djsbens) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     return InstanceDeAdansB.getAttribut();
    et non
    Faut tout simplement faire reference aux instances de A dans B sinon comment veux tu que la machine sache quel attribut renvoit getAttribut();

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    moi j'arrive plus a comprendre la!

    Met nous un peu de code et explique nous en détails la ou est l'erreur.

    Ben

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Ok djsbens je veux bien envoyé mes 2 classes à celui ou celle à qui sa interesse en MP puisque effectivement il me semble que cela sera un peu plus explicite, donc si tu es Ok djsbens fais le moi savoir et je te les enverrait.

    merci

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    bah poste les sur le forum , c bien de faire partager tout le monde sinon le forum sert a rien.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Ouai t'as raison finalement, aller hop les voici :

    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
     
    //Classe pour gérer une liste de mots trouvés.
     
    import java.io.*;
     
    public class CelluleMot {
     
    	private String mot;
    	private String definition;
    	private CelluleMot suivant;
     
    	public CelluleMot(final String mot,final String definition) {
     
    		this.mot=mot;
    		this.definition=definition;
    	}
     
    //Retourne le mot de la cellule.
    	public String getMot(){
    		return mot;
    	}
     
    //Retourne la définition de la cellule courante.
    	public String getDefinition(){	
    		return definition;
    	}
     
    //Retourne la cellule suivante.
    	public CelluleMot getSuivant(){
    		return suivant; 
    	}
     
    //Insère une cellule après la cellule courante.
    	public CelluleMot insererApres (final String mot,final String definition){
    		 return this.suivant=new CelluleMot(this.mot,this.definition);
    	}
     
    //Enregistre le contenu de la cellule dans le DataOutputStream  ouvert à l'extérieur.
    	public void enregistrer (DataOutputStream dest) throws IOException {
     
    		dest.writeUTF(mot);
    		dest.writeUTF(definition);
    	}
     
    }
    Voilà, je pense que la premiere classe se passe de commentaires
    quand à la deuxieme je ne l'ai pas commenté mais ce que je cherche c'est simplement recuperer dans les services getMot() et getDefinition() de ListeMot() les champs mot et definition de CelluleMot().

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    import java.io.*;
     
      public class ListeMot {	
     
      private CelluleMot premier;
      private CelluleMot dernier;
      private CelluleMot curseur;
     
      public ListeMot(){	
        this.premier = null;
        this.dernier = null;
        this.curseur = null;
      }
     
      public boolean estVide(){	
        if (premier==null)
        	return true;
        return false;
      }
     
      public boolean estEnFinDeListe(){
        if(dernier==null)
          return true;
    	return false;
      }
     
      public boolean placerAuDebut(){
     
        premier=curseur;
        if(estVide()== false)
          return true;
        return false;			
      }
     
      public String getMot(){		
    	return curseur.getMot();
      }
     
      public String getDefinition(){	
        return ;
      }
     
      public boolean avancer(){
        if(estEnFinDeListe()){
          return false;
         } else {
         	curseur=curseur.getSuivant();
         	if(curseur==null)
         		return false;
         	return true;
         }
      }
     
      public void ajouterMot(final String mot,final String definition){
    	if(estVide()){
    		premier=new CelluleMot(mot,definition);
    		dernier=premier;
    	}
    	else {
    		dernier.insererApres(mot,definition);
    		dernier=dernier.getSuivant();
    	}
      }
     
     
      public void enregistrer(DataOutputStream dest) throws IOException {
          for (SommetDico sd = premier; sd != null; sd = sd.getSuivant ())
              sd.enregistrer (dest);  	  	
      }                  
    }

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    Bon bah il me semble que ton erreur est là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public ListeMot(){   
        this.premier = null;
        this.dernier = null;
        this.curseur = null;
      }
    Il faut que les instancie.
    Cad :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public ListeMot(){   
        this.premier = new CelluleMot("","");
        this.dernier = new CelluleMot("","");
        this.curseur = new CelluleMot("","");
      }
    S'il sont a nul ce ne sont pas des objets.

    Mis à part ca je crois que tu essaies de faire du C avec du java car c'est vraiment ressemblant à une liste chainée en C...

    Mais bon essaie avec ce que je t'ai dit.
    Tiens moi au courant.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Effectivement tu as raison il s'agit bien d'une liste chainée.

    Si tu veux le role de la classe est de cree une liste vide. Ensuite on teste si la liste est vide ou pas et si c'est le cas on crée une premiere cellule afin d'initialisé la liste à l'aide de la methode ajouterMot() dans laquelle il y a effectivement instanciation de premier de type CelluleMot(). A la suite de sa j'affecte à dernier l'objet nouvellement crée (premier) donc normalement dernier herite de tous les champs de premier cad (mot et definition) .

    Est-ce que je me trompe ?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    Je c pas trop pour la liste chainée mais est ce que ton probleme est résolu?

    Sinon affiche moi l'erreur qu'il te fait stp.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Voilà l'erreur qu'il me retourne en compilant la classe ListeMot() tel que je l'ai donné un peu plus haut :

    liste.estVide () : true
    liste.estEnFinDeListe () : true
    Exception in thread "main" java.lang.NullPointerException
    at ListeMot.getMot(ListeMot.java:36)
    at ValidLM.main(ValidLM.java:10)

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    pouha c pas evident de debugger comme ca.
    Il est ou ton main()?

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Si tu veux j'ai pas de main j'ai juste une classe de Validation c'est elle que je compile pour voir si ma classe est OK :

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
     
    import java.io.*;
     
    public class ValidLM {
      private static ListeMot liste = new ListeMot ();
     
      public static void main (String [] args) {
        System.out.println ("liste.estVide () : " + liste.estVide ());
        System.out.println ("liste.estEnFinDeListe () : "
    			+ liste.estEnFinDeListe ());
        System.out.println ("liste.getMot () : " + liste.getMot ());
        System.out.println ("liste.getDefinition () : "
    			+ liste.getDefinition ());
        System.out.println ("liste.placerAuDebut () : "
    			+ liste.placerAuDebut ());
        System.out.println ("liste.avancer () : " + liste.avancer ());
        System.out.println ("************* liste.ajouterMot (\"troisieme\", ...)");
        liste.ajouterMot ("troisieme", "definition de troisieme");
        System.out.println ("liste.estEnFinDeListe () : "
    			+ liste.estEnFinDeListe ());
        System.out.println ("liste.getMot () : " + liste.getMot ());
        System.out.println ("liste.getDefinition () : "
    			+ liste.getDefinition ());
        System.out.println ("liste.placerAuDebut () : "
    			+ liste.placerAuDebut ());
        System.out.println ("liste.estEnFinDeListe () : "
    			+ liste.estEnFinDeListe ());
        System.out.println ("liste.getMot () : " + liste.getMot ());
        System.out.println ("liste.getDefinition () : "
    			+ liste.getDefinition ());
        System.out.println ("liste.avancer () : " + liste.avancer ());
        System.out.println ("liste.getMot () : " + liste.getMot ());
        System.out.println ("liste.getDefinition () : "
    			+ liste.getDefinition ());
        System.out.println ("liste.estEnFinDeListe () : "
    			+ liste.estEnFinDeListe ());
        System.out.println ("************* liste.ajouterMot (\"quatrieme\", ...)");
        liste.ajouterMot ("quatrieme", "definition de quatrieme");
        System.out.println ("liste.estEnFinDeListe () : "
    			+ liste.estEnFinDeListe ());
        System.out.println ("liste.getMot () : " + liste.getMot ());
        System.out.println ("liste.getDefinition () : "
    			+ liste.getDefinition ());
        System.out.println ("liste.placerAuDebut () : "
    			+ liste.placerAuDebut ());
        System.out.println ("liste.estEnFinDeListe () : "
    			+ liste.estEnFinDeListe ());
        System.out.println ("liste.getMot () : " + liste.getMot ());
        System.out.println ("liste.getDefinition () : "
    			+ liste.getDefinition ());
        System.out.println ("liste.placerAuDebut () : "
    			+ liste.placerAuDebut ());
        System.out.println ("liste.estEnFinDeListe () : "
    			+ liste.estEnFinDeListe ());
        System.out.println ("liste.getMot () : " + liste.getMot ());
        System.out.println ("liste.getDefinition () : "
    			+ liste.getDefinition ());
        System.out.println ("liste.avancer () : " + liste.avancer ());
        System.out.println ("liste.getMot () : " + liste.getMot ());
        System.out.println ("liste.getDefinition () : "
    			+ liste.getDefinition ());
        System.out.println ("liste.avancer () : " + liste.avancer ());
        //       try {
        // DataOutputStream output =
        //new DataOutputStream (new FileOutputStream ("validLM.tmp"));
        //liste.enregistrer (output);
        //output.close ();
        // } catch (IOException e) {
        //System.err.println (e);
        //System.exit (1);
        //}
        //try {
        //DataInputStream input =
        //new DataInputStream (new FileInputStream ("validLM.tmp"));
        //for (int i = 0; i < 4; i++)
        //System.out.println (input.readUTF ());
        //input.close ();
        // } catch (IOException e) {
        //System.err.println (e);
        //System.exit (2);
        // }
      }
    }

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    oui d'accord mais la c pas logique ce que tu lui demande!

    Tu lui demande d'afficher un mot de la liste qui est vide!

    Essaie d'insérer un mot dans ta liste.

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    justement c'est là que sa bloque, je vois pas comment
    inserer un nouveau champ ?

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    eh ben fait appel a ta procédure ajouterMot...
    Non?

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Ouai en fait c'est logique mais tu vas rires j'ai toujours pas trouvé.
    Je me doute que sait un truc tout bete mais j'arrive pas à le choppé parce que normalement quand t'appel ajouterMot(), tu l'appelle avec ses parametres formels et ... enfin bref j'ai l'impression que plus je cherche et plus je m'eloigne.

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    J'ai plusieurs remarques a te faire.

    J'ai essayer ton code et je me suis rendu compte que dans ta classe CelluleMot tu as trois champs donc un de type CelluleMot nommé suivant.

    Et ton constructeur n'y fait pas appel alors je pense que tu devrais y faire appel comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public CelluleMot(final String mot,final String definition,final CelluleMot suivant) {
     
          this.mot=mot;
          this.definition=definition;
          this.suivant=suivant;
       }
    De plus ton curseur est toujours à null je cherche comment faire pour pas le mettre a null je tiens au courant.

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    De plus je vois pas pourquoi tu fais tout ca tout bien réfléchi.

    En java il y a des classes toutes faites pour utiliser une liste chainée.

    http://java.developpez.com/faq/java/...angage_donnees

    Utilise soit une linkedList ou un Arraylist de type CelluleMot.

    Il va te gérer tout seul l'ajout d'une CelluleMot tu te prendras beaucoup moins la tête.

Discussions similaires

  1. Problème d'accès en root
    Par Max Payne dans le forum Administration système
    Réponses: 5
    Dernier message: 20/11/2004, 13h19
  2. [Debutant] Probleme d'acces a une variable
    Par Bugmaster dans le forum Langage
    Réponses: 16
    Dernier message: 02/09/2004, 15h57
  3. probleme d'acces a une machine sur un réseau
    Par zorian dans le forum Développement
    Réponses: 3
    Dernier message: 09/06/2004, 13h04
  4. Problem d'accès à la base Access : Error 80004005
    Par lord_paco dans le forum ASP
    Réponses: 2
    Dernier message: 03/06/2004, 23h18
  5. Probleme d'acces a show table status
    Par arcane dans le forum Requêtes
    Réponses: 4
    Dernier message: 17/11/2003, 09h05

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