projet1 méthode clone()

Voir le sujet précédent Voir le sujet suivant Aller en bas

projet1 méthode clone()

Message  didi le Mer 17 Mar 2010, 22:12

bonjour à tous

j'ai un problem avec la méthode
protected Object clone ()

[code]
protected Object clone() {
Pion[][] copiePlateau = plateau.clone();
Joueur unJoueurCourant = joueurCourant.clone();
Joueur unJoueurGagnant = joueurGagnant.clone();
Joueur[] lesJoueurs = joueurs.clone();
Etat copie = new Etat(copiePlateau,unJoueurCourant,unJoueurGagnant,lesJoueurs);
return copie;
[code]

quand je le compile il me donne érreur message

[code]

Etat.java:89: clone() has protected access in java.lang.Object
Joueur unJoueurCourant = joueurCourant.clone();
^
Etat.java:89: incompatible types
found : java.lang.Object
required: gxxxxx.projet1.Joueur
Joueur unJoueurCourant = joueurCourant.clone();
^
Etat.java:90: clone() has protected access in java.lang.Object
Joueur unJoueurGagnant = joueurGagnant.clone();
^
Etat.java:90: incompatible types
found : java.lang.Object
required: gxxxxx.projet1.Joueur
Joueur unJoueurGagnant = joueurGagnant.clone();
^
Note: /home/my/gxxxxx/projet1/Position.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
4 errors

[/code]

donc je fait un casting

[code]

protected Object clone() {
Pion[][] copiePlateau = plateau.clone();
Joueur unJoueurCourant = (Joueur)joueurCourant.clone();
Joueur unJoueurGagnant = (Joueur)joueurGagnant.clone();
Joueur[] lesJoueurs = joueurs.clone();
Etat copie = new Etat(copiePlateau,unJoueurCourant,unJoueurGagnant,lesJoueurs);
return copie;

[/code]

il m'affiche encore érreur

[code]


Etat.java:89: clone() has protected access in java.lang.Object
Joueur unJoueurCourant = (Joueur)joueurCourant.clone();
^
Etat.java:90: clone() has protected access in java.lang.Object
Joueur unJoueurGagnant = (Joueur)joueurGagnant.clone();
^
Note: /home/my/gxxxx/projet1/Position.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors

[code]

merci d'avance

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: projet1 méthode clone()

Message  Jhon le Jeu 18 Mar 2010, 05:17

protected Object clone() {
Pion[][] copiePlateau = plateau.clone();
Joueur unJoueurCourant = (Joueur)joueurCourant.clone();
Joueur unJoueurGagnant = (Joueur)joueurGagnant.clone();
Joueur[] lesJoueurs = joueurs.clone();
Etat copie = new Etat(copiePlateau,unJoueurCourant,unJoueurGagnant,lesJoueurs);
return copie;
Je ne sais pas quel est l'énoncé, mais :
- pourquoi protected ? Si c'est une méthode "à toi" (utilisée en interne), private suffit, non ?
- pourquoi dire qu'elle retourne un Object ? A tous les coups tu retournes un Etat, donc autant être plus spécifique et dire qu'elle retourne un Etat.

Cela pourrait également résoudre les erreurs citées. Le compilateur n'est pas toujours très précis, mais ici il pointe les deux bouts de code qui est sont en tort, un peu d'anglais suffit généralement à trouver ce qui cloche Wink

PS: si ton projet/dossier est vraiment nommé "gxxx", renomme-le avec ton numéro d'étudiant, histoire que le prof qui va corriger le code sache à qui il a affaire Smile

Jhon

Nombre de messages : 212
Age : 28
Prénom : Jonathan
Statut : promo réseaux 2012
Localisation : 50.879858N,4.34801E
Date d'inscription : 23/09/2008

Revenir en haut Aller en bas

Re: projet1 méthode clone()

Message  nvs le Jeu 18 Mar 2010, 07:29

Jhon a écrit:
protected Object clone() {
Pion[][] copiePlateau = plateau.clone();
Joueur unJoueurCourant = (Joueur)joueurCourant.clone();
Joueur unJoueurGagnant = (Joueur)joueurGagnant.clone();
Joueur[] lesJoueurs = joueurs.clone();
Etat copie = new Etat(copiePlateau,unJoueurCourant,unJoueurGagnant,lesJoueurs);
return copie;
Je ne sais pas quel est l'énoncé, mais :
- pourquoi protected ? Si c'est une méthode "à toi" (utilisée en interne), private suffit, non ?
- pourquoi dire qu'elle retourne un Object ? A tous les coups tu retournes un Etat, donc autant être plus spécifique et dire qu'elle retourne un Etat.
en java, clone ne peut être une méthode "à lui" !







_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: projet1 méthode clone()

Message  Wark le Jeu 18 Mar 2010, 11:58

didi a écrit:
Code:



Etat.java:89: clone() has protected access in java.lang.Object
      Joueur unJoueurCourant = (Joueur)joueurCourant.clone();
                                                    ^
Etat.java:90: clone() has protected access in java.lang.Object
      Joueur unJoueurGagnant = (Joueur)joueurGagnant.clone();
                                                    ^
Note: /home/my/gxxxx/projet1/Position.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors


merci d'avance

Tu es dans le même package que la classe Joueur ? Si oui, je ne vois pas comme ça, si non, la méthode clone de joueur t'es inaccessible..

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: projet1 méthode clone()

Message  DjMan42 le Mer 24 Mar 2010, 18:26

Je ne comprend pas très bien la méthode clone. J'ai posé plusieurs fois la question et on m'as répondu qu'elle fait une copie de l'objet courant.
Mais quand on n'est dans l'objet tous ces attributs sont courant. Question

DjMan42

Nombre de messages : 219
Prénom : Eden
Statut : Etudiant 1er Indu
Localisation : Bruxelles
Date d'inscription : 28/10/2008

Revenir en haut Aller en bas

Re: projet1 méthode clone()

Message  Wark le Mer 24 Mar 2010, 18:29

DjMan42 a écrit:Je ne comprend pas très bien la méthode clone. J'ai posé plusieurs fois la question et on m'as répondu qu'elle fait une copie de l'objet courant.
Mais quand on n'est dans l'objet tous ces attributs sont courant. Question

Elle retourne une copie de l'object auquel elle appartient.

Pour simplifier, c'est la même représentation (attributs avec les mêmes valeurs, etc..) mais stockés à des endroits différents en mémoire. Ainsi, si tu supprimes l'objet de base (cas d'un tableau ou d'une map), sa copie est "safe".

Bon, pour tout compliquer, on rajoute le garbage collector et tout les petites joyeusetés de Java. Very Happy

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: projet1 méthode clone()

Message  nvs le Mer 24 Mar 2010, 18:56

Wark a écrit:
DjMan42 a écrit:Je ne comprend pas très bien la méthode clone. J'ai posé plusieurs fois la question et on m'as répondu qu'elle fait une copie de l'objet courant.
Mais quand on n'est dans l'objet tous ces attributs sont courant. Question

Elle retourne une copie de l'object auquel elle appartient.

Pour simplifier, c'est la même représentation (attributs avec les mêmes valeurs, etc..) mais stockés à des endroits différents en mémoire. Ainsi, si tu supprimes l'objet de base (cas d'un tableau ou d'une map), sa copie est "safe".

Bon, pour tout compliquer, on rajoute le garbage collector et tout les petites joyeusetés de Java. Very Happy
cette réponse de Wark est très imprécise.

par objet courant, "on" a voulu te parler de l'objet appelant, celui qui invoque la méthode.

clone sert à dupliquer un objet. l'objet retourné est une copie de celui dont la méthode clone est appelée sauf que les attributs références du clone sont différents de ceux de l'original : ils ne pointent pas vers les mêmes objets mais vers de copies des objets attributs de l'original (le méthode clone d'un objet doit donc appeler récursivement les méthodes clone de ses attributs). on parle de copie profonde de l'objet.

lorsque Wark évoque la suppression de l'objet de base, il se trompe, dans la mesure où c'est impossible en java si une copie réfère également cet objet. ce qu'il a probablement voulu dire c'est que si tu modifies (ou supprimes) les objets qui sont attributs de l'original, les attributs du clone ne sont pas modifiés. ils correspondent à une duplication de ceux de l'original au moment du clonage, puis ils vivent chacun leur propre vie.

plus d'infos sur le clonage en java, ici, où il est donné un exemple de clone qui réalise une copie surficielle, ce qui risque de troubler Shocked








_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: projet1 méthode clone()

Message  Anthoblack le Mer 24 Mar 2010, 19:11

Bien plus "caché" comme implémentation qu'en C++... Mais on t'en parlera donc plus en profondeur quand tu verras le C++ et tu comprendras vraiment ce qui est copié et comment... et les pièges dans lequel il ne faudra pas tomber Smile

Anthoblack

Nombre de messages : 764
Age : 28
Prénom : Anthony
Statut : Ex-étudiant
Localisation : Bruxelles
Date d'inscription : 11/03/2008

Revenir en haut Aller en bas

Re: projet1 méthode clone()

Message  DjMan42 le Mer 24 Mar 2010, 20:11

Un grand merci à tous. Je comprend à présent.

DjMan42

Nombre de messages : 219
Prénom : Eden
Statut : Etudiant 1er Indu
Localisation : Bruxelles
Date d'inscription : 28/10/2008

Revenir en haut Aller en bas

Re: projet1 méthode clone()

Message  Wark le Mer 24 Mar 2010, 21:06

[quote="nvs"]
lorsque Wark évoque la suppression de l'objet de base, il se trompe, dans la mesure où c'est impossible en java si une copie réfère également cet objet. ce qu'il a probablement voulu dire c'est que si tu modifies (ou supprimes) les objets qui sont attributs de l'original, les attributs du clone ne sont pas modifiés. ils correspondent à une duplication de ceux de l'original au moment du clonage, puis ils vivent chacun leur propre vie.
/quote]

Oui oui, d'où j'ai parlé du garbage collector (sans redéfinir sa fonction). Ceci dit, j'aurais effectivement dû prendre la modification en exemple. :-)

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: projet1 méthode clone()

Message  pbt le Mer 24 Mar 2010, 23:19

Ce lien n'est pas mal non plus ...
http://ydisanto.developpez.com/tutoriels/j2se/cloneable/

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: projet1 méthode clone()

Message  pbt le Mer 21 Avr 2010, 13:36

... et une p'tite note sur mon blog à ce sujet.

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: projet1 méthode clone()

Message  Contenu sponsorisé Aujourd'hui à 08:39


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum