Pourquoi mettre les champs et les méthodes privés au sommet de la classe?

J'ai vu cette norme de facto dans de nombreux endroits dans de nombreuses langues, mais je ne l'ai jamais compris - pourquoi mettre vos champs et méthodes privés en haut d'une déclaration de classe? Métaphoriquement, il semble que les choses privées devraient être situées en bas (cachées) et tout ce qui est public devrait être en haut, de sorte que lorsque vous lisez la classe de haut en bas, vous voyez d'abord l'interface publique puis le fonctionnement interne.

Quel est le raisonnement derrière cela?

EDIT: juste pour clarifier, je ne veux pas dire la pratique de déclarer tous les membres au sommet de la classe, mais de mettre les membres privés/méthodes en haut d'une déclaration de classe, avant tout public.

27
demandé sur JimDaniel 2009-04-22 21:12:06

11 réponses

Cela provient des jours où vous deviez tout déclarer - Cela inclut des fonctions ainsi que des variables-avant de pouvoir les utiliser.

Les variables et fonctions internes (privées) sont allées en haut du fichier et les fonctions externes (publiques) sont allées en bas du fichier. Cela signifiait que les fonctions publiques pouvaient référencer les fonctions internes. Si vous aviez une récursivité, vous devrez transférer la référence de la fonction en déclarant son profil.

Lorsque les langues permis au code d'étendre plusieurs fichiers, vous deviez mettre des déclarations de fonction publique et de variable dans des fichiers d'en - tête afin qu'ils puissent être inclus dans les autres fichiers du projet-ou même d'autres projets.

18
répondu ChrisF 2009-04-25 19:47:40

Cela vient probablement des jours de C, où toutes les variables devaient être définies en haut, dans le cadre de l'initialisation.

10
répondu Mark Ingram 2009-04-22 17:15:21

Personnellement, quand j'essaie de lire le code de quelqu'un d'autre et de le comprendre, j'aime avoir le contexte fourni par les champs privés. Cela me donne un aperçu rapide du type de choses qu'ils font et de ce que je peux m'attendre à voir. Si c'est bien fait, cela peut donner un bon aperçu, presque comme une table des matières pour le reste du code.

7
répondu Erich Mirabal 2009-04-22 17:16:31

Deux raisons.

S'ils sont tous ensemble en haut, ils sont faciles à trouver et faciles à inspecter lors de la création d'une nouvelle chose pour voir quelles conventions de nommage sont à l'œuvre et quels noms sont et ne sont pas disponibles.

Dans le langage C, et en javascript, toutes les références dans le code doivent être déclarées et / ou définies ci-dessus où elles sont référencées, car tout référencé doit être déjà connu. (Oui, je sais, javascript seulement sorta.)

3
répondu dkretz 2009-04-22 17:16:08

Je suis d'accord qu'il sort probablement de C, mais il sert aussi une fonction pratique.

Dans toutes les choses que vous voulez apprendre dans l'ordre où une telle connaissance est requise, comme apprendre à ajouter avant d'apprendre à multiplier.

Dans le cas du code, vos fonctions publiques référenceront généralement les fonctions privées internes, et vos fonctions privées sont moins susceptibles de référencer les fonctions publiques (bien qu'il y ait certainement un chevauchement.) Donc, comprendre quelles variables privées vous avoir et à quoi ils sont utilisés sera utile pour essayer de comprendre ce que les méthodes publiques font avec ces variables.

De cette façon, il est également utile de comprendre ce que font les méthodes privées avant de lire les méthodes publiques qui les appellent.

En gros, je crois que c'est un style qui vient du C et des langages antérieurs, mais parce qu'il est fonctionnellement plus utile là où il est, Je ne vois aucun avantage à changer de style.

Et, comme toujours, briser la cohérence n'est jamais une bonne idée à moins qu'il n'y ait une raison incroyablement convaincante.

3
répondu DevinB 2009-04-22 18:24:47

Dans la POO - il y a deux choses-les données et le comportement

Les membres privés représentent les données et les méthodes publiques représentent le comportement.

Vous ne pouvez penser au comportement qu'à la lumière des données qu'il représente Donc-c'est pourquoi je voudrais garder mes éléments de données au sommet.

3
répondu RN. 2009-04-22 20:45:41

En ce qui concerne fields , Il est assez courant de rendre tous les champs privés (encapsulation et tout cela). Et ils sont petits. Depuis qu'ils sont petits, c'est agréable, et possible, de les mettre tous ensemble, et le sommet d'une classe est un gentil, stable où les mettre. Je ne sais pas si c'est la justification historique - je pense que les racines du langage C expliquent probablement mieux cela - mais cela pourrait être une raison pour laquelle nous les gardons là.

Pour ma part, j'ai tendance à mettre privé méthodes de en bas, pour les raisons que vous suggérez.

2
répondu Carl Manaster 2009-04-22 18:23:09

Je pensais que la norme de fait est les méthodes publiques en premier! au moins c'est la façon dont j'écris mes cours. Cela m'aide à choisir les structures de données pour mes méthodes.

1
répondu Naveen 2009-04-22 18:13:29

Je suppose que c'est l'habitude. Vous devez déclarer des fonctions et des variables avant de pouvoir les utiliser, donc c'est cohérent.

D'un autre côté, c'est ce que vous ne voulez pas vraiment que les autres lisent, donc il appartient au fond.

0
répondu Jimmy J 2009-04-22 17:17:43

En raison de langages comme où vous avez comme @ ChrisF dit > > tels que les langages interprétatifs, Python étant un proéminent

0
répondu Eiyrioü von Kauyf 2013-06-28 15:56:01

Ce n'est pas comme si c'était un secret qu'ils soient là. Avez-vous peur que quelqu'un apprenne le fonctionnement interne? S'ils ont la source, ils peuvent apprendre tout ce qu'ils doivent savoir sur votre classe.

Les mettre avec les autres facilite le développement de cette classe. Toutes vos variables de classe sont au même endroit, tout comme vos méthodes.

-2
répondu belgariontheking 2009-04-22 17:48:07