Banyak algoritma yang digunakan dalam komputasi ilmiah memiliki struktur inheren yang berbeda dari algoritma yang umumnya dianggap dalam bentuk rekayasa perangkat lunak yang kurang intensif matematika. Secara khusus, algoritma matematika individu cenderung sangat kompleks, sering melibatkan ratusan atau ribuan baris kode, namun demikian tidak melibatkan keadaan (yaitu tidak bertindak pada struktur data yang kompleks) dan sering dapat dididihkan - dalam hal programatis interface - ke satu fungsi yang bekerja pada array (atau dua).
Ini menunjukkan bahwa suatu fungsi, dan bukan kelas, adalah antarmuka alami untuk sebagian besar algoritma yang ditemukan dalam komputasi ilmiah. Namun argumen ini menawarkan sedikit wawasan tentang bagaimana implementasi algoritma multi-bagian yang kompleks harus ditangani.
Sementara pendekatan tradisional adalah hanya memiliki satu fungsi yang memanggil sejumlah fungsi lainnya, melewati argumen yang relevan di sepanjang jalan, OOP menawarkan pendekatan yang berbeda, di mana algoritma dapat diringkas sebagai kelas. Untuk kejelasan, dengan merangkum suatu algoritma dalam suatu kelas, maksud saya membuat kelas di mana input algoritma dimasukkan ke dalam konstruktor kelas, dan kemudian metode publik dipanggil untuk benar-benar memanggil algoritma. Implementasi multigrid seperti itu di C ++ psuedocode mungkin terlihat seperti:
class multigrid {
private:
x_, b_
[grid structure]
restrict(...)
interpolate(...)
relax(...)
public:
multigrid(x,b) : x_(x), b_(b) { }
run()
}
multigrid::run() {
[call restrict, interpolate, relax, etc.]
}
Pertanyaan saya kemudian adalah sebagai berikut: apa manfaat dan kelemahan dari praktik semacam ini dibandingkan dengan pendekatan yang lebih tradisional tanpa kelas? Apakah ada masalah perpanjangan atau perawatan? Untuk lebih jelasnya, saya tidak bermaksud untuk meminta pendapat, tetapi lebih untuk memahami efek hilir (yaitu yang mungkin tidak muncul sampai basis kode menjadi cukup besar) untuk mengadopsi praktik pengkodean semacam itu.