Menanggapi tanggapan Aaronaught terhadap pertanyaan di:
Tidak bisakah saya menggunakan semua metode statis?
Bukankah lebih sedikit memori yang digunakan untuk metode statis? Saya mendapat kesan bahwa setiap instance objek membawa versi executable sendiri dari fungsi anggota non-statis.
Terlepas dari berapa banyak overhead yang terlibat dalam memanggil metode statis, terlepas dari desain OO yang buruk, dan kemungkinan sakit kepala di jalan, bukankah itu menggunakan lebih sedikit memori saat runtime?
Berikut ini sebuah contoh:
Saya membuat vektor objek yang diinisialisasi nol. Setiap objek berisi satu data (segitiga yang terdiri dari sembilan ganda). Setiap objek diisi secara berurutan dari data yang dibaca dari file .stl. Hanya satu metode statis yang diperlukan. Desain OO yang tepat menentukan bahwa metode yang berhubungan dengan data secara langsung harus didistribusikan ke setiap objek. Berikut adalah solusi OO standar:
foreach(obj in vec) {
obj.readFromFile(fileName);
}
Setiap obj membawa readFromFile
kode kompilasi bersama data!
Memori lebih menjadi perhatian daripada kinerja dalam hal ini, dan ada BANYAK data pada sistem terbatas.
Solusi:
- Metode Namespace (bagus untuk C ++ tetapi tidak mungkin di Java)
- Salah satu metode statis di kelas obj. Kode yang dapat dieksekusi disimpan di satu tempat saat runtime. Ada overhead kecil untuk memanggil metode ini.
- Kelas induk dari mana obj diturunkan, yang berisi metode pribadi
readFromFile
. Panggil dengansuper.callPrivateMethod()
panggilan manareadFromFile
. Berantakan, dan masih ada beberapa overhead memori di setiap objek. - Laksanakan di
readFromFile
luar ruang lingkup obj, jadi di kelas vec atau di kelas panggilan. Ini, menurut saya, merusak enkapsulasi data.
Saya menyadari untuk sejumlah besar data, satu objek eksplisit untuk setiap segitiga bukanlah pendekatan terbaik. Ini hanya sebuah contoh.