Pytanie Różnica między programowaniem deklaratywnym a programowaniem proceduralnym?


Podczas jednego z moich wywiadów zapytali mnie o różnicę między Deklaratywne programowanie i Programowanie proceduralne typy.

Jaka jest różnica między nimi a przykładami?

P.S: Czy możesz mi powiedzieć, oprócz tych dwóch programów i zorientowanych obiektowo, jakie są języki programowania? Ponieważ mogą również zadawać różnice między innymi językami programowania. I są podobne pytania, takie jak ten, ale zbyt rozproszone.


76


pochodzenie


Podobne pytanie: stackoverflow.com/questions/1784664/... - daCoda
Niestety, żaden przykładowy kod w żadnej z odpowiedzi. - Bob Stein


Odpowiedzi:


Deklaracyjny

Opisz wynik i zdobądź go za pomocą czarnej skrzynki. Przeciwieństwo tryb rozkazujący. Przykłady:

  • Yacc
  • Wierzchołek drzewa
  • SQL
  • Wyrażenia regularne
  • lex
  • XSLT
  • znaczniki, troff, CSS, VHDL

Proceduralna lub imperatywna

Opisz algorytm i etapy procesu, w różnych stopniach abstrakcji.

  • C, większość starszych języków
  • PHP, głównie
  • w pewnym sensie wszystkie główne języki

Obiekt zorientowany

  • Zdaje się być w kategorii proceduralnej, zazwyczaj odnosi się do języków, które wykazują hierarchię typów, które dziedziczą zarówno metody, jak i stan z typów bazowych na typy pochodne, ale obejmuje także nietypowy JavaScript oparty na prototypach. Oddzielny wymiar od innych kategorii tutaj.

Funkcjonalny

Zostawiłeś to. Programowanie funkcjonalne kładzie nacisk na stosowanie funkcji bez efektów ubocznych i bez możliwości zmiany stanu. Powyższe systemy deklaratywne wykazują pewne aspekty programowania funkcjonalnego.

  • Schemat
  • Erlang
  • OCaml
  • Haskell
  • Lisp, w zależności. (Lisp może zasługuje na własną unikalną kategorię)
  • Clojure, nieco
  • Ruby, nieco mniej
  • FA#
  • Scala

87



Dodałbym lisp do twojej listy funkcjonalnych języków programowania. - dave
Możesz także dodać języki logiczne, takie jak Prolog. - Toon Krijthe
@ ToonKrijthe, czy Prolog nie znalazłby się na liście deklaratywnej? - ChronoFish
Właściwie to programowanie describes algorithm and process steps jest nazywany tryb rozkazujący programowanie, które jest nadprogramem proceduralny programowanie, które osiąga to w oparciu o "procedury wzywające" lub inną podobną koncepcję. - minmaxavg
Nie uważam, że funkcjonalne programowanie jest przeciwieństwem imperatywnego programowania. Przykład: Można pisać programy funkcjonalne w języku C, mimo że C jest językiem "imperatywnym". - djsmith


Deklaratywne programowanie to miejsce, w którym mówisz, co chcesz, bez konieczności mówienia, jak to zrobić. Przy programowaniu proceduralnym musisz określić dokładne kroki, aby uzyskać wynik.

Na przykład SQL jest bardziej deklaratywny niż proceduralny, ponieważ zapytania nie określają kroków do uzyskania wyniku.


55



Czy możesz mi powiedzieć inne języki programowania, poza Deklaratywnym, Proceduralnym i OOP. Dzięki. - Tarik
+1 dla dobrego przykładu na SQL. czy możemy podać więcej przykładów? - mauris
Mauris: Może nie język programowania, ale HTML jest deklaratywny, ponieważ opisujesz to, czego chcesz (akapit z ten kawałek pogrubioną czcionką), zamiast wypisywać "ciąg znaków, ciąg miar, pozycję z góry itp." Innym przykładem jest Prolog, gdzie "program" jest deklaratywnym zbiorem faktów i relacji / dedukcji oraz zapytaniem. Silnik Prolog wymienia sposób oceny zapytania: nie musisz tego mówić. Na koniec wyrażenia regularne: opisujesz wzorzec, zamiast określać kroki, aby przetestować dopasowanie. - itowlson
MXML (część struktury Flex) jest deklaratywna: podajesz, w jakiej kolejności chcesz wyświetlać obiekty / kontenery, i obsługuje on układ w zależności od tego, czy powiedziałeś mu, aby układał się poziomo czy pionowo. ActionScript 3 jest proceduralny ze wsparciem dla paradygmatów OOP. - Hooray Im Helping
makefiles to kolejny dość znany język deklaratywny - Stefano Borini


W prostych słowach mam przykład z prawdziwego świata, w którym potrzebuję filiżanki herbaty.

Proceduralny: 

  1. Idź do kuchni
  2. Zyskaj cukier, mleko i herbatę,
  3. Mieszaj je i ogrzewaj nad ogniem, aż się zagotuje
  4. Włóż to do filiżanki i przynieś mi

Deklaracyjny:

  1. Daj mi filiżankę herbaty.

W języku proceduralnym definiujesz cały proces i podajesz kroki, jak to zrobić. Po prostu wydajesz zamówienia i określasz sposób, w jaki proces będzie obsługiwany.

W języku deklaratywnym wystarczy ustawić polecenie lub kolejność i pozwolić systemowi na wypełnienie tego zamówienia. Po prostu potrzebujesz swojego wyniku, nie zastanawiając się, jak to zrobić.

Pozdrowienia,


14



Pomieszałeś deklaracje i procedury w wyjaśnieniu, prawda? - opncow
Zaktualizowano. Dzięki. - Muhammad Zeeshan Tahir


Programowanie proceduralne:

W programowaniu proceduralnym, po uruchomieniu programu następuje zbiór instrukcji. Instrukcje mogą się zmieniać w zależności od zawartości pliku lub pamięci, ale ogólnie rzecz biorąc, nie różnią się zbytnio. dane wejściowe do programu zwykle nie pochodzą z danych wprowadzanych przez użytkownika w czasie rzeczywistym, lecz ze wstępnie zebranych danych.

Programowanie deklaratywne:

W programowaniu opartym na zdarzeniach zorientowanym na zdarzenia centralizuje wokół zbioru danych za pomocą opcjonalnych działań, które program może podjąć. Na przykład każde "zdarzenie" w edytorze tekstu oznacza dowolną zmianę myszy lub klawiatury (pliku), która wpływa na dane, dokument (y). Nie muszą być wykonywane w dowolnej kolejności. Programowanie sterowane zdarzeniami ma postać małych programów (programów obsługi zdarzeń), które działają na wspólnym zestawie danych, tak aby każdy mały program mógł korzystać z tych samych danych, dokumentu w tym przykładzie.


5





W podejściu proceduralnym kodujesz swoją instrukcję, aby osiągnąć wynik. W podejściu deklaratywnym definiujesz, co należy rozwiązać, jako wiedzę o rozwiązaniu problemu. Spójrz na Podejście proceduralne lub deklaratywne przykład zaimplementowałem w obu podejściach.

Jak widać na przykładzie, w podejściu deklaratywnym, nie musisz instruować JAK rozwiązać problemu.


-2



Odwołujesz się do zewnętrznych przykładów, jakby zostały tutaj napisane. Umieść swoje przykłady w ramach swojej odpowiedzi. - ChronoFish