---
title: "Remonter une méthode"
type: "refactoring-technique"
slug: "pull-up-method"
url: "http://localhost:3000/fr/pull-up-method.md"
category: "Dealing with Generalization"
description: "Problème : Vos sous-classes ont des méthodes qui effectuent un travail similaire. Solution : Rendez les méthodes identiques, puis déplacez-les vers la superclasse appropriée."
---
# Remonter une méthode

> Problème : Vos sous-classes ont des méthodes qui effectuent un travail similaire. Solution : Rendez les méthodes identiques, puis déplacez-les vers la superclasse appropriée.

## Problem

Vos sous-classes ont des méthodes qui effectuent un travail similaire.

## Solution

Rendez les méthodes identiques, puis déplacez-les vers la superclasse appropriée.

## Why Refactor

Les sous-classes ont grandi et évolué indépendamment les unes des autres, provoquant des champs et des méthodes identiques (ou presque identiques).

## Benefits

* Élimine le code dupliqué. Si vous devez modifier une méthode, il vaut mieux le faire à un seul endroit plutôt que d'avoir à rechercher tous les doublons de la méthode dans les sous-classes.
* Cette technique de refactorisation peut aussi être utilisée si, pour une raison quelconque, une sous-classe redéfinit une méthode de la superclasse mais effectue essentiellement le même travail.

## How to Refactor

1. Examinez les méthodes similaires dans les superclasses. Si elles ne sont pas identiques, mettez-les en forme pour qu'elles correspondent.
2. Si les méthodes utilisent un ensemble de paramètres différent, mettez les paramètres sous la forme que vous souhaitez voir dans la superclasse.
3. Copiez la méthode dans la superclasse. Vous pourriez alors constater que le code de la méthode utilise des champs et des méthodes qui n'existent que dans les sous-classes et qui ne sont donc pas disponibles dans la superclasse. Pour résoudre cela, vous pouvez :

  * Pour les champs : utilisez soit [Remonter un champ](/fr/pull-up-field), soit l'[auto-encapsulation de champ](/fr/encapsulate-field) pour créer des accesseurs et mutateurs dans les sous-classes ; déclarez ensuite ces accesseurs de manière abstraite dans la superclasse.
  * Pour les méthodes : utilisez soit [Remonter une méthode](/fr/pull-up-method), soit déclarez des méthodes abstraites pour elles dans la superclasse (notez que votre classe deviendra abstraite si elle ne l'était pas déjà).
4. Supprimez les méthodes des sous-classes.
5. Vérifiez les emplacements où la méthode est appelée. À certains endroits, vous pourrez peut-être remplacer l'utilisation d'une sous-classe par la superclasse.
## Relations

**Helps you do**

- [Constituer une méthode patron](/fr/form-template-method.md)

**Similar techniques**

- [Remonter le champ](/fr/pull-up-field.md)

**Opposite refactorings**

- [Descendre la méthode](/fr/push-down-method.md)

**Eliminates smells**

- [Code dupliqué](/fr/smells/duplicate-code.md)

