Dans certains langages de programmation, l'ordre est important, car vous ne pouvez pas utiliser des éléments tant qu'ils ne sont pas déclarés. Mais à part cela, pour la plupart des langues, cela n’a aucune importance pour le compilateur. Donc, il ne vous reste plus qu'à importer pour les humains.
Ma citation préférée de Martin Fowler est la suivante: Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
Je dirais donc que l'ordre de votre classe devrait dépendre de ce qui le rend facile à comprendre pour les humains.
Personnellement, je préfère le traitement réducteur que Bob Martin donne dans son Clean Code
livre. Variables membres en haut de la classe, puis constructeurs, puis toutes les autres méthodes. Et vous ordonnez que les méthodes soient proches de la manière dont elles sont utilisées au sein de la classe (plutôt que de placer arbitrairement tous les éléments publics puis privés puis protégés). Il appelle cela minimiser la "distance verticale" ou quelque chose du genre (ne pas avoir le livre sur moi pour le moment).
Modifier:
L'idée de base de la "distance verticale" est que vous voulez éviter de faire sauter tout le monde autour de votre code source simplement pour le comprendre. Si les choses sont liées, elles devraient être plus proches les unes des autres. Les choses sans rapport peuvent être plus éloignées.
Le chapitre 5 de Clean Code (great book, btw) décrit en détail la façon dont M. Martin suggère de commander du code. Il suggère que la lecture du code fonctionne un peu comme si vous lisiez un article de journal: les détails de haut niveau sont prioritaires (en haut) et vous obtenez plus de détails lorsque vous lisez. Il dit: "Si une fonction en appelle une autre, elle devrait être rapprochée verticalement et l'appelant devrait être au-dessus de l'appelé, si possible." De plus, les concepts connexes doivent être proches les uns des autres.
Voici donc un exemple artificiel qui est mauvais à bien des égards (conception OO médiocre; ne jamais utiliser double
pour de l'argent) mais illustre bien l'idée:
public class Employee {
...
public String getEmployeeId() { return employeeId; }
public String getFirstName() { return firstName; }
public String getLastName() { return lastName; }
public double calculatePaycheck() {
double pay = getSalary() / PAY_PERIODS_PER_YEAR;
if (isEligibleForBonus()) {
pay += calculateBonus();
}
return pay;
}
private double getSalary() { ... }
private boolean isEligibleForBonus() {
return (isFullTimeEmployee() && didCompleteBonusObjectives());
}
public boolean isFullTimeEmployee() { ... }
private boolean didCompleteBonusObjectives() { ... }
private double calculateBonus() { ... }
}
Les méthodes sont ordonnées de manière à être proches de celles qui les appellent, en descendant du haut. Si nous avions placé toutes les private
méthodes sous public
celles-ci, il vous faudrait faire plus de sauts pour suivre le déroulement du programme.
getFirstName
et getLastName
sont conceptuellement liés (et getEmployeeId
probablement aussi), ils sont donc proches les uns des autres. Nous pourrions tous les déplacer vers le bas, mais nous ne voudrions pas voir getFirstName
en haut et getLastName
en bas.
J'espère que cela vous donne l'idée de base. Si ce genre de chose vous intéresse, je vous recommande fortement de lire Clean Code
.