Examen de Programmation Orientée Objet
IUP 2
Janvier 2002



Exercice

Le diagramme UML de la figure 1 spécifie un modèle d'arbres. Répondez aux questions suivantes :
  1. dessinez un arbre (pas trop gros) qui serait une instance possible de ce modèle,
  2. que pensez-vous de la méthode valeur() ?
  3. dans la classe Arbre quelles sont les méthodes qui sont de classe ou d'instance ?
  4. quelles sont les méthodes qui lèvent naturellement des exceptions ?
  5. donner le code Java correspondant à la classe Arbre,
  6. donner le code Java de la classe ArbreCompose,
  7. donner le code Java de la classe ArbreSimple,
  8. donner le code Java de la classe Entier
  9. on désire maintenant pouvoir savoir si un Entier est dans l'arbre. Que faut-il rajouter ?
  10. donner un code Java qui construit l'abre que vous avez donné en exemple.
  11. on désire modéliser des arbres de syntaxe abstraite (pouvant représenter des expressions arithmétiques comme 3+4*(1+5)). Modifiez le diagramme en conséquence.
Figure 1: Diagramme UML (Arbres).
\includegraphics[]{fig.eps}

Exercice

Soit le programme suivant :
class Un {
    private int a;
    public Un(int a) { this.a = a; }
    protected void f() { System.out.println("Un="+toString()); }
    public String toString() { return ""+a; }
}
class Deux extends Un {
    public int a;
    public Deux(int i,int j) { super(i); a = j; }
    public void f() { System.out.println("Deux="+toString()); }
    public String toString() {
        return "("+super.toString()+","+a+")";
    }
}
public class Test {
    public static void affiche(Un u) {
        System.out.println(u);
        u.f();
    }
    public static void main(String argv[]) {
        Un un = new Un(3);
        un.a = 1;
        Deux deux = new Deux(4,5);
        deux.a = 2;
        un.f();
        deux.f();
        affiche(un);
        affiche(deux);
        deux = (Deux)un;
        un = (Un)deux;
        un.f();
        affiche(un);
        deux = new Un(10);
    }
}
  1. quelles sont les instructions qui provoqueront une erreur de compilation et pourquoi ?
  2. quelles sont les instructions qui provoqueront une erreur à l'exécution et pourquoi ?
  3. on supposera que les erreurs auront été mises en commentaire. Quels seront les messages affichés à l'exécution ?


Jean-Baptiste Yunès