Dengan meneliti sekitar (buku, Wikipedia, pertanyaan serupa tentang SE, dll) saya menjadi mengerti bahwa pemrograman Imperatif adalah salah satu paradigma pemrograman utama, di mana Anda menggambarkan serangkaian perintah (atau pernyataan) untuk dieksekusi oleh komputer (sehingga Anda cukup banyak yang memerintahkannya untuk mengambil tindakan tertentu, maka nama itu "keharusan"). Sejauh ini bagus.
Pemrograman prosedural, di sisi lain, adalah tipe spesifik (atau subset) dari pemrograman Imperatif, di mana Anda menggunakan prosedur (yaitu, fungsi) untuk menggambarkan perintah yang harus dilakukan oleh komputer.
Pertanyaan pertama : Apakah ada bahasa pemrograman Imperatif yang tidak prosedural? Dengan kata lain, dapatkah Anda memiliki pemrograman Imperatif tanpa prosedur?
Pembaruan : Pertanyaan pertama ini sepertinya dijawab. Bahasa BISA imperatif tanpa menjadi prosedural atau terstruktur. Contohnya adalah bahasa Assembly murni.
Kemudian Anda juga memiliki pemrograman Terstruktur, yang tampaknya merupakan jenis lain (atau subset) dari pemrograman Imperatif, yang muncul untuk menghilangkan ketergantungan pada pernyataan GOTO.
Pertanyaan kedua : Apa perbedaan antara pemrograman prosedural dan terstruktur? Bisakah Anda memilikinya tanpa yang lain, dan sebaliknya? Bisakah kita mengatakan pemrograman prosedural adalah bagian dari pemrograman terstruktur, seperti pada gambar?
sumber
Pertanyaan pertama: Ya, banyak bahasa berorientasi objek murni yang memenuhi syarat. Walaupun mereka memiliki metode, yang sangat dekat dengan fungsinya, mereka melihat metode ini dalam hal pesan dan tidak memberi mereka bobot yang cukup untuk menyebut bahasa prosedural.
Pertanyaan kedua: Perbedaannya sering dalam lingkup yang berbeda. Anda dapat memiliki fungsi dengan pernyataan goto di semua tempat, yang akan berada dalam gaya prosedural, tetapi tidak pemrograman terstruktur. Di sisi lain, sebagian besar bahasa OO mendukung dan mendorong pemrograman terstruktur, tetapi tidak pemrograman prosedural.
Pemrograman prosedural menjelaskan pemesanan global dari program. Program prosedural adalah yang paling efektif dipahami dengan melihat grafik panggilannya. Pemrograman struktural adalah properti lokal, itu berlaku untuk penggunaan jika dan sementara sebagai kebalikan dari kebohongan.
Dengan demikian, kedua properti ini terpisah, Anda dapat memiliki salah satu tanpa yang lainnya.
sumber
unsafePerformIO
memungkinkan melampiaskan havok). Yang lain bercanda bahwa Haskell adalah bahasa pemrograman imperatif favorit mereka. Tetapi faktanya, sebagian besar kode Haskell hidup terpisah dengan bersih dariIO
, tidak menggunakan celah tidak standar untuk menyelinap efek samping, dan murni fungsional.sebagian besar bahasa populer dalam 50 tahun terakhir telah dirancang di sekitar arsitektur komputer yang lazim, yang disebut arsitektur Von Neumann , setelah salah satu penggagasnya, John von Neumann.
Bahasa-bahasa ini disebut bahasa imperatif.
Dalam komputer von Neumaan, data dan program disimpan dalam memori yang sama. CPU yang menjalankan instruksi terpisah dari memori. Oleh karena itu instruksi dan data harus dikirim dari memori ke CPU. Hasil operasi dalam CPU harus dipindahkan kembali ke memori. Hampir semua komputer digital yang dibangun sejak 1940-an didasarkan pada arsitektur von Neumaan.
sumber
Saya takut tidak ada jawaban yang diberikan sejauh ini menangkap inti konsep dengan sangat baik.
Imperatif, prosedural dan terstruktur bukan sifat yang saling eksklusif, mereka hanya fokus pada satu aspek logika pemodelan.
Imperatif adalah bagian counter dari imperatif deklaratif yang pada dasarnya berarti Anda memberi tahu komputer apa yang harus dilakukan dengan menjalankan serangkaian instruksi yang Anda berikan. Program deklaratif di sisi lain memberi tahu apa yang harus dicapai . Dengan kata lain, tetapkan langkah versus tentukan hasil.
Pemrograman prosedural mengacu pada kemampuan prosesor (baik perangkat keras atau penerjemah) untuk membungkus instruksi menjadi senyawa, melompat ke senyawa tersebut dan kembali ke titik setelah melompat begitu senyawa telah dieksekusi. Ini mungkin terdengar sepele dan menurut standar sekarang ini, tetapi Anda memerlukan dukungan dasar di mesin sebelum Anda dapat melakukan ini: kemampuan untuk melompat, semacam tumpukan untuk mendorong alamat yang dapat muncul dan melompat ke kemudian dan tumpukan penunjuk. Prosesor mikro segera menawarkan fitur ini, tetapi Anda dapat membayangkan prosesor primitif yang hanya mampu menjalankan instruksi yang diberikan secara berurutan, seperti selotip atau prosesor kartu punch.
Pemrograman terstruktur adalah langkah berikutnya dari kemampuan untuk melompat ke instruksi lain. Pada akhirnya semuanya turun ke lompatan tetapi jika Anda dapat memiliki lompatan bersyarat, Anda dapat membangun pernyataan aliran kontrol dasar seperti jika-maka, untuk, sementara, ulangi-sampai dan beralih. Menerapkan itu disebut pemrograman terstruktur.
Dalam lingkungan pemrograman modern mana pun Anda akan memiliki semua hal di atas yang Anda inginkan dan menerima begitu saja sehingga kami tidak berbicara tentang mereka lagi. Properti yang membedakan antara bahasa telah lama bergeser ke paradigma tingkat yang lebih tinggi seperti pemrograman berorientasi objek dan fungsional.
Pemrograman deklaratif masih belum biasa, terutama karena itu akan selalu spesifik domain, setidaknya sampai batas tertentu. Anda tidak dapat memiliki bahasa deklaratif tujuan umum. Inilah sebabnya mengapa kita masih terjebak dengan apa yang disebut bahasa generasi ke-3, di mana pemrograman deklaratif atau "pemodelan" akan dianggap sebagai generasi ke-4.
sumber