Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Imperative Programmierung

Imperative Programmierung (lateinisch imperare ‚anordnen', ‚befehlen') ist ein Programmierparadigma, nach dem „ein Programm aus einer Folge von Anweisungen …

Inhalt5 Abschnitte
  1. 1. Grundidee und Bedeutung
  2. 2. Merkmale und Ausführungsmodell
  3. 3. Zustand, Variablen und Kontrollfluss
  4. 4. Abgrenzung zu deklarativer Programmierung
  5. 5. Typisches Beispiel

Grundidee und Bedeutung

Imperative Programmierung ist ein Programmierparadigma, bei dem ein Programm aus einer Folge von Anweisungen besteht. Diese Anweisungen legen fest, in welcher Reihenfolge was vom Computer getan werden soll. Der Entwickler beschreibt also Schritt für Schritt, wie eine Aufgabe ausgeführt wird.

Dieses Paradigma ist das am längsten bekannte Programmierparadigma und war wegen des begrenzten Sprachumfangs früher Programmiersprachen lange die klassische Art des Programmierens. Es liegt vielen Programmiersprachen zugrunde, zum Beispiel ALGOL, BASIC, Fortran, Pascal, Ada, PL/I, Cobol, C und allen Assemblersprachen.

In der Literatur gibt es abweichende Bezeichnungen: Das Konzept wird zum Teil „imperativ/prozedural“, „algorithmisch“ oder „zustandsorientiert“ genannt. „Prozedurale Programmierung“ wird manchmal synonym verwendet, kann aber auch enger als „Verwendung von Prozeduren“ verstanden werden.

Merkmale und Ausführungsmodell

Ein zentrales Merkmal imperativer Programmierung ist, dass im Quellcode festgelegt wird, was in welcher Reihenfolge und wie zu tun ist. Die Ausführung schreitet schrittweise von Befehl zu Befehl fort, etwa nach dem Prinzip: zuerst dies tun, danach jenes tun.

Zur Steuerung der Ausführung nutzt der Entwickler Kontrollstrukturen. Dazu gehören die Sequenz, also die normale Abfolge von Anweisungen, Schleifen zur wiederholten Ausführung und bedingte Verzweigungen, bei denen Anweisungen nur unter bestimmten Bedingungen ausgeführt werden.

Das abstrakte Ausführungsmodell ist eng an die Ausführung von Maschinencode auf Computern mit Von-Neumann-Architektur angelehnt. Der Programmzustand ergibt sich aus Daten im Arbeitsspeicher und aus Systemvariablen wie Registern oder Befehlszählern. Viele imperative Sprachen sind Abstraktionen der Assemblersprache.

Zustand, Variablen und Kontrollfluss

In imperativen Programmen spielt der Zustand des Programms eine wichtige Rolle. Aus einfacher Sicht wird dieser Zustand durch den Inhalt des Speichers bestimmt. Zuweisungen führen Operationen auf Informationen im Speicher aus und speichern Ergebnisse dort zur späteren Verwendung.

Höhere imperative Sprachen erlauben komplexere Ausdrücke, die zum Beispiel arithmetische Operationen und Funktionsauswertungen kombinieren können. Das Ergebnis eines solchen Ausdrucks kann wieder einer Speicherstelle, meist über eine Variable, zugeordnet werden.

Schleifen wie While-Schleifen, Do-while-Schleifen und For-Schleifen führen eine Folge von Anweisungen mehrmals aus. Sie können eine festgelegte Anweisungsfolge wiederholen oder so lange laufen, bis sich eine Bedingung ändert. Bedingte Verzweigungen führen Anweisungen nur aus, wenn eine Bedingung erfüllt ist; sonst werden sie übersprungen. Unbedingte Verzweigungen übertragen die Ausführung an eine andere Stelle im Programm. Dazu gehören Sprunganweisungen, Switch sowie Unterprogramme, Unterroutinen oder Prozeduraufrufe, die normalerweise nach dem Aufruf zur nächsten Anweisung zurückkehren.

Blöcke ermöglichten in höheren Programmiersprachen, mehrere Anweisungen und Deklarationen wie eine einzige Anweisung zu behandeln. Zusammen mit Unterprogrammen konnten dadurch komplexe Programme hierarchisch in einfachere prozedurale Strukturen zerlegt werden.

Abgrenzung zu deklarativer Programmierung

Der wichtigste Gegenentwurf zur imperativen Programmierung ist die deklarative Programmierung. Bei deklarativer Programmierung wird im Quellcode beschrieben, was das Programm machen soll, aber nicht im Detail, wie es dies tun soll.

Für die Einordnung als imperativ reicht es nicht aus, dass ein Prozessor Maschinenbefehle physisch Befehl für Befehl ausführt, denn das geschieht unabhängig vom verwendeten Paradigma. Entscheidend ist vielmehr, dass ein Entwickler Code schreibt, der die einzelnen Schritte beschreibt, die der Computer zur Lösung der Aufgabe ausführen muss.

Deklarativ formulierte Anweisungen können von übergeordneten oder eingebundenen Systemkomponenten in ausführbare Maschinenbefehle umgeformt werden. Als Beispiel nennt der Artikel SQL-Kommandos: Komponenten eines Datenbankmanagementsystems interpretieren sie, erzeugen daraus Maschinencode und lassen diesen ausführen.

Viele Programmiersprachen unterstützen vor allem auch imperative Programmierung, darunter objektorientierte Sprachen wie C#, Visual Basic .NET, C++ und Java. Datenkapselung, also information hiding, wird in imperativen Sprachen häufig dadurch umgesetzt, dass Prozeduren, die eine logische Einheit bilden, in Modulen oder Paketen zusammengefasst werden.

Typisches Beispiel

Der Artikel vergleicht die Ausgabe der Quadratzahlen ungerader Zahlen von 3 bis 11 in imperativer und funktionaler Programmierung.

In C, einer imperativen Sprache, wird eine For-Schleife verwendet: Sie beginnt bei 3, erhöht die Variable i jeweils um 2 und läuft, solange i kleiner als 12 ist. In jedem Schleifendurchlauf wird i * i berechnet und ausgegeben. Die einzelnen Schritte, nämlich Startwert setzen, Bedingung prüfen, Quadrat berechnen, ausgeben und Zählvariable erhöhen, sind ausdrücklich im Programm angegeben.

Als funktionales Gegenbeispiel in Haskell steht: mapM_ print [ i^2 | i <- [3,5..11] ]. Hier wird stärker beschrieben, welche Werte verarbeitet werden sollen: die Quadrate der Zahlen aus der Liste 3, 5, ..., 11.

Lernvideos zu Imperative Programmierung

Weiterlesen

Programmierparadigma Grundlegend für den Entwurf von Programmiersprachen sind die Paradigmen der imperativen und der deklarativen Programmierung. Beim letzteren sind als wichtige … Anweisung (Programmierung) Anweisungen sind üblicherweise Zuweisungen, Kontrollanweisungen (wie Sprünge, Schleifen und bedingte Anweisungen) und Prozeduraufrufe. Abhängig von der … Computer Ein Computer (englisch; deutsche Aussprache [kɔmˈpjuːtɐ]) oder Rechner ist ein Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet. Programmierung Beim Programmieren sind wesentliche Aspekte zur Softwarequalität zu berücksichtigen und durch die Gestaltung des Quellcodes umzusetzen. Siehe dazu als Beispiele … BASIC BASIC ist eine imperative Programmiersprache. Sie wurde 1964 von John G. Kemeny, Thomas E. Kurtz und möglicherweise Mary Kenneth Keller am Dartmouth College … Pascal (Programmiersprache) Besonderheiten · Sehr hohe Prozesssicherheit · Keine nullterminierten Zeichenketten · Strikte Trennung zwischen Programm, Funktionen und Prozeduren · Deklarationen. C (Programmiersprache) C ist eine imperative und prozedurale Programmiersprache, die der Informatiker Dennis Ritchie in den frühen 1970er Jahren an den Bell Laboratories entwickelte. Assemblersprache Eine Assemblersprache, kurz auch Assembler genannt (von englisch to assemble ‚zusammenfügen'), ist eine Programmiersprache, die auf den Befehlsvorrat eines … Softwareentwickler Ein Softwareentwickler (englisch software developer) ist eine Person, die an der Erstellung und Weiterentwicklung einer Software mitwirkt. Kontrollstruktur Kontrollstrukturen sind in der Informatik die Vorgabe, in welcher Reihenfolge die Handlungsschritte eines Algorithmus abgearbeitet werden. Schleife (Programmierung) Eine Schleife (auch „Wiederholung“ oder englisch loop) ist eine Kontrollstruktur in Programmiersprachen. Sie wiederholt einen Anweisungs-Block – den … Von-Neumann-Architektur Die Von-Neumann-Architektur (VNA) ist ein Referenzmodell für Computer, wonach ein gemeinsamer Speicher sowohl Computerprogrammbefehle als auch Daten hält.