En primer lugar, tenga en cuenta que soy C ++ y Python, no Java, por lo que algo de esto puede no aplicarse del todo. Corríjame si hago algunas suposiciones incorrectas sobre cómo funcionan las clases en Java.
Las clases son principalmente útiles cuando se instancian. Una clase de la cual no se crean instancias es realmente solo un espacio de nombres glorificado. Si usa todas sus clases de esta manera, los beneficios de mover cosas de un espacio de nombres a otro pueden parecer insignificantes; a lo sumo, ganará al tener algunos datos privados en cada uno y, por lo tanto, encapsulará un poco las cosas.
Sin embargo, aquí no es donde brillan las clases. Considere la String
clase: podría tener las mismas características usando char
matrices y algunas funciones estáticas. En este punto, las funciones le brindan un poco más de seguridad y azúcar sintáctica. Puedes escribir en string.length()
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
, fue creado con el String
constructor y que debe funcionar con la length
función: si la versión de matriz no puede manejar algún carácter, entonces no tiene forma de evitar que lo coloque allí .
Sin embargo, todavía no es así. El punto clave es que las clases agrupan datos y funciones que operan en él y abstraen ambos. Cuando tiene un método void f(Builder b)
que sabe que obtendrá Builder
, y puede esperar que respalde cierto comportamiento. Sin embargo, no sabe nada de datos o de las funciones que se están ejecutando; de hecho, las definiciones para ambos pueden no escribirse aún mientras escribe y compila f
.
El primer punto a entender es, por lo tanto, que las clases hacen que sea conveniente pasar datos mientras se aseguran de que no se rompan. El segundo punto es que tanto qué datos como qué función (implementaciones) tiene un objeto es algo sobre el objeto, no algo que simplemente se puede distinguir de su tipo.