Consiste en la
identificación de una serie de líneas de código que se llevan a un método
aparte, reemplazando las líneas originales por una llamada al nuevo método.
Es útil
·
para
extraer código común que se repite en varios sitios
·
para
hacer más legible un programa, dándole un nombre a unas líneas de código
·
para
evitar el uso de "break"
Refactoring: extracción de métodos |
// cálulo de la diagonal mayor de un paralepípedo rectangular public double
getDiagonalMayor(double a, double b, double c) { return Math.sqrt(Math.sqrt(a * a + b
* b) * Math.sqrt(a * a + b
* b) + c * c); } |
Extraemos un método que aplica Pitágoras: |
// cálulo de la diagonal mayor de un paralepípedo rectangular public double
getDiagonalMayor(double a, double b, double c) { return hipotenusa(hipotenusa(a, b), c); } // teorema de Pitágoras private double hipotenusa(double x, double y) { return Math.sqrt(x * x + y * y); } |
El siguiente
ejemplo es un programa que detecta si una String es un palíndromo
Refactoring: extracción de métodos para evitar "break" |
public void testSimetria(String s)
{ boolean esSimetrica = true; for (int i = 0; i < s.length();
i++) { int j = s.length() - 1 - i; if (j < i) break; char c1 = s.charAt(i); char c2 = s.charAt(j); if (c1 != c2) { esSimetrica = false; break; } } System.out.println(esSimetrica); } |
Extraemos el bucle nuclear en un método auxiliar: |
public void testSimetria2(String s)
{ System.out.println(isSimetrica(s)); } private boolean isSimetrica(String s) { for (int i = 0; i < s.length();
i++) { int j = s.length() - 1 - i; if (j < i) return true; char c1 = s.charAt(i); char c2 = s.charAt(j); if (c1 != c2) return false; } return true; // necesario para la cadena vacía "" } |
Temas relacionados