Apa perbedaan antara Paradigma Pemrograman Deklaratif dan Prosedural?


Jawaban:


108

Imperatif

Ada beberapa sub-paradigma dari paradigma pemrograman imperatif, seperti paradigma pemrograman prosedural atau berorientasi objek.

Dalam paradigma pemrograman imperatif, Anda menjelaskan algoritme selangkah demi selangkah, pada berbagai derajat abstraksi.

Contoh bahasa pemrograman yang mendukung paradigma prosedural:

  • C (dan sebagian besar bahasa warisan lainnya)
  • PHP, kebanyakan
  • Dalam arti tertentu, semua bahasa utama

Berorientasi pada objek

Ini biasanya mengacu pada bahasa yang menunjukkan hierarki tipe yang mewarisi metode dan status dari tipe dasar ke tipe turunan, tetapi juga menyertakan JavaScript berbasis prototipe yang tidak biasa.

Contoh bahasa pemrograman yang mendukung paradigma OO:

  • Jawa

Deklaratif

Ada beberapa sub-paradigma dari paradigma pemrograman deklaratif, seperti paradigma pemrograman fungsional atau logika.

Dalam paradigma pemrograman deklaratif, Anda menggambarkan hasil atau tujuan, dan Anda mendapatkannya melalui " kotak hitam ". Kebalikan dari imperatif.

Contoh bahasa pemrograman yang mendukung paradigma pemrograman deklaratif:

  • yacc
  • Treetop
  • SQL
  • Ekspresi Reguler
  • lex
  • XSLT
  • markup, troff, CSS, VHDL

Fungsional

Pemrograman fungsional menekankan penerapan fungsi tanpa efek samping dan tanpa keadaan yang bisa berubah. Sistem deklaratif di atas menunjukkan aspek tertentu dari pemrograman fungsional.

Contoh bahasa pemrograman yang mendukung paradigma fungsional deklaratif:

  • Haskell
  • OCaml
  • Skema
  • Erlang
  • F #
  • Scala

61

Pemrograman deklaratif adalah tempat Anda mengatakan apa yang Anda inginkan tanpa harus mengatakan bagaimana melakukannya. Dengan pemrograman prosedural, Anda harus menentukan langkah-langkah yang tepat untuk mendapatkan hasilnya.

Misalnya, SQL lebih deklaratif daripada prosedural, karena kueri tidak menentukan langkah-langkah untuk menghasilkan hasilnya.


2
1 untuk contoh yang bagus tentang SQL. bisakah kami memiliki lebih banyak contoh?
mauris

5
Mauris: Mungkin bukan bahasa pemrograman, tapi HTML itu deklaratif, karena Anda mendeskripsikan apa yang Anda inginkan (paragraf dengan bit ini dicetak tebal), daripada menulis "menggambar string, mengukur string, memajukan posisi, dll." Contoh lain adalah Prolog, di mana "program" adalah sekumpulan fakta dan hubungan / deduksi deklaratif, dan kueri. Mesin Prolog mengetahui cara mengevaluasi kueri: Anda tidak perlu memberi tahu cara melakukannya. Terakhir, ekspresi reguler: Anda mendeskripsikan pola daripada mengeja langkah-langkah untuk menguji kecocokan.
itowlson

MXML (bagian dari kerangka kerja Flex) bersifat deklaratif: Anda memberi tahu urutan yang Anda inginkan untuk menampilkan objek / kontainer Anda, dan ini menangani tata letak tergantung pada apakah Anda telah menyuruhnya untuk menata dirinya secara horizontal atau vertikal. ActionScript 3 prosedural dengan dukungan untuk paradigma OOP.
Hooray Im Helping

makefiles adalah bahasa deklaratif lain yang cukup terkenal
Stefano Borini

25

Izinkan saya memberi Anda contoh dunia nyata: Saya butuh secangkir teh.

Prosedural:

  1. Pergi ke dapur
  2. Dapatkan gula, susu, dan teh,
  3. Campur, dan panaskan di atas api sampai mendidih
  4. Taruh itu di cangkir dan bawa padaku

Deklaratif:

  1. Ambilkan aku secangkir teh.

Dalam bahasa prosedural, Anda mendefinisikan keseluruhan proses dan memberikan langkah-langkah bagaimana melakukannya. Anda tinggal memberikan pesanan dan menentukan bagaimana proses tersebut akan dilayani.

Dalam bahasa deklaratif, Anda tinggal mengatur perintah atau urutan, dan membiarkannya di sistem bagaimana menyelesaikan pesanan itu. Anda hanya membutuhkan hasil Anda tanpa menggali bagaimana seharusnya dilakukan.


