JavaRush /Blog Java /Random-ES /Getters y encapsulación rota
Vadelic
Nivel 14
Пасадена

Getters y encapsulación rota

Publicado en el grupo Random-ES
Mientras resolvía problemas, encontré un comportamiento inesperado de los captadores. En las conferencias aquí e incluso en los captadores generados por IntelliJ IDEA, se utiliza el esquema más simple: public final class A { private A field; public A getField() { return field; } public void setField(A field) { this.field = field; } } si el campo es un tipo primitivo o cadena, que se pasa por valor, entonces todo está bien, pero si el objeto se pasa por referencia, entonces resulta que a través del captador puede obtener acceso completo al campo, lo que anula el nivel de acceso protegido establecido. Si el definidor contiene alguna condición de validez, entonces se puede omitir mediante dicho captador, lo que viola la encapsulación y sería correcto crear un clon del objeto para evitar este problema. Entiendo que no todos los objetos se pueden clonar fácilmente, y si esto se deja bajo la responsabilidad del programador, entonces es extraño por qué no se mencionó esto en ninguna parte de las conferencias. UPD: Un captador, como idea, por supuesto, no viola la encapsulación, pero debe escribirse de tal manera que no traicione los principios de la programación orientada a objetos. Esto significa que si un captador produce un objeto, lo hace de tal manera que el usuario no puede cambiarlo de ninguna otra manera especificada en la clase. Hay un método maravilloso en la clase Colecciones que produce una colección de solo lectura. Esto impone una serie de restricciones más, por ejemplo, la imposibilidad de ordenar, pero para este caso esta clase tiene: unmodifiableSortedSet unmodifiableSortedMap y algunas más, para mayor comodidad. public static Collection unmodifiableCollection(Collection c)
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION