Una de las formas en que podemos hacer cumplir encapsulación de datos es a través del uso de accesores y mutadores. El papel de los accesores y mutadores es devolver y establecer los valores del estado de un objeto. Aprendamos a programar accesores y mutadores en Java. Como ejemplo, usaremos un Clase de persona con el estado y el constructor ya definidos:
Métodos de acceso
Un accesor El método se utiliza para devolver el valor de un campo privado. Sigue un esquema de nomenclatura que antepone la palabra "get" al comienzo del nombre del método. Por ejemplo, agreguemos métodos de acceso para nombre, segundo nombre y apellido:
Estos métodos siempre devuelven el mismo tipo de datos que su campo privado correspondiente (por ejemplo, Cadena) y luego simplemente devuelven el valor de ese campo privado.
Ahora podemos acceder a sus valores a través de los métodos de un objeto Person:
Métodos mutantes
Se utiliza un método mutador para establecer un valor de un campo privado. Sigue un esquema de nomenclatura que antepone la palabra "set" al comienzo del nombre del método. Por ejemplo, agreguemos campos mutantes para dirección y nombre de usuario:
Estos métodos no tienen un tipo de retorno y aceptan un parámetro que es el mismo tipo de datos que su campo privado correspondiente. El parámetro se usa para establecer el valor de ese campo privado.
Ahora es posible modificar los valores para la dirección y el nombre de usuario dentro del objeto Persona:
¿Por qué usar accesorios y mutadores?
Es fácil llegar a la conclusión de que podríamos cambiar los campos privados de la definición de clase para que sean públicos y lograr los mismos resultados. Es importante recordar que queremos ocultar los datos del objeto tanto como sea posible. El extra buffer proporcionado por estos métodos nos permite:
- Cambiar cómo se manejan los datos detrás de escena.
- Imponer la validación a los valores en los que se establecen los campos.
Digamos que decidimos modificar la forma en que almacenamos los segundos nombres. En lugar de solo una cadena, ahora podemos usar una matriz de cadenas:
La implementación dentro del objeto ha cambiado pero el mundo exterior no se ve afectado. La forma en que se llaman los métodos sigue siendo exactamente la misma:
O, supongamos que la aplicación que utiliza el objeto Persona solo puede aceptar nombres de usuario que tengan un máximo de diez caracteres. Podemos agregar validación en el mutador setUsername para asegurarnos de que el nombre de usuario cumple con este requisito:
Ahora, si el nombre de usuario pasado al setUsername mutator tiene más de diez caracteres, se trunca automáticamente.