---
title: "Mover método"
type: "refactoring-technique"
slug: "move-method"
url: "http://localhost:3000/es/move-method.md"
category: "Moving Features between Objects"
description: "Problema: un método se usa más en otra clase que en la suya propia. Solución: crea un método nuevo en la clase que más lo usa y traslada allí el código del método antiguo. Convierte el código del método original en una referencia al nuevo método de la otra clase, o bien elimínalo por completo."
---
# Mover método

> Problema: un método se usa más en otra clase que en la suya propia. Solución: crea un método nuevo en la clase que más lo usa y traslada allí el código del método antiguo. Convierte el código del método original en una referencia al nuevo método de la otra clase, o bien elimínalo por completo.

## Problem

Un método se usa más en otra clase que en la suya propia.

## Solution

Crea un método nuevo en la clase que más lo usa y traslada allí el código del método antiguo. Convierte el código del método original en una referencia al nuevo método de la otra clase, o bien elimínalo por completo.

## Why Refactor

1. Quieres trasladar un método a una clase que contiene la mayor parte de los datos que usa el método. Esto hace que las **clases sean más coherentes internamente**.
2. Quieres trasladar un método para reducir o eliminar la dependencia de la clase que llama al método respecto de la clase en la que se encuentra. Esto puede ser útil si la clase llamante ya depende de la clase a la que tienes pensado trasladar el método. Esto **reduce la dependencia entre clases**.

## How to Refactor

1. Verifica todas las características que usa el método antiguo en su clase. Puede ser buena idea trasladarlas también. Por norma general, si una característica solo la usa el método en cuestión, deberías sin duda trasladarla junto con él. Si la característica también la usan otros métodos, deberías trasladar también esos métodos. A veces es mucho más fácil trasladar un gran número de métodos que establecer relaciones entre ellos en distintas clases.
Asegúrate de que el método no esté declarado en superclases ni subclases. Si es así, tendrás que abstenerte de moverlo o bien implementar algún tipo de polimorfismo en la clase receptora para garantizar la funcionalidad variable de un método repartido entre las clases donantes.
2. Declara el método nuevo en la clase receptora. Quizá quieras darle al método un nombre nuevo que resulte más apropiado en la nueva clase.
3. Decide cómo te referirás a la clase receptora. Puede que ya tengas un campo o método que devuelva un objeto apropiado, pero si no es así, tendrás que escribir un método o campo nuevo para almacenar el objeto de la clase receptora.
Ahora ya tienes una forma de referirte al objeto receptor y un método nuevo en su clase. Con todo esto a tu disposición, puedes convertir el método antiguo en una referencia al nuevo método.
4. Echa un vistazo: ¿puedes eliminar por completo el método antiguo? Si es así, coloca una referencia al nuevo método en todos los lugares que usan el antiguo.
## Relations

**Helps you do**

- [Extraer clase](/es/extract-class.md)
- [Incorporar clase](/es/inline-class.md)
- [Introducir Objeto Parámetro](/es/introduce-parameter-object.md)

**Similar techniques**

- [Extraer método](/es/extract-method.md)
- [Mover campo](/es/move-field.md)

**Eliminates smells**

- [Cirugía a tiros](/es/smells/shotgun-surgery.md)
- [Envidia de características](/es/smells/feature-envy.md)
- [Sentencias switch](/es/smells/switch-statements.md)
- [Jerarquías de herencia paralelas](/es/smells/parallel-inheritance-hierarchies.md)
- [Cadenas de mensajes](/es/smells/message-chains.md)
- [Intimidad inapropiada](/es/smells/inappropriate-intimacy.md)
- [Clase de datos](/es/smells/data-class.md)

