Icono play
Java
Técnica extract class

Extract class, o extraer clase, es una de las técnicas usadas para refactorizar el código de un proyecto de programación. Consiste en crear una clase nueva con parte de los elementos de otra.

Una vez generada, esta clase nueva forma parte de los elementos de la clase de la cual se han extraído los componentes para producirla. 

Algunos de los IDE (entornos de desarrollo integrado) permiten aplicar esta técnica de una manera relativamente sencilla. Sin embargo, es importante familiarizarnos con ella para comprender cómo funciona.

¿Cuándo aplicar la técnica extract class?

Si mientras estamos construyendo el código de cualquier aplicación o proyecto, comenzamos a notar que una clase tiene demasiados elementos y/o está cumpliendo más de una tarea, es el momento de considerar aplicar la técnica extract class.

A medida que nuestros programas se van haciendo más complejos, será necesario refactorizar, así que ir practicando esto mientras aprendemos nos dará las habilidades que se requieren para generar código de mayor calidad.

¿Por qué utilizar la técnica extract class?

  • La técnica extract class nos permite mejorar la organización del código, haciendo más sencillas las tareas de búsqueda y limpieza del mismo.
  • Sirve para mantener nuestros programas más entendibles, puesto que contribuye a que cada fragmento esté orientado a darle solución a un aspecto puntual del proyecto.
  • Para agregar más funciones al proyecto, desde la nueva clase que se está extrayendo.

Pasos para utilizar la técnica extract class

  1. Revisar el código para determinar si hay una clase que necesita aplicar esta técnica de refactorización.
  2. Verificar cuáles son los elementos de esa clase que queremos mover a una nueva clase. 
  3. Luego, podemos generar la nueva clase y darle un nombre que identifique de manera clara lo que esta hace.
  4. Ahora es el momento de mover cada uno de los elementos necesarios a esa nueva clase. 
  5. Con la clase ya construida, estableceremos una conexión entre la clase origen y esta que acabamos de estructurar.
  6. Finalmente, haremos las pruebas necesarias para determinar si el cambio no afecta la funcionalidad del proyecto y si todo está trabajando de manera eficiente.

A continuación, con fines didácticos, veremos un ejemplo sencillo y breve que ilustra la manera como funciona la técnica extract class para refactorizar una clase.

Aquí tenemos una clase que tiene los datos de una persona, incluida su dirección:

package extraerClase.copia;

public class DatosPersona {

    String nombre;
    String apellido;
    int edad;

    //datos que conforman la dirección
    String calle;
    String numCasa;
    String numPostal;
    String provincia;
    String pais;

    public DatosPersona(String nombre, String apellido,
        int edad, String calle, String numCasa,
        String numPostal, String provincia, String pais) {

        this.nombre = nombre;
        this.apellido = apellido;
        this.edad = edad;
        this.calle = calle;
        this.numCasa = numCasa;
        this.numPostal = numPostal;
        this.provincia = provincia;
        this.pais = pais;
    }
}

Desde el método principal, creamos una instancia con sus respectivos datos y la imprimimos:

package extraerClase.copia;

public class Main {

    public static void main(String[] args) {
        DatosPersona dat1 = new DatosPersona("Rosa", "Mora", 31, "Los Pinos", "Casa 3", "5411", "Lima", "Peru");

        /*mostramos los datos que hemos ingresado
        para ilustrar el funcionamiento de la refactorización
        */
        System.out.println("Nombre: " + dat1.nombre);
        System.out.println("Apellido: " + dat1.apellido);
        System.out.println("Edad: " + dat1.edad);
        System.out.println("Dirección: " + dat1.calle + " " +
            dat1.numCasa + " " + dat1.numPostal + " " + dat1.provincia + " " + dat1.pais);
    }
}

Como la clase ‘DatosPersona’ contiene muchos atributos, vamos a extraer aquellos que conforman la dirección y formaremos una nueva clase con esa información.

package extraerClase;

public class Direccion {
    public String calle;
    public String numCasa;
    public String numPostal;
    public String provincia;
    public String pais;

    public Direccion() {

    }

}

En la clase original, vemos otros detalles de interés:

package extraerClase;

public class DatosPersona {
    String nombre;
    String apellido;
    int edad;

    /*Aquí vemos una instancia
    de la clase que hemos extraído
    que contiene los datos correspondientes
    a la dirección
    */

    Direccion direccion = new Direccion();

    public DatosPersona(String nombre, String apellido,
        int edad, String calle, String numCasa,
        String numPostal, String provincia, String pais) {

        this.nombre = nombre;
        this.apellido = apellido;
        this.edad = edad;

        /*cada campo de esa clase se referencia usando
        el nombre de la nueva clase*/
        this.direccion.calle = calle;
        this.direccion.numCasa = numCasa;
        this.direccion.numPostal = numPostal;
        this.direccion.provincia = provincia;
        this.direccion.pais = pais;
    }
}

Finalmente, mostramos el aspecto del método principal:

package extraerClase;

public class Main {

    public static void main(String[] args) {
        DatosPersona dat1 = new DatosPersona("Pablo", "Moreno", 30, "Los Cedros", "Casa 8", "3411", "Valencia", "España");

        System.out.println("Nombre: " + dat1.nombre);
        System.out.println("Apellido: " + dat1.apellido);
        System.out.println("Edad: " + dat1.edad);
        System.out.println("Dirección: " + dat1.direccion.calle + " " +
            dat1.direccion.numCasa + " " + dat1.direccion.numPostal + " " + dat1.direccion.provincia + " " + dat1.direccion.pais);
    }
}
¿Todavía no te has apuntado a nuestro Bootcamp?
Tenemos muchos cursos para ofrecerte y ¡TOTALMENTE GRATIS! Estos son algunos de ellos: