Ob bei der Pro­gram­mie­rung einer App, einer IoT-Software oder eines Com­pu­ter­spiels – bevor Ent­wick­ler ihre ersten Zeilen Code schreiben, müssen sie eine grund­le­gen­de Ent­schei­dung treffen: Welche Pro­gram­mier­spra­che wollen sie verwenden? Diverse Sprachen stehen zur Auswahl. Mit Abstand be­trach­tet, lassen sich alle Sprachen jedoch zwei grund­le­gen­den Pro­gram­mier­pa­ra­dig­men zuordnen: der de­kla­ra­ti­ven Pro­gram­mie­rung und der im­pe­ra­ti­ven Pro­gram­mie­rung.

Was ist de­kla­ra­ti­ve Pro­gram­mie­rung?

Ganz trenn­scharf ist das Paradigma nicht be­schrie­ben, doch über eines sind sich alle De­fi­ni­tio­nen einig: Kenn­zeich­nend für die de­kla­ra­ti­ven Pro­gram­mier­spra­chen ist, dass sie immer ein ge­wünsch­tes End­ergeb­nis be­schrei­ben, statt alle Ar­beits­schrit­te auf­zu­zei­gen. Um das Ziel zu erreichen, wird bei der de­kla­ra­ti­ven Pro­gram­mie­rung der Lö­sungs­weg au­to­ma­tisch ermittelt. Dies funk­tio­niert so lange gut, wie die Spe­zi­fi­ka­tio­nen des End­zu­stands klar definiert sind und ein passendes Aus­füh­rungs­ver­fah­ren existiert. Trifft beides zu, ist die de­kla­ra­ti­ve Pro­gram­mie­rung sehr effizient.

Da die de­kla­ra­ti­ve Pro­gram­mie­rung das ‚Wie‘ nicht fest­schreibt, sondern auf einem sehr hohen Abs­trak­ti­ons­ni­veau arbeitet, lässt das Pro­gram­mier­pa­ra­dig­ma zudem Raum für Op­ti­mie­rung. Wird ein besseres Aus­füh­rungs­ver­fah­ren ent­wi­ckelt, lässt sich dies über den in­te­grier­ten Al­go­rith­mus auffinden und verwenden. Auf diese Weise ist das Paradigma sehr zu­kunfts­si­cher: Beim Schreiben des Codes muss das Verfahren, wie das Ergebnis zu erreichen ist, nicht fest­ste­hen.

Die be­kann­tes­ten de­kla­ra­ti­ven Pro­gram­mier­spra­chen:

  • Prolog
  • Lisp
  • Haskell
  • Miranda
  • Erlang
  • SQL (im weitesten Sinn)

Die ver­schie­de­nen de­kla­ra­ti­ven Pro­gram­mier­spra­chen lassen sich wiederum einteilen in zwei Pa­ra­dig­men: in Sprachen der funk­tio­na­len Pro­gram­mie­rung und solche der logischen Pro­gram­mie­rung.

In der Praxis ver­schwim­men die Grenzen jedoch häufig und es werden sowohl Elemente im­pe­ra­ti­ver Pro­gram­mie­rung mit ihren Un­ter­ty­pen pro­ze­du­ra­ler, modularer und struk­tu­rier­ter Pro­gram­mie­rung als auch de­kla­ra­ti­ver Pro­gram­mie­rung zur Lösung von Problemen an­ge­wen­det.

Im­pe­ra­ti­ve vs. de­kla­ra­ti­ve Pro­gram­mie­rung

Das im­pe­ra­ti­ve Pro­gram­mier­pa­ra­dig­ma (be­fehls­ori­en­tier­tes Paradigma) ist das ältere der beiden grund­le­gen­den Pa­ra­dig­men. Anders als bei der de­kla­ra­ti­ven Pro­gram­mie­rung legt der Ent­wick­ler hier im Quellcode genau fest, was der Computer Schritt für Schritt tun soll, um zum Ergebnis zu gelangen. Das ‚Wie‘ des Lö­sungs­wegs steht im Vor­der­grund. Diesen Ansatz findet man zum Beispiel bei Java, Pascal oder in C. Bei der de­kla­ra­ti­ven Pro­gram­mie­rung wird dagegen direkt das ‚Was‘ der Lösung be­schrie­ben.

Als Beispiel eine Über­tra­gung auf den Mö­belauf­bau: Während die im­pe­ra­ti­ve Pro­gram­mie­rung eine Anleitung zum Aufbau liefert, bietet die de­kla­ra­ti­ve Pro­gram­mie­rung ein Bild des fertigen Mö­bel­stücks als Vorlage.

Statt mit Funk­tio­nen das Wie der Aus­füh­rung offen zu lassen, gibt es bei der im­pe­ra­ti­ven Pro­gram­mie­rung Variablen, die zur Laufzeit verändert werden. Das macht den Code länger, aber auch leichter ver­ständ­lich als die verkürzte und sehr abstrakte Form des de­kla­ra­ti­ven Stils.

De­kla­ra­ti­ve Pro­gram­mie­rung – ein Beispiel

Eine Stärke der de­kla­ra­ti­ven Pro­gram­mie­rung ist ihre Fähigkeit, Probleme kürzer und prä­gnan­ter zu be­schrei­ben als die im­pe­ra­ti­ven Sprachen.

