Ob bei der App-Ent­wick­lung, der Pro­gram­mie­rung von Maschinen oder der Ent­wick­lung von Un­ter­neh­mens-Software: Bevor die erste Zeile Code ge­schrie­ben wird, muss der Ent­wick­ler die Ent­schei­dung treffen, welche Pro­gram­mier­spra­che zum Einsatz kommen soll. Die Auswahl möglicher Pro­gram­mier­spra­chen ist groß. Doch jede von ihnen lässt sich zwei grund­le­gend ver­schie­de­nen Pro­gram­mier­pa­ra­dig­men zuordnen: der im­pe­ra­ti­ven Pro­gram­mie­rung und der de­kla­ra­ti­ven Pro­gram­mie­rung. Beide Her­an­ge­hens­wei­sen haben Vor- und Nachteile.

Was zeichnet im­pe­ra­ti­ve Pro­gram­mier­spra­chen aus? Welche Schwächen müssen Ent­wick­ler be­rück­sich­ti­gen? Wir be­ant­wor­ten die wich­tigs­ten Fragen zum im­pe­ra­ti­ven Paradigma in diesem Artikel.

Was ist im­pe­ra­ti­ve Pro­gram­mie­rung?

Die im­pe­ra­ti­ve Pro­gram­mie­rung (von la­tei­nisch imperare = befehlen) ist das älteste Pro­gram­mier­pa­ra­dig­ma. Gemäß diesem Paradigma besteht ein Programm aus einer klar de­fi­nier­ten Abfolge von Hand­lungs­an­wei­sun­gen an einen Computer.

Der Quellcode im­pe­ra­ti­ver Sprachen reiht also Befehle an­ein­an­der, die festlegen, was wann vom Computer zu tun ist, um ein ge­wünsch­tes Ergebnis zu erzielen. In Variablen ein­ge­setz­te Werte werden dabei zur Laufzeit des Programms verändert. Um die Befehle zu steuern, werden Kon­troll­struk­tu­ren wie Schleifen oder Ver­zwei­gun­gen in den Code in­te­griert.

Die im­pe­ra­ti­ven Pro­gram­mier­spra­chen sind sehr konkret und arbeiten nah am System. Der Code ist damit ei­ner­seits leicht ver­ständ­lich, an­de­rer­seits werden viele Zeilen Quelltext benötigt, um zu be­schrei­ben, was sich in Sprachen der de­kla­ra­ti­ven Pro­gram­mie­rung mit einem Bruchteil der Befehle erreichen lässt.

Die be­kann­tes­ten im­pe­ra­ti­ven Pro­gram­mier­spra­chen:

  • Fortran
  • Java
  • Pascal
  • ALGOL
  • C
  • C#
  • C++
  • Assembler
  • BASIC
  • COBOL
  • Python
  • Ruby

Die ver­schie­de­nen im­pe­ra­ti­ven Pro­gram­mier­spra­chen lassen sich wiederum drei weiteren, un­ter­ge­ord­ne­ten Pro­gram­mier­sti­len zuordnen: dem struk­tu­rier­ten, dem pro­ze­du­ra­len und dem modularen Pro­gram­mier­stil.

Der struk­tu­rier­te Pro­gram­mier­stil erweitert das im­pe­ra­ti­ve Grund­prin­zip um die konkreten Kon­troll­struk­tu­ren Sequenzen, Selektion (Auswahl) und Iteration (Wie­der­ho­lung). Hin­ter­grund ist die Ein­däm­mung bzw. komplette Ver­mei­dung von Sprung­an­wei­sun­gen, die imperativ kon­zi­pier­ten Code unnötig kom­pli­ziert machen.

Der pro­ze­du­ra­le Ansatz un­ter­teilt die Aufgabe, die ein Programm über­neh­men soll, in kleinere Teil­auf­ga­ben, die im Code einzeln be­schrie­ben werden. So entstehen Pro­gram­mier­bau­stei­ne, die auch in anderen Pro­gram­men wei­ter­ver­wen­det werden können. Einen Schritt weiter geht das modulare Pro­gram­mier­mo­dell, bei dem die einzelnen Pro­gramm­kom­po­nen­ten gänzlich un­ab­hän­gig von­ein­an­der entworfen, ent­wi­ckelt und getestet werden. Erst ab­schlie­ßend bilden die einzelnen Module in Kom­bi­na­ti­on die ei­gent­li­che Software.

De­kla­ra­ti­ve vs. im­pe­ra­ti­ve Pro­gram­mie­rung

Im­pe­ra­ti­ve Pro­gram­mier­spra­chen un­ter­schei­den sich von de­kla­ra­ti­ven Sprachen in einem grund­le­gen­den Aspekt. In einem Satz zu­sam­men­ge­fasst: Im­pe­ra­ti­ve Pro­gram­mie­rung fo­kus­siert sich auf das WIE, de­kla­ra­ti­ve Pro­gram­mie­rung auf das WAS.

Was ist damit gemeint? Im­pe­ra­ti­ve Pro­gram­mier­spra­chen sind wie eine Schritt-für-Schritt-Anleitung (Wie) für den Computer verfasst. Sie be­schrei­ben explizit, welche Schritte in welcher Rei­hen­fol­ge aus­ge­führt werden sollen, damit am Ende die ge­wünsch­te Lösung steht. In der de­kla­ra­ti­ven Pro­gram­mie­rung wird dagegen direkt das ge­wünsch­te End­ergeb­nis (Was) be­schrie­ben. Zur An­schau­lich­keit auf die Küche über­tra­gen: Im­pe­ra­ti­ve Sprachen liefern Rezepte, de­kla­ra­ti­ve Sprachen Fotos vom fertigen Gericht.

