Pemrograman prosedural
Pemrograman prosedural adalah sebuah paradigma pemrograman[1], yang penamaannya diambil dari pemrograman imperatif berdasarkan konsep pemanggilan prosedur. Prosedur (sejenis rutin atau subrutin) hanya berisi serangkaian langkah komputasi yang akan dilakukan. Setiap prosedur yang diberikan dapat dipanggil kapan saja selama eksekusi program, termasuk oleh prosedur lain atau prosedur itu sendiri. Bahasa pemrograman prosedural pertama muncul sekitar tahun 1957-1964, termasuk FORTRAN, ALGOL, COBOL, PL/I dan BASIC. Pascal dan C diterbitkan tahun 1970-1972.
Paradigma ini juga didasari oleh konsep mesin Von Newman (stored program concept) sekelompok tempat penyimpanan (memori), yang dibedakan menjadi memori instruksi dan memori data, masing-masing memori tersebut dapat diberi nama dan nilai, selanjutnya instruksi akan dieksekusi satu persatu secara sekuensial oleh sebuah proses tunggal.
Prosesor komputer menyediakan dukungan perangkat keras untuk pemrograman prosedural melalui tumpukan register dan instruksi untuk memanggil prosedur dan mengembalikan nilai dari prosedur tersebut. Dukungan perangkat keras untuk jenis pemrograman lain dimungkinkan, tetapi tidak ada upaya yang berhasil secara komersial.
Prosedur dan modularitas
Modularitas umumnya diinginkan, terutama dalam program yang besar dan rumit. Input biasanya ditentukan secara sintaksis dalam bentuk argumen dan output disampaikan sebagai nilai balik.
Scoping adalah teknik lain yang membantu menjaga prosedur tetap modular. Ini mencegah prosedur mengakses variabel prosedur lain (dan sebaliknya), termasuk contoh sebelumnya dari dirinya sendiri, tanpa otorisasi eksplisit.
Prosedur yang kurang modular, sering digunakan dalam program yang kecil atau ditulis dengan cepat, cenderung berinteraksi dengan sejumlah besar variabel dalam lingkungan eksekusi, yang mungkin juga dimodifikasi oleh prosedur lain.
Karena kemampuan untuk menentukan antarmuka yang sederhana, untuk mandiri, dan untuk digunakan kembali, prosedur adalah kendaraan yang nyaman untuk membuat potongan kode yang ditulis oleh orang yang berbeda atau kelompok yang berbeda, termasuk melalui perpustakaan pemrograman / perangkat lunak.
Perbandingan dengan paradigma pemrograman lain
Pemrograman imperatif
Bahasa pemrograman prosedural juga merupakan bahasa imperatif, karena mereka membuat referensi eksplisit ke keadaan lingkungan eksekusi. Ini bisa apa saja mulai dari variabel (yang mungkin sesuai dengan register prosesor) hingga sesuatu seperti posisi "kura-kura" dalam bahasa pemrograman Logo.
Seringkali, istilah "pemrograman prosedural" dan "pemrograman imperatif" digunakan secara sinonim. Namun, pemrograman prosedural sangat bergantung pada blok dan ruang lingkup, sedangkan pemrograman imperatif secara keseluruhan mungkin atau mungkin tidak memiliki fitur seperti itu. Dengan demikian, bahasa prosedural umumnya menggunakan kata-kata khusus yang bekerja pada blok, seperti jika, sementara, dan untuk, untuk menerapkan aliran kontrol, sedangkan bahasa imperatif non-terstruktur menggunakan pernyataan goto dan tabel cabang untuk tujuan yang sama.
Pemrograman berorientasi objek
Fokus pemrograman prosedural adalah untuk memecah tugas pemrograman menjadi kumpulan variabel, struktur data, dan subrutin, sedangkan dalam pemrograman berorientasi objek adalah untuk memecah tugas pemrograman menjadi objek yang mengekspos perilaku (metode) dan data (anggota). atau atribut) menggunakan antarmuka. Perbedaan yang paling penting adalah bahwa sementara pemrograman prosedural menggunakan prosedur untuk beroperasi pada struktur data, pemrograman berorientasi objek menggabungkan keduanya, jadi "objek", yang merupakan turunan dari kelas, beroperasi pada struktur datanya sendiri. [2]
Nomenklatur bervariasi di antara keduanya, meskipun mereka memiliki semantik yang serupa:
Procedural | Object-oriented |
---|---|
Procedure | Method |
Record | Object |
Module | Class |
Procedure call | Message |
Pemrograman fungsional
Prinsip-prinsip modularitas dan penggunaan kembali kode dalam bahasa fungsional praktis pada dasarnya sama seperti dalam bahasa prosedural, karena keduanya berasal dari pemrograman terstruktur. Jadi misalnya:
- Prosedur sesuai dengan fungsi. Keduanya memungkinkan penggunaan kembali kode yang sama di berbagai bagian program, dan di berbagai titik pelaksanaannya.
- Dengan cara yang sama, panggilan prosedur sesuai dengan aplikasi fungsi.
Fungsi dan mereka terpisah secara modular satu sama lain dengan cara yang sama, dengan menggunakan argumen fungsi, nilai kembalian, dan cakupan variabel.
- Perbedaan utama antara gaya adalah bahwa bahasa pemrograman fungsional menghapus atau setidaknya tidak menekankan elemen penting dari pemrograman prosedural. Oleh karena itu, set fitur bahasa fungsional dirancang untuk mendukung program penulisan sebanyak mungkin dalam hal fungsi murni:
- Sedangkan bahasa prosedural memodelkan eksekusi program sebagai urutan perintah imperatif yang secara implisit dapat mengubah status bersama, bahasa pemrograman fungsional memodelkan eksekusi sebagai evaluasi ekspresi kompleks yang hanya bergantung satu sama lain dalam hal argumen dan nilai kembalian. Untuk alasan ini, program fungsional dapat memiliki urutan eksekusi kode yang bebas, dan bahasa mungkin menawarkan sedikit kendali atas urutan berbagai bagian program yang dijalankan. (Misalnya, argumen untuk pemanggilan prosedur dalam Skema dieksekusi dalam urutan yang berubah-ubah.)
- Bahasa pemrograman fungsional mendukung (dan banyak menggunakan) fungsi kelas satu, fungsi anonim, dan penutupan, meskipun konsep ini disertakan dalam bahasa prosedural yang lebih baru.
Bahasa pemrograman fungsional cenderung mengandalkan optimasi panggilan ekor dan fungsi tingkat tinggi daripada konstruksi perulangan imperatif.
- Banyak bahasa fungsional, bagaimanapun, sebenarnya tidak sepenuhnya fungsional dan menawarkan konstruksi imperatif/prosedur yang memungkinkan programmer atau pemrogram untuk menulis program dalam gaya prosedural, atau dalam kombinasi dari kedua gaya. Biasanya kode input/output dalam bahasa fungsional ditulis dengan gaya prosedural.
Memang ada beberapa bahasa fungsional esoterik (seperti Unlambda) yang menghindari aturan pemrograman terstruktur demi menjadi sulit untuk diprogram (dan karena itu menantang). Bahasa-bahasa ini adalah pengecualian untuk kesamaan antara bahasa prosedural dan fungsional.
Pemrograman logika
Dalam pemrograman logika, program adalah satu set premis, dan perhitungan dilakukan dengan mencoba membuktikan teorema kandidat. Dari sudut pandang ini, program logika bersifat deklaratif, berfokus pada apa masalahnya, daripada bagaimana menyelesaikannya.
Namun, teknik penalaran mundur, yang diimplementasikan oleh resolusi SLD, yang digunakan untuk memecahkan masalah dalam bahasa pemrograman logika seperti Prolog, memperlakukan program sebagai prosedur pengurangan tujuan. Jadi klausa bentuknya:
- H :- B1, …, Bn.
memiliki interpretasi ganda, baik sebagai prosedur
- untuk menunjukkan/menyelesaikan H, untuk menunjukkan/menyelesaikan B1 and … and Bn
dan sebagai implikasi logis:
- B1 and … and Bn implies H.
Pemrogram logika berpengalaman menggunakan interpretasi prosedural untuk menulis program yang efektif dan efisien, dan mereka menggunakan interpretasi deklaratif untuk membantu memastikan bahwa program benar.
References
- ^ "Paradigma Pemrograman". rezekiapps.com. June 2022. Diakses tanggal 2022-06-28.
- ^ "Perbedaan Antara Bahasa Pemrograman Berorientasi Objek Dan Bahasa Pemrograman Prosedural". rezekiapps.com. June 2022. Diakses tanggal 2022-06-29.