Saya akan memulai proyek simulasi / pemodelan. Saya sudah tahu bahwa OOP digunakan untuk proyek semacam ini. Namun, mempelajari Haskell membuat saya mempertimbangkan untuk menggunakan paradigma FP untuk pemodelan sistem komponen. Biarkan saya uraikan:
Katakanlah saya memiliki komponen tipe A, dicirikan oleh seperangkat data (parameter seperti suhu atau tekanan, PDE dan beberapa kondisi batas, dll.) Dan komponen tipe B, ditandai oleh serangkaian data yang berbeda (berbeda atau parameter yang sama, kondisi PDE dan batas yang berbeda). Mari kita juga berasumsi bahwa fungsi / metode yang akan diterapkan pada setiap komponen adalah sama (misalnya metode Galerkin). Keadaan objek yang dapat berubah akan digunakan untuk parameter yang tidak konstan.
Jika saya menggunakan pendekatan OOP, saya akan membuat dua objek yang akan merangkum data masing-masing jenis, metode untuk memecahkan PDE (warisan akan digunakan di sini untuk menggunakan kembali kode) dan solusi untuk PDE.
Di sisi lain, jika saya menggunakan pendekatan FP, masing-masing komponen akan dipecah menjadi bagian data dan fungsi yang akan bertindak atas data untuk mendapatkan solusi untuk PDE. Parameter non-konstan akan dilewatkan sebagai fungsi dari sesuatu yang lain (waktu misalnya) atau diekspresikan oleh semacam mutabilitas (emulasi dari mutabilitas, dll.) Pendekatan ini tampaknya lebih mudah bagi saya dengan asumsi bahwa operasi linear pada data akan sepele.
Untuk menyimpulkan, apakah menerapkan pendekatan FP sebenarnya lebih sederhana dan lebih mudah untuk dikelola (menambahkan jenis komponen yang berbeda atau metode baru untuk menyelesaikan pde) dibandingkan dengan yang OOP?
Saya berasal dari latar belakang C ++ / Fortran, ditambah lagi saya bukan programmer profesional, jadi perbaiki saya pada apa pun yang saya salah.
sumber
IMHO untuk hampir setiap tugas dengan kompleksitas yang wajar, pertanyaan "adalah gaya FP atau gaya OOP pilihan yang lebih baik" tidak dapat dijawab secara objektif. Biasanya, dalam situasi seperti itu pertanyaannya bukan "FP atau OOP", tetapi bagaimana menggabungkan bagian terbaik dari kedua paradigma untuk menyelesaikan masalah Anda.
Masalah yang Anda buat di atas tampaknya merupakan masalah yang sangat matematis, dan saya membuat tebakan liar bahwa Anda akan memerlukan beberapa operasi matriks. OOP sangat baik untuk memodelkan tipe data abstrak, dan kalkulus matriks dapat dengan mudah diimplementasikan sebagai "objek matriks" dengan operasi pada matriks. Menerapkan ini dengan cara di mana semua operasi matriks adalah bagian dari kelas matriks membantu Anda untuk menjaga hal-hal bersama yang menjadi satu, sehingga mempertahankan struktur keseluruhan yang baik.
Di sisi lain, PDE adalah persamaan pada fungsi, dan solusinya mungkin berfungsi lagi. Jadi menggunakan pendekatan fungsional untuk tipe "komponen" itu mungkin terlihat alami di sini. Fungsi-fungsi itu mungkin memiliki parameter matriks, menunjukkan satu contoh bagaimana menggabungkan OOP dan FP. Contoh lain adalah implementasi kelas matriks, yang menggunakan alat fungsional untuk memetakan operasi tertentu untuk setiap elemen dari matriks Anda. Jadi di sini juga, itu bukan "OOP versus FP" tetapi "OOP dikombinasikan dengan FP" yang membawa Anda hasil terbaik.
sumber