Was zeichnet die prozedurale Programmierung aus?
Programme als strukturierte Befehlsketten
Stell dir vor, du schreibst ein detailliertes Kochrezept. Der Computer arbeitet dieses Rezept Schritt für Schritt von oben nach unten ab. Genau das ist der Kern der prozeduralen Programmierung. Ein Programm besteht aus einer Sequenz von Anweisungen, die der Maschine exakt vorgeben, was sie tun soll.
Um zu verhindern, dass dieses "Rezept" bei komplexer Software zu einem unleserlichen, tausende Zeilen langen Text wird, wendest du das dir bereits bekannte DRY-Prinzip (Don't Repeat Yourself) an: Du fasst wiederkehrende oder logisch zusammenhängende Anweisungsblöcke zu benannten Einheiten zusammen. Diese Einheiten nennt man Prozeduren (oder Unterprogramme). Das Hauptprogramm ruft diese Prozeduren dann an den benötigten Stellen lediglich auf. Das strukturiert den Code, macht ihn wiederverwendbar und erleichtert die Fehlersuche.
Der gemeinsame Zustand (Shared State)
Ein weiteres zentrales Merkmal dieses Paradigmas ist die Manipulation eines gemeinsamen Zustands (Shared State). Das bedeutet, dass Daten in Form von Variablen im Hauptspeicher gehalten werden und verschiedene Prozeduren auf diese Variablen zugreifen, sie lesen und verändern können.
Beispiel: In einem Kassensystem gibt es eine globale Variable kassenbestand. Die Prozedur artikel_verkaufen() erhöht diesen Wert, während die Prozedur storno_buchen() ihn verringert. Beide manipulieren denselben Zustand.
Dieser Ansatz ist für den Computer sehr effizient, birgt aber Risiken: Wenn viele Prozeduren unkontrolliert denselben Zustand verändern, entstehen schnell unerwartete Fehler, sogenannte Seiteneffekte (Side Effects). Bei der Fehlersuche musst du dann oft mühsam nachvollziehen, welche Prozedur den Zustand wann und wie verändert hat.
Wie wird der Kontrollfluss in prozeduralen Programmen gesteuert?
Die Bausteine des Kontrollflusses
Der Kontrollfluss legt fest, in welcher exakten Reihenfolge die Anweisungen deines Programms ausgeführt werden – ganz ähnlich wie der Pfad in einem UML-Aktivitätsdiagramm, das du bereits kennst. In der prozeduralen Programmierung kombinierst du dafür vier grundlegende Bausteine, um die Logik zu steuern:
- Sequenz: Die Standard-Ausführung. Anweisungen werden strikt nacheinander (Zeile für Zeile) abgearbeitet.
- Verzweigung (Selektion): Mit
if/else-Bedingungen gabelt sich der Weg, und das Programm reagiert dynamisch auf verschiedene Situationen (z. B. "Wenn der Warenkorb leer ist, zeige eine Warnung"). - Schleife (Iteration): Mit
for- oderwhile-Schleifen werden Anweisungsblöcke wiederholt, solange eine bestimmte Bedingung erfüllt ist. - Prozeduraufruf: Das Programm springt an eine andere Stelle im Code, führt die dortige Prozedur aus und kehrt danach exakt an die Ursprungsstelle zurück, um mit der nächsten Anweisung weiterzumachen.
Prozedur oder Funktion: Wo liegt der Unterschied?
In modernen Programmiersprachen wie Python oder JavaScript verschwimmt die Syntax oft (man nutzt z. B. immer das Schlüsselwort def oder function). Konzeptionell gibt es in der prozeduralen Programmierung jedoch eine klare Trennung, die dir hilft, sauberen Code nach dem Single Responsibility Principle (SRP) zu schreiben:
- Funktionen verhalten sich wie mathematische Formeln. Sie nehmen Eingabewerte (Parameter) entgegen, berechnen daraus einen neuen Wert und geben ein Ergebnis zurück (Return-Wert). Sie verändern idealerweise keinen gemeinsamen Zustand. Beispiel:
berechne_mehrwertsteuer(preis)liefert nur eine Zahl zurück. - Prozeduren hingegen führen eine konkrete Aktion aus und geben in der Regel keinen Wert zurück (in Sprachen wie Java oder C++ oft mit dem Rückgabetyp
voidgekennzeichnet). Ihr Zweck ist es, den Zustand des Programms oder der Umgebung zu verändern (ein Seiteneffekt). Beispiel:daten_in_datenbank_speichern()oderdrucke_rechnung().
Teste dein Wissen
Du erklärst einer neuen Auszubildenden die prozedurale Programmierung. Welcher Vergleich beschreibt den grundlegenden Ablauf am treffendsten?