Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1352 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Clonage d'objets RESOLU

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Clonage d'objets RESOLU

n°205161
Cherrytree
cn=?
Posté le 30-08-2002 à 00:33:29  profilanswer
 

Heu, je suis pas sur d'avoir compris ce que veulent dire les nuances suivantes :
 
shallow clone
deep clone
 
Moi, je veux cloner un objet qui contient une référence à un autre objet. Je veux que tous mes clones aient la même référence sur ce point précis, mais que les autres champs soient des nouvelles instances. Alors comment je la fais ma méthode clone ?


Message édité par Cherrytree le 30-08-2002 à 14:15:59

---------------
Le site de ma maman
mood
Publicité
Posté le 30-08-2002 à 00:33:29  profilanswer
 

n°205205
HappyHarry
Posté le 30-08-2002 à 00:54:21  profilanswer
 

ben clonage de surface/profondeur non ? ('fin suivant les traductions)
 
c koi le probleme ? tu me le détailles ?


Message édité par HappyHarry le 30-08-2002 à 00:54:30
n°205209
HappyHarry
Posté le 30-08-2002 à 00:59:24  profilanswer
 

imagine un objet A qui contient une reference vers un objet B
 
shallow clone : quand A est cloné, la reference vers B reste la meme
 
deep clone : quand A est cloné, la référence est vers un nouvel objet B (B est cloné également)

n°205210
HappyHarry
Posté le 30-08-2002 à 01:00:00  profilanswer
 

et toi tu veux faire un mélange des deux ...

n°205213
Cherrytree
cn=?
Posté le 30-08-2002 à 01:03:23  profilanswer
 

Mon problème est le suivant :
 

Code :
  1. public class Data {
  2.     private Task task;
  3.     private int value;
  4.     public Data(Task task, int value) {
  5.         this.task = task;
  6.         this.value = value;
  7.     }
  8. }


 
Je dispose d'un tableau de Data :

Data[] datas


 
Je veux cloner "datas", tout en laissant l'objet task en référence pour tous les clones. Comment j'écris ma méthode clone, alors ?


---------------
Le site de ma maman
n°205220
HappyHarry
Posté le 30-08-2002 à 01:08:46  profilanswer
 

ben
 

Code :
  1. class Data
  2. {
  3. blablabla clone()
  4. {
  5. return new Data(this.task,this.value);
  6. }


 
la tu as cloné un objet Data comme tu le voulais, la référence est intacte ...
 
je vois pas ou est le soucis  :??:


Message édité par HappyHarry le 30-08-2002 à 01:09:03
n°205221
Cherrytree
cn=?
Posté le 30-08-2002 à 01:09:55  profilanswer
 

Ben, j'ai jamais cloné, j'ai peur de copier des trucs que je veux pas copier, ou de faire des références où il ne faut pas.


---------------
Le site de ma maman
n°205225
HappyHarry
Posté le 30-08-2002 à 01:11:58  profilanswer
 

ben c simple
si tu as un attribut qui n'est pas un type de base (objet donc)
si tu veux garder la référence : tu la passes en arguement du constructeur de ton objet ici Date(this.task,this.value)
sinon tu passes un nouvel objet du type voulu : ca donnerait new Date(new Task(aveclesparamsquivontbien),this.value)

n°205226
Cherrytree
cn=?
Posté le 30-08-2002 à 01:12:14  profilanswer
 

Et là, si je tripote value, dans un de mes clones ça va affecter les autres, non ? Quoique non, puisque c'est un type primitif... Heu, en fait j'ai besoin de voir différent cas, pour bien voir la portée de ce mécanisme. Curieusement, j'en avais jamais eu besoin avant.


---------------
Le site de ma maman
n°205229
HappyHarry
Posté le 30-08-2002 à 01:13:27  profilanswer
 

Cherrytree a écrit a écrit :

Et là, si je tripote value, dans un de mes clones ça va affecter les autres, non ? Quoique non, puisque c'est un type primitif... Heu, en fait j'ai besoin de voir différent cas, pour bien voir la portée de ce mécanisme. Curieusement, j'en avais jamais eu besoin avant.




 
ben honnetement j'm'en suis jamais trop servi non plus ... mauvais souvenir de TP :D
ca va rien affecter puisque tu crées a chaque fois une nouvelle instance de Data, et pis c un type de base, donc pas une référence

mood
Publicité
Posté le 30-08-2002 à 01:13:27  profilanswer
 

n°205230
Cherrytree
cn=?
Posté le 30-08-2002 à 01:14:45  profilanswer
 

Et la méthode clone() de Object, elle fait quoi en fait, si je fais un super.clone(), quel va être le résultat ?


---------------
Le site de ma maman
n°205231
HappyHarry
Posté le 30-08-2002 à 01:16:00  profilanswer
 

Cherrytree a écrit a écrit :

Et la méthode clone() de Object, elle fait quoi en fait, si je fais un super.clone(), quel va être le résultat ?




 
clonage superficiel

n°205232
Cherrytree
cn=?
Posté le 30-08-2002 à 01:18:42  profilanswer
 

HappyHarry a écrit a écrit :

 
 
clonage superficiel



l'équivalent de celle que tu as décrite, dans mon cas, donc.


---------------
Le site de ma maman
n°205235
HappyHarry
Posté le 30-08-2002 à 01:22:59  profilanswer
 

Cherrytree a écrit a écrit :

l'équivalent de celle que tu as décrite, dans mon cas, donc.




 
yep, il va conserver la référence a ton objet Task

n°205237
Cherrytree
cn=?
Posté le 30-08-2002 à 01:23:49  profilanswer
 

OK !


---------------
Le site de ma maman
n°205241
Cherrytree
cn=?
Posté le 30-08-2002 à 01:29:03  profilanswer
 

cette ligne de mon code foire :
 

Code :
  1. public class Cloner(Data[] datas) {
  2.     private Data[] datas;
  3.     public Cloner(Data[] datas) {
  4.         this.datas = (Data[])datas.clone();
  5.     }
  6. }


 
Je sentais bien que c'était faux, mais je connais pas la bonne syntaxe, en fait. :sweat:


---------------
Le site de ma maman
n°205242
Cherrytree
cn=?
Posté le 30-08-2002 à 01:29:26  profilanswer
 

J'aime les joce's bug !


---------------
Le site de ma maman
n°205254
HappyHarry
Posté le 30-08-2002 à 01:41:54  profilanswer
 

Cherrytree a écrit a écrit :

cette ligne de mon code foire :
 

Code :
  1. public class Cloner(Data[] datas) {
  2.     private Data[] datas;
  3.     public Cloner(Data[] datas) {
  4.         this.datas = (Data[])datas.clone();
  5.     }
  6. }


 
Je sentais bien que c'était faux, mais je connais pas la bonne syntaxe, en fait. :sweat:  




 
euh ... tu veux pas betement créer un tableau de meme taille et cloner les éléments du tableau ?  :ange:

n°205258
Cherrytree
cn=?
Posté le 30-08-2002 à 01:44:00  profilanswer
 

Autant pour moi, en fait ça marche, c'était une erreur d'héritage sur le constructeur. :ange: Par contre, ça clone que dalle, on dirait. Bon allons y pour le débug. :)


---------------
Le site de ma maman
n°205266
Cherrytree
cn=?
Posté le 30-08-2002 à 02:13:41  profilanswer
 

Bon, le problème est le suivant :
 
ça marche pour un objet unique, mais dès que je veux cloner un tableau, c'est comme si je passais une référence : la question est donc comment cloner un tableau d'objets.


---------------
Le site de ma maman
n°205267
Cherrytree
cn=?
Posté le 30-08-2002 à 02:21:48  profilanswer
 

Si je fais le clonage élément par élément, là ça marche. y a moyen de faire moins lourd ?


---------------
Le site de ma maman
n°205313
Cherrytree
cn=?
Posté le 30-08-2002 à 09:00:46  profilanswer
 

:bounce:


---------------
Le site de ma maman
n°205320
darklord
You're welcome
Posté le 30-08-2002 à 09:05:19  profilanswer
 

Cherrytree a écrit a écrit :

Si je fais le clonage élément par élément, là ça marche. y a moyen de faire moins lourd ?




 
non pas que je sache en tout cas.


---------------
Just because you feel good does not make you right
n°205333
benou
Posté le 30-08-2002 à 09:15:04  profilanswer
 

Cherrytree a écrit a écrit :

Si je fais le clonage élément par élément, là ça marche. y a moyen de faire moins lourd ?




System.arrayCopy est ton ami !

n°205341
darklord
You're welcome
Posté le 30-08-2002 à 09:19:44  profilanswer
 

benou a écrit a écrit :

 
System.arrayCopy est ton ami !




 
 :jap: j'avais pas vu qu'il parlait d'éléments d'un tableau ... mal réveillé moa


---------------
Just because you feel good does not make you right
n°205342
bobuse
Posté le 30-08-2002 à 09:20:49  profilanswer
 

benou a écrit a écrit :

 
System.arrayCopy est ton ami !




grilled

n°205353
benou
Posté le 30-08-2002 à 09:27:57  profilanswer
 

bobuse a écrit a écrit :

 
grilled




 :??:

n°205362
darklord
You're welcome
Posté le 30-08-2002 à 09:34:03  profilanswer
 

il a voulu l'écrire puis il a vu ton post surement ...


---------------
Just because you feel good does not make you right
n°205371
bobuse
Posté le 30-08-2002 à 09:45:37  profilanswer
 

DarkLord a écrit a écrit :

il a voulu l'écrire puis il a vu ton post surement ...




ouaip!
trop rapide ce benou ! :benetton:  :jap:

n°205379
Cherrytree
cn=?
Posté le 30-08-2002 à 09:51:59  profilanswer
 

Bon, ben je vais voir ça. System.arrayCopy fait appel à la méthode clone des éléments du tableaux, je suppose, non ?


---------------
Le site de ma maman
n°205406
benou
Posté le 30-08-2002 à 10:19:40  profilanswer
 

Cherrytree a écrit a écrit :

Bon, ben je vais voir ça. System.arrayCopy fait appel à la méthode clone des éléments du tableaux, je suppose, non ?




non, ca copie un tableau de façon binaire (et de façon optimisée).
bref, tu fais ca quoi  :

Code :
  1. Data[] nDatas = new Data[datas.length];
  2. System.arrayCopy(datas, 0, nDatas, 0, datas.length);

n°205417
Cherrytree
cn=?
Posté le 30-08-2002 à 10:34:30  profilanswer
 

Et donc ce qui était référence restera référence, c'est ça ?


---------------
Le site de ma maman
n°205427
darklord
You're welcome
Posté le 30-08-2002 à 10:40:59  profilanswer
 

bin non c'est un clone ... c'est copié quoi


---------------
Just because you feel good does not make you right
n°205474
Cherrytree
cn=?
Posté le 30-08-2002 à 11:21:27  profilanswer
 

Bin alors comment faire pour obtenir la chose suivante :
 
Une liste d'objet doit être passée en référence à des Solvers (dont le nombre varie, certains sont détruits, d'autres créés...), sachant qu'à chaque élément de la liste doit correspondre une valeur, propre à chaque Solver.
 
