2012-01-24 17 views
18

Vi un código donde los métodos getters y setters se declaran privados. Estoy tratando de descubrir la lógica detrás de esto, y realmente estoy teniendo dificultades para entender por qué los declararías como privados. Eso es exactamente lo contrario de lo que estamos tratando de lograr a través de getters y setters.¿Por qué declarar privado el método getters y setters?

Respuesta

11

me ocurren varias razones:

  • desea impedir el acceso futuro pública.

Si un programador diferente ve tu código y quiere acceder a una variable, pero no hay definidores y captadores, puede pensar que simplemente te olvidaste de ellos y los agregó ellos mismos. Sin embargo, si los declara como private, es una declaración de intenciones que dice . No deseo que estas variables se modifiquen o que se acceda desde el exterior.

  • que desea asociar establecer y obtener con otras acciones

dicen que no desea public descriptores de acceso. Pero tal vez quieras contar cuántas veces se modificó una variable privada. Es más fácil usar un setter en lugar de incrementar el conteo cada vez que accede a esa variable.

  • que quieren un punto de acceso central

Una vez más, usted no quiere public acceso, pero durante la depuración, es posible que desee poner un punto de interrupción en cada lugar se cambia un miembro private. Entonces, en lugar de establecer puntos de interrupción en todas partes de la clase, simplemente establece uno en el acceso.

8

Eso es exactamente lo contrario de lo que estamos tratando de lograr a través de getters y setters.

En realidad, no lo es. La razón para declarar getters y setters es ocultar los campos. Esto se hace para evitar el acoplamiento no deseado; es decir, clientes de una API según los detalles de implementación de la API. (Ese acoplamiento puede ser problemático por varias razones).

El motivo para hacer que getters y setters private hagan que la parte correspondiente del estado abstracto del objeto sea privada. Eso es en gran parte independiente de la decisión de usar getters y setters o no.

Si bien el uso de getters y setters no es tan fuerte para un estado privado, aún existen beneficios tangibles. Por ejemplo:

  • Los métodos getter/setter proporcionan un lugar para agregar comportamiento adicional o código de comprobación de errores.

  • También proporcionan un lugar para agregar código de depuración o código de prueba de inyección (para pruebas unitarias).

  • Se pueden anular getters y setters. No puedes hacer eso con campos (privados o no).

Cuestiones relacionadas