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:
Vereinzelt wird prozedurale Programmierung auch als Synonym zur imperativen Programmierung an sich[3][4] oder zur strukturierten Programmierung[5] verstanden.
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.[6][7] 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.[8]
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.
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.[9]
Konzepte der prozeduralen Programmierung bilden die Basis für die objektorientierte Programmierung.[10] Seitdem gelten die prozedurale Programmierung und die objektorientierte Programmierung als zwei Hauptströmungen innerhalb der imperativen Programmierung.[11] 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:
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.[12]
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.[13]
Fortran, COBOL, ALGOL, C und Pascal sind eine Auswahl prozeduraler Programmiersprachen.