2
Contoh yang sangat disederhanakan ini sebenarnya membuat saya mengerti maksudnya (sedikit). Tapi satu hal masih menggangguku, mencoba memahami perbedaannya - bagaimana jika tidak ada perintah "Ambilkan aku secangkir teh"? Apakah Anda kemudian harus membuatnya sendiri? Jika demikian, bukankah Anda akan membuat fungsi yang mirip dengan contoh prosedural? Saya kira yang membuat saya bingung adalah sepertinya prosedural dan deklaratif bukanlah properti tetap dari bahasa tertentu , melainkan bagaimana Anda menggunakan bahasa itu? Anda dapat mengatakan "Ambilkan aku secangkir teh" dalam bahasa Jawa, jika itu adalah metode yang tersedia ...
Magnus W

3
Saya ingin tahu apakah, "1. Teh, Earl Grey, Hot" akan menjadi contoh yang lebih baik. Ini menyatakan apa yang perlu disampaikan, bukan tindakan apa yang perlu dilakukan ('Get me ...')
JeffUK

Magnus, pertanyaan Anda benar sekali. Menurut saya, bahasa deklaratif adalah bahasa tingkat tinggi dan diturunkan dari prosedural. Ingat saat pengembang perlu menggunakan baris perintah untuk menambahkan dua angka? Sekarang Anda bisa mendapatkan JUMLAH dari dua atau lebih angka hanya dengan fungsi sederhana. Jadi dalam perspektif saya, jika tidak ada perintah "Ambilkan saya secangkir teh", Anda harus membuatnya. Ketika orang berikutnya akan mencoba menggunakan, itu akan ada di sana. Itu menurut pengetahuan saya yang buruk. Terima kasih
Muhammad Zeeshan Tahir

5

Pemrograman Prosedural:

Dalam pemrograman prosedural, ketika program dimulai, itu mengikuti serangkaian instruksi. Instruksi dapat berubah berdasarkan beberapa file atau konten memori, tetapi secara keseluruhan, itu tidak terlalu bervariasi. masukan ke program biasanya bukan dari masukan pengguna secara real-time, melainkan dari kumpulan data yang telah dikumpulkan sebelumnya.

Pemrograman Deklaratif:

Dalam pemrograman yang digerakkan oleh Peristiwa Deklaratif, terpusat di sekitar tubuh data dengan tindakan opsional yang dapat dilakukan oleh program. Misalnya, setiap "peristiwa" dalam pengolah kata adalah setiap mouse atau keyboard (atau file) perubahan yang mempengaruhi data, dokumen. Mereka tidak perlu dilakukan dalam urutan apa pun. Pemrograman yang digerakkan oleh peristiwa mengambil bentuk program kecil (penangan peristiwa) yang semuanya bekerja pada kumpulan data yang sama, sehingga setiap program kecil dapat menggunakan data yang sama, dokumen dalam contoh ini.


0

Perbedaan utama antara dua bahasa pemrograman adalah, Dalam pemrograman prosedural, kami memberi tahu komputer cara menyelesaikan masalah dan dalam pemrograman deklaratif, kami memberi tahu komputer masalah apa yang ingin kami selesaikan.


0

Untuk mengatasi komentar yang mungkin dan mungkin memberikan contoh di antara perbedaan keduanya. Ansible adalah prosedural dimana sesuatu seperti wayang atau terraform bersifat deklaratif. Misalnya, Anda membuat file yaml yang memungkinkan untuk menerapkan 10 contoh ec2 seperti ini:
-ec2: count: 10 image: ami-058c6e5b73b074cd2 instance_type: t2.micro

Jika Anda menjalankan file itu dua kali, Anda akan mendapatkan 20 instance t2.micro ec2. Jika Anda menulis padanannya dalam bahasa deklaratif seperti terraform dan menjalankannya dua kali, Anda hanya akan memiliki 10 instans t2.micro yang berjalan tidak peduli berapa kali Anda menjalankannya. Bahasa deklaratif menentukan status akhir. Bahasa prosedural hanya melakukan apa yang Anda perintahkan tanpa memperhatikan keadaan saat ini atau masa lalu.


-1

Jadi YAML adalah bahasa pemrograman deklaratif? Karena kita mendefinisikan apa yang kita inginkan daripada menulis logika yang sebenarnya.

Saya menanyakan ini karena jika ada yang tahu Ansible yang merupakan alat manajemen konfigurasi, ia menggunakan YAML tetapi masih termasuk dalam kategori bahasa prosedural.



Ini lebih seperti komentar yang sangat ditegaskan bukan jawaban
zardilior

-2

Dalam pendekatan prosedural Anda menyandikan instruksi Anda untuk mencapai hasil. Dalam pendekatan deklaratif Anda mendefinisikan apa yang perlu dipecahkan sebagai pengetahuan dalam memecahkan masalah. Silahkan lihat contoh pendekatan Prosedural atau Deklaratif yang saya terapkan di kedua pendekatan.

Seperti yang Anda lihat pada contoh, dalam pendekatan deklaratif, Anda tidak perlu menginstruksikan BAGAIMANA cara memecahkan masalah.


Anda merujuk contoh di luar situs seolah-olah ditulis di sini. Bawalah contoh Anda sebagai bagian dari jawaban Anda.
ChronoFish
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.