2 votes

L'encapsulation des méthodes/champs d'une classe est-elle importante s'ils ne sont accessibles que par la classe elle-même ?

Bref contexte : J'ai fait un clone de tetris en java (toutes les données et méthodes du jeu sont des classes) et je me demande si l'encapsulation est importante dans ce cas.

Presque tous les champs et méthodes sont marqués comme "par défaut", sans getters ni setters, car l'utilisateur n'est pas censé y accéder.

Les méthodes manipulent les variables directement sans passer d'arguments, bien sûr seulement si la chose qu'elles manipulent est unique (il ne peut pas y avoir deux pièces courantes, deux listes de blocs suivants, deux pièces retenues et ainsi de suite).

  1. Ai-je vraiment besoin de getters et setters si l'utilisateur n'est jamais censé obtenir des membres bruts de la classe ? Les méthodes se contentent d'obtenir et de définir directement les valeurs. Si j'ai un simple int que je veux obtenir ou définir, je le fais directement.

  2. Pas de valeur de retour, si une chose exacte est censée se produire à chaque fois. Par exemple : si une collision se produit pendant le spawning, gameOver() est déclenché immédiatement au lieu de retourner false, puis de le faire en dehors de la fonction. J'ai choisi de ne pas avoir de valeur de retour parce qu'il est beaucoup plus simple de le faire à l'intérieur de la fonction au lieu d'entourer chaque appel de fonction d'une déclaration if faisant la même chose.

Dois-je corriger certaines de ces choses, et comment le faire, en préservant la stabilité de la lisibilité et des performances ?

0voto

displayName Points 1447

Ce n'est pas le cas.

Pourquoi ? L'idée est que les champs et les méthodes d'une classe travaillent conjointement à un objectif commun. Ils ne sont donc pas des ennemis ou des acteurs négligents contre lesquels vous devez vous protéger.

C'est uniquement pour éviter que des acteurs externes ne viennent perturber les invariants de la classe que vous cachez vos champs et méthodes autant que possible et que vous n'exposez que ce qui est nécessaire.

Si vous devez utiliser des setters et des getters pour imposer la discipline dans le code d'une classe, alors vous avez des problèmes bien plus importants à gérer que le maintien d'une encapsulation correcte (et d'autres principes OO).

0voto

RStevoUK Points 414

Non, vous n'avez pas besoin de getters et setters si vous n'avez pas l'intention d'accéder aux variables membres depuis l'extérieur de la classe.

Dans votre cas, étant donné que les variables membres ne sont accessibles qu'à partir de la classe elle-même, le ou les modificateurs d'accès doivent être changés en private .

L'utilisation de la default signifie que vous ne voulez pas fournir de modificateur d'accès et que cette variable doit être disponible pour toute autre classe du même paquet.

Plus d'informations sont disponibles Aquí

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X