¿Debo usar el modificador de acceso predeterminado o no? ¿Práctica de codificación?

8

Normalmente al crear nuevas variables globales no defino su modificador de acceso. Entonces, según java, adoptará el modificador de acceso predeterminado de propiedad. Cuando necesito acceder a esa variable fuera del alcance predeterminado, cambio su modificador de acceso o lo dejo como está. Entonces, mi pregunta es " ¿Lo estoy haciendo bien? ¿Es normal tener variables de acceso predeterminadas? ¿O debería usar privado / público para ellas? ¿Es una buena práctica de codificación no usar modificadores de acceso? "

Harry Joy
fuente

Respuestas:

13

2 cosas aquí:

  1. no uses globals :)
  2. Es una práctica común / mejor asumir que todos los campos son privados a menos que haya una razón primordial para convertirlos en otra cosa, en cuyo caso se debe elegir el acceso más restrictivo (generalmente protegido).

Por supuesto, siempre hay excepciones a la regla, pero eso es lo básico para comenzar.

jwenting
fuente
¿Alguna razón específica para la primera cosa? "No uses globals".
Harry Joy el
12
Se puede acceder a Globals y modificarlo desde cualquier lugar de toda la base de código. Más de un puñado de ellos es suficiente para explotar la complejidad potencial de un programa más allá de las capacidades mentales de una persona cuerda.
tdammers
Si actúan como staticen .NET, también rompen la capacidad de prueba de la unidad; dado que una unidad que lo usa SIEMPRE dependerá de ellos y no hay forma de falsificarlos para aislar la unidad bajo prueba.
StuperUser
1
y, por supuesto, se convierten rápidamente en una pesadilla de mantenimiento. Tuve que hacer un cambio "pequeño" una vez a una aplicación plagada de cientos de globales (un valor tenía que permitir una entrada más larga, algo así). Terminamos teniendo que cambiar no una o dos, sino cientos de fuentes, cada una en docenas de ubicaciones.
Jwenting
Perdón por molestar, pero en tu segundo punto, sugieres que proteger es el acceso más restrictivo. ¡El acceso más restrictivo es el modificador de acceso predeterminado, no protegido!
oOTesterOo
5

Algunos principios generales de programación aquí:

  • Simple es mejor
  • No digas lo obvio

...pero también:

  • Explícito es mejor que implícito

No soy un experto en Java, pero la regla general debería ser: si lo que sucede es obvio para alguien familiarizado con el lenguaje sin ser explícito, use el comportamiento implícito. Sin embargo, si esto puede poner a alguien en el camino equivocado, entonces sea explícito.

tdammers
fuente
2
En Java, el acceso predeterminado es un tipo de acceso separado, por lo que si agrega un modificador de acceso, no vuelve a enunciar los accesos, lo cambia a otra cosa. Es por eso que si realmente necesita acceso predeterminado explícito, la única forma de hacerlo explícito es usar un comentario.
Malcolm
-1

Java no tiene propiedades automáticas, por lo que todos los miembros de la clase en general deben ser privados con métodos get / set para uso público, si es necesario.

Según la fuente (Oracle java Docs), este es el enfoque recomendado.

"Use el nivel de acceso más restrictivo que tenga sentido para un miembro en particular. Use privado a menos que tenga una buena razón para no hacerlo. Evite los campos públicos excepto las constantes. Los campos públicos tienden a vincularlo con una implementación particular y limitan su flexibilidad para cambiar su código ".

http://download.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

Nickz
fuente
1
Pero, ¿qué sucede si desea compartir el acceso solo con algunas cosas y no con todas (como lo publichace)?