Jaka jest różnica między paradygmatami programowania deklaratywnego i proceduralnego ? Czy mógłbyś podać kilka przykładów?
Jakie istnieją inne paradygmaty programowania?
Odpowiedzi:
Istnieje kilka pod-paradygmatów imperatywnego paradygmatu programowania, na przykład paradygmaty proceduralne lub obiektowe .
W paradygmacie programowania imperatywnego opisujesz algorytm krok po kroku, na różnych stopniach abstrakcji.
Przykłady języków programowania, które wspierają paradygmat proceduralny:
Zwykle odnosi się do języków, które wykazują hierarchię typów, które dziedziczą zarówno metody, jak i stan od typów podstawowych do typów pochodnych, ale obejmuje również nietypowy JavaScript oparty na prototypach.
Przykłady języków programowania, które wspierają paradygmat OO:
Istnieje kilka podparadygmatów paradygmatu programowania deklaratywnego, takich jak paradygmaty programowania funkcyjnego lub logicznego.
W paradygmacie programowania deklaratywnego opisujesz wynik lub cel i otrzymujesz go za pośrednictwem „ czarnej skrzynki ”. Przeciwieństwo imperatywu.
Przykłady języków programowania obsługujących paradygmat programowania deklaratywnego:
Programowanie funkcjonalne kładzie nacisk na stosowanie funkcji bez skutków ubocznych i bez stanu zmiennego. Powyższe systemy deklaratywne wykazują pewne aspekty programowania funkcjonalnego.
Przykłady języków programowania, które wspierają deklaratywny paradygmat funkcjonalny:
Programowanie deklaratywne to miejsce, w którym mówisz, co chcesz, bez konieczności mówienia, jak to zrobić. W przypadku programowania proceduralnego musisz dokładnie określić kroki, aby uzyskać wynik.
Na przykład SQL jest bardziej deklaratywny niż proceduralny, ponieważ zapytania nie określają kroków prowadzących do uzyskania wyniku.
Pozwólcie, że dam wam przykład z prawdziwego świata: potrzebuję filiżanki herbaty.
Proceduralny:
Deklaracyjny:
W języku proceduralnym definiujesz cały proces i podajesz kroki, jak to zrobić. Po prostu dostarczasz zamówienia i określasz, jak proces będzie obsługiwany.
W języku deklaratywnym po prostu ustawiasz polecenie lub kolejność i pozwalasz, aby system miał wykonać to zamówienie. Potrzebujesz tylko wyniku, nie zastanawiając się, jak to zrobić.
Programowanie proceduralne:
W programowaniu proceduralnym, gdy program jest uruchamiany, postępuje zgodnie z zestawem instrukcji. Instrukcje mogą się zmieniać w zależności od zawartości niektórych plików lub pamięci, ale ogólnie nie różnią się znacznie. dane wejściowe do programu zazwyczaj nie pochodzą z danych wprowadzanych przez użytkownika w czasie rzeczywistym, ale raczej z wstępnie zebranego zestawu danych.
Programowanie deklaratywne:
W deklaratywnym programowaniu sterowanym zdarzeniami skupia się wokół zbioru danych z opcjonalnymi akcjami, które program może na nich wykonać. Na przykład każde „zdarzenie” w edytorze tekstu to dowolna zmiana myszy lub klawiatury (lub pliku), która ma wpływ na dane, dokumenty. Nie trzeba ich wykonywać w żadnej kolejności. Programowanie sterowane zdarzeniami ma postać małych programów (programów obsługi zdarzeń), które wszystkie pracują na wspólnym zestawie danych, dzięki czemu każdy mały program może używać tych samych danych, czyli dokumentu w tym przykładzie.
Główna różnica między dwoma językami programowania polega na tym , że w programowaniu proceduralnym mówimy komputerowi, jak rozwiązać problem, aw programowaniu deklaratywnym mówimy komputerowi, jaki problem chcemy rozwiązać.
Aby odnieść się do komentarza ansibla i być może podać przykład między różnicami między nimi. Ansible ma charakter proceduralny, w którym coś takiego jak marionetka lub terraform jest deklaratywne. Na przykład, tworzysz plik yaml ansible, aby wdrożyć 10 instancji ec2 w następujący sposób:
-ec2: count: 10 image: ami-058c6e5b73b074cd2 instance_type: t2.micro
Gdybyś miał uruchomić ten plik dwa razy, skończyłbyś z 20 instancjami t2.micro ec2. Jeśli napiszesz odpowiednik w języku deklaratywnym, takim jak terraform, i uruchomisz go dwukrotnie, uruchomionych byłoby tylko 10 instancji t2.micro, niezależnie od tego, ile razy go uruchomiłeś. Języki deklaratywne określają stan końcowy. Języki proceduralne po prostu robią to, co im każesz, bez względu na obecny lub przeszły stan.
Więc YAML jest deklaratywnym językiem programowania? Ponieważ definiujemy, czego chcemy, zamiast pisać rzeczywistą logikę.
Pytam o to, ponieważ jeśli ktoś zna Ansible, które jest narzędziem do zarządzania konfiguracją, używa YAML, ale nadal należy do kategorii języków proceduralnych.
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. Przyjrzyj się przykładowi podejścia proceduralnego lub deklaratywnego, które zaimplementowałem w obu podejściach.
Jak widać na przykładzie, w podejściu deklaratywnym nie trzeba instruować JAK rozwiązać problem.