Correcto, excepto por un detalle: no se hacen para evitar modificaciones, sino para evitar modificaciones
no controladas.
Siguiendo el ejemplo del email que pegué antes, seguramente querrás que una variable que guarde un correo electrónico contenga al menos una @, y si no lo contiene que el valor no se guarde.
Si dejás que el usuario (usuario del método, quiero decir) acceda directamente al atributo, no tenés control sobre el valor que pueda contener.
Ese es el motivo del "set".
El motivo del "get" es permitirte enviar solamente la parte que te interesa del valor del atributo. Por ejemplo, suponiendo que tengas un atributo "fecha":
fecha = "28/08/2008"
podrías tener un método getFecha() que te devolviera algo como:
"Jueves 26 de Agosto de 2008"
que no es el valor real de fecha, pero probablemente sea el valor que te interesa.
Repito que los nombres son totalmente arbitrarios, si en vez de "getFecha" quiero que el método se llame "soyAlvlin()", funcionará de la misma forma (aunque no será muy intuitivo para leer el código
).
A propósito, en mi primer mensaje hice mención a una página cuyo enlace me olvidé de pegar, es ésta:
http://tomayko.com/writings/getters-setters-fuxors
Saludos.