Exercice n° 2 : Première vision Objet des Expressions entières.

Thèmes : plusieurs classes , classe abstraite , graphe d'héritage (UML) , Pattern Composite


Dans la syntaxe abstraite :
1. catégories syntaxiques :
e,e1,e2Exp
o {+ | - | * | /}
n Entier

2. définition :

e ::= n | e1 o e2

n est du type Entier mais la définition le montre comme 'un genre d'expression'.

La distinction de deux genres d'expression va permettre de ne plus avoir des expressions et des valeurs mélées dans les déclarations...

On obtient le schéma suivant :  

Remarques :

  • Les seuls objets concrêts "manipulables" sont des expressions simples ou des expressions composées.
  • Donc, la classe Expression "générale ne doit pas être instanciable :  elle sera 'abstract'.
  • Des méthodes eval() et toString() sont implémentables seulement dans les classes ExprSimple et ExprComposee.
    Elles seront déclarées abstract et leurs corps ne sera pas défini.
  • e1 et e2 sont bien des expressions au sens général...

Ce schéma de construction d'une structure de données arborescentes avec différents type de noeuds possibles est

le pattern COMPOSITE  (cf. GoF95)


Question  1 :  Donner une implantation de ces classes

Question 2 :  Donner le programme de test modifié.


/* une idée...


Quelques conclusions :

+

-

  • les variables incompatibles sont déclarées dans des classes différentes.
  • 'abstract' permet d'imposer aux feuilles l'implantation de certaines méthodes
  • l'écriture des méthodes est simplifiées : on implante seulement pour un cas précis
  • le nombre de classes i.e. le nombre de fichiers augmente
  • l'écriture des méthodes dans ExprComposee est encore complexe.