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 edytuj

Peter 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 edytuj

Wyróż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 edytuj

Przykł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

  1. DAMP 2009: Workshop on Declarative Aspects of Multicore Programming. DAMP 2009, 20-01-2009. [dostęp 2012-02-25]. (ang.).
  2. a b Peter Van Roy, Serif Haridi: Concepts, Techniques, and Models of Computer Programming. MIT Press, 2004, s. 113-118. ISBN 978-0262220699. (ang.).