Bisakah proyek saya bertahan tanpa Orientasi Objek?

9

Saya menulis paket MATLAB kecil yang akan memecahkan masalah numerik kelas tertentu. Ada 3 tahap algoritma dan pengguna memiliki 5 pilihan untuk setiap tahap. Saya telah menerapkan seluruh masalah menggunakan fungsi dan 3 kasus sakelar (satu untuk setiap tahap algoritma). Ini berfungsi dengan baik tetapi saya mempertimbangkan membuatnya melakukan lebih banyak hal (lebih dari 5 pilihan dan satu tahap lagi) dan juga membuat port Python (beberapa orang tertarik).20

Saya bertanya-tanya apakah saya harus mengkonversi ke kerangka kerja OOP (yang saya tidak pandai sama sekali) atau apakah saya harus tetap dengan kerangka prosedural yang saya miliki (yang saya pandai). Saya telah memastikan dalam kode prosedural saya bahwa tidak ada fungsi yang melakukan dua hal dan ada sedikit tumpang tindih (2 kode-segmen hampir tidak pernah melakukan hal yang sama).

Harap migrasikan ini ke SO jika Anda merasa lebih cocok dengan domain mereka.

MATLABOOP
sumber

Jawaban:

6

Tidak perlu mengkonversi ke kerangka kerja OOP, untuk mendapatkan manfaat dari orientasi objek di mana ia membantu. Perhatikan bahwa jumlah fungsi kurang dari indikator daripada duplikasi kode di dalam dan di antara fungsi-fungsi ini, atau panjang fungsi-fungsi ini. (Fungsi dengan lebih dari 100 baris kode akan menjadi indikasi khas untuk "potensi peningkatan".)

Jika Anda tidak dapat menemukan bagian-bagian di mana orientasi objek akan membantu, mengonversi ke kerangka kerja OOP tidak akan menjadi langkah pertama yang terbaik. Alih-alih bertanya kepada seseorang yang akrab dengan orientasi objek apa yang bisa disederhanakan atau ditingkatkan, dan kemudian mencoba memahami mengapa itu penyederhanaan atau peningkatan.

Jika Anda ingin menggunakan kerangka kerja seperti deal.II atau PETSc, gunakan mereka jika fungsionalitas yang mereka tawarkan berguna bagi Anda, bukan karena Anda pikir itu akan membuat kode Anda sendiri lebih baik atau lebih dapat dipertahankan. Tetapi Anda sudah berada dalam kerangka kerja MATLAB, jadi sepertinya Anda tidak ingin mengubah kerangka C ++ OOP. (MATLAB menawarkan dukungan OOP penuh, karena Anda mungkin sudah tahu.)

Untuk port Python, lakukan saja berdasarkan pengetahuan Anda saat ini sebagai permulaan, dan mulailah dari awal setelah Anda cukup belajar untuk membuatnya secara signifikan lebih baik.

Thomas Klimpel
sumber
Saya setuju dengan Anda bahwa mengonversi kerangka kerja di sini berlebihan. Saya pikir API dan arsitektur mereka adalah contoh desain yang bagus, dan layak digunakan sebagai panduan.
Geoff Oxberry
3

Pertanyaan ini mungkin cocok untuk Stack Overflow. Saya pikir ini juga cocok di sini karena ini adalah masalah umum dalam ilmu komputasi.

Dalam hal menyusun algoritma, contoh perpustakaan yang baik yang melakukan ini dengan baik adalah PETSc, jika Anda dapat membaca kode C. Gaya pemrograman berorientasi objek dapat membantu mengenkapsulasi data, tetapi sebagai langkah pertama yang sederhana, Anda mungkin hanya ingin membuat setiap pilihan untuk fungsi panggung dengan antarmuka umum. Kemudian, untuk algoritme Anda, berikan fungsi untuk setiap tahap sebagai input dan minta algoritma utama memanggil fungsi untuk setiap tahap.

Geoff Oxberry
sumber
Saya tertarik. Apakah Anda mengusulkan PETSc sebagai pustaka yang baik untuk belajar OOP atau dari coding prosedural? Apakah Anda tahu ada perpustakaan yang dapat dibaca yang melakukan OOP dengan baik?
Pemeriksaan
Saya pikir PETSc adalah contoh perangkat lunak yang bagus, dan umumnya didokumentasikan dengan sangat baik. Dalam ilmu komputasi, saya pikir PETSc, Trilinos, deal.II, dan FEniCS melakukan pekerjaan yang baik untuk didokumentasikan dengan baik, dan semuanya ditulis dalam gaya OOP. Saya ragu untuk mengatakan Anda harus belajar OOP dari mereka; Anda mungkin lebih baik belajar dari buku teks terlebih dahulu, dan kemudian melihat kode dunia nyata.
Geoff Oxberry
2

1+11+1.plus(1)1+1plus(1,1)1plus__plus____rplus__

Jadi jangan merasa bahwa Anda perlu memaksa pasak persegi ke dalam lubang bundar, jika algoritme Anda terlihat bagus dengan cara prosedural polos maka tetap seperti itu. Jika perlu dimasukkan dalam sistem OO Anda selalu dapat menempatkan antarmuka OO pada kode non-OO Anda. C ++ coders melakukan ini setiap hari (dan bahkan dibayar untuk itu).

n00b
sumber