WikiDer > Imperative Programmierung

Imperatief programmeren

Imperative Programmierung (ebenfalls Verfahrensprogrammierung genannt) ist a Programmierkonzept von dem Informatik bei welchem Programme in Form von Aufträgen erstellt werden, die sofort ausgeführt werden können. Das Gegenteil von imperativer Programmierung ist deklarative Programmierung, das ist nichts macht gerade aber etwas beschreibt.

Imperative Programmierung wird oft auch daneben verwendet Objekt orientierte Programmierung gelegt. Eine Sprache, die nur mit Klassen und den dazugehörigen Klassen programmiert werden kann Mitgliedsfunktionen, wie Java (jede Funktion muss hier Mitglied einer Klasse sein) wird dann als rein objektorientierte Programmiersprache bezeichnet. Daneben steht zum Beispiel die reine Imperativsprache C, um nur eigenständige Funktionen zu platzieren. Schließlich gibt es Hybridsprachen wie C und PHP, mit der man sowohl objektorientiert als auch imperativ programmieren kann.

Berechnungsmodelle

Wie ein Computer Wenn Sie ein Programm ausführen müssen, führt der Computer die vom Programm vorgeschriebenen Anweisungen nacheinander aus. Dies funktioniert, weil beide (Computer und Programm) nach dem gleichen Konzept der Programmverarbeitung aufgebaut sind - beide "denken" gleich darüber, wie das Programm ausgeführt werden soll.

In diesem Ausführungskonzept sind zwei Begriffe wichtig: die Turing Maschine und der Von Neumann-Zyklus.

Turingmaschine und Berechenbarkeit

Das Turing Maschine ist ein Rechenmodell: die Turingmaschine beschreibt ausführlich in Wie eine Berechnung muss durchgeführt werden. Mit diesem Modell in der Hand wird es möglich, über Dinge nachzudenken wie

  • Was genau lässt sich berechnen?
  • Wie schwer ist es, etwas zu berechnen?

Das Turing-Modell der Berechenbarkeit besteht aus zwei Teilen: einem (unendlichen) Speicher und einer Zustandsmaschine.

Erinnerung

Der Speicher dient dazu, alle relevanten Informationen zur Berechnung im Blick zu behalten: Im Speicher wird gespeichert, was bereits passiert ist und was die Ergebnisse waren, was noch behandelt werden muss und in welcher Reihenfolge und vor allem: wo ist die Berechnung jetzt ("im Moment") ist, in welchem ​​Stadium. Letzteres wird zum Status der Maschine.

Der letzte Stand der Technik

Die Zustandsmaschine führt die eigentliche Berechnung in kleinen Schritten durch. Der Automat besteht eigentlich aus einer großen Serie von Beschreibungen der Form "in diesem Zustand musst du diesen Schritt machen". Eine ganze Berechnung der Turingmaschine ist dann eine Abfolge vieler dieser kleinen Schritte.

Von Neumann-Zyklus und Hardware

Das Von Neumann-Zyklus beschreibt, wie ein Computer im praktischen Sinne funktionieren könnte, indem er einen einzelnen Befehl abruft und ausführt und dann zum nächsten Befehl übergeht. Dies ist die zentrale Idee hinter der Bedienung fast jedes modernen Computers.

Das zwingende Programm

Das imperative Programm ist a Programm das beschreibt eine Berechnung nach dem Turing-Modell: Die gesamte Berechnung zerfällt in eine lange Abfolge kleiner Schritte, die den Berechnungsstand jeweils ein wenig anpassen, bis schließlich eine vollständige Antwort „ausrollt“.

Das imperative Programm macht dies, indem es die Architektur der zugrunde liegenden Maschine nutzt: den Speicher des Computer bildet den Speicher, in dem die Berechnung und der Zustand abgelegt werden, die Prozessor wird zur Zustandsmaschine. Jeder Schritt der Maschine passt genau in einen Zyklus der of Von Neumann-Zyklus und hat die Form "den aktuellen Zustand und mögliche Schritte berücksichtigen (Befehlsabruf); genau entscheiden, was als nächstes zu tun ist (Befehlsdecodierung); dies auf den aktuellen Zustand anwenden (Befehlsausführung); von vorne beginnen" .

Betrachtet man den Code eines imperativen Programms (das so genannt wird, weil es aus einer Reihe von Befehlen oder Befehlen besteht), kann man diese Struktur direkt sehen, zum Beispiel im folgenden Codestück in der Programmiersprache C:

....
c = 12 13;
d = c;
c;
....
printf("Hallo Welt!");

Dies sind alles kleine Befehle (einfache Schritte), die nacheinander von der zugrunde liegenden Maschine ausgeführt werden müssen. Darüber hinaus nutzen sie direkt die Aufteilung des Speichers in kleine Zellen – also sowohl das Speichermodell der Turing Maschine B. von den physikalischen Eigenschaften der Hardware im Computer – durch direkte Adressierung dieser Zellen über Variablen im Programm.

Unterscheiden Sie sich von anderen Arten von Programmiersprachen

Imperative Sprachen sind in ihrer Form stark mit Turings Rechenmodell und der zugrunde liegenden Hardware verbunden. Darin unterscheiden sie sich von funktionale Programmiersprachen, dass es Kirchenmodell der Funktionsanwendung als Rechenmodell (siehe auch Lambda-Kalkül).Die Imperativsprachen werden auch von den distinguished unterschieden logische Programmiersprachen, in dem der Beweisgegenstand und die Prädikatsrechnung als Rechenmodell.

Die logischen und funktionalen Sprachen, die sich in ihrer Form stark von den imperativen Sprachen unterscheiden, sind deklarative Programmiersprachen erwähnt.

Schließlich gibt es viele Meinungsverschiedenheiten über die Position von objektorientierte Programmiersprachen in diesem Ganzen; diese Sprachen teilen eine Berechnung in mehrere Teile auf, wobei jeder Teil in der Verantwortung eines in sich geschlossenen Programmobjekts liegt. Diese Objekte als solche werden jedoch intern wieder auf der Grundlage eines (oder mehrerer) der oben genannten Modelle aufgebaut, sodass die Frage bleibt, ob dieses Modell als etwas völlig separates angesehen werden kann.

Elemente zwingender Programmiersprachen

In den meisten Sprachen, Schlüsselwörter (oder Schlüsselwörter) verwendet, um Befehle anzuzeigen. Diese Worte sind eigentlich immer aus dem Englisch stammend. Auch in anderen Ländern verwendet ein Programmierer die englischen Schlüsselwörter. Viele Programmiersprachen kommen nicht nur in Bezug auf Programmierparadigma ähnlich, aber auch teilweise in Syntax und Schlüsselwörtern, so dass der Programmiersprachenkenner keine Schwierigkeiten beim Erlernen einer verwandten Sprache hat.

Einige Definitionen

  • EIN Kennung ist ein vom Benutzer gewähltes Wort. Bezeichner werden hauptsächlich verwendet für used Variablen denen ein Wert zugeordnet werden kann. Ein Bezeichner besteht aus einer Reihe von Buchstaben und Zahlen, beginnend mit einem Buchstaben. In Cobol kann ein Bezeichner mit einer Zahl beginnen, muss aber mindestens einen Buchstaben enthalten.
  • EIN Ausdruck ist ein berechenbarer Wert. Eine einfache Zahl ist ein Ausdruck, aber 3 (5*A) ebenfalls. Die Schreibweise von Ausdrücken ist in den meisten Sprachen gleich.
  • EIN Array ist eine Anzahl von Variablen, die zusammen einen Bezeichner haben. Um ein einzelnes Element eines Arrays anzusprechen, muss ein Index angegeben werden. Die Syntax ist Arrayname (Index) oder Array-Name[Index]. BCPL verwendet ein Ausrufezeichen: Arrayname!Index. Ein Array kann auch mehrere Indizes haben, in diesem Fall werden sie durch Kommas getrennt: Arrayname[index1,index2] (Biene APL durch Semikolon, at C ist die Schreibweise Array-Name[index1][index2]).

Nummer

Zahlen werden in der üblichen Weise geschrieben. Der Dezimalpunkt ist ein Punkt. Es gibt kein Trennzeichen zwischen Tausenden.

Sehr große und kleine Zahlen lassen sich, wie in der Wissenschaft üblich, durch eine Zehnerpotenz darstellen, wobei meist der Buchstabe E verwendet wird. Also die Zahl 6.022 × 1023 wird geschrieben als 6.022E23.

In einigen Sprachen kann man eine andere sagen Zahlensystem wählen. Für jede Nummer muss angegeben werden, welches Nummernsystem verwendet wird (je nach Sprache unterschiedlich). Eine hexadezimale Zahl kann je nach Sprache geschrieben werden als 0Xabcd oder wenn 0abcdH. Beachten Sie die vorangehende Null, eine Zahl muss immer mit einer Zahl beginnen (was mit einem Buchstaben beginnt, ist schließlich ein Bezeichner). In C beginnt a oktal Zahl mit einer Null, also 15 ist dezimal und 013 ist oktal.

Zeichenfolge

Eine Zeichenfolge ist eine Zeichenfolge, die gedruckt werden kann. Eine Zeichenfolge wird normalerweise in Anführungszeichen eingeschlossen. Daraus folgt, dass es nicht möglich ist, Anführungszeichen in eine Zeichenfolge einzufügen. Die übliche Lösung hierfür besteht darin, zwei Anführungszeichen hintereinander zu setzen. In manchen Sprachen zählt ein String als Einheit, in anderen ist es ein Array von Zeichen, die somit angegeben werden können.

Block

In modernen Sprachen ist es notwendig, Aussagen zu gruppieren. Eine solche Gruppe von Aussagen heißt a Block oder Zusammengesetzte Aussage und selbst zählt als eine einzige Aussage. Die Gruppierung erfolgt mit LOSLEGEN und ENDE. Andere Sprachen verwenden dafür keine Wörter, aber zum Beispiel { und }.

ANRUF

Beim Anrufen von a Subroutine (ebenfalls Verfahren, Funktion oder Methode named) erhält den Namen des Unterprogramms, gefolgt von (normalerweise in Klammern) den Parametern (auch Argumente genannt). Wenn keine Parameter vorhanden sind, werden oft Klammern benötigt.In einigen Sprachen ein explizit reserviertes Wort ANRUF vorangestellt.

  • In COBOL schreiben die Leute PERFORM Abschnitts- oder Absatzname THRU Abschnitts- oder Absatzname. das Wort DURCH meint bis einschließlich und die Ausführung endet daher am ersten Abschnitt oder Absatz nach dem genannten Namen.

Imperative Elemente

Bei der imperativen Programmierung ist ein Programm eine Reihe von Anweisungen, die der Computer ausführen muss, wobei Werte an Speicherplätze oder abstraktere Variablen zugewiesen und ausgelesen werden. Solche Anweisungen werden in Programme kompiliert, die Elemente verwenden, die Kontrollfluss angeben. Die meisten Programmiersprachen gehen von dieser Arbeitsweise aus oder unterstützen sie; typische Elemente in solchen Sprachen sind die folgenden.

Zuweisung

In einer Zuweisung wird einer Variablen ein Wert zugewiesen. Die Schreibweise lautet in der Regel:

Variable=Ausdruck
Variable:=Ausdruck
  • In einigen Sprachen (u.a. C ​​und APL) kann eine Zuweisung auch mitten in einem Ausdruck erfolgen.
  • Biene COBOL es gibt andere möglichkeiten. Wird nichts berechnet, schreibt man MOVE Wert TO Variable. Eine einfache Rechnung kann geschrieben werden als Wert TO Variable HINZUFÜGEN, gefolgt von möglicherweise GEBEN variabel. Die häufigste Aufgabe ist COMPUTE-Variable = Ausdruck.
  • In einigen Implementierungen von BASIC der Zuweisung wird das Wort vorangestellt BITTE BEACHTEN SIE.

WENN

Nach dem WENN komm her Bedingung und ein Aussage das muss bedingt sein. Zwischen der Bedingung und der Aussage steht das Wort DANN (auch manchmal TUN). Nach den bedingt auszuführenden Anweisungen kommt SONST gefolgt von einer Anweisung, die korrekt ausgeführt wird, wenn nicht die Bedingung ist erfüllt.

  • Bei Fortran schreiben die Leute WENN (Ausdruck) Etikett1, Etikett2, Etikett3. Abhängig vom Wert des Ausdrucks wird die Ausführung des Programms an einem der Labels fortgesetzt.
  • Einige Implementierungen von BASIC write IF-Ausdruck THEN Zeilennummer. Wenn die Bedingung erfüllt ist, wird die Ausführung an der angegebenen Zeilennummer fortgesetzt. Beachten Sie das Fehlen von GEHE ZU.
  • Es gibt drei Varianten in BCPL, wobei SONST nur in der dritten Variante darf vorkommen:
    • WENN Bedingung DANN Aussage1
    • ES SEI DENN Bedingung DANN Aussage2
    • PRÜFUNG Bedingung DANN Aussage1 SONST Aussage2

SCHALTER oder GEHÄUSE

Eine IF-Anweisung hat zwei Verzweigungen, die DANN-Filiale und alle SONST-Ast. Wenn eine komplizierte Auswahl erforderlich ist, kann man oft a SCHALTER-Aussage (in anderen Sprachen) FALL). Ein Ausdruck wird aufgerufen und mit einer Reihe von Konstanten verglichen, um zu bestimmen, welcher Zweig ausgeführt werden soll.

FÜR oder TUN

