====== LU01b - Strukturierte Programmierung ======
===== Definition =====
**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:
- **Sequenz**: Anweisungen werden nacheinander ausgeführt.
- **Auswahl (Selektion)**: ''if'' / ''elif'' / ''else''.
- **Wiederholung (Iteration)**: ''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.
===== Grundprinzipien =====
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.
==== Beispiele ====
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.
===== Fokus auf Befehle und Anweisungen =====
==== Befehle und Anweisungen ====
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 ===
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 ===
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.
=== Algorithmus ===
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:
* **Eindeutigkeit**: Jeder Schritt ist klar definiert und lässt keinen Interpretationsspielraum.
* **Endlichkeit**: Die Beschreibung ist endlich lang, und die Ausführung endet nach endlich vielen Schritten.
* **Eingabe und Ausgabe**: Es gibt definierte Startwerte und ein definiertes Ergebnis.
* **Allgemeingültigkeit**: Der Algorithmus löst nicht nur einen Einzelfall, sondern eine ganze Klasse gleichartiger Probleme.
**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.
==== Unterschied zu anderen Paradigmen ====
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.
----
{{tag>M323-LU01 M323-A1B M323-C1B}}
[[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi