Saya pemrograman di Jawa dalam gaya yang sangat berorientasi objek (OO). OOP sangat intuitif bagi saya, tetapi saya memiliki sedikit pengetahuan tentang jenis pemrograman lainnya.
Apa sebenarnya pemrograman prosedural ? Bagaimana sebenarnya berbeda dari OOP? Apakah ini sama dengan pemrograman fungsional ?
Dulu saya berpikir bahwa semua pemrograman yang bukan OO adalah prosedural. Tapi saya mulai berpikir ini tidak benar.
object-oriented
procedural
Aviv Cohn
sumber
sumber
Jawaban:
Wikipedia memiliki penjelasan yang bagus untuk istilah-istilah ini. Apapun, ini ringkasannya:
Pemrograman deklaratif adalah kebalikan dari pemrograman imperatif - ini menentukan apa yang harus dihitung daripada bagaimana (misalnya SQL, regex).
Model pemrograman fungsional menghitung sebagai ekspresi yang (mungkin) menghasilkan nilai. Fungsi adalah nilai dan dapat diteruskan ke atau dikembalikan dari fungsi lain. Mutasi tidak dianjurkan; semua variabel tidak dapat diubah secara default. Akibatnya, ini lebih bersifat deklaratif daripada imperatif, karena lebih menekankan apa yang sedang dihitung daripada urutan perubahan negara yang diperlukan untuk mencapainya.
Hubungan mereka agak rumit karena OOP adalah istilah yang cukup dimuat. Anda dapat menggunakan objek dalam bahasa fungsional dan bahasa prosedural, tetapi bahasa yang mengiklankan diri mereka sebagai OO bersifat prosedural. Untuk lebih mengacaukan masalah ini:
Ini menyebabkan orang berpikir OOP adalah satu-satunya cara untuk mencapai abstraksi, dan bahwa pemrograman fungsional dan OOP entah bagaimana berlawanan atau saling eksklusif. Banyak orang juga berpikir bahwa semua bahasa fungsional murni dan tidak mengizinkan mutasi.
Selain itu, orang-orang pada umumnya melemparkan imperatif / prosedural secara bergantian, kadang-kadang membandingkannya dengan OOP (menyiratkan kode abstraksi-kurang, umumnya C) dan kadang-kadang membandingkannya dengan pemrograman fungsional. Istilah pemrograman terstruktur sebagian besar tidak digunakan sejauh yang saya tahu (mungkin karena pada titik ini kebanyakan orang menerima begitu saja bahwa kebohongan dan global dianggap berbahaya.)
sumber
Pemrograman Prosedural adalah pendekatan untuk pemrograman yang merupakan salah satu dasar dari blok bangunan untuk banyak desain bahasa lainnya (fungsional bukan menjadi satu).
Sebagian besar bahasa termasuk dalam "Pemrograman Prosedural" dan itu mungkin pendekatan desain yang paling alami bagi kebanyakan orang (jika Anda berpikir dalam hal OO, maka saya akan mengatakan Anda dalam minoritas).
BASIC bersifat prosedural.
Seperti yang dikatakan orang lain, ini adalah mekanisme untuk menyusun program secara berurutan.
Ini membutuhkan mekanisme untuk mendefinisikan "prosedur" - blok kode bernama mirip dengan metode OO, yang dapat menerima nol untuk banyak parameter, dan secara opsional mengembalikan nilai (yang kemudian umumnya akan disebut fungsi - mungkin menyebabkan kebingungan Anda dengan bahasa fungsional )
Paradigma itu tidak menentukan apa yang akan Anda lakukan, atau cara hal-hal yang dilewati.
Ini hanya menggambarkan bahwa program akan disusun sebagai serangkaian prosedur (atau fungsi) yang beroperasi secara berurutan. Data kemudian didefinisikan secara independen dari prosedur.
Ini berbeda dari pemrograman berorientasi objek, yang menyusun program di sekitar kumpulan data dan metode (bukan fungsi) yang bekerja pada data itu.
Salah satu cara untuk memikirkannya adalah dalam hal ruang lingkup data.
Dalam pelingkupan bahasa prosedural cukup sederhana. Suatu variabel mungkin berada dalam ruang lingkup prosedur yang diberikan (dideklarasikan secara lokal), hingga tingkat hal-hal pemanggilan hal tertinggi (dideklarasikan secara global), dengan cakupan bersarang di antaranya.
Dalam bahasa berorientasi objek Anda menambahkan konteks pelingkupan baru, yaitu bahwa dari objek yang sedang digunakan, yang ortogonal ke atas.
Cara lain untuk berpikir prosedural, dibandingkan dengan berorientasi objek adalah dengan mempertimbangkan bahasa berorientasi objek di mana semua metode harus dinyatakan sebagai statis. Hasilnya adalah bahasa prosedural di mana kelas dapat digunakan untuk mengelompokkan prosedur bersama.
sumber
Pemrograman Prosedural jelas bukan pemrograman fungsional.
Pemrograman prosedural adalah ketika Anda memiliki model komputer sebagai mesin di kepala Anda, dan Anda berpikir tentang cara memodifikasi data dalam memori. Jadi pertama-tama Anda menetapkan
A
ke nilai 3, lalu Anda menambahkan 1 dan menyimpannya di lokasi memoriA
lagi (menimpa nilai sebelumnya).Pemrograman fungsional akan mengatakan
A
adalah 3, danB
sekarangA + 1
, dan kemudian membiarkan komputer mencari cara menghitungB
. Setelah Anda mendefinisikannya,A
ia harus tidak berubah (tidak berubah). Fungsional juga memungkinkan Anda untuk melakukan hal-hal seperti melewatkan fungsi sekitar sebagai nilai kelas satu (fungsi dapat mengambil fungsi sebagai argumen).Pemrograman berorientasi objek sering menggabungkan keduanya, dan merupakan jenis ortogonal untuk keduanya. Anda dapat menggunakan pemrograman fungsional dan mengembalikan objek yang tidak dapat diubah, dan objek itu dapat memiliki metode yang mengembalikan beberapa nilai yang dihitung, dan bahkan melakukannya dengan malas - itulah pemrograman berorientasi objek fungsional. Anda juga dapat memiliki objek yang mewakili "repositori" (versi abstrak dari database), dan Anda bisa "menyimpan" barang-barang di repositori dan "mendapatkan" barang-barang kembali, dan membiarkan objek itu menangani semua detail bagaimana hal itu dilakukan . Itu pada dasarnya pemrograman prosedural berorientasi objek.
sumber
OOP tidak lebih dari bentuk pemrograman prosedural yang sedikit disempurnakan, yang lagi-lagi milik keluarga pemrograman imperatif yang lebih besar. Bukti dari klaim itu adalah bahwa banyak programmer C # / Java cenderung "melakukan sesuatu" dan lebih suka metode seperti:
Jadi, sebuah program yang terdiri dari sekelompok metode kosong (sebelumnya dikenal sebagai prosedur (sic!)) Dan kode seperti:
adalah pemrograman prosedural yang sempurna.
sumber