Ce projet correspond normalement à l’état dans lequel les classes ForwardCounter,
BackwardCounter devraient se trouver à la fin du TD précédent. Les élèves qui le souhaitent
peuvent reprendre leurs anciennes classes ForwardCounter, BackwardCounter en lieu et place
de celles définies dans ce projet.
Question n° 1 :
Nous souhaitons désormais modifier les compteurs en leur ajoutant une méthode virtuelle générique
« next » qui effectue une opération de comptage.
ForwardCounter implante une méthode « next » qui appelle la méthode « increment() »
BackwardCounter implante une méthode « next » qui appelle la méthode « decrement() ».
Question n° 2 :
Ecrire une fonction qui prendre comme paramètre une classe BaseCounter et qui fait appel à la
méthode « next » un certain nombre de fois.
Tester cette fonction avec des objets instances de ForwardCounter et BackwardCounter.
Question n° 3 :
Nous souhaitions modifier le comportement des compteurs. Actuellement, lorsque la valeur du
compteur de ForwardCounter atteint la valeur max, il recommence à compter à partir de la valeur
min.
Nous aimerions pouvoir rendre ce comportement « customizable ».
Pour ce faire, nous suggérons de modifier la méthode « increment() » de la manière suivante :
-. counter est plus petit que max alors incrémente counter.
-. counter est égal à max alors appelle une méthode virtuelle reachMaximum() qui décide ce qu’il
faut faire.
Modifier ForwardCounter afin d’implanter le comportement précédemment décrit.
Modifier de manière analogue BackwardCounter afin d’implanter le comportement précédemment
décrit (il s’agira de modifier la méthode decrement()).
Question n° 4 :
Dériver de la classe ForwardCounter une classe VerboseForwardCounter qui lorsque la
valeur maximale affiche un message avant de remettre la valeur du compteur à 0.
Vérifier son comportement.
2ième Partie : Ecriture d’algorithmes génériques
Dans la conclusion du cours, nous affirmons qu’un intérêt du polymorphisme, c’est de pouvoir écrire
un algorithme « générique », c’est à dire un algorithme qui pourra fonctionner pour des objets
représentant des données de plusieurs types.