Sort

  1. 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.
  2. 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.
  3. Dans cette version, on utilise l'interface générique java.lang.Comparable. La classe InsertionSort a donc été adaptée, ainsi que TestSort.
  4. 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.
  5. 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).
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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é.