# Prozedurale Programmierung

Prozedurale Programmierung ist ein Programmierparadigma, nach dem Computerprogramme entwickelt werden können. Die Bezeichnung ist nicht eindeutig; in der Literatur wird sie für verschiedene Bedeutungen verwendet:
* als Erweiterung des imperativen Paradigmas um den Ansatz, Algorithmen in überschaubare Teile zu zerlegen, die anhand einer definierten Schnittstelle aufrufbar sind.
* innerhalb des imperativen Paradigmas als Gegenstück zur objektorientierten Programmierung
Vereinzelt wird prozedurale Programmierung auch als Synonym zur imperativen Programmierung an sich oder zur strukturierten Programmierung verstanden.

## Zerlegung in Teilprobleme

Die prozedurale Programmierung ergänzt das imperative Konzept aufeinander folgender Befehle um den Ansatz, einen Algorithmus in überschaubare Teile zu zerlegen. Je nach Programmiersprache werden diese Teile Unterprogramm, Routine, Prozedur oder Funktion genannt. Es lassen sich Parameter übergeben und Ergebnisse zurückgeben. Durch lokale und globale Variablen kann die „Sichtbarkeit“ der Variablen gesteuert werden: Während lokale Variablen nur innerhalb einer Prozedur bekannt sind, sind globale Variablen im ganzen Computerprogramm bekannt. Zusammen mit den Kontrollstrukturen der strukturierten Programmierung ist die prozedurale Programmierung ein Mittel zur Herstellung der Übersichtlichkeit. Neben der Übersichtlichkeit können so Codewiederholungen vermieden werden. Die modulare Programmierung hat einen ähnlichen Zweck, aber auf einer höheren Ebene: Größere Computerprogramme sollen hierbei in einzelnen Modulen entwickelt, getrennt kompiliert und getestet werden können oder es sollen fertige Programmbibliotheken eingebunden werden.
Beispielsweise verfügte Fortran in der ersten Version (um 1960) nicht über den prozeduralen Ansatz trotz anderer Konzepte zur strukturierten Programmierung; der prozedurale Ansatz wurde in einer späteren Version eingebaut.

## Imperative, nicht objektorientierte Programmierung

Die zweite Bedeutung ist als Sammelbegriff für die Programmierart, die bis in die 1990er Jahre lange vorherrschte, bis die objektorientierte Programmierung als Weiterentwicklung praxistauglich eingeführt wurde. Synonym wird auch von der „klassischen“ oder „traditionellen Programmierung“ gesprochen.
Konzepte der prozeduralen Programmierung bilden die Basis für die objektorientierte Programmierung. Seitdem gelten die prozedurale Programmierung und die objektorientierte Programmierung als zwei Hauptströmungen innerhalb der imperativen Programmierung. Hybridsprachen unterstützen beide Konzepte.
Die prozedurale Art der Entwicklung war – bedingt durch den Sprachumfang früher Programmiersprachen – die klassische Art des Programmierens. Doch sind auch bestimmende Eigenschaften der prozeduralen Entwicklung teilweise noch in neueren Programmiersprachen anwendbar.
Merkmale dieser Art des Programmierens sind:
* Imperativer Ansatz: Folge von definierten Zustandsübergängen, bei denen festgelegt ist, wie diese Zustände verändert werden sollen. Diese zusammengesetzten Anweisungen können endlich (Programm endet selbstständig) oder auch unendlich sein (Programm wartet auf Ereignisse).
* Kontrollstrukturen (z. B. Sequenz, Schleife, Verzweigung) zur Steuerung der Befehlsausführung.
* Aufrufen von Unterprogrammen und das Durchleiten und die Rückgabe von Parameterwerten (Konzept der Abstraktion bzw. prozedurale Programmierung im engeren Sinne). Dabei entsteht eine Hierarchie von Funktionen, die jeweils sequentiell abgearbeitet werden. Die Gruppierung und Hierarchie kann beliebigen logischen Prinzipien entsprechen. Der Startpunkt des Programms liegt in der Hauptprozedur – von der aus die Teilfunktionen aufgerufen werden.
* Datenwerte werden als benannte Variablen definiert und über ihre Namen angesprochen.
* Diesen Variablen sind Datentypen zugeordnet, die jeweils nur bestimmte Instruktionen erlauben.
Der hauptsächliche Unterschied zwischen prozeduraler und objektorientierter Programmierung ist die Beziehung zwischen Daten und Funktionen. Während bei der objektorientierten Programmierung Daten und Funktionen, die auf diese Daten angewandt werden können, in Objekten zusammengefasst werden, haben bei der prozeduralen Programmierung Daten und Funktionen keinen Zusammenhalt.
Die Entwicklung prozeduraler Programmiersprachen und -techniken basiert auf der Von-Neumann-Architektur, die mit den Assemblersprachen begann und in den Hochsprachen ihre Weiterentwicklung fand. Während beim prozeduralen Ansatz der Programmcode dem späteren Ablauf auf Hardwareebene ähnlich ist und diesen grundsätzlich festlegt, abstrahiert der objektorientierte Ansatz. Somit wird die prozedurale Programmierung als eine Abstraktionsstufe zwischen Assembler und objektorientierter Programmierung betrachtet.
Fortran, COBOL, ALGOL, C und Pascal sind eine Auswahl prozeduraler Programmiersprachen.