DEV Community

Elías Canales
Elías Canales

Posted on

No utilices atributos públicos

Cuando estes definiendo tu código, piensa que cuanto menos acceso se tenga a tus clases, métodos o atributos, más fácil será hacer modificaciones y menos partes de tu código se verán afectadas.

De ahí nace la idea de no dejar tus atributos como públicos. Aunque siempre hay excepciones. Más adelante hablaremos de esas excepciones, ahora centrémonos en las ventajas de no hacerlo público, y seguramente alguna vez te has preguntado qué sentido tiene tener getter y setter (llenando tus clases de métodos ‘vacios’).

Lo cierto es que, la mayoría de las veces, eso no tiene ningún sentido, porque esos métodos no aportan gran cosa.
Tenemos la suerte de que pueden ser generados por librerías como Lombok.

Pero la idea de esos métodos nace principalmente de que podemos hacer acciones, tanto al obtener como al establecer valor.

Aunque no sea lo ideal, imagina que una de tus clases es muy utilizada a través de sus métodos setter y getter.
En uno de los desarrollos te has dado cuenta que necesitas cambiar el tipo. Quieres cambiarlo para todo el código porque encuentras que a largo plazo es una muy buena solución.

Si el atributo es público, tendrás que cambiar todos los lugares donde se usa. En cambio, si accedes mediante métodos, puedes usar sobrecarga para seguir devolviendo o estableciendo el valor como antes, sin tocar el código cliente, modificando solo tu clase.

Como te dije antes hay excepciones, la excepción es cuando la clase tiene acceso de paquete privado. Es decir, a una clase podemos ponerle el modificador de acceso public o dejarla sin modificador de acceso.

Cuando la dejamos sin modificador, entonces tenemos una clase de acceso privado que solo es accesible en ese paquete (por supuesto, también podemos tener clases anidadas en ese caso esto también aplica).
Cuando la clase es de acceso privado, somos nosotros los que controlamos en un pequeño espacio (el paquete), quien y cómo la utiliza, y por tanto, podemos usar el acceso público.

En principio para las clases inmutables, deberíamos hacer lo mismo que con las clases mutables, para poder beneficiarnos de las mismas ventajas.

Referencias
Joshua Bloch, Effective Java (3ª edición), Addison-Wesley, 2018.

Top comments (0)