TD de Programmation autour d'un design pattern : le visiteur

1. Préambule

Dans ce TP, nous allons devoir modifier tous nos composants afin qu'ils puissent accepter le traitement par un visiteur (présenté ci-dessous). Nous souhaitons aussi préparer la suite, le dessin, l'ajout et la suppression dynamiques de composants, ce qui va nous demander de doter les composants de coordonnées, de dimensions et de propriétés. Etant donné l'importance des ajouts et le peu de code récupérable de la version initiale des composants, nous allons réécrire tous les composants.

Récupérez l'archive Visiteurs.zip contenant les fichiers à ajouter à la dernière version de notre casse brique. Vous pouvez constater que désormais :

Si vous utilisez Eclipse, c'est maintenant l'occasion d'apprendre à mettre en place un projet correspondant au casse briques en construction :

Vous pouvez alors cliquer sur l'étape souhaitée et l'exécuter.

2. Visiteur

Définition

Le visiteur est une abstraction d'opération à appliquer de manière spécialisée à tous les objets d'une structure de données.

Particularités Motivation détaillée pour notre casse brique

Nous avons maintenant des ensembles génériques qui vont nous servir à stocker des ensembles d'objets de la classe Composant que nous pouvons parcourir facilement grâce à nos itérateurs. Justement, nous allons être amené à parcourir nos objets de multiples fois afin de réaliser les différents traitements requis par notre jeu, pour :

Une solution pour réaliser ces parcours serait de les écrire, chacun dans une méthode distincte, et d'implémenter le traitement correspondant dans des méthodes de nos composants appelées lors de ces parcours. Les problèmes posés par ce genre d'approche sont les suivants :

Une autre solution est d'utiliser une interface permettant de transmettre une opération à utiliser lors du parcours. Cette opération ne fait pas partie du composant et peut être spécialisée pour chaque type de composant. Tout ce que le composant a besoin de faire est d'implémenter une méthode permettant d'accepter cette opération et d'appeler cette opération sur lui même (la bonne variante, dépendant de son type). Cette manière de faire correspond au design pattern appelé visiteur. Le visiteur est l'objet qui implémente l'opération. Les avantages sont alors les suivants :

Exercices

Commencez par étudier le code fourni. En particulier :

Ecrivez tous les visiteurs manquants :