Bildirimsel ve yordamsal programlama paradigmaları arasındaki fark nedir?


Yanıtlar:


108

Zorunlu

Prosedürel veya nesne yönelimli programlama paradigmaları gibi, zorunlu programlama paradigmasının birkaç alt paradigması vardır.

Zorunlu programlama paradigmasında, algoritmayı çeşitli soyutlama derecelerinde adım adım tanımlarsınız.

Prosedür paradigmasını destekleyen programlama dillerine örnekler:

  • C (ve diğer birçok eski dil)
  • PHP, çoğunlukla
  • Bir anlamda, tüm büyük diller

Nesne odaklı

Tipik olarak, hem yöntemleri hem de durumu temel türlerden türetilmiş türlere devralan, ancak aynı zamanda olağandışı prototip tabanlı JavaScript'i de içeren bir tür hiyerarşisi sergileyen dilleri ifade eder .

OO paradigmasını destekleyen programlama dillerine örnekler:

  • Java

Bildirge

İşlevsel veya mantıksal programlama paradigmaları gibi bildirimsel programlama paradigmasının birkaç alt paradigması vardır.

Bildirime dayalı programlama paradigmasında, bir sonucu veya hedefi tanımlarsınız ve bunu bir " kara kutu " aracılığıyla elde edersiniz . Zorunluluğun tersi .

Bildirim temelli programlama paradigmasını destekleyen programlama dillerine örnekler:

  • yacc
  • Treetop
  • SQL
  • Düzenli ifadeler
  • lex
  • XSLT
  • biçimlendirme, troff, CSS, VHDL

İşlevsel

Fonksiyonel programlama, yan etkiler olmadan ve değişken durum olmadan fonksiyonların uygulanmasını vurgular. Yukarıdaki bildirimsel sistemler, işlevsel programlamanın belirli yönlerini sergiler.

Bildirimsel işlevsel paradigmayı destekleyen programlama dillerine örnekler:

  • Haskell
  • OCaml
  • Şema
  • Erlang
  • F #
  • Scala

61

Bildirimsel programlama, nasıl yapılacağını söylemek zorunda kalmadan ne istediğinizi söylediğiniz yerdir. Prosedürel programlamada, sonucu elde etmek için kesin adımlar belirlemeniz gerekir.

Örneğin, sorgular sonucu üretecek adımları belirtmediğinden, SQL prosedürelden daha açıklayıcıdır.


2
SQL'de iyi bir örnek için +1. daha fazla örnek alabilir miyiz lütfen?
mauris

5
Mauris: Belki bir programlama dili değil, ancak HTML açıklayıcıdır, çünkü "çizim dizesi, dizgiyi ölç, ilerletme konumu vb." Yazmak yerine ne istediğinizi ( bu bit kalın yazılmış bir paragraf) tanımlıyorsunuz . Diğer bir örnek, bir "programın" bildirimsel bir olgu ve ilişki / çıkarımlar kümesi ve bir sorgu olduğu Prolog'dur. Prolog motoru, sorgunun nasıl değerlendirileceğini çözer: bunu nasıl yapacağını söylemenize gerek yoktur. Son olarak, normal ifadeler: Bir eşleşmeyi test etme adımlarını açıklamak yerine kalıbı tanımlarsınız.
itowlson

MXML (Flex çerçevesinin bir parçası) açıklayıcıdır: Nesnelerinizin / kaplarınızın görüntülenmesini istediğiniz sırayı söylersiniz ve kendisini yatay veya dikey olarak yerleştirmesini söylemiş olmanıza bağlı olarak düzeni işler. ActionScript 3, OOP paradigmalarını destekleyen prosedüreldir.
Yaşasın

makefiles, oldukça ünlü bir bildirim dilidir
Stefano Borini

25

Size gerçek dünyadan bir örnek vereyim: Bir fincan çaya ihtiyacım var.

Prosedürel:

  1. Mutfağa git
  2. Şeker, süt ve çay alın
  3. Onları karıştırın ve kaynayana kadar ateşin üzerinde ısıtın
  4. Onu bir bardağa koy ve bana getir

Bildirge:

  1. Bana bir fincan çay getir.

Prosedürel bir dilde, tüm süreci tanımlar ve bunun nasıl yapılacağı adımlarını sağlarsınız. Siz sadece sipariş verirsiniz ve sürecin nasıl sunulacağını tanımlarsınız.

Bildirime dayalı bir dilde, sadece komutu veya sırayı ayarlarsınız ve bu siparişin nasıl tamamlanacağının sistemde olmasına izin verirsiniz. Nasıl yapılması gerektiğini araştırmadan sonucunuza ihtiyacınız var.


