web-dev-qa-db-fra.com

Pourquoi les variables protégées ne sont-elles pas autorisées par défaut dans CheckStyle?

Je reçois beaucoup d'avertissements à Eclipse comme ceux-ci:

La variable 'myvariable' doit être privée et avoir des méthodes accessoires.

Je pense que je les obtiens parce que je n'ai pas défini protégadifie manuellement à vrai dans Eclipse. Mais pourquoi est-il défini sur FALSE par défaut? Ne devrais-je pas utiliser des attributs protégés?

35
Martin Thoma

Les attributs théoriquement, protégés (variables) sont un anti-motif dans les langues orientées objet. Si seules les sous-classes doivent accéder aux attributs membres de sa superclasse, définissez les attributs eux-mêmes comme des méthodes privées et créées des accessores protégées (getter et setter). Cette approche applique le concept de "cachette d'information". Il existe une solution alternative: définir des attributs de membre immuable (final) protégés.

D'autres lectures:

27
home

Je suppose que tout fait de tout privé est un anti-motif. Souvent, les classes sont utilisées dans un groupe et dans son ensemble représentent une entité encapsulée placée dans un emballage séparé. Ils n'ont pas besoin de cacher quelque chose les uns des autres, mais cette règle applique la dissimulation sans bonne raison, augmenter l'encombrement et la fabrication efficacement (comme je le comprends) pire. Pendant ce temps, nous voyons souvent que chaque classe dans le paquet est public. Je suppose que cela est bien pire, mais la vérification ne vérifie pas cela.

L'encapsulation existe non seulement sur le niveau de la classe, également sur le paquet, le système, etc. Et je pense que ces niveaux sont encore plus importants.

19
Rorick

Autoriser l'accès au paquet simplifie la programmation dans un package et réduit le code de la chaudron. Souvent, l'accès n'est nécessaire qu'à partir de l'emballage. L'accès privé vous oblige à créer beaucoup de méthodes d'accessor presque inutiles. Cela a en fait pour effet de réduire l'encapsulation et la masquage d'informations, car une classe doit exposer une application de données/structure interne à l'échelle au lieu de simplement emballer des méthodes d'accessoir publics. La visibilité du package par défaut facilite également les tests car les classes de test vivent dans le même package également (dans Test Dir/Tree).

7
John Hogan