Cordial saludo. Me encantaria saber que singifica Getters y setters por favor?
Cordial saludo. Me encantaria saber que singifica Getters y setters por favor?
¡Hola Diego! Espero te encuentres bien.
Respondiendo a tu pregunta, creo que primero debemos aclarar algunos conceptos:
Encapsulamiento El encapsulamiento es un mecanismo que nos ayuda a proteger los atributos de una clase para que no puedan ser accedidos por cualquier entidad.
Tomemos de ejemplo la siguiente clase:
public class Animal{
public String nombre; // Atributo nombre, de tipo String, modificador de acceso público.
public int edad; // Atributo edad, de tipo entero, modificador de acceso público.
public Animal(){ // Constructor vacío, que permite la instanciación vacía de esta clase como objeto.
}
// Método que no retorna ningún valor, y que imprime por pantalla "Grraaah!".
public void emitirSonido(){
System.out.println("Grraaah!");
}
}
Nuestra clase Gato posee dos atributos públicos, nombre y edad. Estos atributos pueden ser accedidos desde cualquier parte, por lo cual podemos manipular esta información desde cualquier lado, como se muestra a continuación en la clase EntrenarAnimal:
public class EntrenarAnimal{
public static void main(String[] args){
Gato garfield = new Gato(); // Se crea una instancia de tipo Gato, un objeto.
garfield.nombre = "Garfield"; // Se establece el nombre del gato.
garfield.edad = 4; // Se establece la edad del gato.
System.out.println("El gato se llama " + gato.nombre + ", tiene " + gato.edad + " años, y dice ");
gato.emitirSonido();
}
}
Sin ningun problema aparente, podemos modificar a gusto los atributos del objeto Gato que hemos creado en la clase EntrenarAnimal. Sin embargo, esto es bastante peligroso porque no hay forma de poder controlar la modificación de estos atributos. Cualquier método puede modificar estos valores, incluso accidentalmente y no podemos obtener ningun tipo de información que nos alerte sobre esto.
Para evitar este problema debemos recurrir a la encapsulación, proceso mediante el cual podemos proteger nuestros atributos. Veamos cómo quedaría la clase Gato si encapsulamos sus atributos:
public class Animal{
private String nombre; // Atributo nombre, de tipo String, modificador de acceso privado.
private int edad; // Atributo edad, de tipo entero, modificador de acceso privado.
public Animal(){ // Constructor vacío, que permite la instanciación vacía de esta clase como objeto.
}
// Método que no retorna ningún valor, y que imprime por pantalla "Grraaah!".
public void emitirSonido(){
System.out.println("Grraaah!");
}
public void setNombre(String nombre){ // Método Setter para manipular el atributo nombre de forma segura.
this.nombre = nombre;
System.out.println("Se ha modificado el nombre del Gato a: " + nombre);
}
public String getNombre(){ // Método Getter para obtener el atributo nombre de forma segura.
return this.nombre;
}
public void setEdad(int edad){ // Método Setter para manipular el atributo edad de forma segura.
this.edad = edad;
System.out.println("Se ha modificado la edad del Gato a: " + edad);
}
public int getEdad(){ // Método Getter para obtener el atributo edad de forma segura.
return this.edad;
}
}
Ahora ya no podemos acceder a los atributos de la clase Gato porque son privados. Veamos cómo tendríamos que hacerlo desde la clase EntrenarAnimal:
public class EntrenarAnimal{
public static void main(String[] args){
Gato garfield = new Gato(); // Se crea una instancia de tipo Gato, un objeto.
garfield.setNombre("Garfield"); // Se establece el nombre del gato.
garfield.setEdad(4); // Se establece la edad del gato.
System.out.println("El gato se llama " + gato.getNombre() + ", tiene " + gato.getEdad() + " años, y dice ");
gato.emitirSonido();
}
}
De esto podemos entender lo siguiente:
Espero que con este ejemplo y esta explicación, ya tengas más claridad sobre las virtudes del encapsulamiento y los métodos Setter y Getter.