Algoritma menggambarkan apa yang harus dilakukan komputer. Struktur menggambarkan bagaimana algoritme ditata [dalam kode sumber]. OOP adalah gaya pemrograman yang memanfaatkan struktur "berorientasi objek" tertentu.
Buku-buku algoritma sering menghindari OOP karena mereka berfokus pada algoritma, bukan struktur. Fragmen kode yang sangat bergantung pada struktur cenderung menjadi contoh yang buruk untuk dimasukkan ke dalam buku algoritma. Demikian juga, buku-buku OOP sering menghindari algoritma karena mereka mengacaukan cerita. Titik penjualan OOP adalah fluiditasnya, dan mengelompokkannya ke suatu algoritma membuatnya tampak lebih kaku. Ini lebih tentang fokus buku daripada apa pun.
Dalam kode kehidupan nyata, Anda akan menggunakan keduanya berdampingan. Anda tidak dapat menyelesaikan masalah komputer tanpa algoritme, menurut definisi, dan Anda akan kesulitan menulis algoritma yang bagus tanpa struktur (OOP atau lainnya).
Sebagai contoh di mana mereka kabur, ambil Pemrograman Dinamis. Dalam buku algoritma, Anda akan menjelaskan cara mengambil dataset yang homogen dalam array dan menggunakan Pemrograman Dinamis untuk sampai pada solusi. Dalam buku OOP, Anda dapat menemukan struktur seperti Pengunjung, yang merupakan cara untuk melakukan algoritma sewenang-wenang di sekumpulan objek heterogen. Contoh buku DP dapat dianggap sebagai Pengunjung yang sangat sederhana yang beroperasi pada objek dalam urutan bottom-up secara umum. Pola Pengunjung bisa dianggap sebagai kerangka masalah DP, tetapi melewatkan daging dan kentang. Pada kenyataannya, Anda akan sering membutuhkan keduanya: Anda menggunakan pola Pengunjung untuk menangani heterogenitas di seluruh dataset Anda (DP buruk pada saat itu), dan Anda menggunakan DP dalam struktur Pengunjung untuk mengatur algoritme Anda untuk meminimalkan runtime (Pengunjung tidak
Kami juga melihat algoritma yang beroperasi di atas pola desain. Lebih sulit untuk menyebutkan contoh dalam ruang kecil, tetapi begitu Anda memiliki struktur, Anda mulai ingin memanipulasi struktur itu, dan Anda menggunakan algoritma untuk melakukannya.
Apakah ada beberapa masalah yang hanya dapat dipresentasikan dan diselesaikan oleh OOP?
Ini adalah pertanyaan yang lebih sulit dijawab daripada yang Anda pikirkan. Untuk urutan pertama, tidak ada alasan komputasi mengapa Anda membutuhkan OOP untuk menyelesaikan masalah apa pun. Bukti sederhana adalah bahwa setiap program OOP dikompilasi ke perakitan, yang jelas merupakan bahasa non-OOP.
Namun, dalam skema yang lebih besar, jawabannya mulai malu terhadap ya. Anda jarang dibatasi hanya dengan metodologi komputasi. Sebagian besar waktu ada hal-hal seperti kebutuhan bisnis dan keterampilan pengembang yang menjadi faktor dalam persamaan. Banyak aplikasi saat ini tidak dapat ditulis tanpa OOP, bukan karena OOP entah bagaimana mendasar untuk tugas itu, tetapi karena struktur yang disediakan oleh OOP sangat penting untuk menjaga proyek sesuai jalur dan sesuai anggaran.
Ini tidak mengatakan bahwa kita tidak akan pernah meninggalkan OOP di masa depan untuk beberapa struktur baru yang lucu. Itu hanya mengatakan itu adalah salah satu alat yang paling efektif di kotak alat kami untuk sebagian besar tugas pemrograman luar biasa di luar sana hari ini. Masalah di masa depan dapat menyebabkan kita melakukan pendekatan pembangunan menggunakan struktur yang berbeda. Pertama, saya berharap jaring saraf membutuhkan pendekatan pengembangan yang sangat berbeda, yang mungkin atau mungkin tidak berubah menjadi "Berorientasi Objek."
Saya tidak melihat OOP menghilang dalam waktu dekat karena cara algoritma berpikir. Sampai saat ini, pola yang biasa adalah bahwa seseorang merancang algoritma yang tidak memanfaatkan OOP. Komunitas OOP menyadari algoritma tidak benar-benar cocok dengan struktur OOP, dan benar-benar tidak perlu, sehingga mereka membungkus seluruh algoritma dalam struktur OOP dan mulai menggunakannya. Pertimbangkan boost::shared_ptr
. Algoritma penghitungan referensi yang ada di dalamnya shared_ptr
tidak terlalu ramah dengan OOP. Namun, pola tersebut tidak menjadi populer sampai shared_ptr
membuat pembungkus OOP di sekitarnya yang mengekspos kemampuan algoritma dalam format terstruktur OOP. Sekarang, ini sangat populer sehingga membuatnya menjadi spesifikasi terbaru untuk C ++, C ++ 11.
Mengapa ini begitu sukses? Algoritma sangat bagus dalam memecahkan masalah, tetapi mereka sering membutuhkan investasi penelitian awal yang substansial untuk memahami cara menggunakannya. Pengembangan Object Oriented sangat efektif dalam membungkus algoritma tersebut dan menyediakan antarmuka yang membutuhkan investasi awal lebih sedikit untuk belajar.