In einigen Programmiersprachen spielt die Reihenfolge eine Rolle, da Sie die Dinge erst verwenden können, nachdem sie deklariert wurden. Aber abgesehen davon ist es für die meisten Sprachen für den Compiler unerheblich. Dann bleibt es für die Menschen von Bedeutung.
Mein Lieblingszitat von Martin Fowler lautet: Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
Also würde ich sagen, dass die Reihenfolge Ihrer Klasse davon abhängen sollte, was es den Menschen leicht macht, sie zu verstehen.
Ich persönlich bevorzuge die Absenkungsbehandlung, die Bob Martin in seinem Clean Code
Buch gibt. Mitgliedsvariablen am oberen Rand der Klasse, dann Konstruktoren, dann alle anderen Methoden. Und Sie ordnen die Methoden so an, dass sie eng zusammenpassen mit der Art und Weise, wie sie in der Klasse verwendet werden (anstatt willkürlich alle öffentlichen als auch privaten als geschützten Methoden zu setzen). Er nennt es den "vertikalen Abstand" minimieren oder so ähnlich (habe das Buch im Moment nicht bei mir).
Bearbeiten:
Die Grundidee von "vertical distance" ist, dass Sie vermeiden möchten, dass Leute um Ihren Quellcode herum springen, nur um ihn zu verstehen. Wenn die Dinge zusammenhängen, sollten sie näher beieinander liegen. Dinge, die nichts miteinander zu tun haben, können weiter voneinander entfernt sein.
Kapitel 5 von Clean Code (großartiges Buch, nebenbei) befasst sich ausführlich mit den Vorschlägen von Mr. Martin für den Bestellcode. Er schlägt vor, dass das Lesen von Code wie das Lesen eines Zeitungsartikels funktionieren sollte: Die Details auf hoher Ebene stehen an erster Stelle (oben) und Sie erhalten mehr Details, wenn Sie nachlesen. Er sagt: "Wenn eine Funktion eine andere aufruft, sollten sie sich vertikal in der Nähe befinden, und der Anrufer sollte sich, wenn überhaupt möglich, über dem Angerufenen befinden." Darüber hinaus sollten verwandte Konzepte eng beieinander liegen.
Hier ist also ein ausgedachtes Beispiel, das in vielerlei Hinsicht schlecht ist (schlechtes OO-Design; niemals double
für Geld verwenden), aber die Idee veranschaulicht:
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() { ... }
}
Die Methoden sind so angeordnet, dass sie denen, die sie aufrufen, sehr nahe kommen und sich von oben nach unten bewegen. Wenn wir alle private
Methoden unterhalb public
derjenigen platziert hätten, müssten Sie mehr herumspringen, um dem Programmfluss zu folgen.
getFirstName
und getLastName
sind konzeptionell verwandt (und getEmployeeId
wahrscheinlich auch), so dass sie nahe beieinander liegen. Wir könnten sie alle nach unten verschieben, aber wir möchten nicht getFirstName
oben und getLastName
unten sehen.
Hoffentlich gibt Ihnen dies die Grundidee. Wenn Sie an solchen Dingen interessiert sind, empfehle ich dringend, sie zu lesen Clean Code
.