[Précédent]
[Index] | [Enoncé] | [Version imprimable]
[Prochain]

9.8
  Analyse de programme - Corrigé
Niveau 1
 
 
Fichiers:
  Polymorph.java    

Les constructeurs (constructeurs de copie compris) ne sont pas polymorphiques. Le programme mettra
donc dans la collection des copies d’objets de type Forme et non pas des copies des objets contenus dans
tabForm. Le programme affichera donc:

Une forme rouge
Une forme jaune

Pour corriger le programme, il faut utiliser des méthodes de copie polymorphiques. Ce sont les méthodes
clone dans le code corrigé suivant :

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
class Polymorph{ 

    public static void main(String[] args){

        Forme[] tabFormes = {new Cercle("rouge"),
                new Triangle("jaune")
        };

        Collect formes = new Collect(10);

        // Une collection de formes
        // contenant une copie des objets definis
        // dans le tableau tabFormes
        for (int i = 0; i < tabFormes.length; ++i)
            formes.add(tabFormes[i].clone());
        formes.dessine();
    }
}



class Forme {

    private String couleur;

    public Forme(String uneCouleur) {
        couleur = uneCouleur;
    }

    public Forme clone() {
        return new Forme(this);
    }

    public Forme(Forme other) {
        this.couleur = other.couleur;
    }
    public void dessine(){
        System.out.println("Une forme " + couleur);
    }
}



class Triangle extends Forme {

    public Triangle(String uneCouleur){
        super(uneCouleur);
    }

    public Triangle(Triangle autreTriangle){
        super(autreTriangle);
    }

    public Triangle clone(){
        return new Triangle(this);
    }

    public void dessine(){
        super.dessine();
        System.out.println("toute pointue");
    }
}

class Cercle extends Forme{

    public Cercle(String uneCouleur){
        super(uneCouleur);
    }

    public Cercle(Cercle autreCercle){
        super(autreCercle);
    }
    
    public Cercle clone(){
        return new Cercle(this);
    }
    
    

    public void dessine(){
        super.dessine();
        System.out.println("toute ronde");
    }
}


class Collect{

    private Forme collect[];

    private int index;

    public Collect(int indexMax){
        collect = new Forme[indexMax];
        index = -1;
    }

    public void add(Forme a){
        if (index < collect.length - 1){
            ++ index;
            collect[index] = a;
        }

    }
    public void dessine(){
        for (int i = 0; i <= index; ++i){
            collect[i].dessine();
        }
    }
}

 


[Précédent]
[Index] | [Enoncé] | [Version imprimable]
[Prochain]