
victor rodriguez
PreguntaTengo una duda, tengo entendido que los métodos set y get se crean para que se pueda acceder a las instancias con el “.” y así modificar valores. Ahora, si en el main (y sin crear ningún set ni get) creamos una nueva instancia de la clase ya podemos acceder a los atributos del objeto con el operador “.” y setear los valores con una simple asignación. Entonces,¿para que crear los Setter y Getters si no son realmente necesarios?
- Public: Cualquier clase lo puede manipular
- Protected: Lo pueden manipular solo clases del mismo tipo (hermanas)
- Private: Solo lo manipula y accede desde la propia clase

victor rodriguez
Gracias hermano

jose zuñiga
Bueno primero hay que entender que la finalidad de encapsular es la de proteger atributos que darán funcionalidad a nuestra clase (básicamente todo lo que no deseamos o no es necesario conocer por parte del usuario de la clase. ¡Hay que protegerlo!). Hay tres niveles de protección:
Estos niveles se entienden mejor con la herencia (próximas clases del curso). Los public siempre se heredan, los protegidos los usan clases hermanas y los private solo los usaran los padres.
Ahora bien por convención para decir que un atributo es protegido usamos un guion bajo _atributo y dos para private __atributo. Sin embargo esto da una restricción de uso superficial que aún puede ser vulnerada fácilmente. Así que se usan decoradores para hacer que una función encapsule el atributo @property.
Bueno aquí es donde entra en juego el asunto de set y get, al hacer que nuestro atributo este encapsulado, es necesario que podamos acceder de alguna manera al atributo, digamos que set y get son métodos públicos (cualquiera los puede usar), que al ser públicos si los pueden invocar desde otras clases y por medio de ellos podemos cambiar 'setter' o pedir un dato 'getter'. Los puedes ver como un puente que comunica el interior de la capsula con el exterior.
Llegados a este punto uno puede decir: pero si oculto algo pero doy una manera de que cualquiera pueda ver y cambiar su contenido ¿para que este proceso tan tedioso?. Esto te lo respondo como novato en este mundo, como lo veo al tender el puente (setter y getter) te aseguras que solo tengas una sola vía por donde ingresar a tu capsula, así que es donde entra en juego los controles y restricciones que puedes agregar (claves y condicionales restrictivos). En la clase se usa la condición que la región a ingresar debe estar en la lista que se declaro para el objeto. Si no esta no te permitirá cambiar el dato.
Bueno creo que me extendí demasiado, en la sección de preguntas deje un análisis de lo que entendí de esta clase, quizá te sirva.