En primer lugar, tenga en cuenta que soy un C ++ y Python, no Java, por lo que es posible que parte de esto no se aplique tan completamente. Corríjame si hago algunas suposiciones incorrectas sobre cómo funcionan las clases en Java.
Las clases son principalmente útiles cuando se crean instancias. Una clase de la que no se crean instancias es en realidad solo un espacio de nombres glorificado. Si usa todas sus clases de esta manera, entonces, de hecho, los beneficios de mover cosas del espacio de nombres al espacio de nombres pueden parecer insignificantes: a lo sumo, ganará al tener algunos datos privados en cada una y, por lo tanto, encapsular las cosas un poco. >
Sin embargo, aquí no es donde brillan las clases. Considere la clase String
: podría tener todas las mismas características usando los arreglos char
y algunas funciones estáticas. En este punto, las funciones le brindan un poco de seguridad adicional y azúcar sintáctica. Puedes escribir string.length()
en lugar de length(char_array)
; Eso no es un gran problema, pero a muchas personas todavía les gusta. Además, sabe que si alguien le dio un String
, se creó con el constructor String
y que debe funcionar con la función length
- si la versión de matriz no puede manejar algún carácter, entonces no tiene forma de evitar que lo pongas ahí.
Aunque todavía no es así. El punto clave es que las clases agrupan datos y funciones que operan en él y lo abstraen. Cuando tiene un método void f(Builder b)
, sabe que obtendrá un Builder
, y puede esperar que admita cierto comportamiento. Sin embargo, no sabe nada de los datos o las funciones que se están ejecutando; de hecho, es posible que las definiciones de ambos no se hayan escrito aún mientras escribe y compila f
.
El primer punto que hay que entender es que las clases hacen que sea conveniente pasar los datos mientras se asegura de que no están rotos. El segundo punto es que tanto los datos como la función (implementaciones) que tiene un objeto es algo sobre el objeto, no algo que se pueda distinguir por su tipo.