Métodos getter y setter

Última actualización: Julio 24

Los métodos getter y setter se emplean para acceder a los parámetros de una clase a través de funciones, lo que nos proporciona mayor seguridad y control sobre el acceso y modificación de los mismos.

Acceso a los parámetros

La manera de acceder a los parámetros que hemos visto hasta ahora, requiere que estos estén definidos como públicos, que es el valor que toma por defecto sino utilizamos ningún modificador.

En el caso de la clase Coche, si por ejemplo tomamos el parámetro añoFabricación, este está definido como:

int añoFabricacion

lo que es equivalente a:

public int añoFabricacion

Esta no es una buena práctica. Al contrario, por motivos de seguridad y para tener mayor control sobre los parámetros de una clase, es conveniente declarar los parámetros internos de una clase como privados. De esta forma, sólo podrían ser accedidos desde dentro de la clase, con lo que podemos tener más control en el acceso a los mismos.

Sin embargo, los objetos de las clases van a ser usados por otras clases, con lo que al final tenemos que proporcionar este acceso.

La solución consiste en definir los parámetros como privados y crear métodos públicos para recuperar o actualizar los valores de dichos parámetros. Estos métodos se han hecho tan populares y los utilizamos siempre, que reciben el nombre de métodos getters y setters. Los primeros se emplean para recuperan los valores de los parámetros, mientras que los segundos lo hacen para establecer los valores.

Empleando estos métodos, el programador puede controlar como se accede a los parámetros de la clase, asegurando que se usan de manera correcta. Como, por ejemplo, comprobando antes de actualizar un valor que se encuentra dentro de un rango requerido.

Declaración de los métodos getter y setter

Los métodos getter y setter se declaran como cualquier otro método. Si necesitas repasar como se declara un método en java, puedes hacerlo en este post.

El método getter lo emplearemos para recuperar el valor del parámetro y el método setter para darle un valor al parámetro. Por convenio, para nombrar los métodos, se utiliza la palabra get o set, respectivamente, seguida del nombre del parámetro con la primera letra en mayúsculas.

Por ejemplo, si el parámetro fuera precio, los nombres de los métodos getter y setter serían: getPrecio y setPrecio, respectivamente.

Si la variable fuera de tipo boolean, el método get puede ser nombrado como “is” en lugar de “get”. Siguiendo con el ejemplo del parámetro precio, normalmente nos encontraríamos con el nombre de isPrecio, para el método get.

No obstante, esto son recomendaciones que no son obligatorias. Podemos llamar a estos métodos como queramos. Veamos como funciona esto en la práctica, haciendo una actividad

Actividad: Métodos getter y setter

  1. Abre el IDE de trabajo.
  1. Usando la clase Coche ya definida cuando explique las clases en java, cambiamos a privada la declaración del parámetro porcentajeTanqueLleno
private int porcentajeTanqueLleno;

Si ahora ejecutáramos el programa de la actividad que realizábamos entonces, obtendríamos el error:

MyClass.java:7: error: porcentajeTanqueLleno has private access in Coche
      System.out.println("El porcentaje de tanque lleno es: "+ primerCoche.porcentajeTanqueLleno);
                                                                          ^
MyClass.java:8: error: porcentajeTanqueLleno has private access in Coche
      if (primerCoche.porcentajeTanqueLleno<25){
                     ^
MyClass.java:12: error: porcentajeTanqueLleno has private access in Coche
      System.out.println("El porcentaje de tanque lleno es: "+ primerCoche.porcentajeTanqueLleno);
                                                                          ^
3 errors

Estos tres errores están ocasionados por el mismo motivo. Intentamos acceder al parámetro porcentajeTanqueLleno desde fuera de la clase Coche, pero al estar declarado como privado, esto no es posible.

Recuerda que estamos accediendo desde el método main en la clase MyClass

  1. Programemos entonces los métodos getter y setter para poder acceder a este parámetro desde fuera de la clase Coche:
public class Coche{
    int CV;
    int numeroPuertas;
    int añoFabricacion;
    String propietario;
    String color;
    String combustible;
    boolean encendido;
    private int porcentajeTanqueLleno;
    public Coche(int np, String pro){
        this.numeroPuertas = np;
        this.propietario=pro;
    }
    public void arranque(){
        if (porcentajeTanqueLleno>5){
            encendido = true;
        }
    }
    public void parado(){
        encendido = false;
    }
    public int llenadoTanque(){
        if (porcentajeTanqueLleno<80){
            porcentajeTanqueLleno = 100;
        }
        return porcentajeTanqueLleno;
    }
    //metodos getter and setter
    public int getporcentajeTanqueLleno(){
        return this.porcentajeTanqueLleno;
    }
    public void setporcentajeTanqueLleno(int val){
        this.porcentajeTanqueLleno=val;
    }
}

Los dos métodos que aparecen al final del código de la Clase, son los métodos getter y setter para el parámetro porcentajeTanqueLleno. Lo que he hecho con este parámetro habría que hacerlo para el resto de parámetros de la clase, definiendo todos los métodos getter y setter correspondientes.

Es interesante el uso de la palabra reservada this. Representa al objeto con el que estamos trabajando, por lo que podemos acceder al parámetro xxx usando <this.xxx>. En este punto del programa podemos acceder de esta manera porque estamos accediendo desde dentro de la clase, y estamos dentro del alcance de la variable, aunque esta esté declarada como privada.

Una vez definidos los métodos getter y setter en la clase Coche, todavía tenemos que cambiar la llamada a estos parámetros desde el método main. El nuevo código de este método quedaría:

public class MyClass {
    public static void main(String args[]) {
      Coche primerCoche;
      Coche segundoCoche;
      primerCoche = new Coche (5,"Jesús Garcia");
      segundoCoche = new Coche (3,"Laura Perez");
      System.out.println("El porcentaje de tanque lleno es: "+ primerCoche.getporcentajeTanqueLleno());
      if (primerCoche.getporcentajeTanqueLleno()&lt;25){
          System.out.println("Vamos a proceder a llenar el tanque");
          primerCoche.llenadoTanque();
      }
      System.out.println("El porcentaje de tanque lleno es: "+ primerCoche.getporcentajeTanqueLleno());
    }
}

En las líneas 7,8 y 12, se puede apreciar el uso de la función getter correspondiente para recuperar el valor del parámetro procentajeTanqueLleno.

NOTA:

Este post es parte de la colección “Java”. Puedes ver el índice de esta colección aquí.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.