programing concepts oop encapsulation

oop - concepts - ¿Por qué métodos "privados" en el objeto orientado?



oop concepts (7)

Bueno, en algunos casos, solo quiere que esa clase específica use un método, y lo protege de ser utilizado por cualquier otra clase.

Solo un ejemplo para mostrar cómo se puede usar:

Usted tiene un reloj de clase, se ejecuta y se ejecuta siguiendo la hora y la fecha. Puede obtener la hora o fecha a través de métodos públicos. Pero el reloj tiene que estar bien. por lo que no puede ajustar la hora o la fecha desde fuera de la clase. Pero el reloj en sí necesita poder ajustar el tiempo (por ejemplo, el horario de ahorro de energía)

En este caso, el reloj tendrá un método privado para ajustar la hora.

Entonces también tienes un profesional adicional, que es estructurar el código . Puede dividir su código en métodos privados más pequeños que estructuran el código pero evitan que se utilicen fuera de su clase.

Entiendo que es un concepto muy básico en el ¡Uy! Pero todavía no puedo entender. Entendí por qué las variables de los miembros son privadas, por lo que el usuario de la clase no puede abusar de ellas configurando valores no válidos.

Pero, ¿cómo puede esto aplicarse a los métodos?


Los métodos privados son útiles para dividir las tareas en partes más pequeñas, o para evitar la duplicación de código que a menudo se necesita con otros métodos en una clase, pero que no se debe invocar fuera de esa clase.


Los métodos que son privados solo pueden invocarse mediante métodos dentro de la misma clase o dentro del mismo "módulo". Los métodos generalmente no se hacen privados; generalmente se protegen para que los niños puedan llamarlos, o de manera pública para que otros códigos puedan llamarlos.


Los métodos también se usan para estructurar código, y no quiero que la estructura interna de mi implementación se filtre a través de la interfaz. A menudo tengo un método que para el exterior parece hacer una sola tarea, pero en realidad tiene que realizar un par de tareas más pequeñas. En tales casos, hago un pequeño método privado para cada una de las subtareas y las llamo desde el método públicamente visible.


Muchas buenas respuestas, pero tal vez una más de un programador de Java autodidacta, ya que pasé por todo eso solo con mucho dolor;)

Piensa en una clase como algo visto desde fuera, no como algo que ves internamente . Si miras a una Clase desde el exterior, ¿qué ves?

Tomando nuevamente el reloj como ejemplo, un reloj puede darle información sobre la hora actual y puede configurarse para mostrar el momento correcto .

Entonces, mirando las cosas desde afuera, un reloj es una máquina que puede hacer esas dos cosas; métodos públicos que los llamamos .

Pero nosotros como constructores de este reloj sabemos que antes de cualquier operación de tiempo tenemos que cambiar de 23 a 11 en nuestra pantalla (es ese tipo de reloj), así que tenemos que reorganizar las cosas internamente un poco para hacerlo. Cambiar de 23 a 11 funciona muy bien para nosotros en ambos casos, configurando el reloj y mostrando la hora actual, pero lo hacemos "de costado" ya que el usuario no tiene que saber acerca de todas las matemáticas complicadas. ¡Estos son métodos privados!

Así que nuestra Clock Class podría tener dos métodos públicos ( showTime y setTime ) que son todo lo que el usuario desea ver, y un método privado ( recountTime ) que proporciona funcionalidad para estos métodos públicos y es algo que el usuario no quiere ver. .

Por lo tanto, por un lado, debe tener en cuenta que lo privado no se volverá a implementar y que los futuros programadores utilizarán su código (como se señaló en las respuestas anteriores). Pero privado también significa cosas hechas en un lado, por lo que el usuario no lo ve . Es por eso que llamamos a los métodos públicos una interfaz pública , es todo lo que el usuario verá desde el exterior.

Para mí es útil (soy autodidacta, así que tal vez no sea una metodología muy popular ...) escribir todo lo que los usuarios (usuarios reales y otras clases) harán con mi clase (interfaz pública con solo métodos públicos) ''firmas''), luego escriba las firmas de métodos privados que I-the-implementment usará para lograr los objetivos públicos que prometió proporcionar a mis usuarios y luego simplemente cumplirlos con el código.

Puede ser útil tener en cuenta que la antigua regla C todavía es válida (como se expresó en 97 Cosas que todo programador debería saber ): ¡una función / método debería tener solo unas pocas líneas, realmente!


Por la misma razón: algunos métodos solo están destinados a ser utilizados dentro de la clase, y el uso por parte de objetos que no pertenecen a la clase sería un abuso. Piense en los métodos que incrementan y disminuyen el recuento de objetos para la clase; estos solo deben invocarse desde los constructores o el destructor de una clase, y por lo tanto deben ser privados.


Teniendo todas las otras respuestas en mente. Vale la pena recordar que el método privado es solo un consejo para un programador en muchos idiomas. En la mayoría de los casos, aún es posible usar el método privado. Por ejemplo, al crear un objeto que hereda de un objeto con método privado y anula su método con el nuevo método público.

En algunos lenguajes modernos altamente orientados a objetos, los métodos privados existen solo por convención. El método con ''_'' al comienzo se considera privado.