Encapsulación de Java
Encapsulación
El significado de Encapsulación es asegurarse de que los datos "sensibles" estén ocultos para los usuarios. Para lograr esto, debes:
- declarar variables/atributos de clase como
private
- proporcionar métodos públicos get
y set para acceder y actualizar el valor de una
private
variable
Obtener y establecer
En el capítulo anterior aprendiste que private
solo se puede acceder a las variables dentro de la misma clase (una clase externa no tiene acceso a ellas). Sin embargo, es posible acceder a ellos si proporcionamos métodos públicos de obtención y configuración .
El get
método devuelve el valor de la variable y el set
método establece el valor.
La sintaxis para ambos es que comienzan con get
o set
, seguido del nombre de la variable, con la primera letra en mayúscula:
Ejemplo
public class Person {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
Ejemplo explicado
El get
método devuelve el valor de la variable name
.
El set
método toma un parámetro ( newName
) y lo asigna a la
name
variable. La this
palabra clave se utiliza para referirse al objeto actual.
Sin embargo, como la name
variable se declara como private
, no
podemos acceder a ella desde fuera de esta clase:
Ejemplo
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.name = "John"; // error
System.out.println(myObj.name); // error
}
}
Si la variable se declarara como public
, esperaríamos el siguiente resultado:
John
Sin embargo, cuando intentamos acceder a una private
variable, obtenemos un error:
MyClass.java:4: error: name has private access in Person
myObj.name = "John";
^
MyClass.java:5: error: name has private access in Person
System.out.println(myObj.name);
^
2 errors
En su lugar, usamos los métodos getName()
y para acceder y actualizar la variable:setName()
Ejemplo
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.setName("John"); // Set the value of the name variable to "John"
System.out.println(myObj.getName());
}
}
// Outputs "John"
¿Por qué encapsulación?
- Mejor control de los atributos y métodos de clase.
- Los atributos de clase se pueden hacer de solo lectura (si solo usa el
get
método) o de solo escritura (si solo usa elset
método) - Flexible: el programador puede cambiar una parte del código sin afectar otras partes
- Mayor seguridad de los datos