extracción de métodos

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

147. Refactoring (concepto)