Julien Sopena

TP 03 – Classes abstraites et polymorphisme

Le but de ce TP est de mettre en pratique la notion de classe abstraite et de mesurer l'intérêt du polymorphisme. L'exemple choisi est celui d'un arbre arithmétique.

Exercice 1: Rappels sur les arbres arithmétiques

Un arbre arithmétique est une représentation d'une équation basée sur un arbre binaire dont les feuilles sont étiquetées par des nombres et les autres nœuds par des opérateurs binaires. Le résultat de l'équation correspond à la valeur de la racine. Pour chaque opérateur, on calcule la valeur des opérations en appliquant l'opérateur sur les valeurs des sous arbres droit et gauche. Dans ce TP on ne considère que des nombres entiers et on se limitera aux opérations d'addition et de soustraction.

Question 1.1 )

Donner l'équation correspondant à l'arbre suivant.

Correction (cliquer ici)

Question 1.2 )

Évaluer la valeur de chacun des nœuds de l'arbre.

Correction (cliquer ici)

Question 1.3 )

En vous aidant de l'arbre, donner la notation préfixée et suffixée de l'équation correspondant à l'arbre.

Correction (cliquer ici)

Exercice 2: Implémentation d'un arbre arithmétique

Dans cet exercice nous allons implémenter un arbre arithmétique, c'est-à-dire un arbre binaire tel que :

  • les feuilles sont des entiers,
  • les autres nœuds sont des opérateurs d'arité 2.

Question 2.1 )

Pour commencer on veut écrire une classe générique Nœud qui servira de base à notre arbre. Cette classe pourra être dérivée en opérateurs ou en valeurs entières. Quels sont les attributs nécessaires à cette classe ?

Correction (cliquer ici)

Question 2.2 )

Ajouter à la classe Nœud une méthode évaluant la valeur du nœud.

Correction (cliquer ici)

Question 2.3 )

Dériver la classe Nœud pour faire une classe Valeur correspondant aux feuilles de l'arbre arithmétique.

Correction (cliquer ici)

Question 2.4 )

Dériver la classe Nœud pour faire des classes Addition et Soustraction. Vous vous appuierez sur une classe intermédiaire Operateur.

Correction (cliquer ici)

Question 2.5 )

On veut maintenant implémenter un affichage préfixé de l'arbre. Oú doit-on ajouter la/les méthodes prefixe ?

Correction (cliquer ici)

Question 2.6 )

Ajouter, dans la/les bonnes classes, une méthode prefixe qui fait un affichage préfixe du contenu de l'arbre.

Correction (cliquer ici)

Question 2.7 )

Ajouter, dans la/les bonnes classes, une méthode suffixe qui fait un affichage suffixe du contenu de l'arbre.

Correction (cliquer ici)

Question 2.8 )

Ajouter, dans la/les bonnes classes, une méthode infixe qui fait un affichage infixe du contenu de l'arbre. Attention, cette notation nécessite l'ajout de parenthèses. Dans cette première version on ne cherchera pas à minimiser le nombre de parenthèses.

Correction (cliquer ici)

Question 2.9 )

On veut maintenant implémenter une nouvelle version de la méthode infixe pour effectuer un affichage infixe minimisant le nombre de parenthèses. Cette implémentation devra se faire dans deux nouvelles classes JolieAddition et JolieSoustraction.

Correction (cliquer ici)

Designed by OWSD.org. Valid CSS & XHTML
Ce site et l'ensemble de son contenu est mis à disposition sous un contrat Creative Commons.
Creative Commons License