Pregunta Mejores prácticas de modificación de acceso en C # frente a Java


Entiendo que la regla general en OOD es minimizar el acceso a todos los miembros de un objeto dado lo mejor que se pueda lograr razonablemente.

C # y Java parecen implementar el mismo conjunto de modificadores de acceso; sin embargo, algo que me ha desconcertado por algún tiempo es por qué las clases de Java parecen ser mayormente declaradas como públicas, mientras que las clases de C # parecen ser declaradas como predeterminadas.  ¿Hay alguna sutileza en estos lenguajes que impone estas diferencias, o es simplemente una cuestión de convención o qué?

Me encuentro con frecuencia revisando mi código C # (hago habitualmente la mayoría de las clases, exceptuando las clases internas, anónimas y otras clases de alcance y utilidad) en un intento por complacer al compilador, sin embargo, me pregunto si me puede estar perdiendo algo importante.


6
2017-08-18 19:28


origen


Respuestas:


El alcance de Java es ligeramente diferente de C # 's scoping.

Esto se habla brevemente en C # desde la perspectiva de un desarrollador de Javaes lo mismo, pero diferente: Modificadores de acceso. Este documento está ligeramente anticuado ahora, pero sigue siendo principalmente relevante.

Esa lista tiene dos errores:

  1. C # 's internal es equivalente al alcance predeterminado de Java (que es su propio alcance).
  2. C # 's internal protected es equivalente a Java protected.

Además, el documento anterior no menciona cuáles son los modificadores de acceso predeterminados para las clases, solo para los métodos y propiedades / variables.

Como referencia, el alcance predeterminado para las clases en c # es interno. Java es su alcance predeterminado habitual, como se describió anteriormente.


6
2017-08-19 13:37



Creo que respondiste tu pregunta. Según Joshua Bloch, "La regla de oro es simple, hacer que cada clase o miembro sea lo más inaccesible posible". Java efectivo


5
2017-08-18 19:34



Las únicas cosas que hago públicas son variables estáticas / finales, que generalmente son constantes. Todo lo demás es privado, y el acceso se realiza a través de los métodos getXXX () y setXXX (), cuando corresponda. Los métodos setXXX () también realizan cualquier validación contra los datos. Si tengo que hacer algo protegido, lo haré, pero generalmente lo evito.


1
2017-08-18 19:32



Menos "cliente" (otro código) sabe sobre el funcionamiento interno de sus clases, se beneficiará más ... Regla de abstracción simple, y un pilar fundamental de OOP. La respuesta correcta ya está dada arriba:

"La regla de oro es simple, hacer que cada clase o miembro sea lo más inaccesible posible". ~ Joshua Bloch


0
2017-08-18 20:15



Preguntas populares