Nach dem ZUM (ebenfalls TUN) kommt eine Anweisung, die wiederholt ausgeführt werden muss (eine Iteration). Es wird ein Laufvariable gegeben, mit Start- und Endwert und Schrittweite. Diese Konstruktion wird üblicherweise für Wiederholungen verwendet, deren Anzahl auf eine vorbestimmte Grenze begrenzt ist.

  • In Fortran: DO Label Variable=Startwert, Endwert, Schrittweite. Im Gegensatz zu moderneren Sprachen können danach beliebig viele Anweisungen folgen, das Label zeigt auf die letzte Anweisung der Iteration. (In modernen Sprachen müssen die Aussagen zu einer einzigen Aussage zusammengeführt werden, siehe Block.)
  • In PL/1: DO Variable=Startwert TO Endwert BY Schrittweite
  • In Algol: zum Variable:=Anfangswert zu Endwert Schritt Schrittlänge tun
  • In C: for (Anfangszuweisung; Testbedingung; Inkrementierungsausdruck)

FÜR JEDES

für jedes. Gibt eine Iteration, eine laufende Variable und a . zurück Aufzählung, d. h. ein Objekt, das selbst bereits eine Standardmethode definiert, um eine Iteration über seine Werte zu ermöglichen. Dabei kann es sich um eine bereits bestimmte Sammlung von Werten handeln (z.B. eine Liste oder Array), aber das müssen Sie nicht.Der wichtige Unterschied zu FOR besteht darin, dass keine Sequenznummer verwendet wird, um die Elemente zu umschließen.

WÄHREND

WÄHREND. Dies ist ebenfalls eine Iteration, aber anstelle einer laufenden Variablen wird eine Bedingung angegeben; die Iteration wird durchgeführt, bis die Bedingung nicht mehr erfüllt ist. Dies wird normalerweise für Iterationen verwendet, bei denen die Anzahl der Schritte zum Zeitpunkt der Eingabe unbekannt ist.

  • In einigen Sprachen ZUM mit WÄHREND kombiniert werden, zum Beispiel in Algol: zum Variable=Anfangswert zu Endwert Schritt Schrittlänge während Bedingung tun. Die Iteration stoppt, wenn der Endwert erreicht ist oder die Bedingung falsch geworden ist.
  • BCPL weiß es auch BIS UM.

UNTERBRECHUNG

Um eine Iteration vorzeitig zu beenden, müssen Anweisungen wie UNTERBRECHUNG oder AUSFAHRT. Um direkt zur nächsten Iteration zu gelangen, schreibt man LAUF oder KONTINUIERLICH. Um die Ausführung eines Unterprogramms zu beenden, schreibt man RÜCKKEHR.

  • In Fortran ist KONTINUIERLICH eine Dummy-Anweisung, die keine Wirkung hat. Es wird oft verwendet, um ein Etikett zu platzieren.
Etikette

EIN Etikette ist ein Bezeichner, der einen Punkt des Programms markiert. Normalerweise wird ein Etikett in a . verwendet GEHE ZU-Aussage. Ein Etikett kommt normalerweise mit einem Doppelpunkt.

  • Im fortran Ein Label ist eine Zahl, die in den ersten sechs Positionen einer Zeile platziert wird. (Der Programmcode beginnt bei Fortran an Position 8.) Die Zeilen müssen nicht nummeriert werden, noch müssen die Nummern aufeinander folgen.
  • BASIC hat keine Labels, sondern Zeilennummern. Jede Zeile muss nummeriert sein.
  • COBOL hat keine Labels, sondern Absätze und Abschnitte. Ein einzelner Bezeichner ab Position 8 ist ein Absatzname und der Absatz endet am Anfang des nächsten Absatzes oder am Ende des Abschnitts. Ein Bezeichner gefolgt von dem Wort SEKTION ist ein Abschnittsname und der Abschnitt endet am Anfang des nächsten Abschnitts.

GEHE ZU

Nach dem GEHE ZU oder GEHE ZU kommt ein Etikette. Die Ausführung des Programms wird an der Stelle des Etiketts fortgesetzt. Kenne fast alle Programmiersprachen GEHE ZU, aber von seiner Verwendung wird in der modernen Programmierpraxis abgeraten, da es leicht dazu führt, schrijven . zu schreiben Spaghetti-Code .

Externe Quellen

  • Robert W. Sebesta, Konzepte von Programmiersprachen, Addison-Wesley Publishing Company Inc., ISBN 0-8053-7133-8.
  • Michael Sipser, Einführung in die Rechentheorie, PWS Verlag, ISBN 0-534-94728-X .