Soll eine Liste mit Vornamen aus­ge­ge­ben werden, lässt sich dies in PHP mit der de­kla­ra­ti­ven Pro­gram­mie­rung – wie das Beispiel zeigt – mit nur einer Zeile Code be­schrei­ben, während die im­pe­ra­ti­ve Vor­ge­hens­wei­se fünf Zeilen benötigt.

Im­pe­ra­ti­ve Pro­gram­mie­rung

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

De­kla­ra­ti­ve Pro­gram­mie­rung

$vornamen = array_values($teilnehmerListe);

Vor- und Nachteile de­kla­ra­ti­ver Pro­gram­mier­spra­chen

Der de­kla­ra­ti­ve Pro­gram­mier­stil wird heute in einer Vielzahl von Fällen verwendet, wenn auch nicht in Reinform. Die Her­an­ge­hens­wei­se ist al­ler­dings nicht für jeden Einsatz geeignet.

Der de­kla­ra­ti­ve Code zeichnet sich durch ein hohes Abs­trak­ti­ons­ni­veau aus. Das erlaubt Ent­wick­lern, komplexe Programme in kom­pri­mier­ter Form dar­zu­stel­len. Doch je um­fang­rei­cher die Anwendung, desto größer die Gefahr, dass der Code derart ver­schach­telt wird, dass er nur noch für den Ent­wick­ler lesbar ist, der ihn ur­sprüng­lich ge­schrie­ben hat. Für Un­ter­neh­men, die An­wen­dun­gen per­so­nen­un­ab­hän­gig warten und wei­ter­ent­wi­ckeln lassen wollen, birgt diese Situation eine Gefahr. Dann müssen fremde Ent­wick­ler sich mühsam in de­kla­ra­ti­ven Code einlesen, bis sie die Struktur ver­stan­den und Probleme gelöst haben.

Das Abs­trak­ti­ons­ni­veau der de­kla­ra­ti­ven Pro­gram­mie­rung bietet jedoch auch Vorteile. Indem die Aus­füh­rung über einen Al­go­rith­mus klar vom System getrennt ist, lässt sich die Wartung un­ab­hän­gig von der An­wen­dungs­ent­wick­lung durch­füh­ren. Störungen im Ta­ges­be­trieb werden auf ein Minimum reduziert. Gleich­zei­tig ist die Op­ti­mie­rung einfacher, da der ver­wen­de­te Al­go­rith­mus offen genug ist, um auf neue Methoden zu­zu­grei­fen. Der Nachteil der Al­go­rith­mus-Ver­wen­dung: Auf spe­zi­fi­sche Cha­rak­te­ris­ti­ka einzelner An­wen­dungs­fäl­le kann eine solche for­mel­haf­te Lösung häufig nur un­ge­nü­gend eingehen.

Zwar kein Nachteil, aber eine Her­aus­for­de­rung liegt im Denk­mo­dell der de­kla­ra­ti­ven Pro­gram­mie­rung. In Lö­sungs­zu­stän­den zu denken, steht dem na­tür­li­chen mensch­li­chen Denk­ver­hal­ten entgegen. Menschen denken in Prozessen auf ein Ziel zu statt von einem Ziel ausgehend rückwärts. Hier ist von Ent­wick­lern ein Umdenken und Ein­ar­bei­ten gefordert, das zunächst Pro­blem­lö­sun­gen ver­lang­sa­men kann. Ist das neue Mindset aber einmal trainiert, kann der de­kla­ra­ti­ve Ansatz seine Stärken aus­spie­len.

Die Ent­wick­lung von der Pro­blem­be­schrei­bung ausgehend hat außerdem den Vorteil, dass Teams Lö­sungs­mo­del­le recht schnell skiz­zie­ren können. Schließ­lich kann die konkrete Pro­gram­mie­rung der Aus­füh­rung in einem späteren Schritt erfolgen. Damit ist der de­kla­ra­ti­ve Stil für Pro­to­ty­p­ing in der agilen Software-Ent­wick­lung gut geeignet.

Vorteile Nachteile
Kurzer, ef­fi­zi­en­ter Code Für Fremde zum Teil schwer ver­ständ­lich
Aus­führ­bar mit zum Zeitpunkt der Pro­gram­mie­rung noch nicht bekannten Methoden Basiert auf für Menschen un­ge­wohn­tem Denk­mo­dell (Lö­sungs­zu­stand)
Einfache Op­ti­mie­rung, da Aus­füh­rung über Al­go­rith­mus an­ge­steu­ert wird Cha­rak­te­ris­ti­ka einzelner An­wen­dungs­fäl­le können in der Pro­gram­mie­rung nur schwer be­rück­sich­tigt werden
Wartung un­ab­hän­gig von der An­wen­dungs­ent­wick­lung möglich  

In der Praxis kommen heute meist Misch­for­men der Pa­ra­dig­men zum Einsatz und de­kla­ra­ti­ve Pro­gram­mier­spra­chen werden um im­pe­ra­ti­ve Methoden ergänzt. Das erhöht al­ler­dings die Feh­ler­an­fäl­lig­keit und kann die Les­bar­keit des Codes be­ein­träch­ti­gen.

Zum Hauptmenü