Una gran cantidad de personas han mencionado que encapsula las características específicas de la aplicación, que para mí es la La razón más importante para usar getters y setters en una clase. Con esto, también obtendrá una gran cantidad de otros beneficios, incluida la capacidad de descartar y reemplazar la implementación por un capricho sin necesidad de tocar cada parte del código que utiliza su clase. En un proyecto pequeño, eso no es un gran beneficio, pero si su código termina siendo una biblioteca bien utilizada (interna o pública), puede ser un gran beneficio de .
Un ejemplo específico: números complejos en matemáticas. Algunos idiomas los tienen como característica de lenguaje o marco, otros no. Usaré una clase mutable como ejemplo aquí, pero podría ser tan fácilmente inmutable.
Se puede escribir un número complejo en el formulario a + bi
con partes reales e imaginarias, que se presta bien a [gs]etRealPart
y [gs]etImaginaryPart
.
Sin embargo, en algunos casos es más fácil razonar sobre números complejos en la forma polar re^(iθ)
, dando [gs]etRadius
(r) y [gs]etAngle
(θ).
También puede exponer métodos como [gs]etComplexNumber(realPart, imaginaryPart)
y [gs]etComplexNumber(radius, angle)
. Dependiendo de los tipos de argumento, estos pueden o no necesitar nombres diferentes, pero luego el consumidor de la clase puede usar cualquiera que se adecue a sus necesidades.
Las dos formas son intercambiables; puede convertir fácilmente de uno a otro, por lo que la forma que utiliza la clase para el almacenamiento interno es irrelevante para los consumidores de esa clase. Sin embargo, los consumidores pueden usar cualquier forma. Si elige el formulario a + bi para la representación interna, y expone que usar campos en lugar de getters y setters, no solo fuerza a los consumidores de la clase a usar ese formulario, sino que tampoco puede cambiar fácilmente de opinión y reemplazar el interno representación con re^(iθ) porque resulta más fácil de implementar en su escenario particular. Estás atrapado con la API pública que has definido, que exige que específicamente las partes reales e imaginarias se expongan usando nombres de campos específicos.
ver esto http://stackoverflow.com/a/1568230/985143 –
duplicado exacto @ZazGmy –
La verdad es que los [gs] etters son una gran carga y realmente debe sopesar el costo y el beneficio en cada caso. ¡Hay ejemplos donde los campos públicos (especialmente si puedes hacerlos definitivos!) Son la manera correcta. –