Le catalogue des remaniements
Les remaniements usuels du catalogue de Fowler et le signe que chacun soigne : extraire, renommer, déplacer, introduire un objet paramètre, remplacer une conditionnelle par du polymorphisme.
- 33 cartes
- 5 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
- Comprendre
Quelques cartes du deck
Remaniement : de quoi s'agit-il ?
Voir la réponse
Transformation de la structure d'un code qui en améliore la lisibilité ou la conception sans changer son comportement observable.
Ajouter une fonctionnalité ou corriger un bogue n'en est pas un : le comportement change. Un remaniement se fait en petits pas, tests au vert avant et après.
Cette extraction a changé le comportement :
total(10, 10)renvoyait 90.0 avant et renvoie maintenant 100.0. Pourquoi ?
```java
static void remise(double t, int qte) {
if (qte >= 10) t = t - 10;
}
static double total(double prix, int qte) {
double t = prix * qte;
remise(t, qte);
return t;
}`- La méthode reçoit une copie de t : sa modification n'atteint pas la variable de l'appelant
- Le compilateur supprime l'appel remise(t, qte), puisque la méthode ne renvoie rien
- La méthode extraite évalue qte >= 10 avant que t soit calculé dans total
- Le t de remise est un nouveau champ de la classe, que total ne lit pas
Voir la réponse
La méthode reçoit une copie de t : sa modification n'atteint pas la variable de l'appelant
En Java, un
doubleest passé par valeur. Le bloc modifiaitt: la méthode extraite doit donc renvoyer le nouveau total (t = remise(t, qte);). Les deux sorties réelles : 90.0 puis 100.0.Un remaniement change la … d'un code sans changer son comportement ….
Voir la réponse
Un remaniement change la structure d'un code sans changer son comportement observable.
C'est ce qui permet de le vérifier : les mêmes tests doivent passer avant et après.
Extraire une méthode : de quoi s'agit-il ?
Voir la réponse
Remaniement qui isole un bloc d'instructions dans une nouvelle fonction nommée d'après son intention et appelée à la place du bloc.
Il soigne la méthode longue et le code dupliqué. Les variables lues par le bloc deviennent des paramètres ; celle qu'il modifie devient la valeur renvoyée.
Une méthode de 80 lignes contient quatre blocs précédés des commentaires « calcul de la remise », « calcul des frais de port », « total » et « mise en forme ». Que faire ?
- Garder le bloc tel quel et ajouter un commentaire de plus pour chaque ligne
- Remplacer les quatre commentaires par un seul en tête de méthode
- Déplacer la méthode entière dans une autre classe sans la découper
- Extraire chaque bloc dans une méthode dont le nom reprend son commentaire
Voir la réponse
Extraire chaque bloc dans une méthode dont le nom reprend son commentaire
Le commentaire annonce déjà l'intention : en faire le nom d'une méthode rend le commentaire inutile et chaque étape testable. La méthode d'origine ne fait plus qu'enchaîner quatre appels.