montón de buenas respuestas, pero tal vez uno más de un programador autodidacta Java como pasé por todo eso por mí con mucho dolor;)
pensar en una clase como algo visto desde el exterior , no como algo que ves internamente. Si miras a una Clase desde el exterior, ¿qué ves?
Tomando de nuevo el reloj como un ejemplo, un reloj puede le dan información sobre la hora actual y puede ser configurar para mostrar el momento adecuado.
Mirando las cosas desde el exterior, un reloj es una máquina que puede hacer esas dos cosas; métodos públicos 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 un poco las cosas internamente. Cambiar de 23 a 11 funciona bien para nosotros en ambos casos - configurar el reloj y mostrar la hora actual - pero lo hacemos "en el lado" ya que el usuario no tiene que saber acerca de todas las matemáticas complicadas. ¡Estos son métodos privados!
Así que nuestra clase Clock
podría tener dos métodos públicos (showTime
y setTime
), que son todo lo que el usuario quiere a ver, y un método privado (recountTime
) que proporciona funcionalidad para estos métodos públicos y es algo que el usuario no quiere para ver.
Por un lado, debe tener en cuenta que lo privado no se volverá a implementar y los futuros programadores accederán utilizando su código (como se señaló en las respuestas anteriores). Pero privado también significa cosas hechas en el lateral, 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 quizás no es una metodología muy popular ...) anotar todo lo que los usuarios (usuarios reales y otras clases) harán con mi Clase (interfaz pública) con solo las firmas de métodos públicos), luego escriba las firmas de los métodos privados que I-the-implementador utilizará para lograr los objetivos públicos que prometió proporcionar a mis usuarios y luego simplemente cumplir con el código.
Puede ser útil tener en cuenta que la regla C anterior sigue siendo válida (como se expresó en 97 Things Every Programmer Should Know): una función/método debería tener solo unas pocas líneas, realmente !!
Para evitar que el programador escriba métodos públicos que se desplazan para siempre en la dirección vertical. Necesita métodos privados para dividir las implementaciones de su método público en fragmentos legibles/mantenibles/cohesivos/reutilizables (DRY): cada fragmento es idealmente un método privado con un nombre revelador de intención. – Gishu
Gracias por todos sus comentarios .. Recibí la respuesta, que estaba en mi cabeza desde hace mucho tiempo. Stackoverflow es realmente útil. – pointlesspolitics
Es importante señalar que la mayoría de las veces probablemente no desee realmente un método 'privado', sino un método' protected'. ([Diferencia] (https://stackoverflow.com/questions/224966/private-and-protected-members-c)) – rinogo