Restructuration de code

1. Opérations de refactoring sur les champs

Les opérations de refactoring sont des opérations de transformation de code source, qui ne modifient pas leur comportement visible. Pour assurer que ces opérations préservent le comportement, leur application est limitée par des pré-conditions.

Par exemple, pour renommer une classe, on doit d’abord vérifier qu’aucune autre classe porte son nouveau nom, car dans le cas contraire, la transformation introduirait une erreur.

Diagramme de classes générique
Figure 1. Diagramme de classes générique

Énumérez les préconditions nécessaires à l’exécution des opérations de refactoring suivantes. Utilisez le diagramme de classes présenté précédemment comme base de réflexion. Supposez que les opérations s’appliquent à la classe Class B. Cette classe a une super-classe, Class A, deux sous-classes, Class C et Class D, et deux classes-sœurs, Class E et Class F.

Utilisez la sémantique du langage Java comme référence.

1.1. Ajout d’un champ d’instance à une classe

  • addInstanceField(c : Class, f: Field)

1.2. Ajout d’un champ statique à une classe

  • addStaticField(c: Class, f: Field)

1.3. Renommage d’un champ

  • rename(f: Field, name: String)

1.4. Suppression d’un champ

  • delete(c: Class, f: Field)

1.5. Transfert d’un champ à la classe mère

  • pullUp(c: Class, f: Field)

1.6. Transfert d’un champ aux classes filles

  • pushDown(c: Class, f: Field)

2. Opérations de refactoring sur les méthodes

2.1. Transfert d’une méthode à la classe mère

  • pullUpMethod(c: Class, m: Method)

2.2. Transfert d’une méthode aux classes filles

  • pushDownMethod(c: Class, m: Method)

2.3. Transfert d’une méthode à une autre classe

  • moveMethod(c: Class, m: Method, d: Class)