---
title: "Subir Método"
type: "refactoring-technique"
slug: "pull-up-method"
url: "http://localhost:3000/pt-br/pull-up-method.md"
category: "Dealing with Generalization"
description: "Problema: Suas subclasses têm métodos que realizam um trabalho semelhante. Solução: Torne os métodos idênticos e, em seguida, mova-os para a superclasse relevante."
---
# Subir Método

> Problema: Suas subclasses têm métodos que realizam um trabalho semelhante. Solução: Torne os métodos idênticos e, em seguida, mova-os para a superclasse relevante.

## Problem

Suas subclasses têm métodos que realizam um trabalho semelhante.

## Solution

Torne os métodos idênticos e, em seguida, mova-os para a superclasse relevante.

## Why Refactor

As subclasses cresceram e se desenvolveram independentemente umas das outras, causando campos e métodos idênticos (ou quase idênticos).

## Benefits

* Elimina código duplicado. Se você precisa fazer alterações em um método, é melhor fazê-las em um único lugar do que ter que procurar por todas as duplicatas do método nas subclasses.
* Essa técnica de refatoração também pode ser usada se, por algum motivo, uma subclasse redefine um método da superclasse mas realiza, essencialmente, o mesmo trabalho.

## How to Refactor

1. Investigue métodos semelhantes nas superclasses. Se não forem idênticos, formate-os para que correspondam uns aos outros.
2. Se os métodos usam um conjunto diferente de parâmetros, coloque os parâmetros na forma que você quer ver na superclasse.
3. Copie o método para a superclasse. Aqui você pode descobrir que o código do método usa campos e métodos que existem apenas nas subclasses e que, portanto, não estão disponíveis na superclasse. Para resolver isso, você pode:

  * Para campos: use [Subir Campo](/pt-br/pull-up-field) ou Auto-[Encapsular Campo](/pt-br/encapsulate-field) para criar getters e setters nas subclasses; depois declare esses getters de forma abstrata na superclasse.
  * Para métodos: use [Subir Método](/pt-br/pull-up-method) ou declare métodos abstratos para eles na superclasse (observe que sua classe se tornará abstrata se ainda não for).
4. Remova os métodos das subclasses.
5. Verifique os locais em que o método é chamado. Em alguns lugares você pode conseguir substituir o uso de uma subclasse pela superclasse.
## Relations

**Helps you do**

- [Formar Método Template](/pt-br/form-template-method.md)

**Similar techniques**

- [Subir Campo](/pt-br/pull-up-field.md)

**Opposite refactorings**

- [Descer Método](/pt-br/push-down-method.md)

**Eliminates smells**

- [Código Duplicado](/pt-br/smells/duplicate-code.md)

