Zum Inhalt springen

Deklarative Programmierung

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 10. März 2006 um 19:00 Uhr durch Murkel (Diskussion | Beiträge) (Nachteile: bitte nicht auf bkl linken). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Die Deklarative Programmierung ist ein Programmierparadigma, welches auf mathematischer rechnerunabhängiger Theorie beruht. Zu den deklarativen Programmiersprachen gehören:

Im Gegensatz zur imperativen Programmierung, wo das wie im Vordergrund steht, fragt man in der deklarativen Programmierung nach dem was, das berechnet werden soll. Der Unterschied soll an folgendem populären Beispiel demonstriert werden.

Beispiel

Quicksort in Pascal

 procedure quicksort(l,r : integer);
 var x,i,j,tmp : integer;
 begin
   if r>l then
   begin
     x:=a[l]; i:=l; j:=r+1;
     repeat
       repeat  i:=i+1 until a[i]>=x;
       repeat  j:=j-1 until a[j]<=x;
       tmp:=a[j]; a[j]:=a[i]; a[i]:=tmp;
     until j<=i;
     a[i]:=a[j]; a[j]:=a[l]; a[l]:=tmp;
     quicksort(l,j-1);
     quicksort(j+1,r)
   end
 end.
Der Programmierer beschreibt, wie der Algorithmus ablaufen muß. Es wird der Lösungsweg vorgegeben, also welche einzelnen Schritte nacheinander ablaufen und wie Variablen zu verändern sind, um schließlich zum Ergebnis zu kommen.

Quicksort in Haskell

 quicksort [] = []
 quicksort [x:xs] = quicksort [n | n<-xs, n<x] ++ [x] ++ quicksort [n | n<-xs, n>=x]
Der Programmierer beschreibt, was das Programm mit einer Eingabe macht, also wie mit welcher Eingabe umzugehen ist, wobei der Berechnungsablauf von keinem Interesse ist. Die Berechnungen erfolgen dann durch Wertemanipulation. Hauptkontrollstruktur bildet die Rekursion, insbesondere aus Effektivitätsgründen die repetitive Rekursion.

Vorteile

  • Die Programme sind kürzer und leichter zu verstehen als vergleichbare imperative Programme.
  • Es gibt keine Seiteneffekte aufgrund der referentiellen Transparenz. Programme sind damit partiell auswertbar und ermöglichen so z.b. die Behandlung unendlicher Datenstrukturen.
  • Beweise (z.B. Korrektheitsbeweis, Beweise über Programmeigenschaften) sind dank mathematischer Basis (u.a. Lambda-Kalkül) uneingeschränkt durchführbar.
  • Architekturunabhängigkeit

Nachteile

  • Performanz (der angegeben Quicksort Algorithmus ist in Pascal wesentlicher schneller und kann größere Datenmengen verarbeiten als der in Haskell)
  • Akzeptanz (man spricht gern von sogenannten Akademiker-Sprachen)