Imperative Programmierung ist ein Programmierparadigma, das Anweisungen nutzt, um den Computer zu steuern. Es besteht aus einer Abfolge von Befehlen, die nacheinander ausgeführt werden, um einen bestimmten Zustand zu erreichen oder ein Problem zu lösen. Diese Methode ist ähnlich zu der Art und Weise, wie traditionelle Kochrezepte oder Bauanleitungen strukturiert sind.
Strukturierte Programmierung ist eine Teilmenge der imperativen Programmierung. Sie fordert zusätzlich, dass der Programmablauf ausschliesslich aus drei Grundstrukturen aufgebaut wird – und auf freie Sprünge wie goto verzichtet:
if / elif / else.while / for.Das Theorem von Böhm und Jacopini (1966) besagt, dass sich jeder berechenbare Algorithmus allein mit diesen drei Strukturen ausdrücken lässt. Sprünge sind also nie zwingend nötig – und weil sie den Ablauf unübersichtlich machen („Spaghetticode„), verzichtet man auf sie.
Merksatz
Jede strukturierte Programmierung ist imperativ – aber nicht jede imperative Programmierung ist strukturiert.
Im Mittelpunkt der imperativen Programmierung steht die Veränderung des Zustands eines Systems durch die Anwendung von Anweisungen oder Befehlen. Diese Befehle werden in einer klaren und definierten Reihenfolge ausgeführt.
1. Abfolge: Befehle werden in einer bestimmten Reihenfolge geschrieben und in dieser Reihenfolge ausgeführt.
2. Kontrolle: Der Programmfluss kann mit Schleifen und Verzweigungen wie IF-THEN-ELSE-Strukturen gesteuert werden.
3. Zustandsänderung: Variablen speichern Daten und können im Laufe des Programms verändert werden. Jede Anweisung kann den Zustand des Programms verändern.
Ein einfaches Beispiel für imperatives Programmieren ist ein Stück Code, das eine Liste von Zahlen aufnimmt und die Summe davon berechnet.
summe = 0 zahlen = [1, 2, 3, 4, 5] for zahl in zahlen: summe += zahl print(summe) # Ausgabe: 15
Hier wird eine klare Abfolge von Befehlen gegeben, die nacheinander ausgeführt werden, um das gewünschte Ergebnis zu erzielen. Alle drei Grundstrukturen der strukturierten Programmierung sind erkennbar: Sequenz (die Zeilen nacheinander), Iteration (die for-Schleife) – eine Selektion kommt in diesem Beispiel nicht vor.
In der imperativen Programmierung sind Befehle und Anweisungen die fundamentalen Bausteine. Ein Befehl ist eine Aufforderung an den Computer, eine bestimmte Operation durchzuführen, während eine Anweisung eine spezifische Aufgabe definiert, die ausgeführt werden soll.
Befehle sind direkte Anforderungen an den Computer, um eine bestimmte Aktion auszuführen. Sie können einfache Operationen wie Addition oder Multiplikation sein oder komplexere wie das Lesen oder Schreiben einer Datei.
Anweisungen sind präzise Instruktionen, die einen bestimmten Prozess oder eine Aufgabe beschreiben. Sie werden durch die Kombination von Befehlen und Kontrollstrukturen wie Schleifen oder Bedingungen gebildet.
Eine endliche Folge von Anweisungen, die ein bestimmtes Problem in endlich vielen Schritten löst, nennt man einen Algorithmus. Ein Algorithmus zeichnet sich aus durch:
Wichtige Abgrenzung
Eine einzelne Anweisung ist noch kein Algorithmus. summe += zahl ist eine Anweisung – erst die vollständige, eindeutige Schrittfolge mit definiertem Start und Ende ergibt einen Algorithmus. Das Codebeispiel oben ist ein Algorithmus zur Summenbildung.
Im Gegensatz zur deklarativen Programmierung, die beschreibt, „was“ getan werden soll, konzentriert sich die imperative Programmierung auf das „wie„. Es gibt eine klare Abfolge von Schritten, die befolgt werden müssen – im Gegensatz zur funktionalen oder logischen Programmierung, die möglicherweise mehr auf Beziehungen zwischen Entitäten fokussiert.
Schlussfolgerung
Die imperative Programmierung ist eine der am weitesten verbreiteten Methoden und liegt vielen der heutigen beliebtesten Programmiersprachen zugrunde. Der Schwerpunkt auf klaren Befehlen und Anweisungen macht sie sowohl leistungsstark als auch flexibel, erfordert aber auch eine sorgfältige Kontrolle und Verwaltung des Zustands des Programms. Dies kann sowohl ein Vorteil als auch eine Herausforderung sein, je nach spezifischem Anwendungsfall oder Problem, das gelöst werden muss.