Dalam beberapa bahasa pemrograman, ketertiban memang penting karena Anda tidak dapat memanfaatkan berbagai hal sampai setelah dinyatakan. Tetapi kecuali itu, untuk sebagian besar bahasa itu tidak masalah bagi kompiler. Jadi, Anda tinggal membiarkannya menjadi masalah bagi manusia.
Kutipan favorit Martin Fowler saya adalah: Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
Jadi saya akan mengatakan bahwa pemesanan kelas Anda harus bergantung pada apa yang membuatnya mudah dipahami manusia.
Saya pribadi lebih suka perawatan step-down yang diberikan Bob Martin dalam Clean Code
bukunya. Variabel anggota di bagian atas kelas, lalu konstruktor, lalu semua metode lainnya. Dan Anda memesan metode untuk berdekatan dengan bagaimana mereka digunakan dalam kelas (daripada secara sewenang-wenang menempatkan semua publik kemudian pribadi kemudian dilindungi). Dia menyebutnya meminimalkan "jarak vertikal" atau sesuatu seperti itu (saat ini tidak ada buku tentang saya).
Edit:
Ide dasar "jarak vertikal" adalah Anda ingin menghindari membuat orang melompat-lompat di sekitar kode sumber Anda hanya untuk memahaminya. Jika ada yang terkait, mereka harus lebih dekat bersama. Hal-hal yang tidak terkait dapat terpisah lebih jauh.
Bab 5 dari Kode Bersih (buku bagus, btw) membahas banyak detail tentang bagaimana Tn. Martin menyarankan kode pemesanan. Dia menyarankan bahwa membaca kode harus bekerja seperti membaca artikel surat kabar: detail tingkat tinggi didahulukan (di bagian atas) dan Anda mendapatkan lebih banyak detail saat membaca. Dia berkata, "Jika satu fungsi memanggil fungsi lainnya, fungsi itu harus ditutup secara vertikal, dan si penelepon harus berada di atas callee, jika memungkinkan." Selain itu, konsep terkait harus berdekatan.
Jadi, inilah contoh yang dibuat-buat yang buruk dalam banyak hal (desain OO yang buruk; tidak pernah menggunakan double
uang) tetapi menggambarkan ide:
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() { ... }
}
Metode diperintahkan sehingga mereka dekat dengan yang memanggil mereka, bekerja turun dari atas. Jika kita meletakkan semua private
metode di bawah ini public
, maka Anda harus melakukan lebih banyak lagi untuk mengikuti alur program.
getFirstName
dan getLastName
secara konseptual terkait (dan getEmployeeId
mungkin juga), sehingga mereka saling berdekatan. Kita bisa memindahkan semuanya ke bawah, tetapi kita tidak ingin melihat getFirstName
di atas dan getLastName
di bawah.
Semoga ini memberi Anda ide dasar. Jika Anda tertarik pada hal semacam ini, saya sangat merekomendasikan membaca Clean Code
.