Badając (książki, Wikipedię, podobne pytania dotyczące SE itp.) Zrozumiałem, że programowanie imperatywne jest jednym z głównych paradygmatów programistycznych, w którym opisuje się szereg poleceń (lub instrukcji) do wykonania przez komputer (więc jesteś ładna wiele nakazuje podejmować określone działania, stąd nazwa „imperatyw”). Na razie w porządku.
Z drugiej strony programowanie proceduralne jest szczególnym typem (lub podzbiorem) programowania imperatywnego, w którym używa się procedur (tj. Funkcji) do opisania poleceń, które komputer powinien wykonać.
Pierwsze pytanie : czy istnieje imperatywny język programowania, który nie jest proceduralny? Innymi słowy, czy możesz mieć programowanie imperatywne bez procedur?
Aktualizacja : Wydaje się, że odpowiedź na to pierwsze pytanie. Język MOŻE być konieczny, nie będąc proceduralnym ani uporządkowanym. Przykładem jest czysty język asemblera.
Następnie masz również programowanie strukturalne, które wydaje się być innym typem (lub podzbiorem) programowania imperatywnego, które pojawiło się, aby usunąć poleganie na instrukcji GOTO.
Drugie pytanie : Jaka jest różnica między programowaniem proceduralnym a programowaniem strukturalnym? Czy możesz mieć jeden bez drugiego i odwrotnie? Czy możemy powiedzieć, że programowanie proceduralne jest podzbiorem programowania strukturalnego, jak na obrazie?
źródło
Pierwsze pytanie: Tak, kwalifikuje się wiele czysto obiektowych języków. Chociaż mają metody, które są bardzo zbliżone do funkcji, widzą te metody w kategoriach komunikatów i nie przywiązują wystarczającej wagi do wywołania języka proceduralnego.
Drugie pytanie: różnica ma często inny zakres. Możesz mieć funkcję z instrukcjami goto wszędzie, która będzie w stylu proceduralnym, ale nie w programowaniu strukturalnym. Z drugiej strony większość języków OP obsługuje i wspiera programowanie strukturalne, ale nie programowanie proceduralne.
Programowanie proceduralne opisuje globalną kolejność programu. Programy proceduralne to te, które są najskuteczniej zrozumiane, patrząc na ich wykresy połączeń. Programowanie strukturalne jest własnością lokalną, ma zastosowanie do użycia if i while w przeciwieństwie do goto.
Jako takie, te dwie właściwości są rozłączne, możesz mieć jedną bez drugiej.
źródło
unsafePerformIO
pozwala sieje Havok). Inni żartują, że Haskell jest ich ulubionym imperatywnym językiem programowania. Ale faktem jest, że bardzo duży kod Haskell żyjeIO
w czystej postaci, nie używa niestandardowych luk w celu ukrycia efektów ubocznych i jest całkowicie funkcjonalny.większość popularnych języków ostatnich 50 lat została zaprojektowana wokół powszechnie stosowanej architektury komputerowej, zwanej architekturą Von Neumann , od jednego z jej twórców, Johna von Neumanna.
Języki te nazywane są językami rozkazującymi.
W komputerze von Neumaan zarówno dane, jak i programy są przechowywane w tej samej pamięci. Procesor, który wykonuje instrukcje, jest niezależny od pamięci. Dlatego instrukcje i dane muszą być przesyłane z pamięci do procesora. Wyniki operacji w CPU należy przenieść z powrotem do pamięci. Prawie wszystkie komputery cyfrowe zbudowane od lat 40. XX wieku oparte są na architekturze von Neumaan.
źródło
Obawiam się, że żadna z dotychczas udzielonych odpowiedzi nie oddaje sedna tych koncepcji.
Imperatywne, proceduralne i strukturalne nie wykluczają się wzajemnie, skupiają się tylko na jednym aspekcie logiki modelowania.
Tryb imperatywny jest częścią przeciwstawną deklaratywnej Tryb imperatywny w zasadzie oznacza, że mówisz komputerowi, co ma robić , wykonując szereg instrukcji, które udostępniasz. Z drugiej strony program deklaratywny mówi, co należy osiągnąć . Innymi słowy, zdefiniuj kroki kontra zdefiniuj wynik.
Programowanie proceduralne odnosi się do zdolności procesora (sprzętowego lub interpretera) do zawijania instrukcji w związki, przeskakiwania do takiego związku i powrotu do punktu po skoku po wykonaniu związku. Może się to wydawać trywialne i jak na dzisiejsze standardy, ale potrzebujesz trochę podstawowego wsparcia w maszynie, zanim to zrobisz: umiejętność skakania, pewnego rodzaju stosu do popychania adresu, który można otworzyć i przeskoczyć do niego później oraz wskaźnik stosu. Mikroprocesory wkrótce zaoferowały tę funkcję, ale możesz sobie wyobrazić prymitywny procesor, który jest w stanie wykonywać instrukcje podawane do niego sekwencyjnie, jak na przykład taśma perforująca lub procesor kart dziurkowanych.
Programowanie strukturalne to kolejny krok od umiejętności przejścia do innej instrukcji. Ostatecznie wszystko sprowadza się do skoków, ale jeśli możesz mieć skoki warunkowe, możesz zbudować podstawowe instrukcje przepływu sterującego, takie jak jeśli-to, dla, podczas gdy, powtarzaj-do i przełączaj. Stosowanie ich nazywa się programowaniem strukturalnym.
W każdym nowoczesnym środowisku programistycznym będziesz mieć do dyspozycji wszystkie powyższe elementy i przyjmiesz je za pewnik, więc nie mówimy już o nich jako takich. Różnice między językami od dawna zmieniły się na paradygmaty wyższego poziomu, takie jak programowanie obiektowe i programowanie funkcjonalne.
Programowanie deklaratywne wciąż nie jest powszechne, głównie dlatego, że zawsze będzie dotyczyło konkretnej domeny, przynajmniej do pewnego stopnia. Nie możesz mieć deklaratywnego języka ogólnego przeznaczenia. Właśnie dlatego wciąż tkwimy w tak zwanych językach trzeciej generacji, w których deklaratywne programowanie lub „modelowanie” byłoby uważane za czwartą generację.
źródło