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

Java Discussion :

Utiliser un attribut dans plusieurs classes


Sujet :

Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 82
    Points : 47
    Points
    47
    Par défaut Utiliser un attribut dans plusieurs classes
    Bonjour,

    je voudrais pouvoir utiliser un attribut d'une classe (ici une LinkedList) depuis une méthode d'une 2e classe.

    Par exemple:
    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
     
     
    public class Plateau {
    	public LinkedList<Integer> listeCellule;
     
    	public Plateau() {
    		listeCellule = new LinkedList<Integer>();
     
    		for( int i = 0; i<12 ; i++){
     
    			listeCellule.add(4);
    		}
    	}
    }
     
    public class Joueur {
    	protected String Nom;
    	protected int Gain;
     
    	public Joueur(String nom) {
    		this.Nom = nom;
    		this.Gain = 0;
    	}
     
    	private LinkedList<Integer> jouerCoup(int CelluleAJouer){
    		//j'ai besoin de listeCellule ici
    	}
    }

    Faut-il que j'instancie obligatoirement un Plateau dans classe Joueur?

    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 77
    Points : 142
    Points
    142
    Par défaut
    Effectivement il faut une instance de Plateau afin d’utiliser la liste de cellule a cette endroit précis. Le plus simple étant passer le Plateau comme paramètre du constructeur.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    Code java : 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 Joueur {
    	protected String Nom;
    	protected int Gain;
            private Plateau plateau;
    	public Joueur(String nom, Plateau p) {
    		this.Nom = nom;
    		this.Gain = 0;
    		plateau =p;
    	}
     
           //retourne un élement de la liste 
    	private Integer jouerCoup(int CelluleAJouer){
    		//j'ai besoin de listeCellule ici
              return this.plateau.getListeCellule().get(CelluleAJouer);
    	}
    }
     
     
    public class Plateau {
    	public LinkedList<Integer> listeCellule;
     
    	public Plateau() {
    		listeCellule = new LinkedList<Integer>();
     
    		for( int i = 0; i<12 ; i++){
     
    			listeCellule.add(4);
    		}
    	}
     
           public LinkedList<Integer> getListeCellule(){
    	return listeCellule;
           }
     
    }

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 072
    Points : 7 974
    Points
    7 974
    Par défaut
    C'est une idée, mais tu peux aussi le passer a la méthode jouerCoup.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Integer jouerCoup(Plateau plateau, int CelluleAJouer){...}
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Points : 68
    Points
    68
    Par défaut
    Tu as plusieurs solutions pour faire ce dont tu as besoin:

    • Tu peux mettre ta liste en static pour pouvoir y accéder sans l'instance de la class Plateau
    • Vu que tu m as l'air de programmer un jeu, un plateau est unique on est d'accord, donc tu peux mettre ta class Plateau en Singleton (plus logique à mon sens) et accéder facilement a ta liste (et ca pourrai te faciliter la vie pour le reste du code


    Voilà tu as le choix

  6. #6
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Faut-il que j'instancie obligatoirement un Plateau dans classe Joueur?
    Il est de loin préférable que un Joueur manipule une instance de Plateau.
    Donc oui, il est préférable que tu instancie un Plateau.

    Cela peut-être fait lors de l'instanciation du joueur :
    (En reprenant le code de armel18 )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public Joueur(String nom) {
    		this.Nom = nom;
    		this.Gain = 0;
    		plateau = new Plateau();
    	}
     
    public Joueur(String nom, Plateau p) {
    		if( p == null){
    			throw new Exception("Un joueur a besoin d'un plateau pour existé !");
    		}
    		this.Nom = nom;
    		this.Gain = 0;
    		plateau =p;
    	}
    Ainsi ton joueur peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private LinkedList<Integer> jouerCoup(int CelluleAJouer){
    		this.plateau.getListeCellule();
    		// TODO utilise la liste et ne pas juste l'appeler.
    	}
    Pour ce qui est de l'utilisation static, cela revient à avoir une liste de cellules sans plus de structure logique. Et l'utilisation du singleton n'est pas plus simple que l'utilisation d'une propriété ou d'un passage de référence. Et cela bloque des possibilités ! Comme avoir deux joueurs qui jouent en même temps sur des plateaux différents !

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par kolodz Voir le message
    Pour ce qui est de l'utilisation static, cela revient à avoir une liste de cellules sans plus de structure logique. Et l'utilisation du singleton n'est pas plus simple que l'utilisation d'une propriété ou d'un passage de référence. Et cela bloque des possibilités ! Comme avoir deux joueurs qui jouent en même temps sur des plateaux différents !
    Je suis d'accord, surtout pour le static (je proposais une solution différente de ce qui avait été dit ). Pour le Singleton, c'est surtout si le Plateau dans son programme est utilisé de façon unique. Évidemment si il compte faire plusieurs parties sur plusieurs plateaux le Singleton est à éviter. En quoi je juge que c'est plus simple? Parce que ça limite les erreurs (à mon sens), facilite la relecture du code et sa compréhension (tant que son utilisation est logique et nécessaire on est d'accord)

  8. #8
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 072
    Points : 7 974
    Points
    7 974
    Par défaut
    Surtout que selon le cas, un joeur peut jouer sur plusieurs plateaux. Donc autant lui passer le plateau au moment voulu. Avec ou sans singleton, static ou pas static. (mais avec static plus besoin de le passer le plateau... donc perte d'interet.)
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/01/2015, 17h22
  2. utiliser les mêmes variable dans plusieurs class
    Par hterrolle dans le forum Langage
    Réponses: 2
    Dernier message: 16/11/2007, 22h11
  3. utiliser les attribut d'une classe dans une autre classe
    Par kaissaoui dans le forum Langage
    Réponses: 11
    Dernier message: 18/07/2007, 16h13
  4. Function utilisable dans plusieurs classes
    Par zulot dans le forum C++
    Réponses: 7
    Dernier message: 05/06/2007, 01h01
  5. Utilisation de variables dans plusieurs classes
    Par dedeloux dans le forum Langage
    Réponses: 3
    Dernier message: 20/07/2005, 18h25

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