In de­kla­ra­ti­ven Sprachen bleibt der Quellcode sehr abstrakt bezüglich des konkreten Vorgehens. Um zur Lösung zu gelangen, wird ein Al­go­rith­mus ein­ge­setzt, der passende Methoden au­to­ma­tisch findet und anwendet. Diese Vor­ge­hens­wei­se hat zahl­rei­che Vorteile: Programme lassen sich so nicht nur deutlich schneller schreiben, die An­wen­dun­gen sind auch sehr einfach zu op­ti­mie­ren. Denn wird in Zukunft eine neue Methode ent­wi­ckelt, kann der Al­go­rith­mus aufgrund der abs­trak­ten Anweisung im Quellcode einfach auf die neuere Methode zugreifen.

Im­pe­ra­ti­ve Pro­gram­mie­rung – ein Beispiel

Im­pe­ra­ti­ve Pro­gram­mier­spra­chen zeichnen sich durch ihren an­lei­ten­den Charakter aus und benötigen damit in der Regel we­sent­lich mehr Zeilen Code, um das aus­zu­drü­cken, was sich in de­kla­ra­ti­ven Stil mit wenigen An­wei­sun­gen be­schrei­ben lässt. Im folgenden Beispiel soll eine Liste mit Vornamen aus­ge­ge­ben werden:

Im­pe­ra­ti­ve Pro­gram­mie­rung (PHP)

$teilnehmerListe = [1 => 'Peter', 2 => 'Hans', 3 => 'Sarah'];
$vornamen = [];
foreach ($teilnehmerListe as $id => $name) {
    $vornamen[] = $name;
}

De­kla­ra­ti­ve Pro­gram­mie­rung (PHP)

$vornamen = array_values($teilnehmerListe);

Vor- und Nachteile im­pe­ra­ti­ver Pro­gram­mier­spra­chen

Heute werden viele Pro­gram­mier­spra­chen ein­ge­setzt, die auf dem Paradigma der im­pe­ra­ti­ven Pro­gram­mie­rung basieren.

Das ist ei­ner­seits der Tatsache ge­schul­det, dass diese Her­an­ge­hens­wei­se die ur­sprüng­li­che Form des Pro­gram­mie­rens ist. An­de­rer­seits hat das im­pe­ra­ti­ve Paradigma trotz al­ter­na­ti­ver Modelle immer noch prak­ti­sche Vorteile.

Die Sprachen sind ver­hält­nis­mä­ßig leicht zu lernen, da der Code wie eine Schritt-für-Schritt-Anleitung zu lesen ist. Pro­gram­mie­rer lernen in ihrer Aus­bil­dung daher in der Regel zunächst eine im­pe­ra­ti­ve Sprache.

Die leichte Les­bar­keit ist im Un­ter­neh­mens­all­tag ein ent­schei­den­der Faktor: Schließ­lich sollen Wartung und Op­ti­mie­rung von An­wen­dun­gen nicht per­so­nen­ab­hän­gig sein, sondern un­kom­pli­ziert von un­ter­schied­li­chen Mit­ar­bei­tern über­nom­men werden können, selbst wenn sie den Code nicht von Grund auf ge­schrie­ben haben.

Nachteil der pro­ze­du­ra­len Pro­gram­mie­rung: Sollen kom­ple­xe­re Probleme gelöst werden, wächst der Code sehr schnell an. Er bleibt zwar gut lesbar, wird jedoch aufgrund seiner Größe un­über­sicht­lich.

Da die Aus­füh­rung nicht wie im de­kla­ra­ti­ven Stil klar von der Pro­gram­mie­rung getrennt ist, können beim nach­träg­li­chen Ein­grei­fen leicht un­er­wünsch­te Ne­ben­ef­fek­te bzw. Fehler pro­du­ziert werden. Auch Er­wei­te­run­gen lassen sich im rein im­pe­ra­ti­ven Code schwie­ri­ger im­ple­men­tie­ren – anders als im de­kla­ra­ti­ven Paradigma, in dem diese über Methoden getrennt hin­zu­ge­fügt werden.

Vorteile Nachteile
Leicht lesbar Code wird schnell sehr um­fang­reich und damit un­über­sicht­lich
Ver­hält­nis­mä­ßig leicht zu erlernen Risiko von Fehlern bei der Be­ar­bei­tung ist höher
Für Ein­stei­ger leicht nach­voll­zieh­ba­res Denk­mo­dell (Lö­sungs­weg) Wartung blockiert An­wen­dungs­ent­wick­lung, da die Pro­gram­mie­rung systemnah statt­fin­det
Cha­rak­te­ris­ti­ka von spe­zi­el­len An­wen­dungs­fäl­len können be­rück­sich­tigt werden Op­ti­mie­rung und Er­wei­te­rung ist schwie­ri­ger

In der Praxis kommen heute meist Misch­for­men der Pa­ra­dig­men zum Einsatz, da sowohl im­pe­ra­ti­ve als auch de­kla­ra­ti­ve Pro­gram­mier­sti­le Vor- und Nachteile mit sich bringen. Zunehmend setzt sich dabei al­ler­dings der de­kla­ra­ti­ven Pro­gram­mier­stil durch, der um im­pe­ra­ti­ve Methoden ergänzt wird.

Zum Hauptmenü