encapsulamiento java
encapsulamiento java

En encapsulamiento es un principio del lenguaje Java cuya filosofía es hacer que los atributos de las clases se puedan editar sólo a través de métodos. De manera general, se hace teniendo las propiedades como privadas y métodos que la controlan públicos. Comúnmente, se crean un grupo de métodos llamados getters (se encargan de obtener el valor de la propiedad) y setters (se encargan de setearla).

Mantener las clases con el principio de encapsulamiento nos permite controlar el cambio de valor que pueda producirse en ellas añadiendo validaciones. De cualquier manera, es una convención dentro de la programación orientada a objetos aunque no se esté realizando una operación adicional al cambio de valor. Veamos un ejemplo:

public class Gato {
    public String nombre;
    public int patas;
}

//Mi método main...
Gato g = new Gato();
g.nombre = "Nemo";
g.patas = 4;
System.out.println("Mi gato se llama: " + g.nombre);
System.out.println("El número de patas de mi gato es: " + g.patas);

En este caso, no se ha aplicado el principio de encapsulamiento, por lo que cualquier otro desarrollador con visibilidad de nuestra clase, puede cambiar las propiedades del mismo tan sólo con acceder a ellas, de manera muy simple.

Veamos la misma clase, con el principio de encapsulamiento

public class Gato {
    private String nombre;
    private int patas;
    public getNombre(){ return nombre;}
    public getPatas(){ return patas;}
    public setNombre(String nuevoNombre){ nombre = nuevoNombre;}
    public setPatas(int numeroPatas){ patas = numeroPatas;}
}

//Mi método main...
Gato g = new Gato();
g.setNombre("Nemo");
g.setPatas(3);
System.out.println("Mi gato se llama: " + g.getNombre());
System.out.println("El número de patas de mi gato es: " + g.getPatas());

Tras aplicar el principio de encapsulamiento, ya no tenemos acceso a las propiedades directamente, por lo que tenemos que usar los métodos (que son públicos y sí tenemos acceso a ellos) para poder acceder a las variables, tanto para modificarlas como para obtenerlas. El comportamiento es el mismo, aunque lleve un código adicional

¿Por qué debemos aplicar el principio de encapsulamiento?

Por mantenibilidad, estabilidad y seguridad principalmente. Un segundo equipo va a usar nuestra aplicación y por tanto nuestras clases. Nosotros conocemos perfectamente la funcionalidad, y entre todas las cosas que sabemos y asumimos, una de ellas es que los gatos no tienen más de 4 patas (o menos de 0). Pero sin embargo, según la estructura del lenguaje Java, no hay nada que no impida a un desarrollador hacer esto (No con nuestra clase actual):

g.setPatas(10);
g.setPatas(-50);

Por lo tanto, se nos ocurre, actualizar el método «setPatas» de nuestra clase Gato para que quede así:

public void setPatas(int numeroPatas){
    if(numeroPatas>=0 && numeroPatas<5){
        patas = numeroPatas;
    } else {
        throw new IllegalArgumentException("Número de patas no válido");
    }
}

Con esta actualización del método, el segundo (tercer, cuarto, quinto..) equipo que use nuestra clase gato, no va a variar su código (estabilidad) , seguirá llamando al método setPatas (mantenibilidad), y nosotros controlaremos que el número sea entre 0 y 4 (seguridad). Si volvemos a la primera versión de la clase, no nos permitiría añadir este tipo de controles a posteriori sin hacer cambiar todos los usos de nuestra clase.

Aunque parezca un ejemplo tonto (y un poco cruel para los gatos) no es raro en Java encontrarte que tienes que trabajar con librerías que no conoces, que respetan el principio de encapsulamiento y que gracias a él puedes hacer un correcto funcionamiento de la misma, ya que controlará que no te salgas del tiesto, con valores inválidos, errores o incluso validando los datos con los que se crea.

Java Básico Encapsulamiento
Etiquetado en:        

6 pensamientos en “Java Básico Encapsulamiento

  • 26 mayo, 2019 a las 7:14 pm
    Enlace permanente

    Muchas gracias!! No etendía PARA QUÉ se usa el encapsulamiento pero entrando a esta página terminé de entenderlo 🙂

    Responder
  • 12 agosto, 2021 a las 6:40 pm
    Enlace permanente

    Brutal la dinámica que usa usted para explicar: supremamente clara, explícita y puntual.
    Muchas gracias. <3

    Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Social media & sharing icons powered by UltimatelySocial