Deklarative Programmierung - LinkFang.de





Deklarative Programmierung


Die deklarative Programmierung ist ein Programmierparadigma, bei dem die Beschreibung des Problems im Vordergrund steht. Der Lösungsweg wird dann automatisch ermittelt. Im Gegensatz zur imperativen Programmierung, bei der das Wie im Vordergrund steht, fragt man in der deklarativen Programmierung nach dem Was, das berechnet werden soll. Bekannte Vertreter deklarativer Programmiersprachen sind Haskell, Lisp, Prolog, XAML und im weiteren Sinne auch SQL und XSLT. Den deklarativen Sprachen stehen die weiter verbreiteten imperativen Sprachen wie C, C++ oder Java gegenüber.

Die Unterschiede der beiden Herangehensweisen werden bei der Implementierung eines Algorithmus am deutlichsten, den man als Kombination von Arbeits- und Steuermechanismus betrachten kann:

  • Deklarative Sprachen ermöglichen eine Trennung der beiden Bestandteile.
  • Dagegen ist bei Verwendung einer imperativen Programmiersprache eine Trennung von Arbeits- und Steuermechanismus kaum möglich. Imperative Sprachen beschreiben Berechnungsabläufe; damit lassen sich imperative Programme als Anweisungen an die Maschine verstehen, auf der sie ablaufen.

Deklarative Sprachen

Zu den deklarativen Sprachen gehören:

Beispiel

Der Quicksort-Sortierungsalgorithmus kann in der imperativen Programmiersprache Pascal folgendermaßen aufgeschrieben werden:

 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;
     tmp:=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 muss. 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.

Derselbe Sortierungsalgorithmus kann in der deklarativen Programmiersprache Haskell folgendermaßen formuliert werden:

 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 nicht von Interesse ist. Die Berechnungen erfolgen dann durch Wertemanipulation. Hauptkontrollstruktur bildet die Rekursion, aus Effizienzgründen besonders die Endrekursion.

Vorteile

  • Die Programme sind oft kürzer als vergleichbare imperative Programme.
  • Beweise (z. B. Korrektheitsbeweis, Beweise über Programmeigenschaften) sind dank einfacherer mathematischer Basis (u. a. Lambda-Kalkül) leichter durchführbar, falls überhaupt möglich.
  • Es gibt keine Nebenwirkungen aufgrund der referentiellen Transparenz. Programme sind damit partiell auswertbar und ermöglichen so z. B. die Behandlung unendlicher Datenstrukturen.[1]

Nachteile

  • Performanz: Der angegebene Quicksort-Algorithmus läuft in Pascal wesentlich schneller als in Haskell und ist demnach für die Verarbeitung größerer Datenmengen besser geeignet.
  • Deklarative Programmierparadigmen stehen insbesondere imperativen und objektorientierten Paradigmen in ihrer Akzeptanz nach. Man spricht gern von sogenannten Akademiker-Sprachen.

Siehe auch

  • Domain-driven Design, ein Ansatz für das Design des Domänenmodells, welcher ein deklaratives Design propagiert

Einzelnachweise

  1. Manuel M. T. Charkravarty: On the Massively Parallel Execution of Declarative Programs. Dissertation. TU Berlin, 14. Februar 1997, S. 166, abgerufen am 16. Oktober 2011 (.ps.gz 343KiB, english).

Kategorien: Programmierparadigma | Programmiersprache als Thema

Quelle: Wikipedia - http://de.wikipedia.org/wiki/Deklarative Programmierung (Vollständige Liste der Autoren des Textes [Versionsgeschichte])    Lizenz: CC-by-sa-3.0

Änderungen: Alle Bilder mit den meisten Bildunterschriften wurden entfernt. Ebenso alle zu nicht-existierenden Artikeln/Kategorien gehenden internen Wikipedia-Links (Bsp. Portal-Links, Redlinks, Bearbeiten-Links). Entfernung von Navigationsframes, Geo & Normdaten, Mediadateien, gesprochene Versionen, z.T. ID&Class-Namen, Style von Div-Containern, Metadaten, Vorlagen, wie lesenwerte Artikel. Ansonsten sind keine Inhaltsänderungen vorgenommen worden. Weiterhin kann es durch die maschinelle Bearbeitung des Inhalts zu Fehlern gerade in der Darstellung kommen. Darum würden wir jeden Besucher unserer Seite darum bitten uns diese Fehler über den Support mittels einer Nachricht mit Link zu melden. Vielen Dank!

Stand der Informationen: August 201& - Wichtiger Hinweis: Da die Inhalte maschinell von Wikipedia übernommen wurden, ist eine manuelle Überprüfung nicht möglich. Somit garantiert LinkFang.de nicht die Richtigkeit und Aktualität der übernommenen Inhalte. Sollten die Informationen mittlerweile fehlerhaft sein, bitten wir Sie darum uns per Support oder E-Mail zu kontaktieren. Wir werden uns dann innerhalb von spätestens 10 Tagen um Ihr Anliegen kümmern. Auch ohne Anliegen erfolgt mindestens alle drei Monate ein Update der gesamten Inhalte.