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

Collection et Stream Java Discussion :

Débutant Salut pb de tableau Objet.


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Par défaut Débutant Salut pb de tableau Objet.
    Voila,
    J'ai crée un tab[2] objet ( si je peux m'exprimer ainsi )...
    je l'initialise et et je crée les objets ( ici Nom et Age )
    que j'ai récupéré d'une Classe objet ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
                             /*Instanciation de la Classe Objet X */
    		X tabP = new X[2];
    		/*Instanciation de la Classe Objet SaiseNomAge */
    		SaisieNomAge CL_SaisieNomAge = new SaisieNomAge();
    		do
    		{
    		Noms = CL_SaisieNomAge.entrerNom();
    		Age = CL_SaisieNomAge.entrerAge();
    		tabP[i] = new Personnes() ;
    		tabP[i].setNom() = Noms ;
    		tabP[i].setAge() = Age ;
    		}while(condition);
    j'ai un message d'erreur
    setNom ( java.lang.String) in X cannot be applied to ()
    setAge ( int) dito...

    Alors je ne comprend plus rien, car il est possible de récupérer des objets d'autres objets Non??????

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    tabP[i].setAge(Age);

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Par défaut Salut .
    Merci pour ta reponse aussi rapide ..
    Ouais
    Ca marche ..
    Mais comme je suis débutant je peux me permettre Why?????....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tabP[i].setNom() = Noms ;
    		          tabP[i].setAge() = Age ;
    j'affecte bien Noms a mon tab via ma methode setNom ....????

  4. #4
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    tabP est un tableau d'objet X
    tabP[i] te renvoit le ième objet X

    donc sur tabP[i], tu peux appeler toutes les méthodes et toutes les propriétés publiques de X.

    Si dans ta classe X, tu as une propriété nom de visibilité publique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class X
    {
         public String nom;
    }
    tu peux y accéder de l'extérieur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    System.out.println(tabP[i].nom); // Accès en lecture, affiche le nom
    tabP[i].nom = "je donne une valeur"; // Accès en écriture, modifie le nom
    Ceci étant dit, en conception objet, on évite généralement (pour ne pas dire toujours) d'accéder directement aux propriétés de l'objet (on appelle ça l'encapsulation).

    Pourquoi ? Pour différentes raisons (modifier l'implémentation dans la classe X sans modifier son utilisation par d'autres classes clientes, autoriser l'accès à une variable uniquement en écriture ou uniquement en lecture, ...)

    Comment fait t'on ? A chaque propriété ppp de type Type, on associe une méthode d'accès en lecture (un accesseur public Type getPpp()) et une méthode d'accès en écriture (un mutateur public void setPpp(Type type))
    Donc pour la propriété nom de ta classe X, on définit les méthodes :
    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
     
    public class X
    {
        public void setNom(String nouveauNom)
        {
             nom = nouveauNom;
        }
     
        public String getNom()
        {
            return nom;
        }
     
        private String nom;
    }
    Donc de l'exterieur, on utilise ces méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    X objet = new X();
    objet.setNom("nouvelle valeur");
    System.out.println(objet.getNom()); // affiche "nouvelle valeur"
    J'espère que ça sera plus clair.

  5. #5
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Par défaut
    Ok ....
    merci pour ta réponse ...

    mais ma Classe instanciable X était déja comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		public void setNom( String n )
    		{
    		String Nom = "" ;
    		Nom = n ;
    		}
    Et pourtant si j'ai bien compris sans etre prétentieux que ma premiere
    ligne devrais marché non???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabP[i].setNom() = Noms ;

  6. #6
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Je suis pas convaincu que tu ai tout compris mais bon, les forums, c'est fait pour ça :

    Déjà, dans ta classe X :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void setNom( String n )
    {
        String Nom = "" ;
        Nom = n ;
    }
    Premièrement
    n est un attribut de la méthode setNom(String n)
    et Nom est une variable locale à ta méthode setNom(String n) qui ne "vit" que dans cette méthode.
    La variable locale Nom prend donc la valeur de n mais à condition que la valeur soit passé entre les parenthèses :
    Si Noms contient "toto", le paramètre n de ta méthode setNom prend alors "toto" comme valeur et cette valeur "toto" est misa dans la variable locale Nom de ta méthode setNom(String n).


    Deuxièment,
    ce qui est fait dans ta méthode setNom(String n) ne sert à rien puisque la variable Nom "meurt" à l'accolade fermante.
    Regarde bien mon exemple de classe X dans mon précédent message, la variable nom se trouve dans la classe X et non dans la méthode setNom(String n), c'est alors ce qu'on appelle une variable d'instance.

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/02/2007, 00h06
  2. Réponses: 6
    Dernier message: 17/01/2006, 15h53
  3. Débutant : initialisation d'un tableau
    Par lebokto dans le forum C++
    Réponses: 7
    Dernier message: 02/11/2005, 15h50
  4. tableau objet
    Par harris_macken dans le forum C++
    Réponses: 9
    Dernier message: 20/06/2005, 21h04
  5. Réponses: 3
    Dernier message: 11/01/2005, 08h20

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