Sort
- Cette version est basée sur une classe InsertionSort, permettant
de trier un tableau d'objets. La fonction de comparaison est
paramétrée à l'aide d'une poignée. La
classe de test TestSort montre comment
utiliser le tri. A noter que la classe héritière d'InsertionSort est une classe interne anonyme.
- Dans cette version, InsertionSort trie des
tableaux d'objets implémentant une interface Comparable. Les classes TestSort et ComparableInt permettent de
voir comment utiliser cette version.
- Dans cette version, on utilise l'interface
générique java.lang.Comparable. La
classe InsertionSort a donc
été adaptée, ainsi que TestSort.
- On dispose dans cette version d'une nouvelle classe de tri QuickSort. Une interface Sort pour permettre l'usage
indifférencié d'un tri a donc été
créée et InsertionSort
modifiée pour implémenter cette interface. TestSort est
également modifiée.
- Cette version rajoute une interface SortableData, typant des
données triables. Deux implémentations sont
proposées : SortableArray et SortableList qui adaptent
les tableaux et les instances de List
contenant des objets comparables à SortableData et partagent
du code grâce à la classe abstraite SortableComparableData. Les
classes Sort, QuickSort, InsertionSort, et TestSort sont
modifiées pour utiliser des SortableData (voir le diagramme
UML).
- Cette version permet de modifier l'ordre d'un tri ou plus
généralement de rajouter une fonction de comparaison
à des objets au départ non comparables. Elle est
basée sur la classe java.util.Comparator.
Les classes Sort, InsertionSort et QuickSort restent
inchangées.
Par contre, l'architecture autour de SortableData est
profondément modifée (voir le diagramme UML). On trouve maintenant les
interfaces IndexedData,
ComparableData, SwapableData, les classes SwapableArray et SwapableList, la classe
abstraite ComparableSwapableData, et les deux classes SortableComparableData et SortableDataWithComparator.
La classe Comparators permet de
combiner deux Comparator
de façon lexicographique, d'inverser un Comparator, et de
disposer d'un comparateur à partir de données comparables.
La classe TestLexicographic et People permettent de trier
des personnes à partir de leur nom et de leur prénom.
- Cette version rajoute une
fonctionnalité de traçage du tri (affiche sur stdout les
comparaisons et les échanges) et une fonctionnalité de
statistique (compte les comparaisons et les échanges)
grâce aux décorateurs SortableDataWithTracer et SortableDataWithStatistics
(voir le diagramme UML). Le code de ces deux
classes est factorisé dans une classe abstraite et non publique SortableDataDelegation. La
classe de test TestSort est
également modifiée.
- Cette version facilite l'utilisation du
module à un client, grâce
à une façade Sorts (par exemple, si
celui-ci veut juste faire un tri rapide sur un tableau sans
avoir à comprendre des classes comme SortableData). TestSort est
également modifiée.
- Cette version fournit une classe ObservableSortableData qui
décore SortableData
en rendant les instances observables. Cette version est basée
sur le modèle Observateur/Observable, qui est
implémenté dans l'API Java par les classes java.util.Observable et java.util.Observer. On
notera que cette décoration ne peut utiliser la classe SortableDataDelegation en
raison de l'héridtage de java.util.Observable.
L'absence d'une interface correspondante rend la
délégation inutilisable dans ce cas. Deux classes
d'observateurs sont proposées : une traçant le tri sur la
sortie standard, AsciiTracer l'autre dans
une fenêtre graphique WinTracer. TestSort est
également modifiée.
On notera l'usage d'une classe interne publique dans ObservableSortableData, la
classe ObservableSortableData.Operation.
- Cette version permet le chargement dynamique d'un tri. Le nom du
tri à charger est passé comme premier argument du
main
.
Seule la classe TestSort a
été modifiée.
- Cette version permet la visualisation dans une fenêtre
graphique de plusieurs algorithmes de tri en parallèles sur les
mêmes données. Un sous-paquetage sort.trace a été
créé de façon à séparer les aspects
"visualisation". On y retrouve la classe AsciiTracer,
inchangée à l'exception du changement de paquetage
ainsi que la classe WinTracer qui n'est plus
qu'un JPanel (composant graphique) et non une JFrame (fenêtre
autonome). Ce sous-paquetage comprend également la classe MultipleWinTracer qui
regroupe les panneaux des différents tris, ainsi que le curseur,
et gère les processus légers dans lesquels les tris sont
éxecutés. La classe TestSort a également
été modifiée. Le reste est inchangé.