Tout d’abord, notez que je suis un C ++ et Python, pas Java, donc certaines de ces choses peuvent ne pas s’appliquer aussi complètement. S'il vous plaît, corrigez-moi si je pose des hypothèses incorrectes sur le fonctionnement des classes en Java.
Les classes sont principalement utiles lorsqu'elles sont instanciées. Une classe dont aucune instance n'est créée n'est en réalité qu'un espace de nom glorifié. Si vous utilisez toutes vos classes de cette manière, les avantages de déplacer des éléments d'un espace de noms à un autre peuvent sembler insignifiants. Au mieux, vous gagnerez en disposant de données privées dans chacune d'elles et en encapsulant ainsi un peu les éléments.
Cependant, ce n'est pas là que les cours brillent. Considérez la String
classe: vous pourriez avoir toutes les mêmes fonctionnalités en utilisant des char
tableaux et des fonctions statiques. À ce stade, les fonctions vous apportent un peu plus de sécurité et de sucre syntaxique. Vous pouvez écrire string.length()
au lieu de length(char_array)
; ce n'est pas très grave, mais beaucoup de gens l'aiment encore. De plus, vous savez que si quelqu'un vous en a donné un String
, il a été créé avec le String
constructeur et il doit fonctionner avec la length
fonction - si la version du tableau ne peut pas gérer un caractère, il n'a aucun moyen de vous empêcher de le mettre ici. .
Ce n'est toujours pas ça, cependant. Le point clé est que les classes regroupent les données et les fonctions qui les exploitent et les abstinent. Quand vous avez une méthode, void f(Builder b)
vous savez que vous allez en avoir une Builder
, et vous pouvez vous attendre à ce qu'elle prenne en charge certains comportements. Cependant, vous ne savez rien des données ni des fonctions en cours d'exécution. En fait, les définitions des deux ne sont peut-être pas encore écrites au moment de l'écriture et de la compilation f
.
Le premier point à comprendre est donc que les classes facilitent la transmission des données tout en veillant à ce qu'elles ne soient pas cassées. Le deuxième point est que la nature des données et la fonction (implémentations) d'un objet sont quelque chose à propos de l'objet, pas quelque chose que vous pouvez simplement dire à partir de son type.