Saltar la navegación

a.- Enunciado


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.
Utilizando las opciones del menú Refactorizar, resuelve los siguientes pasos:
  • 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");
                   }
          }
}