Al acceder al campo (desde la propia clase) "añosEmerito" podemos acceder con getAñosEmerito o añosEmerito. Mi duda es si hay alguna diferencia entre las dos formas? ya que las dos hacen lo mismo. Habrá algún motivo para usar una u otra? Disculpen mi ignorancia
Si la operación va a consistir
únicamente en cambiar el valor actual por otro, da igual hacerlo de una manera o de otra.
Sin embargo, muchas veces vamos a querer que la operación sea algo más completa, ya se para aplicar alguna regla de seguridad, alguna comprobación, alguna operación intermedia, etc..
Por ejemplo, pensemos en un atributo edad de una clase Persona.
Si le pasamos un valor directamente al atributo
.edad , sin pasar por su habitual
setter .setEdad(), podremos introducir cualquier valor, incluso alguno que no tenga sentido, como puede ser un -100 negativo.
Porque no tiene sentido que una persona tenga -100 años....
En cambio, si lo hacemos mediante su método
.setEdad(), ahí ya podemos aplicar reglas y filtros para asegurar la "calidad" del dato recibido.
Podemos rechazar edades con valor negativo:
public void setEdad(int edad) {
if (edad < 0)
System.out.println("ERROR: La edad no puede ser un valor negativo");
else
this.edad = edad;
}
O podemos automatizar ciertas operaciones, como actualizar otro atributos en función del valor de la edad:
public void setEdad(int edad) {
if (edad < 0)
System.out.println("ERROR: La edad no puede ser un valor negativo");
else {
this.edad = edad;
if (edad > 75)
this.listoParaJubilarse = true;
else if (edad >= 18)
this.aptoParaVotar = true;
}
}
Y bueno, cualquier otra cosa que podamos necesitar.
Esta es la ventaja de usar métodos set para cambiar el valor de los atributos, que nos permite aplicar código extra para proteger la calidad del dato, automatizar otros procesos, etc...
Algunas veces no ocurrirá nada de esto, y usar el método será prácticamente igual que acceder directamente al atributo, porque serán casos donde no se requiere hacer nada especial al cambiar el valor.
Pero muchas otras veces, la mayoría, vamos a querer establecer reglas y límites para los datos que recibimos y para ello necesitaremos usar los métodos.