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. Elle utilise des
lambda-expressions.
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é.