Programowanie deklaratywne
Programowanie deklaratywne — rodzina paradygmatów programowania, które nie są z natury imperatywne. W przeciwieństwie do programów napisanych imperatywnie, programista opisuje warunki, jakie musi spełniać końcowe rozwiązanie (co chcemy osiągnąć), a nie szczegółową sekwencję kroków, które do niego prowadzą (jak to zrobić). Programowanie deklaratywne często traktuje programy jako pewne hipotezy wyrażone w logice formalnej, a wykonywanie obliczeń jako ich dowodzenie. Programowanie deklaratywne jest szczególnym przedmiotem zainteresowania naukowców, gdyż dzięki minimalizacji lub eliminacji skutków ubocznych może znacząco uprościć tworzenie programów współbieżnych[1]. Paradygmat programowania deklaratywnego obejmuje szeroką gamę języków programowania i bardziej szczegółowych paradygmatów podrzędnych.
Definicja
edytujPeter Van Roy oraz Serif Haridi podają następujące warunki, jakie musi spełniać program, aby mógł być uznany za deklaratywny[2]:
- niezależny — wynik końcowy nie zależy od żadnego zewnętrznego stanu,
- bezstanowy — nie posiada stanu wewnętrznego, który jest zachowywany między wywołaniami,
- deterministyczny — dla takich samych argumentów wejściowych zawsze daje ten sam wynik.
Istnieje kilka szczegółowych paradygmatów, które spełniają te warunki, różniących się sposobami ich osiągnięcia: programowanie funkcyjne, programowanie logiczne, programowanie ograniczeń.
Siła wyrazu
edytujWyróżniamy dwa rodzaje języków deklaratywnych[2]:
- opisowe — opisuje wyłącznie struktury danych i spodziewany rezultat. Język taki najczęściej nie jest zupełny w sensie Turinga lub też osiąga zupełność w inny sposób. Deklaratywność służy przede wszystkim do zwiększenia czytelności lub łatwiejszego opisu pewnych zjawisk. Przykładem takiego języka może być HTML, który opisuje wygląd strony internetowej.
- programowalne — język, którego deklaratywny model obliczeń jest zupełny w sensie Turinga.
Przykłady języków
edytujPrzykładami programowalnych języków deklaratywnych są języki funkcyjne i logiczne takie, jak Ocaml, XSLT czy Prolog. Przykładem języka opisowego jest SQL służący do komunikacji z bazą danych, który sam w sobie nie jest zupełny w sensie Turinga.
Przypisy
edytuj- ↑ DAMP 2009: Workshop on Declarative Aspects of Multicore Programming. DAMP 2009, 20-01-2009. [dostęp 2012-02-25]. (ang.).
- ↑ a b Peter Van Roy, Serif Haridi: Concepts, Techniques, and Models of Computer Programming. MIT Press, 2004, s. 113-118. ISBN 978-0262220699. (ang.).