Sort
Il s'agit d'écrire une application qui permette d'exécuter
un tri sur un jeu de données et de visualiser les différentes
actions de ce tri sur la sortie standard. On veut pouvoir faire cela de
façon la plus générique possible, c'est à dire
pouvoir passer facilement d'un algorithme de tri à un autre, ou
d'une implémentation de jeu de données à une autre.
L'interface Sort décrit un tri comme étant une classe
implémentant une méthode doSort(SortableData).
L'interface SortableData décrit une collection triable.
Une telle collection doit implémenter quatre méthodes
-
int length() qui renvoie le nombre de données à
trier,
-
Object access(int i) qui renvoie le ième objet de la collection,
-
int compare(int i, int j) qui compare les ième et
jème
objets de la collection et renvoie un entier négatif si le ième
objet est le plus petit, positif s'il est le plus grand et 0 si les deux
objets sont égaux,
-
void swap(int i, int j) qui échange les ième
et jème objets à l'intérieur de la collection
(par effet de bord).
QuickSort et InsertionSort sont deux implémentations
de Sort. Ce sont toutes les deux des singletons, puiqu'il n'y
a aucune raison de créer deux instances d'un même algorithme
de tri.
SortableArray est une implémentation de SortableData,
créée à partir d'un tableau. Le tableau passé
en paramètre du constructeur sera trié par l'application
de Sort.doSort(SortableData) au SortableArray obtenu.
SortableDataTracer et SortableDataStatistic sont
deux décorateurs de SortableData qui permettent respectivement
l'affichage des actions effectuées par le tri sur la sortie standard,
et le calcul de statistiques sur le tri (nombre d'accès, de comparaisons
et d'échanges).
Singleton et Décorateur sont deux exemples de schémas
de programmation, c'est à dire d'architectures de classes souvent
utilisées car résolvant un problème classique. Un
singleton est une classe dont une seule instance est nécessaire.
Un décorateur est une classe qui sert à rajouter des fonctionnalités
à une autre classe.