94 votes

Vous ne devez jamais utiliser protégé variables membres?

Vous ne devez jamais utiliser protégé variables membres? Quels sont les avantages et quels problèmes cela peut-il provoquer?

71voto

Allain Lalonde Points 28717

Vous ne devez jamais utiliser protégé variables membres?

Dépend de la façon dont vous êtes pointilleux sur le masquage de l'état.

  • Si vous ne voulez pas de fuite d'état interne, puis de déclarer toutes tes variables de membre privé est le chemin à parcourir.
  • Si vous n'avez pas vraiment que les sous-classes peuvent accéder à l'état interne, puis protégé est assez bon.

Si un développeur vient le long et sous-catégories de votre classe, ils peuvent le rate parce qu'ils ne comprennent pas entièrement. Avec le privé, les membres autres que l'interface publique, ils ne peuvent pas voir la mise en œuvre de certains détails de la façon dont les choses sont en train de faire ce qui vous donne la possibilité de changer plus tard.

30voto

Will Dean Points 25866

Le sentiment général de nos jours est que ils provoquer un couplage entre les classes dérivées et leurs bases.

Ils n'ont aucun avantage particulier sur les méthodes protected/propriétés (une fois qu'ils pourraient avoir un léger avantage en termes de performance), et ils ont également été utilisés plus dans une époque où très profonde de l'héritage était à la mode, ce qui n'est pas le moment.

29voto

Orion Edwards Points 54939

Généralement, si quelque chose n'est pas délibérément conçu comme public, j'ai le rendre privé.

Si une situation se présente où j'ai besoin d'accéder à cette variable privée ou une méthode d'une classe dérivée, je l'ai changer de privé protégé.

Cela n'arrive pratiquement jamais - je suis vraiment pas fan du tout de l'héritage, comme il n'est pas particulièrement bon moyen de modéliser la plupart des situations. En tout cas, porter sur, pas de soucis.

Je dirais que c'est très bien (et probablement la meilleure façon d'aller à ce sujet) pour la majorité des développeurs.

Le simple fait de la question est, si un autre développeur arrive un an plus tard et décide qu'ils ont besoin d'accéder à votre variable membre privée, ils vont simplement à modifier le code, le modifier protégées, et de mener leurs affaires.

La seule véritable exception à cette règle sont si vous êtes dans les affaires de l'expédition binaire dll en noir-boîte de forme à des tiers. Il se compose essentiellement de Microsoft, ces "Contrôle DataGrid Personnalisé' fournisseurs, et peut-être quelques autres grandes applications fournis avec l'extensibilité des bibliothèques. Sauf si vous êtes dans cette catégorie, c'est pas la peine de dépenser le temps, les efforts à vous soucier de ce genre de chose.

7voto

richj Points 5593

Au niveau de la conception, il peut être approprié d'utiliser un bien protégé, mais pour la mise en œuvre, je vois pas l'avantage de la cartographie à une variable membre protégée plutôt que d'accesseur/mutateur méthodes.

Membre protégé les variables ont des inconvénients importants parce qu'ils permettent de code client (sous-classe) de l'accès à l'état interne de la classe de base classe. Cela empêche la classe de base de manière efficace le maintien de ses invariants.

Pour la même raison, protégé des variables de membre également de faire de l'écriture de sécurité multi-threaded code beaucoup plus difficile, à moins que la garantie constante ou confinés à un seul thread.

Accesseur/mutateur méthodes offrent beaucoup plus de l'API de la stabilité et de la mise en œuvre de la flexibilité en cours de maintenance.

Aussi, si vous êtes un OO puriste, objets collaborer/communiquer par envoi de messages, pas de lecture/réglage de l'etat.

En retour, ils n'offrent que très peu d'avantages. Je n'aurais pas forcément les supprimer de quelqu'un d'autre code, mais je ne l'utilise pas moi-même.

3voto

Jay Stramel Points 1265

En bref, oui.

Membre protégé de variables permettent d'accéder à la variable de tous les sous-classes ainsi que toutes les classes du même package. Ceci peut être très utile, surtout pour les données en lecture seule. Je ne crois pas qu'ils sont en constante cependant nécessaire, car l'usage d'un membre protégé variable peut être répliqué à l'aide d'une variable membre privée et un couple de getters et setters.

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