:: Enseignements :: Master :: M1 :: 2014-2015 :: Design Pattern ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Refactoring |
Le but de l'exercice suivant est de prendre un code existant et de le modifier.
Avant de le modifier, il est souvent intéressant de modifier le code
en introduisant un ou plusieurs design patterns qui vont nous aider à faire
évoluer le code dans un second temps.
On appelle l'étape qui consiste à modifier un code existant sans introduire
de nouvelles fonctionnalités mais uniquement à modifier un code existant pour
le rendre plus clair et plus facilement modifiable, une étape de
code refactoring.
Exercice 1 - Etre mis à l'index
Un de vos collègue a écrit un code permettant de creér un index
de mots présents dans un fichier qui enregistre pour chaque mot
la liste des occurences de celui-ci, sous la forme de couples,
numéro de ligne, numéro de colonne.
Le code a été livré avec un
main de test qui charge un fichier
(
la génèse) et construit un index des
mots puis affiche la liste des occurences du mot "light".
Index index = new Index(Paths.get("td6/genesis.txt"));
System.out.println(index.getOccurences("light"));
Le problème du code actuel et que l'index créé est gourmand en mémoire, par exemple,
même si il existe une seule occurence d'un mot, le programme va créer un ArrayList
pour stocker un seul objet Occurence.
Il est possible de simplifier la structure de données en stockant un tableau d'entier long (long[])
pour chaque mot, un entier long (donc sur 64bits) étant la contaténation du numéro de ligne
et du numéro de colonne chacun sur 32 bits.
Pour garder la même interface (au sens générique du terme) pour la recherche, la méthode getOccurences,
devra aussi retourner une liste d'Occurences qui sera créer à partir du tableau d'entiers long
(en décodant les 64 bits en 2 mots de 32 bits).
Comme cette nouvelle implantation est moins gourmande en mémoire mais plus gourmande en temps
processeur (il faut reconstruire la liste d'occurences à chaque appel de getOccurences),
on souhaite que les deux implantations de l'index co-existent, sous les noms "regular index" et "tiny index".
-
Quelles sont les problèmes manifestent du code actuel ?
-
Quelles sont les refactorings à appliquer et les design patterns à introduire
avant de créer la nouvelle implantation ?
Dessiner le diagramme UML correspondant à la nouvelle architecture.
-
Effectuer les rdifférents refactorings sur le code.
-
Maintenant que le code est "propre", ajouter le code de support du tiny index en plus du regular index.
t
Il n'y a pas de lecture pour préparer la scéance suivante par contre, c'est une bonne idée de relire tous les slides pour le TP noté !
© Université de Marne-la-Vallée