probleme d'héritage

probleme d'héritage - Java - Programmation

Marsh Posté le 10-01-2006 à 17:08:56    

Voila, j'ai un gros probleme avec l'héritage d'une classe abstraite.
J'ai l'impression que c'est moi qui est pas compris quelque chose, mais j'arrive pas à voir quoi...
 
J'ai une classe abstraite Courbe qui me definie une ArrayList et des méthode pour la manipuler.
De cette classe hérite deux autre classe, CourbeMesure et CourbeGraph
 
Le probleme me vient de CourbeGraph dont voici le constructeur:
 

Code :
  1. public CourbeGraph(Courbe courbe, Graphics2D g2, Dimension dim){
  2.  super();
  3.  this.listePoint = courbe.getListePoint();
  4.  this.dim = dim;
  5.  this.g2 = g2;
  6. //Utilisé pour les tests:
  7.                 System.out.println("this :\n" +this.toString());
  8.  System.out.println("courbe :\n" +courbe.toString());
  9.  System.out.println("this.equals(courbe) :" +this.equals(courbe));
  10. // this.paint();
  11.  this.addPoint(30,5);
  12.  System.out.println("this :\n" +this.toString());
  13.  System.out.println("courbe :\n" +courbe.toString());


 
(Cette classe possede une méthode paint() pour peindre la courbe dans le Graphics2D, mais est ignorée dans ce probleme)
 
L'ennui étant que si je fais une modification de l'objet CourbeGraph (this.addPoint(30,5);), l'objet Courbe reçut en parametre est lui aussi modifié! Pourtant, ce ne sont pas les même objet (this.equals(courbe) : false)
 
Je me doute bien qu'il doit sagir d'une lacune de ma part, mais j'ai beau relire mes bouquin, j'arrive pas à comprendre...
 
Merci de votre aide


Message édité par blaise_laporte le 10-01-2006 à 17:10:34
Reply

Marsh Posté le 10-01-2006 à 17:08:56   

Reply

Marsh Posté le 10-01-2006 à 17:20:40    


Il me semble, d'après le code que je vois, que ton objet CourbeGraph partage le même tableau de points  
que l'objet courbe reçu en paramètre. Donc,si tu changes (en ajoutant un point par exemple) ce tableau, cela  
le change pour tes deux objets. :heink:  
 
Pour résoudre le problème, il faudrait pour ton objet CourbeGraph que tu fasses une copie de courbe.getListePoint().
 
En espérant que cela t'aide

Reply

Marsh Posté le 10-01-2006 à 17:33:34    

C'est ce que j'avais pensé également, c'est pour cela que j'ai mis la ligne  

Code :
  1. this.listePoint = courbe.getListePoint();


getListePoint() me renvoie l'ArrayList listePoint de l'objet courbe. Donc, d'aprés moi, la listePoint de ma class CourbeGraph est une copie de seul de courbe, mais ne pointe pas sur la même reference.
 
Je pense donc que l'erreur est ailleur (mais je peux me tromper)

Reply

Marsh Posté le 10-01-2006 à 17:45:01    

blaise_laporte a écrit :

C'est ce que j'avais pensé également, c'est pour cela que j'ai mis la ligne  

Code :
  1. this.listePoint = courbe.getListePoint();


getListePoint() me renvoie l'ArrayList listePoint de l'objet courbe. Donc, d'aprés moi, la listePoint de ma class CourbeGraph est une copie de seul de courbe, mais ne pointe pas sur la même reference.
 
Je pense donc que l'erreur est ailleur (mais je peux me tromper)


oui tu te trompes, ce n'est pas une copie, c'est la meme reference [:itm]

Reply

Marsh Posté le 10-01-2006 à 17:55:33    

Trabadja lamacoere!!!!
 
C'est bon, j'ai compris. Comme de bien entendu, bétise toute simple!!
 
Pour info, si d'autre ont le même probleme:
Dans getListePoint(), je faisais:  

Code :
  1. return listePoint;


alors qu'en faisant

Code :
  1. return new ArrayList<PointMesure>(listePoint);


Je resoue mon probleme!
 
Merci!

Reply

Marsh Posté le 11-01-2006 à 11:49:50    

Du coup, j'ai un doute.
 
Dans java, une méthode get() doit elle renvoyer l'objet ou une copie de l'objet?
 
Je m'explique: j'ai ma méthode getListePoint() qui va renvoyer l'ArrayList listePoint, mais par convention, celle-ci doit elle faire  

Code :
  1. return listePoint;


ou bien:

Code :
  1. return new ArrayList<PointMesure>(listePoint);


 
merci.

Reply

Marsh Posté le 13-01-2006 à 19:07:30    

On ne fais jamais de new dans un get. on fait que retourner


---------------
Yes! A girl in computer science!
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed