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

  FORUM HardWare.fr
  Programmation
  Java

  philosophie constructeur par recopie / clone

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

philosophie constructeur par recopie / clone

n°304685
Taz
bisounours-codeur
Posté le 08-02-2003 à 20:28:22  profilanswer
 

je suis entrain d'apprendre à bidouiller en Java, et je suis assez surpris, mais cela vient peut etre de mon expérience C++.
 
beaucoup de classes de l'API ne possède ni méthode clone ni constructeur par recopie: par contre, un constructeur admettant une string en param est la. bref pour recopier, c'est à la batarde new MonObjet(unObjet.toString())
 
je sais que les cas ou l'on a besoin de véritable copie ne sont pas forcément fréquents, mais je trouve que les mecs qui ont fait ça ont un peu fait les radins...

mood
Publicité
Posté le 08-02-2003 à 20:28:22  profilanswer
 

n°304691
HappyHarry
Posté le 08-02-2003 à 20:47:50  profilanswer
 

:heink:

n°304698
Taz
bisounours-codeur
Posté le 08-02-2003 à 21:04:04  profilanswer
 

ben je fais part de mon étonnement

n°304700
kadreg
profil: Utilisateur
Posté le 08-02-2003 à 21:06:15  profilanswer
 

exemple ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°304705
Taz
bisounours-codeur
Posté le 08-02-2003 à 21:15:27  profilanswer
 

j'en ai pas sous la main, je parcours l'API et y en a plein

n°304709
schnapsman​n
Zaford Beeblefect
Posté le 08-02-2003 à 21:44:16  profilanswer
 

++Taz a écrit :

j'en ai pas sous la main, je parcours l'API et y en a plein


 
j'te parle même pas de certainnes classes de l'API java qui n'implémentent pas l'interface serializable, une honte mon bon monsieur [:tinostar]
 
 
exemple les classes de java.awt.geom; par contre elles implémentent cloneable  [:boidleau]


Message édité par schnapsmann le 08-02-2003 à 21:54:28

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°304730
krosso
j'suis à la bourre
Posté le 08-02-2003 à 22:36:26  profilanswer
 

Bin et Object.clone() alors ?

n°304735
schnapsman​n
Zaford Beeblefect
Posté le 08-02-2003 à 22:45:20  profilanswer
 

krosso a écrit :

Bin et Object.clone() alors ?


 

Code :
  1. public interface Cloneable
  2. A class implements the Cloneable interface to indicate to the Object.clone() method that it is legal for that method to make a field-for-field copy of instances of that class.
  3. Invoking Object's clone method on an instance that does not implement the Cloneable interface results in the exception CloneNotSupportedException being thrown.


Message édité par schnapsmann le 08-02-2003 à 22:45:39

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°304737
krosso
j'suis à la bourre
Posté le 08-02-2003 à 22:49:54  profilanswer
 

En effet...
 

n°304858
benou
Posté le 09-02-2003 à 15:25:49  profilanswer
 

++Taz a écrit ca pour faire un clone :

new MonObjet(unObjet.toString())


[:serial coder]

mood
Publicité
Posté le 09-02-2003 à 15:25:49  profilanswer
 

n°305122
darklord
You're welcome
Posté le 09-02-2003 à 22:03:02  profilanswer
 


 
 
+1 [:totoz]


---------------
Just because you feel good does not make you right
n°305194
schnapsman​n
Zaford Beeblefect
Posté le 10-02-2003 à 00:11:26  profilanswer
 


 
*2  [:794]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°305214
Cherrytree
cn=?
Posté le 10-02-2003 à 07:23:40  profilanswer
 

SchnapsMann a écrit :


 

Code :
  1. public interface Cloneable
  2. A class implements the Cloneable interface to indicate to the Object.clone() method that it is legal for that method to make a field-for-field copy of instances of that class.
  3. Invoking Object's clone method on an instance that does not implement the Cloneable interface results in the exception CloneNotSupportedException being thrown.




 
Ben oui ! C'est normal. Qu'est ce qui choque là dedans ?


---------------
Le site de ma maman
n°305255
darklord
You're welcome
Posté le 10-02-2003 à 09:54:10  profilanswer
 

Cherrytree a écrit :


 
Ben oui ! C'est normal. Qu'est ce qui choque là dedans ?


 
on aurait pu imaginer que la JVM soit capable de cloner une instance d'un objet dont il a la classe mais ca n'est pas si évident qu'il n'y parait c'est tout ...
 
Voir C++


---------------
Just because you feel good does not make you right
n°305288
BifaceMcLe​OD
The HighGlandeur
Posté le 10-02-2003 à 10:36:47  profilanswer
 

Techniquement, la JVM pourrait faire cela, mais les concepteurs de Java ont choisi de permettre au programmeur d'interdire la fabrication d'un clone. Il y a des fois, où, en effet, cloner un objet n'a pas de sens : lorsqu'il s'agit d'une ressource critique du monde extérieur, ou que l'objet est un thread, par exemple.
 
