---
title: "Subir Método"
type: "refactoring-technique"
slug: "pull-up-method"
url: "http://localhost:3000/es/pull-up-method.md"
category: "Dealing with Generalization"
description: "Problema: Tus subclases tienen métodos que realizan un trabajo similar. Solución: Haz que los métodos sean idénticos y luego muévelos a la superclase correspondiente."
---
# Subir Método

> Problema: Tus subclases tienen métodos que realizan un trabajo similar. Solución: Haz que los métodos sean idénticos y luego muévelos a la superclase correspondiente.

## Problem

Tus subclases tienen métodos que realizan un trabajo similar.

## Solution

Haz que los métodos sean idénticos y luego muévelos a la superclase correspondiente.

## Why Refactor

Las subclases crecieron y se desarrollaron independientemente unas de otras, lo que provocó campos y métodos idénticos (o casi idénticos).

## Benefits

* Elimina el código duplicado. Si necesitas hacer cambios en un método, es mejor hacerlo en un único lugar que tener que buscar todos los duplicados del método en las subclases.
* Esta técnica de refactorización también puede usarse si, por alguna razón, una subclase redefine un método de la superclase pero realiza lo que es esencialmente el mismo trabajo.

## How to Refactor

1. Investiga métodos similares en las superclases. Si no son idénticos, dales el mismo formato para que coincidan entre sí.
2. Si los métodos usan un conjunto de parámetros diferente, coloca los parámetros en la forma que quieras ver en la superclase.
3. Copia el método a la superclase. Aquí puede que descubras que el código del método usa campos y métodos que existen solo en las subclases y que, por tanto, no están disponibles en la superclase. Para resolver esto, puedes:

  * Para los campos: usa [Subir Campo](/es/pull-up-field) o Auto-[Encapsular Campo](/es/encapsulate-field) para crear getters y setters en las subclases; luego declara estos getters de forma abstracta en la superclase.
  * Para los métodos: usa [Subir Método](/es/pull-up-method) o declara métodos abstractos para ellos en la superclase (ten en cuenta que tu clase se volverá abstracta si no lo era previamente).
4. Elimina los métodos de las subclases.
5. Comprueba los lugares en los que se llama al método. En algunos lugares quizá puedas reemplazar el uso de una subclase por la superclase.
## Relations

**Helps you do**

- [Formar Método Plantilla](/es/form-template-method.md)

**Similar techniques**

- [Subir campo](/es/pull-up-field.md)

**Opposite refactorings**

- [Bajar método](/es/push-down-method.md)

**Eliminates smells**

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