Je reprends :
Un solver, c'est un tableau, dont chaque élément est constitué d'un Objet appartenant à la liste de départ, et d'un entier, propre à ce Solver.


---------------
Le site de ma maman
n°205481
darklord
You're welcome
Posté le 30-08-2002 à 11:26:51  profilanswer
 

et ... ?


---------------
Just because you feel good does not make you right
n°205490
Cherrytree
cn=?
Posté le 30-08-2002 à 11:39:02  profilanswer
 

Le problème est le suivant :
 
http://yozakura.free.Fr/hfr/pb.gif


---------------
Le site de ma maman
n°205493
Cherrytree
cn=?
Posté le 30-08-2002 à 11:41:08  profilanswer
 

DarkLord a écrit a écrit :

et ... ?



Je veux créer des instances de Solver, je veux des clones qui conaissent les éléments de TaskList (la liste de départ) et qui associent via Data un entier, non cloné. Comment feriez vous ?


---------------
Le site de ma maman
n°205502
Cherrytree
cn=?
Posté le 30-08-2002 à 11:56:09  profilanswer
 

Dans chaque Solver, il y a autant d'objet Data dans le tableau Data[] que d'objet Task dans TaskList. Le nombre d'objets Solver est indépendant de tout ça, mais il y en aura beaucoup.


---------------
Le site de ma maman
n°205525
darklord
You're welcome
Posté le 30-08-2002 à 12:25:09  profilanswer
 

je suis désolé je comprends rien.


---------------
Just because you feel good does not make you right
n°205535
--greg--
Posté le 30-08-2002 à 12:46:10  profilanswer
 

cherrytree tu me pretes ton penpad stp?
(c bien ça que tu voulais montrer nan? :o)
 
([:blueflag] btw)


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Clonage d'objets RESOLU

 

Sujets relatifs
[C++] Comment recuperer un fichier en local par http?? [RESOLU]<DIV> : problème de position absolue et relative [résolu]
[C++ BUILDER]Utilisation de TImage [RESOLU][résolu][poo/c++] héritage, constructeur et destructeurs
[Java] Remplacer un string par un string (Résolu)[resolu][builder] evenement onmousexxx && fenetre opengl
[PHP] besoin d'aide pour faire tout en un seul fichier... [RESOLU][JS] trouve pas de titre, problmes de syntax?[resolu]
JscrollPane contenant un JTextArea et défilement automatique [Resolu][C/C++] Supprimer un répertoire (ou le vider) [Resolu]
Plus de sujets relatifs à : Clonage d'objets RESOLU


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR