GLO-4002 - Site du cours 2023

Réusinage : Extraction d'interfaces

Contexte

Il arrivera que certains réusinages impliqueront plus de réflexion quant à la séparation des responsabilités. Dans ce genre de situations, nous aurons souvent recours à l'utilisation de différents patrons de conception qui fournissent un ensemble de bonnes pratiques et de concepts abstraits qui permettent aux développeurs de résoudre efficacement des problèmes courants en utilisant des approches éprouvées.

En orienté-objet (OO), ces patrons utiliseront plus souvent qu'autrement des mécanismes tels que les interfaces et les héritages.
Afin de rapidement introduire ces mécanismes dans du code existant, il vaut toujours mieux déléguer cette tâche à votre IDE.

En utilisant le raccourci ALT+1, vous pourrez basculer votre focus vers la fenêtre de projet. Ensuite, vous pourrez utiliser les flèches pour naviguer vers le fichier qui vous intéresse ou encore cliquer sur la petite cible qui vous apportera au fichier présentement ouvert. Il existe aussi un raccourci, ALT+F1,1, qui fera exactement le même travail en l'exécutant à partir du fichier en question.

Une fois dans la vue de projet et votre fichier sélectionné, à l'aide du raccourci CTRL+ALT+SHIFT+T, vous aurez accès au menu de réusinage.

Menu de réusinage

Dans ce menu, vous retrouverez plusieurs actions

  • (3) Extract Delegate...
    • Cette option vous permettra de créer une classe pour lui déléguer une ou plusieurs méthodes de la classe courante.
    • Cette nouvelle classe recevra en paramètre de construction la classe source pour accomplir son travail.
  • (4) Extract Interface...
  • (5) Extract Superclass...
    • Avec cette option, une classe parente sera créée avec les membres sélectionnés.
    • La classe source héritera automatiquement de cette nouvelle classe.

Si la différence entre Delegate et Interface vous semble abstraite, nous vous recommandons d'aller approfondir cette notion dans la sous-capsule destinée à cet effet.

Une fois votre interface ou classe parente créée, il suffira de naviguer jusqu'à cette dernière et d'ensuite utiliser le raccourci d'actions contextuelles ALT+ENTER pour implémenter l'interface ou créer une sous-classe respectivement.

Il ne reste plus qu'à mettre le tout en pratique.

Rappel : Gardez en tête que les capsules visent à vous rendre efficace avec les réusinages et qu'elles sont cumulatives. Les notions montrées dans une capsule précédente pourraient vous être utiles dans les subséquentes. Efforcez-vous aussi à mettre en pratique les raccourcis clavier. Ceux-ci feront la différence sur le long terme dans votre facilité à naviguer et modifier le code au volume.

Exercices

Pour cet exercice, utilisez le dépôt github officiel-refactoring-extract-interface.

  1. Sans modifier la classe de test CARTTest et sans briser le comportement actuel de la classe CART, réusiner le code en créant au moins une relation d'héritage et une interface. Assurez-vous que le résultat réponde aux standards de propreté du code.

Sommaire

  • Il est primordial d'avoir une bonne connaissance des patrons de conceptions.
  • La majorité des patrons de conception OO reposent sur l'utilisation d'interfaces et d'héritages.
  • Raccourcis :
    • ATL+1 : basculer vers la vue projet
    • ALT+F1,1 : basculer vers la vue projet à l'endroit du fichier présent
    • CTRL+ALT+SHIFT+T : ouvrir le menu de réusinage à partir de la vue projet
    • ALT+ENTER : ouvrir le menu contextuel

Solution

Une solution potentielle est fournie dans la branche solution du même dépôt github.