Partage
  • Partager sur Facebook
  • Partager sur Twitter

[debutant] Question sur les noms d'instances

Sujet résolu
    16 février 2020 à 12:34:13

    Bonjour, 

    je suis débutant en java , et j'ai étudié un exercice sur la gestion de piles où l'on ne passe pas par un tableau. Mais chaque élément de la pile est une instance de classe, qui a une propriété "dessous " qui référence l'objet qui est en dessous de lui dans la pile. Une variable pile fait référence à l'objet situé le plus en haut de la pile car à partir de celui ci on peut atteindre tous les objets de la pile. 

    J'ai compris le fonctionnement du code, mais j'ai un problème de compréhension. Car dans la classe qui créée les objets de la Pile la classe "ElementDePile", on a la méthode  empiler, qui va créer une nouvelle instance de la classe. 

    Mais cette nouvelle instance va toujours s'appeller element. Donc à chaque fois qu'on créée un objet, il va s'appeler element. 

    Et je me demandais, c'est donc possible d'avoir plusieurs instances d'une même classe qui portent le même nom ? 

    En vous remerciant d'avoir lu, si vous avez la réponse ça serait parfait ^^ 

    je mets les codes si il y a besoin de plus de détail : 

    la classe : 

    package tp.tp4.question1_2;
    
    public class ElementDePile {
    	
    	private int donnee;
    	private ElementDePile dessous;
    	
    	public ElementDePile(int val)
    	{
    		this.donnee = val;
    		this.dessous = null;
    	}
    	
    	public ElementDePile empiler(int val)
    	{
    		ElementDePile nouveau = new ElementDePile(val);
    		nouveau.dessous = this;  
    		
    		return nouveau;
    	}
    	
    	public ElementDePile depiler()
    	{
    		return this.dessous;
    	}
    	
    	public int getDonnee()
    	{
    		return this.donnee;
    	}
    	
    	public void affficherElementdePile()
    	{
    		System.out.println(this.donnee);
    		if(this.dessous != null) dessous.affficherElementdePile();
    		
    		return;
    	}
    	
    	public int compterNbElementsDePile()
    	{
    		int retour = 1;
    		if(this.dessous != null) retour = 1 + dessous.compterNbElementsDePile();
    		
    		return retour;
    	}
    }
    

    Le main : 

    package tp.tp4.question1_2;
    
    public class MainElementDePile {
    
    	public static void main(String[] args) {
    		
    		ElementDePile pileA = new ElementDePile(100);
    		ElementDePile pileB = new ElementDePile(200);
    		
    		int i =1;
    		
    		while(i<20)
    		{
    			pileA = pileA.empiler(i);
    			pileB = pileB.empiler(i);
    			pileB = pileB.empiler(i+1);
    			
    			i=i+2;
    		}
    		
    		System.out.println("Contenu de pileA :");
    		pileA.affficherElementdePile();
    		System.out.println("pileA contient " + pileA.compterNbElementsDePile() + " elements");
    		
    		
    		System.out.println("Contenu de pileB :");
    		pileB.affficherElementdePile();
    		System.out.println("pileB contient " + pileB.compterNbElementsDePile() + " elements");
    		
    		while(pileA != null && pileB != null)
    		{
    			pileA = pileA.depiler();
    			pileB = pileB.depiler();
    		}
    		
    		if(pileA != null)
    		{
    			System.out.println("Contenu de pileA :");
    			pileA.affficherElementdePile();
    			System.out.println("pileA contient " + pileA.compterNbElementsDePile() + " elements");
    		}
    		else System.out.println("pileA vide");
    		
    		System.out.println("Contenu de pileB :");
    		pileB.affficherElementdePile();
    		System.out.println("pileB contient " + pileB.compterNbElementsDePile() + " elements");
    		
    
    	}
    
    }
    




    -
    Edité par Teraplayer 16 février 2020 à 17:45:17

    • Partager sur Facebook
    • Partager sur Twitter
      17 février 2020 à 13:17:34

      Je ne vois pas trop où tu vois le mot "élément". Mais peu importe, j'ai compris l'idée de la question.

      Les objets n'ont pas de "nom". Les objets sont placés dans des variables, et les variables ont un nom.
      On peut changer le contenu des variables, c'est-à-dire les faire pointer vers un objet à un moment, puis vers un autre objet ensuite.
      Un objet peut être contenu dans plusieurs variables à la fois, ce qui fait qu'on a plusieurs "noms" pour l'appeler.

      Bref, il faut que tu chasses de ton esprit l'idée que un objet = un nom.

      Une classe est un prototype. Tu peux imaginer ça comme une chaîne de montage qui fabrique des objets (des "instances") qui auront les mêmes caractéristiques.
      Dans ton cas, chaque instance de la classe ElementDePile aura des variables \(donnee\) et \(dessous\).

      De ton point de vue, ces deux variables s'appellent toujours pareil. Mais en réalité elles font partie de l'objet, c'est-à-dire que chaque objet a une variable \(donnee\) et une variable \(dessous\), et qu'elles contiennent des valeurs différentes d'un objet à l'autre.

      • Partager sur Facebook
      • Partager sur Twitter
        1 mars 2020 à 7:15:27

        Merci beaucoup j'ai mieux compris, c'est vrai que c'était un peu le bordel dans ma tête du coup avant, merci ! 

        • Partager sur Facebook
        • Partager sur Twitter

        [debutant] Question sur les noms d'instances

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown