---
title: "Déplacer une méthode"
type: "refactoring-technique"
slug: "move-method"
url: "http://localhost:3000/fr/move-method.md"
category: "Moving Features between Objects"
description: "Problème : une méthode est davantage utilisée dans une autre classe que dans la sienne. Solution : créez une nouvelle méthode dans la classe qui utilise le plus la méthode, puis déplacez-y le code de l'ancienne méthode. Transformez le code de la méthode d'origine en une référence à la nouvelle méthode dans l'autre classe, ou bien supprimez-la entièrement."
---
# Déplacer une méthode

> Problème : une méthode est davantage utilisée dans une autre classe que dans la sienne. Solution : créez une nouvelle méthode dans la classe qui utilise le plus la méthode, puis déplacez-y le code de l'ancienne méthode. Transformez le code de la méthode d'origine en une référence à la nouvelle méthode dans l'autre classe, ou bien supprimez-la entièrement.

## Problem

Une méthode est davantage utilisée dans une autre classe que dans la sienne.

## Solution

Créez une nouvelle méthode dans la classe qui utilise le plus la méthode, puis déplacez-y le code de l'ancienne méthode. Transformez le code de la méthode d'origine en une référence à la nouvelle méthode dans l'autre classe, ou bien supprimez-la entièrement.

## Why Refactor

1. Vous voulez déplacer une méthode vers une classe qui contient la majeure partie des données qu'elle utilise. Cela rend les **classes plus cohérentes en interne**.
2. Vous voulez déplacer une méthode afin de réduire ou d'éliminer la dépendance de la classe appelante vis-à-vis de la classe dans laquelle elle se trouve. Cela peut être utile si la classe appelante dépend déjà de la classe vers laquelle vous prévoyez de déplacer la méthode. Cela **réduit la dépendance entre les classes**.

## How to Refactor

1. Vérifiez toutes les fonctionnalités utilisées par l'ancienne méthode dans sa classe. Il peut être judicieux de les déplacer également. En règle générale, si une fonctionnalité n'est utilisée que par la méthode considérée, vous devriez assurément la déplacer avec elle. Si la fonctionnalité est aussi utilisée par d'autres méthodes, vous devriez déplacer ces méthodes également. Il est parfois bien plus simple de déplacer un grand nombre de méthodes que d'établir des relations entre elles dans différentes classes.
Assurez-vous que la méthode n'est pas déclarée dans des superclasses et des sous-classes. Si tel est le cas, vous devrez soit renoncer au déplacement, soit implémenter une forme de polymorphisme dans la classe réceptrice afin de garantir les fonctionnalités variables d'une méthode répartie entre des classes donatrices.
2. Déclarez la nouvelle méthode dans la classe réceptrice. Vous voudrez peut-être lui donner un nouveau nom plus approprié dans la nouvelle classe.
3. Décidez comment vous référencerez la classe réceptrice. Vous disposez peut-être déjà d'un champ ou d'une méthode qui renvoie un objet approprié, mais sinon, vous devrez écrire une nouvelle méthode ou un nouveau champ pour stocker l'objet de la classe réceptrice.
Vous avez maintenant un moyen de référencer l'objet récepteur et une nouvelle méthode dans sa classe. Avec tout cela en main, vous pouvez transformer l'ancienne méthode en une référence à la nouvelle méthode.
4. Examinez : pouvez-vous supprimer entièrement l'ancienne méthode ? Si oui, placez une référence à la nouvelle méthode à tous les endroits qui utilisent l'ancienne.
## Relations

**Helps you do**

- [Extraire une classe](/fr/extract-class.md)
- [Intégrer la classe](/fr/inline-class.md)
- [Introduire un objet paramètre](/fr/introduce-parameter-object.md)

**Similar techniques**

- [Extraire une méthode](/fr/extract-method.md)
- [Déplacer un champ](/fr/move-field.md)

**Eliminates smells**

- [Chirurgie au fusil à pompe](/fr/smells/shotgun-surgery.md)
- [Envie de fonctionnalité](/fr/smells/feature-envy.md)
- [Instructions switch](/fr/smells/switch-statements.md)
- [Hiérarchies d'héritage parallèles](/fr/smells/parallel-inheritance-hierarchies.md)
- [Chaînes de messages](/fr/smells/message-chains.md)
- [Intimité inappropriée](/fr/smells/inappropriate-intimacy.md)
- [Classe de données](/fr/smells/data-class.md)

