Zum Inhalt springen

Informatik · Klasse 13 · aktualisiert

Deklarative Programmierung: Was statt Wie

Was soll herauskommen, und wie kommt man dahin? Du lernst den Unterschied zwischen deklarativ und imperativ und ordnest SQL, Prolog und Haskell ein.

0 von 12 Aufgaben gelöst

Deklarative Programmierung: Was statt Wie

Kurz gesagt

Deklarative Programmierung ist ein Programmierparadigma, bei dem die Beschreibung des Problems im Vordergrund steht: das Was. Der Lösungsweg wird dann automatisch ermittelt. Bei der imperativen Programmierung steht dagegen das Wie im Vordergrund.

Im Restaurant bestellst du ein Gericht und sagst damit, was du willst. Wie die Küche kocht, musst du nicht erklären. Deklarative Programmierung funktioniert ähnlich. Imperative Programmierung gleicht eher einem Rezept, das jeden Schritt vorgibt.

Deine Lernziele

Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.

4 Abschnitte

Bei der imperativen Programmierung besteht ein Programm aus einer Folge von Anweisungen. Sie geben vor, in welcher Reihenfolge der Computer was tun soll. Der Entwickler steuert die Ausführung mit Kontrollstrukturen, zum Beispiel mit einer Sequenz, einer Schleife oder einer bedingten Verzweigung. Rezepte und Checklisten ähneln diesem Stil: Jeder Schritt ist eine Anweisung. Bekannte imperative Sprachen sind C, C++ und Java. Sie sind weiter verbreitet als die deklarativen Sprachen.

Bei der deklarativen Programmierung beschreibst du dagegen das Problem. Du fragst nach dem Was, das berechnet werden soll. Der Lösungsweg wird dann automatisch ermittelt.

Achtung: Dass der Prozessor am Ende Maschinencode Befehl für Befehl ausführt, macht ein Programm nicht imperativ. Das ist bei jedem Paradigma so. Entscheidend ist, ob ein Entwickler Code schreibt, der die Schritte detailliert beschreibt. Außerdem sind die Paradigmen, bezogen auf einzelne Programme, keine Gegner. Viele Programmiersprachen können mehrere Paradigmen gleichzeitig unterstützen.

Definition

Deklarative Programmierung

Ein Programmierparadigma, bei dem die Beschreibung des Problems im Vordergrund steht. Der Lösungsweg wird dann automatisch ermittelt.

Beispiel: Quadratzahlen der ungeraden Zahlen von 3 bis 11

  1. 1Aufgabe: Gib die Quadratzahlen der ungeraden Zahlen von 3 bis 11 aus.
  2. 2Imperativ, mit Schleife: for (int i = 3; i < 12; i += 2) gibt in jedem Durchlauf i * i aus.
  3. 3Deklarativ, mit Listenbeschreibung: mapM_ print [ i^2 | i <- [3,5..11] ]
  4. 4Die Schleife legt fest, wie i hochgezählt wird. Die Listenbeschreibung sagt, welche Zahlen quadriert werden.
  5. 5Beide Programme geben 9, 25, 49, 81 und 121 aus.

Merke: Deklarativ fragt nach dem Was. Imperativ legt das Wie fest: Schritte in einer bestimmten Reihenfolge.

Teste dich

LeichtWas steht bei der imperativen Programmierung im Vordergrund?
MittelWoran erkennst du, dass ein Programm imperativ ist?

Alles auf einen Blick

Deklarative Programmierung

  • Was und Wie

    Deklarative Programme beschreiben das Was, imperative legen das Wie fest.

  • Imperativ

    Eine Folge von Anweisungen bestimmt die Reihenfolge der Schritte.

  • Quicksort

    Die Pascal-Version gibt den Weg vor, die Haskell-Version beschreibt, was mit der Eingabe geschieht.

  • Arten

    Abfragesprachen wie SQL (im weiteren Sinne deklarativ), funktionale Sprachen wie Haskell, logische Sprachen wie Prolog.

  • Vorzüge

    Deklarative Programme sind oft kürzer und haben keine Nebenwirkungen.

  • In-Place

    Der Haskell-Quicksort erzeugt eine neue Liste, deshalb ist er kein echter Quicksort.

Musteraufgabe · Schritt für Schritt

Den Haskell-Quicksort auf [3,1,2] anwenden (ausgedachtes Beispiel)

  1. 1Eingabe (ausgedacht): [3,1,2]. Regel: quicksort (x:xs) = quicksort [n | n<-xs, n<x] ++ [x] ++ quicksort [n | n<-xs, n>=x]
  2. 2Schritt 1: x = 3, xs = [1,2]. Kleiner als 3: [1,2]. Mindestens 3: [].
  3. 3Also: quicksort [1,2] ++ [3] ++ quicksort []
  4. 4Schritt 2: quicksort [1,2] hat x = 1, xs = [2]. Kleiner als 1: []. Mindestens 1: [2].
  5. 5Also: quicksort [1,2] = quicksort [] ++ [1] ++ quicksort [2]
  6. 6Schritt 3: quicksort [2] = [] ++ [2] ++ [] = [2]. Außerdem gilt quicksort [] = [].
  7. 7Zusammen: quicksort [1,2] = [] ++ [1] ++ [2] = [1,2]. Dann [1,2] ++ [3] ++ [] = [1,2,3].
  8. 8Bei jedem Schritt entstehen neue Listen. Das passt dazu, dass der Haskell-Code eine neue Liste erzeugt.

Fehler finden

Prüfe die Aussagen zu deklarativen Sprachen und Quicksort In einer Zeile steckt ein Fehler. Tippe sie an.

Lückentext

Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.

Bei der deklarativen Programmierung steht die Beschreibung des Problems im Vordergrund, also das . Der Haskell-Quicksort erzeugt beim Sortieren eine Liste. Ein Programm aus Fakten und Regeln, aus denen ein Interpreter die Antwort herleitet, gehört zu den Sprachen.

Karteikasten

Erst selbst überlegen, dann umdrehen.

Übung mit Feedback

Abschluss-Check: Deklarative Programmierung

LeichtWelche Aussage über SQL passt?
MittelWas ist beim Haskell-Quicksort die Hauptkontrollstruktur?
SchwerEin Schüler sagt: „Jede Sprache gehört zu genau einem Paradigma.“ Was stimmt?

Weiterlesen in Informatik