Copie superficielle et copie profonde en JAVA

Copie superficielle et copie profonde en JAVA - Java - Programmation

Marsh Posté le 01-09-2008 à 00:19:53    

Bonjour :)
 
Je souhaiterais vous faire part de deux exemples de codes-sources, l'un pour illustrer la copie superficielle, et l'autre la copie profonde, afin que vous puissiez me dire si j'ai bien compris le principe. Ces deux exemples sont dérivés du livre JAVA de Claude Delanoy. Merci :jap:
 
Exemple de la copie superficielle :
 

Code :
  1. public class Point
  2. {
  3.    // Constructeur
  4.    public Point(int abs, int ord, Zozo var)
  5.    {
  6.       x = abs;
  7.       y = ord;
  8.       // Question subsidiaire :
  9.       // C'est bien comme ça qu'on s'y prend lorsqu'on code le constructeur d'une classe comportant un champ de type Classe ?
  10.       z = var;
  11.    }
  12.    // Méthode de copie superficielle
  13.    public Point copie()
  14.    {
  15.       Point p = new Point(x, y, z);              // Seule cette ligne est nécessaire selon moi
  16.       p.x = x;                                   // Pour moi cette ligne est inutile, pouvez-vous me le confirmer ?
  17.       p.y = y;                                   // Pour moi cette ligne est inutile, pouvez-vous me le confirmer ?
  18.       p.z = z;                                   // Pour moi cette ligne est inutile, pouvez-vous me le confirmer ?
  19.       return p;                                  // On retourne la copie superficielle de type classe Point
  20.    }
  21.    // Champs
  22.    private int x;
  23.    private int y;
  24.    private Zozo z;
  25. }


 
 
Exemple de la copie profonde :
 

Code :
  1. public class Point
  2. {
  3.    // Constructeur
  4.    public Point(int abs, int ord, Zozo var)
  5.    {
  6.       x = abs;
  7.       y = ord;
  8.       // Question subsidiaire :
  9.       // C'est bien comme ça qu'on s'y prend lorsqu'on code le constructeur d'une classe comportant un champ de type Classe ?
  10.       z = var;
  11.    }
  12.    // Méthode de copie profonde
  13.    public Point copie()
  14.    {
  15.       Zozo bidule = z;
  16.       Point p = new Point(x, y, bidule);   
  17.       return p;                                  // On retourne la copie profonde de type classe Point
  18.    }
  19.    // Champs
  20.    private int x;
  21.    private int y;
  22.    private Zozo z;
  23. }


Message édité par Profil supprimé le 01-09-2008 à 00:22:42
Reply

Marsh Posté le 01-09-2008 à 00:19:53   

Reply

Marsh Posté le 01-09-2008 à 00:24:44    

Non c'est pas ça, z n'est pas cloné.
Et en effet les lignes sont inutiles

Reply

Marsh Posté le 01-09-2008 à 00:33:26    

Qu'est-ce qui ne va pas ? Le constructeur ? La copie superficielle ? La copie profonde ? Merci :)

Reply

Marsh Posté le 01-09-2008 à 09:17:50    

Code :
  1. Zozo bidule = z;
  2. Point p = new Point(x, y, bidule);

.
 
Ça ne fait pas une copie profonde, ta variable bidule ne fait que contenir une référence à z.
 
Pour faire une copie profonde, il faut que tu créé une nouvelle instance de Zozo à partir de z.

Reply

Marsh Posté le 01-09-2008 à 16:00:19    

Je suis désolé mais je ne comprends toujours pas. Auriez-vous d'autres exemples de copie superficielle et profonde en JAVA ? Sur un topic quelconque ?? Encore merci :)

Reply

Marsh Posté le 01-09-2008 à 16:05:07    

Code :
  1. Zozo bidule;
  2. bidule = new Zozo(z);
  3. // ou bien
  4. bidule = z.copie(); // pour garder la même logique  
  5. Point p = new Point(x, y, bidule);

Reply

Sujets relatifs:

Leave a Replay

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