Veo que se sigue utilizando el término "usuario" como consumidor final del programa, o como se utiliza en desarrollo web, pero en este contexto el usuario es aquél que interactúa con el código fuente, o sea un compañero de trabajo por ejemplo. Los getters y setters tienen como función real la restricción de los atributos para no modificarlos accidentalmente, y no para "modificaciones malintencionadas". Creo que aunque sea explicado así con fines pedagógicos, finalmente termina confundiendo. El usuario en tanto consumidor final del programa no interactúa con el código, sino con la interfaz gráfica o con el método de entrada que se le permita. Un ataque malintencionado no es frenado mediante un getter o setter. Los usuarios en tanto desarrolladores de software de un equipo si interactúan con el código directamente y los getters y setters principalmente evitan modificaciones indeseadas. Abrazos!