La encapsulación simplemente significa unir el estado (campos) y el comportamiento (métodos) del objeto. Si está creando una clase, está encapsulando. En esta guía veremos cómo encapsular en un programa Java, si está buscando un ejemplo de encapsulación en la vida real, consulte esta guía: Características de OOP explicadas usando ejemplos de la vida real.
Para otros temas de programación orientada a objetos, como herencia y polimorfismo, consulte conceptos de programación orientada a objetos
Volvamos al tema.
¿Qué es la encapsulación?
La idea detrás de la encapsulación es ocultar los detalles de implementación a los usuarios. Si un miembro de datos es privado, solo se puede acceder a él dentro de la misma clase. Ninguna clase externa puede acceder a un miembro de datos privados (variable) de otra clase.
Sin embargo, si configuramos métodos públicos getter y setter para la actualización (p. Ej. void setSSN(int ssn)
) y leyes (p. ej. int getSSN()
) campos de datos privados, por lo que la clase externa puede acceder a esos campos de datos privados a través de métodos públicos.
De esta manera, solo se puede acceder a los datos con métodos públicos, ocultando los campos privados y su implementación para las clases externas. Es por eso que la encapsulación se conoce como datos ocultos. Veamos un ejemplo para comprender mejor este concepto.
Ejemplo de encapsulación de Java
Cómo implementar la encapsulación en Java:
1) Haga que las variables de instancia sean privadas para que no se pueda acceder a ellas directamente desde fuera de la clase. Puede establecer y obtener valores de estas variables solo a través de los métodos de la clase.
2) Tener métodos getter y setter en la clase para establecer y obtener valores de campo.
class EncapsulationDemo{ private int ssn; private String empName; private int empAge; //Getter and Setter methods public int getEmpSSN(){ return ssn; } public String getEmpName(){ return empName; } public int getEmpAge(){ return empAge; } public void setEmpAge(int newValue){ empAge = newValue; } public void setEmpName(String newValue){ empName = newValue; } public void setEmpSSN(int newValue){ ssn = newValue; } } public class EncapsTest{ public static void main(String args[]){ EncapsulationDemo obj = new EncapsulationDemo(); obj.setEmpName("Mario"); obj.setEmpAge(32); obj.setEmpSSN(112233); System.out.println("Employee Name: " + obj.getEmpName()); System.out.println("Employee SSN: " + obj.getEmpSSN()); System.out.println("Employee Age: " + obj.getEmpAge()); } }
Producción:
Employee Name: Mario Employee SSN: 112233 Employee Age: 32
En el ejemplo anterior, los tres miembros de datos (o campos de datos) son privados (consulte: Modificadores de acceso en Java) a los que no se puede acceder directamente. Estos campos solo son accesibles a través de métodos públicos. Campos empName
, ssn
es empAge
Los campos de datos ocultos se crean utilizando la técnica de encapsulación OOP.
Ventajas de la encapsulación
- Mejorar la capacidad de mantenimiento, la flexibilidad y la reutilización: p. Ej. En el código anterior, el código de implementación de
void setEmpName(String name)
esString getEmpName()
se puede cambiar en cualquier momento. Dado que la implementación está puramente oculta para las clases externas, aún podrían acceder al campo empName privado utilizando los mismos métodos (setEmpName(String name)
esgetEmpName()
). Por lo tanto, el código se puede guardar en cualquier momento sin romper las clases que usan el código. Esto mejora la reutilización de la clase subyacente. - Los campos se pueden hacer de solo lectura (si no definimos los métodos de establecimiento en la clase) o de solo escritura (si no definimos los métodos de obtención en la clase). Por ejemplo, si tenemos un campo (o variable) que no queremos que se cambie, simplemente definimos la variable como privada y en lugar de establecer y obtener ambos, solo necesitamos definir el método get para esa variable. Dado que el método set no está presente, no es posible que una clase externa cambie el valor de ese campo.
- El usuario no sabría lo que sucede detrás de escena. Solo sabrían que actualizar un método de conjunto de llamadas de campo y leer un método de obtención de llamadas de campo, pero lo que hacen estos métodos de conjunto y obtención está puramente oculto para ellos.
La encapsulación también se conoce como “datos ocultos“.