++Taz> "new MonObjet(unObjet.toString())" ne clone pas un objet, car on n'a jamais la garantit que la représentation de l'objet que renvoie toString() décrit bien tout l'objet. "tostring()" est généralement utilisé pour afficher des traces de debug, ou une présentation possible de l'objet, lisible pour un humain. Ce qui signifie au passage que pour faire ce que tu dis (un constructeur qui attend en argument la représentation chaîne de l'objet), il faudrait développer un interpréteur pour cette représentation...  :ouch:
Ce n'est pas un peu lourd pour si peu ?  :sarcastic:  
 
Autre remarque : exemples de classe qui a un constructeur qui attend un seul argument de type String :

java.awt.Button(String label)  
          Constructs a Button with the specified label.
 
java.lang.Thread(String name)  
          Allocates a new Thread object.
 
java.io.FileInputStream(String name)  
          Creates a FileInputStream by opening a connection to an actual file, the file named by the path name name in the file system.
 
java.text.MessageFormat(String pattern)  
          Constructs a MessageFormat for the default locale and the specified pattern.
 


Comme tu peux le constater, aucun de ces constructeurs ne clone d'objet... La plupart des classes de l'API n'ont d'ailleurs pas de tel constructeur.
Il y a bien quelques exceptions, comme le constructeur de java.util.Date, mais ce dernier a été déprécié il y a déjà plusieurs années au profit d'une méthode statique au nom plus évocateur (Date.parseString()).


Message édité par BifaceMcLeOD le 10-02-2003 à 10:47:09
n°305309
El_gringo
Posté le 10-02-2003 à 11:01:03  profilanswer
 

DarkLord a écrit :


 
on aurait pu imaginer que la JVM soit capable de cloner une instance d'un objet dont il a la classe mais ca n'est pas si évident qu'il n'y parait c'est tout ...
 
Voir C++


 
Il ne critiquait pas le comportement de la JVM. Il disait que les concepteur de l'API Java auraient pu prévoir la copie de leurs classes (leur faire implémenter l'interface "Clonable" quoi).

n°305719
schnapsman​n
Zaford Beeblefect
Posté le 10-02-2003 à 20:10:23  profilanswer
 

El_gringo a écrit :


 
Il ne critiquait pas le comportement de la JVM. Il disait que les concepteur de l'API Java auraient pu prévoir la copie de leurs classes (leur faire implémenter l'interface "Clonable" quoi).


 
beaucoup l'implémentent mais pas toutes, et parfois sans raison valables hormis la fénéantise des concepteurs; sur ce coup là l'API java c'est un peu la fête du slip :whistle:


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°307223
nraynaud
lol
Posté le 12-02-2003 à 02:01:07  profilanswer
 

++Taz a écrit :

je suis entrain d'apprendre à bidouiller en Java, et je suis assez surpris, mais cela vient peut etre de mon expérience C++.
 
beaucoup de classes de l'API ne possède ni méthode clone ni constructeur par recopie: par contre, un constructeur admettant une string en param est la. bref pour recopier, c'est à la batarde new MonObjet(unObjet.toString())
 
je sais que les cas ou l'on a besoin de véritable copie ne sont pas forcément fréquents, mais je trouve que les mecs qui ont fait ça ont un peu fait les radins...


 
C'est plutôt à toi de cloner et pas à eux non ? donne des exemples, je vois pas ce que tu veux cloner. N'oublie pas que le GC te permet d'éviter le copie profonde dans beaucoup de cas si tu viens du C++. C'est pas à eux de dire que telle classe qui est dans une bibliothèque est cloneable ou pas, c'est à toi de savoir si tu l'utilises en flyweight, en singleton, en handler de ressource externe ou en truc cloneable.

n°307238
Taz
bisounours-codeur
Posté le 12-02-2003 à 07:14:04  profilanswer
 

évidemment j'ai un peux de mal à m'adapater, mais des fois j'ai besoin d'avoir des vrais copies profondes, et là si rien n'est prévu...

n°307241
nraynaud
lol
Posté le 12-02-2003 à 08:03:41  profilanswer
 

++Taz a écrit :

évidemment j'ai un peux de mal à m'adapater, mais des fois j'ai besoin d'avoir des vrais copies profondes, et là si rien n'est prévu...


J'aimerais vraiment que tu files 1 ou 2 exemples, pour pouvoir me faire une idée, en gros, j'ai jamais eu le problème (mon problème en général, c'est plutôt de me démerder pour planquer les constructeurs afin que personne ne fasse de copie) mais je n'ai pas de cas en tête où c'est nécessaire et absent.
 
Concernant la copie profonde, c'est à toi de te démerder, à cause des cycles dans le graphe d'agrégation, ils auraient pu mettre un détecteur de cycles mais bon, le développeur sait mieux la tronche de son graphe que le concepteur du langage.
 
Quel type d'interface aurais-tu souhaité pour la copie ?

n°307666
duchzeworl​d
Posté le 12-02-2003 à 16:52:22  profilanswer
 

++Taz a écrit :

je suis entrain d'apprendre à bidouiller en Java, et je suis assez surpris, mais cela vient peut etre de mon expérience C++.
 
beaucoup de classes de l'API ne possède ni méthode clone ni constructeur par recopie: par contre, un constructeur admettant une string en param est la. bref pour recopier, c'est à la batarde new MonObjet(unObjet.toString())
 
je sais que les cas ou l'on a besoin de véritable copie ne sont pas forcément fréquents, mais je trouve que les mecs qui ont fait ça ont un peu fait les radins...


 
Si je me rappelle bien de mes lectures à propos du C++, le constructeur de copie est nécessaire pour pouvoir passer les paramètres par valeur aux différentes fonctions. Comme en Java, ces passages se font par référence, il n'est pas nécessaire que tous les objets implémentent la méthode clone(). Le choix est donc laissé au développeur d'implémenter ou non clonable avec une copie profonde ou non.

mood
Publicité
Posté le   profilanswer
 


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

  philosophie constructeur par recopie / clone

 

Sujets relatifs
philosophie evenementconstructeur de copie de base
constructeur d'une classe dérivée[php] surcharger un constructeur
[résolu][poo/c++] héritage, constructeur et destructeurs[java] peut on passer un tableau en argument d'un constructeur ?
info constructeurproblème de constructeur sous vc
[c++] constructeur / destructeur[philosophie] les forums php/Js ...
Plus de sujets relatifs à : philosophie constructeur par recopie / clone


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