El término refactorizar dentro del campo de la Ingeniería del Software hace referencia a la modificación del código sin cambiar su funcionamiento. Se emplea para crear un código más claro y sencillo, facilitando la posterior lectura o revision de un programa. Se podría entender como el mantenimiento del código, para facilitar su comprensión, pero sin añadir ni eliminar funcionalidades. Refactorizar código consiste en crear un código más limpio.
La refactorización debe ser un paso aislado en el diseño de un programa, para evitar introducir errores de código al reescribir o modificar algunas partes del mismo. Si después de refactorizar hemos alterado el funcionamiento del código, hemos cometido errores al refactorizar.
Se refactoriza para:
Los siguientes apartados están inevitablemente relacionados entre si, ya que todas las técnicas o reglas persiguen el mismo fin.
Las convenciones de código existen debido a que la mayoría del coste del código de un programa se usa en su mantenimiento, (casi ningún programa se mantiene toda su vida con el código original), y mejoran la lectura del código permitiendo entender código nuevo mucho más rápido y a fondo. En la web de Sun Microsystems se recogen dichas convenciones en una guía en ingles, o una traducción al castellano cortesía de javaHispano. Por su parte Google también ha creado recientemente una Guía de estilo para Java.
Para que las convenciones funcionen, cada programador debe tratar de ser lo más fiel posible a estas.
Todos los ficheros fuente de java son ficheros de texto plano cuyo nombre termina con la extensión .java Dentro de cada fichero .java tenemos 4 partes en el siguiente orden:
/* Correcto */ /* Incorrecto */ import java.awt.Frame; import java.awt.*; import java.awt.Graphics;
Posteriormente dentro de la definición de la clase, aplicamos el siguiente orden:
int edad; int cantidad;
int[] array = { 0, 1, 2, 3 }; // ó int[] array = { 0, 1, 2, 3 };
String[] nombres; //correcto String nombres[]; //incorrecto
Para los identificadores podemos usar las letras anglosajonas y números de la tabla ASCII. No se debe usar caracteres con tilde ni la (ñ). Las barras bajas o guiones tampoco se usan. Los nombres de los identificadores deben ser siempre lo más descriptivos posible, ya sea variable, método o clase. Solo se usan identificadores de un solo carácter para representar los contadores del bucle for, y comienzan en la letra i.
Se conoce bajo este nombre a cualquier valor literal (“texto” o numérico) empleado en el código sin ninguna explicación. Se deben sustituir siempre que se pueda por una constante que identifique su finalidad.
//incorrecto int precioConIva = precioBase + (0.21 * precioBase); //correcto //Se define en la clase final static double IVA = 0.21; //Se utiliza en un método int precioConIva = precioBase + (IVA * precioBase);
if (final < indice) { filaInicial = indice – numeroFilas; } else if (indice < filaInicial) { filaInicial = indice; }
public void ejecutarAccion( TipoParametro parametro1, TipoParametro parametro2, TipoParametro parametro3){ ... } if ((condicion1 && condicion2) || (condicion3 && condicion4) || !(condicion5 && condicion6)) { llamarMetodo(); } longName1 = longName2 * (longName3 + longName4 - longName5) + (4 * longname6); //Siempre con el operador al principio de línea
cantidadTotal = cantidadInicial + cantidadFinal; for(int i = 0; i < cantidadTotal; i++){ ... } public String getItem(int fila, int columna) { ... } getItem(cantidadInicial, cantidadFinal);
Debemos estar familiarizados y poner en práctica las convenciones recogidas en alguna de las guías de estilo indicadas.
Se conoce como Bad Smell o Code Smell (mal olor) 1) a algunos indicadores o sintomas del código que posiblemente ocultan un problema más profundo. Los bad smells no son errores de código (bugs), ya que no impiden que el programa funcione correctamente, pero son indicadores de fallos en el diseño del código que dificultan el posterior mantenimiento del mismo y aumentan el riesgo de errores futuros. Algunos de estos síntomas son:
En la siguiente página web tenemos la mayoría de Bad Smells agrupados en 5 tipos.
//instanciación lenta String lenta = new String("objeto string"); //instanciación rápida String rapida = "objeto string";
int x = 10; int y = 10; Integer x1 = new Integer(10); Integer y1 = new Integer(10); String x2="hola"; String y2 = new String("hola"); System.out.println(x == y); //TRUE System.out.println(x1 == y1); //FALSE, ya que son 2 objetos distintos System.out.println(x2 == y2); //FALSE, ya que son 2 objetos distintos
... int resultadoTotal = resultadoInicial - resultadoFinal; ...
Eclipse tiene distintos métodos de refactorización. Dependiendo de sobre qué mostremos el menú de refactorización, nos ofrecerá unas u otras opciones. Para refactorizar pulsaremos click derecho sobre el nombre del elemento deseado, y deplegaremos la opción Refactor del menu contextual.
Los métodos de refactorización, también llamados patrones de refactorización, nos permiten plantear casos y previsualizar las posibles soluciones que se nos ofrecen. Podemos seleccionar diferentes elementos para mostrar su menú de refactorización ( una clase, una variable, método, bloque de instrucciones, expresion, etc ). A continuación se muestras algunos de los métodos más comunes:
File fichero = new File("datos.dat"); PrintWriter escritor; escritor = new PrintWriter(fichero);
PrintWriter escritor = new PrintWriter(new File("datos.dat"));
Eclipse también nos permite ver un histórico de la refactorización que se ha hecho en un proyecto, abriendo el menu Refactor → History.
© 2025 Fernando Valdeón