Los pasos a seguir son los siguientes:
Crear el proyecto:- Crear un proyecto Eclipse llamado “refactor”.
- Crear un paquete “utilidades” y dentro crear la clase Circulo.
- Crear un paquete “figuras” y dentro crear la clase Test.
Nota: puedes ver el código más adelante. Pulsa aquí si quieres descargarlo.
Utilizando las opciones del menú Código fuente, resuelve los siguientes pasos:
- Generar métodos get y set para la clase Circulo.
- Corregir la tabulación del código.
- Dar formato al código.
- Mover la clase Circulo al paquete figuras.
- Renombrar la clase Circulo por Circunferencia. Observar si el cambio afecta a otras clases (en este caso Test).
- Renombrar el atributo "rad" por "radio". ¿Cómo afecta al método get?.
- Convertir la variable local "color" del método imprimir en un atributo, inicializando su valor en el mismo método imprimir.
- En imprimir, en lugar de calcular y escribir el diámetro directamente en el println, extraer a una variable local "d" e imprimir dicha variable.
- Hacer que 3.1416 sea una constante llamada PI.
- Extraer el cálculo del área a un método llamado calcularArea. No recibirá parámetros y devolverá un double.
- Cambiar la firma o cabecera del método esIgual, invirtiendo el orden de los parámetros y cambiando el nombre de conDecimales por considerarDecimales. ¿Cómo afecta el cambio a la clase Test, en la que se usaba este método?.
- Ahora se propone usar "inline" para deshacer algunos cambios, es decir, hacer el código más concreto. Seleccionar la variable "d" (diámetro) y hacer que su valor se use en línea, desapareciendo por tanto la variable.
- Seleccionar la llamada al método calcularArea y hacer que su código se incorpore en la misma línea, desapareciendo la necesidad de usar el método (se puede borrar el método después).
- Seleccionar la constante PI y hacer que su valor se incorpore a las líneas en que se usa, desapareciendo por tanto la constante.
- Se propone repetir el paso anterior con el atributo "color". ¿Es posible eliminar este atributo y utilizar su valor en línea?.
Código de las dos clases:
Clase Circulo (paquete utilidades)
package utilidades;
public class Circulo {
private double rad;
public Circulo(double radio)
{
this.rad = radio;
}
public void imprimir()
{
String color = "rojo";
System.out.println("Diámetro: " + 2*rad);
System.out.println("Color: " + color);
double area = 2 * 3.1416 * rad * rad;
System.out.println(area);
}
public boolean esIgual (Circulo otro, boolean conDecimales)
{
double radio1 = this.rad;
double radio2 = otro.getRad();
if (conDecimales)
{
if (radio1 == radio2)
return true;
else
return false;
}
else
{
if (Math.abs(radio1-radio2)<1)
return true;
else
return false;
}
}
}
Clase Test (paquete figuras)
package figuras;
public class Test {
public static void main (String[] args)
{
Circulo c1 = new Circulo(5.5);
Circulo c2 = new Circulo(10.1);
Circulo c3 = new Circulo(10.9);
if (c2.esIgual(c3, false))
{
System.out.println("c2 y c3: iguales sin considerar decimales");
}
if (c2.esIgual(c3, true))
{
System.out.println("c2 y c3: iguales considerando decimales");
}
}
}