Accueil
 Sommaire du cours
 1  Introduction à Java
 2  Concepts de bases de Java
 3  Classes et objets en Java
 4  Généralisation spécialisation en Java
 5  Organisation des sources Java
 6  API Java
 7  Exceptions en Java
 8  Concepts objets avancés en Java
 8.1  Copie simple/légère
 8.1.1  Copie pour studs
 8.1.2  Représentation graphique d'une copie légère dans studs
 8.1.3  Exemple de copie légère
 8.1.4  Représentation graphique d'une copie plus profonde dans studs
 8.1.5  Copie plus profonde dans studs
 8.1.6  Représentation graphique d'une copie profonde
 8.1.7  Clone de Scrutin
 8.1.8  Clone en copie profonde de Personne
 8.1.9  Suite exemple de copie profonde
 8.2  Retour sur \texttt hashCode()
 8.3  Retour sur les exceptions
 Bibliographie

 Contacts

W3C validator

Département INF  
 Conception et programmation orientées objet


8.1.3 Exemple de copie légère
 
1package studsclonelight; 
import java.util.ArrayList; 
import studs.Bulletin; 
public class Personne implements Cloneable { 
5    private String nom, prenom; 
    private int nbParticipations = 0, nbOrg = 0; 
    private ArrayList<Scrutin> scrutins ; 
    public Personne(String nom, String prenom){ 
9        this.nom = nom; this.prenom = prenom; scrutins = new ArrayList<Scrutin>(); } 
    public Scrutin organiserScrutin(String nom) { 
        scrutins.add(new Scrutin(nom,this)); return scrutins.get(nbOrg++); } 
    @Override 
13    public Personne clone() throws CloneNotSupportedException { 
        return (Personne) super.clone(); 
    } 
    public String getNom(){return nom;} 
17    public String getPrenom(){return prenom;} 
    public ArrayList<Scrutin> getScrutins(){return scrutins;} 
    public void voter(Bulletin b){ } 
    public void consulterResultat(Scrutin s) { } 
21    public void seRetirerDUnScrutin(Scrutin s) { } 
}
 
import java.util.ArrayList; 
2import studsclonelight.Scrutin; 
import studsclonelight.Personne; 
public class TestCloneLight { 
    public static void main(final String[] args) 
6            throws CloneNotSupportedException { 
        Personne p = new Personne("Dupont", "Julien"); 
        p.organiserScrutin("Electionbde"); 
        Personne p1 = p.clone(); 
10        if (p1 == p) { 
            System.out.println("p==p1"); 
        } 
        if (p.getNom() == p1.getNom()) { 
14            System.out.println("petp1noms=="); 
        } 
        if (p.getPrenom() == p1.getPrenom()) { 
            System.out.println("petp1prenoms=="); 
18        } 
        ArrayList<Scrutin> a1, a2; 
        a1 = p.getScrutins(); 
        a2 = p1.getScrutins(); 
22        if (a1 == a2) { 
            System.out.println("petp1scrutins=="); 
        } else { 
            for(int i = 0; i < a1.size(); i++){ 
26                if(a1.get(i) == a2.get(i)){ 
                    System.out.println("Scrutinderang" + i +"=="); 
                } 
            } 
30        } 
    } 
}

 
verbatim

    précédent     suivant 


Dans cet exemple, la classe Personne implémente l’interface Clonable en réalisant le clonage par l’utilisation de la méthode clone héritée de la classe Object. L’objet obtenu est bien distinct de l’objet initial. Par contre, les objets référencés par les deux objets, à savoir le nom, le prénom et le tableau de Scrutin n’ont pas été dupliqués et donc ils sont partagés par les deux objets de type Personne.

Christian Bac, Denis Conan, Télécom SudParis, CSC 4002, Octobre 2015