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

9.8
  Analyse de programme - Enoncé
Niveau 1
 
 
But:
  Analyser et corriger un programme orienté-objet    
Thème:
  polymorphisme, clone    
Fichiers:
  Polymorph.java    

Un programmeur amateur produit le code suivant pour tester ses connaissances en POO :

  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
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(new Forme(tabFormes[i]));
            formes.dessine();
        }
}
                          


class Forme
{
    private String couleur;

    public Forme(String uneCouleur)
        {
            couleur = uneCouleur;
        }
    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 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 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();
        }
}

Il s’attend à ce que son programme produise l’affichage suivant :

Une forme rouge
toute ronde
Une forme jaune
toute pointue
Questions:

  1. Expliquez pourquoi ce programme principal ne fait pas réellement ce qu’il veut.
  2. Qu’affiche-t-il ?
  3. Corrigez ce programme de sorte à ce qu’il fasse ce que le programmeur voulait à l’origine. Vous
    donnerez le code Java de tout élément ajouté en précisant à quelle classe il appartient et
    indiquerez les éventuelles modifications à apporter à la méthode main.

Les contraintes à respecter sont les suivantes :

 


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