Imperative Programmierung
Imperative Programmierung (lateinisch imperare ‚anordnen‘, ‚befehlen‘) ist ein Programmierparadigma, nach dem „ein Programm aus einer Folge von Anweisungen besteht, die vorgeben, in welcher Reihenfolge was vom Computer getan werden soll“.
Die imperative Programmierung ist das am längsten bekannte Programmierparadigma. Diese Vorgehensweise war, bedingt durch den Sprachumfang früherer Programmiersprachen, ehemals die klassische Art des Programmierens. Sie liegt dem Entwurf von vielen Programmiersprachen, zum Beispiel ALGOL, Fortran, Pascal, Ada, PL/I, Cobol, C und allen Assemblersprachen zugrunde.
Abweichende Bezeichnungen: In der Literatur wird dieses Entwicklungskonzept zum Teil auch „imperativ/prozedural“, „algorithmisch“ oder auch „zustandsorientiert“ genannt. Auch die Bezeichnung „prozedurale Programmierung“ (siehe dort) wird zum Teil synonym verwendet, was jedoch abweichend auch mit „Verwendung von Prozeduren“ definiert wird.
Details
Bestimmende Merkmale für diese Art des Programmierens sind:
- Im Quellcode wird festgelegt, was in welcher Reihenfolge und wie zu tun ist: „First do this and next do that“, schrittweises ‚Fortschreiten‘ der Befehle; „viewed as sequence of things to be done“ (dargestellt als Folge von Anweisungen).
- Zur Steuerung der Befehlsausführung verwendet der Entwickler Kontrollstrukturen (z.B. Sequenz, Schleife, Verzweigung).
Das dem imperativen Paradigma zugrunde liegende abstrakte Ausführungsmodell ist eng angelehnt an die Ausführung von Maschinencode auf Computern, die nach der Von-Neumann-Architektur implementiert sind. Es existieren beispielsweise bedingte und unbedingte Sprunganweisungen. Der Status des Rechners bzw. des Programms ergibt sich aus dem Inhalt von Datenfeldern im Arbeitsspeicher und dem Zustand von Systemvariablen (z.B. Register, Befehlszähler …).
Abgrenzung
Als Gegenentwurf zur imperativen Programmierung gilt das Paradigma Deklarative Programmierung. Darin wird vom Entwickler im Quellcode definiert, WAS das Programm erarbeiten/berechnen soll, aber nicht WIE.
„Die meisten […] Programmiersprachen, darunter auch OOP-Sprachen wie C#, Visual Basic, C++ und Java, unterstützen in erster Linie [auch] die imperative […] Programmierung“. Das Prinzip der Datenkapselung (information hiding) wird in imperativen Sprachen oft dadurch umgesetzt, dass Prozeduren, die eine logische Einheit bilden, in Modulen oder Paketen zusammengefasst werden.
Nicht maßgeblich für die Einstufung als ‚imperativ‘ ist die Tatsache, dass bei der physischen Ausführung von Computerprogrammen (im Prozessor) die einzelnen Befehle des Maschinencodes „Befehl für Befehl“ ausgeführt werden; denn dies ist unabhängig vom praktizierten Paradigma immer so. Vielmehr setzt ‚imperativ‘ voraus, dass „ein Entwickler Code erstellt, der detailliert die Schritte beschreibt, die der Computer zur Erfüllung der Aufgabe ausführen muss“. Deklarativ erstellte Anweisungen etwa werden von übergeordneten oder eingebundenen Systemkomponenten – und nur ‚basierend‘ auf dem Quellcode – in ausführbare Maschinenbefehle umgeformt; Beispiel ‚SQL-Kommandos‘: Komponenten der Systemsoftware des DBMS interpretieren sie, erzeugen daraus Maschinencode und lassen diesen ausführen.
Beispiel
Ausgabe der Quadrate ungerader Zahlen von 3 bis 11.
Imperativ, Codeversion in C:
for (int i = 3; i < 12; i += 2) {
printf("%d\n", i * i);
}
Deklarativ, Code in Haskell:
mapM_ print [ i^2 | i <- [3,5..11] ]
Geschichte
Die 1957 entwickelte Programmiersprache Fortran implementiert wie die zuvor verwendeten Assemblersprachen das imperative Paradigma. LISP, 1958 erschienen, ist ein Beispiel für eine deklarative Sprache, bei der der Computer selbst einen Handlungsablauf zur Berechnung konstruieren muss.
Literatur
- Robert W. Sebesta: Concepts of Programming Languages. 9. Auflage. Addison-Wesley, 2009, ISBN 978-0-13-607347-5.
© biancahoegel.de
Datum der letzten Änderung: Jena, den: 29.09. 2022