Teniendo las siguientes clases de Java en nuestro proyecto NetBeans (proyecto llamado PruebaCirculo):
Circulo.java
public Circulo( int valorX, int valorY, double valorRadio )
establecerRadio( valorRadio );
public void establecerX( int valorX )
public void establecerY( int valorY )
public void establecerRadio( double valorRadio )
radio = ( valorRadio < 0.0 ? 0.0 : valorRadio );
public double obtenerRadio()
public double obtenerDiametro()
public double obtenerCircunferencia()
return Math.PI * obtenerDiametro();
public double obtenerArea()
return Math.PI * radio * radio;
return "Centro = [" + x + ", " + y + "]; Radio = " + radio;
PruebaCirculo.java
import java.text.DecimalFormat;
import javax.swing.JOptionPane;
public class PruebaCirculo {
public static void main( String[] args )
Circulo circulo = new Circulo( 37, 43, 2.5 );
String salida = "La coordenada X es " + circulo.obtenerX() +
"\nLa coordenada Y es " + circulo.obtenerY() +
"\nEl radio es " + circulo.obtenerRadio();
circulo.establecerX( 35 );
circulo.establecerY( 20 );
circulo.establecerRadio( 4.25 );
salida += "\n\nLa nueva ubicación y el radio del círculo son\n" +
DecimalFormat dosDigitos = new DecimalFormat( "0.00" );
salida += "\nEl diámetro es " +
dosDigitos.format( circulo.obtenerDiametro() );
salida += "\nLa circunferencia es " +
dosDigitos.format( circulo.obtenerCircunferencia() );
salida += "\nEl área es " + dosDigitos.format( circulo.obtenerArea() );
JOptionPane.showMessageDialog( null, salida );
} // fin de la clase PruebaCirculo
La estructura de nuestras carpetas en el proyecto NetBeans será la siguiente:
Figura 1. Visión del proyecto NetBeans con las clases java
Si nos situamos en cualquiera de nuestras clases y botón derecho, obtenemos el siguiente menú, donde podemos observar que tenemos la opción refactorizar:
Figura 2. Menú de Refactorizar
A continuación, se encuentra una breve descripción de las diferentes opciones del menú:
- Renombrar → Cambia el nombre de una clase, variable o método. Adicionalmente modifica todo el código del proyecto para referenciar al nuevo nombre.
Figura 3. Opción renombrar
Cambiamos el nombre Circulo por Circulitos y observamos los cambios en el código que donde ponía Circulo ahora pone Circulitos:
Figura 4. Cambios al aplicar Renombrar
- Cambiar parámetros de un método → Permite agregar, eliminar, modificar o cambiar el orden de los parámetros de un método, al igual que su modificador de acceso (private o public).
- Encapsular campos → Es muy común tener que acceder a los campos de una clase por medio de operaciones del tipo:
public set<nombre del campo>(...)
public get<nombre del campo>()
Es una tarea muy tediosa, por lo cual esta operación permite que el programador solo deba implementar los campos, delegando a NetBeans la tarea de “encapsularlos”. También es posible que todo código del proyecto que accede directamente al campo, pase automáticamente a utilizar el “setter” o el “getter” determinado.
- Ascender métodos o campos → Permite subir un método o campo a otra clase de la cual hereda la clase que contiene al método o campo que deseamos subir.
- Descender clases anidadas, métodos o campos → Permite bajar una clase anidada, método o campo a otra clase la cual hereda de la clase que contiene a la clase anidada, método o campo que deseamos bajar.
- Mover una clase → Mueve una clase a otro package o dentro de otra clase. Adicionalmente modifica todo el código del proyecto para referenciar al nuevo lugar donde se movió la clase.
Figura 5. Opción Mover clase
- Convertir una clase anónima anidada a una clase anidada → Crea una nueva clase anidada, la cual tendrá un nombre y un constructor. La clase anónima anidada será sustituida por esta nueva clase anidada.
- Extraer una interfase → Permite seleccionar cuales métodos públicos no estáticos de una clase o interfase, irán a parar a una nueva interfase. La clase de la cual fue extraída la interfase implementará la nueva interfase creada. La interfase de la cual fue extraída la interfase extenderá la nueva interfase.
Figura 6. Opción Extraer interfaz
- Extraer una superclase → Despliega al programador los métodos y campos que se pueden mover a una superclase. El programador selecciona cuales desea mover y NetBeans creará una nueva clase abstracta que contendrá dichos campos y métodos, también hará que la clase refactorizada la extienda.
Figura 7. Opción Extraer superclase
- Usar supertipo cuando sea posible → Despliega al programador todas las clases que extiende la clase actual. El programador seleccionará una, y NetBeans buscará en todo el proyecto referencias a la clase que se quiere refactorizar, si encuentra referencias, determinará si es posible utilizar la superclase seleccionada.
Figura 8. Opción Usar supertipo cuando sea posible
- Eliminación seguro → Cuando eliminamos un método o clase, debemos garantizarnos de que nadie más lo utilice en el proyecto. Esta operación verifica y notifica las referencias encontradas, proveyendo de mecanismos para que fácilmente el programador pueda eliminar una a una las referencias, para finalmente llevar a cabo la operación de borrado de modo seguro.
Figura 9. Opción Eliminación segura
- Introducir constantes, variables, campos o métodos → El programador selecciona un fragmento de código, y luego presiona las teclas <alt>+<Enter>. NetBeans desplegará varias opciones útiles, como encapsular ese fragmento en un método y referenciar al método, anidarse en while, if, etc.
Siempre que sea posible, utilizar las herramientas de refactoring que NetBeans provee, de este modo no solo será mucho más sencillo este tipo de procedimiento, sino que además ejecutaremos un proceso seguro mediante el cual no introduciremos errores humanos.