2
Bu son derece basitleştirilmiş örnek aslında benim için önemli noktayı (biraz) itti. Ama bir şey hala beni rahatsız ediyor, farkı anlamaya çalışıyor - ya "Bana bir fincan çay getir" komutu yoksa? O halde kendin yaratmak zorunda mısın? Öyleyse, prosedür örneğine benzer bir işlev yaratmaz mısınız? Sanırım kafamı karıştıran şey, yordamsal ve bildirimsel gibi görünmesi , belirli bir dilin sabit özellikleri değil , bu dili nasıl kullandığınızdır? Mevcut bir
Magnus W

5
Merak ediyorum, "1. Çay, Earl Grey, Sıcak" daha iyi bir örnek olur mu? Hangi eylemlerin yapılması gerektiğini değil, neyin teslim edilmesi gerektiğini beyan ediyor ('Beni al ...')
JeffUK

Magnus, sorunuz kesinlikle doğru. Kanımca, bildirimsel diller daha yüksek seviyeli dillerdir ve prosedürel dillerden türetilmiştir. Geliştiricilerin iki sayı eklemek için komut satırlarını kullanmaları gereken zamanı hatırlıyor musunuz? Artık, yalnızca basit bir işlevle iki veya daha fazla sayıdan oluşan TOPLA elde edebilirsiniz. Yani benim bakış açıma göre, "Bana bir fincan çay getir" komutu yoksa, onu yaratmanız gerekir. Bir sonraki kişi kullanmaya çalıştığı zaman orada olacaktır. Bu benim zayıf bilgime göre. Teşekkürler
Muhammad Zeeshan Tahir

5

Prosedürel Programlama:

Prosedürel programlamada, program başladığında, bir dizi talimatı izler. Talimatlar bazı dosya veya bellek içeriğine bağlı olarak değişebilir, ancak genel olarak büyük ölçüde değişmez. programın girdisi tipik olarak gerçek zamanlı kullanıcı girdisinden değil, önceden toplanmış bir veri kümesinden gelir.

Bildirime Dayalı Programlama:

Bildirimli Olay güdümlü programlama, programın gerçekleştirebileceği isteğe bağlı eylemlerle bir veri gövdesi etrafında merkezileştirilir. Örneğin, bir kelime işlemcideki her "olay", verileri, belgeleri etkileyen herhangi bir fare veya klavye (veya dosya) değişiklikleridir. Herhangi bir sırayla gerçekleştirilmeleri gerekmez. Olay güdümlü programlama, tümü ortak bir veri kümesi üzerinde çalışan küçük programlar (olay işleyicileri) biçimini alır, böylece her küçük program bu örnekteki belge olan aynı verileri kullanabilir.


0

İki programlama dili arasındaki temel fark şudur: Prosedürel programlamada, bilgisayara problemin nasıl çözüleceğini söyleriz ve bildirimsel programlamada, bilgisayara hangi problemin çözülmesini istediğimizi söyleriz.


0

Yanıtlanabilir yorumu ele almak ve belki ikisinin farklılıkları arasında bir örnek vermek için. Ansible, kukla veya toprak formu gibi bir şeyin beyan edici olduğu prosedüreldir. Örneğin, şu şekilde 10 ec2 örneğini dağıtmak için yanıtlanabilir bir yaml dosyası oluşturursunuz:
-ec2: count: 10 image: ami-058c6e5b73b074cd2 instance_type: t2.micro

Bu dosyayı iki kez çalıştıracak olsaydınız, 20 t2.micro ec2 örnekleri elde edersiniz. Eşdeğeri terraform gibi bildirim temelli bir dilde yazarsanız ve iki kez çalıştırırsanız, kaç kez çalıştırmış olursanız olun yalnızca 10 t2.micro örneğiniz çalışır. Bildirime dayalı diller son durumu belirtir. Prosedürel diller, şimdiki veya geçmiş duruma bakılmaksızın, söylediklerinizi yerine getirir.



-2

Prosedürel yaklaşımda, sonuca ulaşmak için talimatınızı kodlarsınız. Bildirimsel yaklaşımda, neyin çözülmesi gerektiğini, problemi çözme bilgisi olarak tanımlarsınız. Her iki yaklaşımda da uyguladığım Prosedürel veya Bildirime dayalı yaklaşım örneğine bir göz atın .

Örnekte göreceğiniz gibi, bildirimsel yaklaşımda, sorunu çözmek için NASIL talimat vermenize gerek yoktur.


Site dışı örneklere, sanki burada yazılmış gibi referans veriyorsunuz. Cevabınızın bir parçası olarak örneklerinizi getirin.
ChronoFish
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.