<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  <link rel="stylesheet" type="text/css" media="all" href="stylesheet.css">
  <title>Imperative und deklarative Programmiersprachen</title>
</head>
<body>
  <span id="menu"><a href="index.php">zurück zur Liste</a></span>
  
  <div id="buttons">
    <form action="edit.php" method="POST">
      <input type="hidden" name="filename" value="<?php echo $_SERVER['SCRIPT_FILENAME']?>">
      <p>
        <input type="submit" value="Seite bearbeiten">
      </p>
    </form>
  </div>
  
  <h1>Imperative und deklarative Programmiersprachen</h1>
  
  <h2>Imperative Programmiersprachen</h2>
  In imperativen (befehlsorientierten) Programmiersprachen wie Java, C, Pascal, etc. wird der Zustand des Systems explizit verändert. Es gibt Variablen, die zur Laufzeit verändert werden können. Imperative Sprachen sind Hochsprachen, was fortgeschrittene Methoden und Konstrukte wie Objektorientierung oder Schleifen erlaubt, was den Code leichter verständlich macht. Allerdings wird der Code oft wesentlich länger im Vergleich zu funktionalen Programmiersprachen.
  
  <h2>Deklarative Programmiersprachen</h2>
  <!-- Untergruppen: relationale/logische & funktionale<br> -->
  In deklarativen Programmiersprachen ist eine Änderung von Werten per Zuweisung nicht möglich, was auch bedeutet, dass z.B. Rückgabewerte von Funktionen im Normalfall nirgendwo gespeichert sondern nur ausgegeben werden. Der Code wird durch die Deklaration über Funktionen kurz gehalten, was ihn aber oft auch schwer verständlich macht. Funktionale Sprachen eignen sich gut zur Spezifikation, da mit ihnen Fehler leicht entdeckt werden können.
  
  <h2>Klassifizierungen</h2>
  <table border="0">
    <tr>
      <td>Java</td><td>imperativ &amp; objektorientiert</td>
    </tr>
    <tr>
      <td>Pascal</td><td>imperativ, prozedural</td>
    </tr>
    <tr>
      <td>DML</td><td>imperativ, nicht-prozedural</td>
    </tr>
    <tr>
      <td>Haskell</td><td>deklarativ, funktional</td>
    </tr>
    <tr>
      <td>Prolog</td><td>deklarativ, relational/logisch</td>
    </tr>
    <tr>
      <td>C++</td><td>hybrid aus imperativem C und objektorientierten Erweiterungen</td>
    </tr>
  </table>
  
  
    <h2>Anmerkungen</h2>
  Imperative Sprachen werden oft mit <i>prozeduralen Sprachen</i> gleichgesetzt, was jedoch nicht richtig ist. Während in imperativen Sprachen geschriebene Programme durch die Variablenmanipulation einen internen Zustand haben (wie ein Automat), ist prozedurales Programmieren auch ohne dies möglich. Ein Beispiel für eine prozedurale, nicht imperative Sprache ist die Lehrsprache LOGO. (In LOGO werden oft sog. Turtle-Grafiken erstellt: Es wird eine &quot;Schildkröte&quot; programmiert, die über eine Fläche läuft und dabei eine Linie zieht. Die &quot;Schildkröte&quot; selbst akzeptiert nur relative Befehle wie LINKS, RECHTS oder STOPP, hat aber keine Information über ihre Position o.ä. Die Programme haben keinen aktuellen Zustand sondern werden nur sequenziell abgearbeitet.)
  

  <h2>Links</h2>
  <a href="http://www.wikiservice.at/dse/wiki.cgi?DeklarativeProgrammierung">DSE: Deklarative Programmierung</a><br>
  <a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?imperative+languages">FOLDOC: imperative languages</a><br>
  <a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?declarative+languages">FOLDOC: declarative languages</a>
  
</body>
</html>