Kontrollstelle

In imperativen Programmierung, ist eine Kontrollstruktur ein Befehl, der die Reihenfolge, in der die verschiedenen Anweisungen eines Algorithmus oder ein Computerprogramm ausgeführt werden, steuert.

Dies ist auch das Ablaufbefehls-Ausführungsprogrammfluss bezeichnet und kann unter Verwendung eines Steuerflussgraphik dargestellt werden.

Sequential Kontrollstrukturen

Ein Imperativ Computerprogramm ist eine Folge von Anweisungen. Ein internes Register des Prozessors ist der Programmzähler zum Speichern der Adresse des nächsten auszuführenden Anweisung verantwortlich.

Sequenz

Die meisten der Programmbefehle nacheinander ausgeführt: nach der Verarbeitung des aktuellen Befehls wird der Programmzähler wird inkrementiert, und der nächste Befehl wird geladen.

Die Reihenfolge ist der implizite Steuerstruktur. Sie gibt den Befehl Befehlsausführung, die oft durch ein Semikolon oder Zeilenumbrüche voneinander getrennt sind.

Programmstopp

Ein Programm stoppt in der Regel nach der Ausführung des letzten Befehls. Die meisten Programmiersprachen bieten auch einen oder mehrere Befehle, die Programmausführung an einer beliebigen Position anzuhalten.

Gemäß der Ausführungsumgebung zugrunde liegt, der Beurteilung kann dauerhaft sein oder kann zu einer Suspension der Ausführung des Programms, bis ein externes Ereignis entsprechen: es ist zum Beispiel das Betriebsverhalten der meisten Eingabeanweisungen Ausgabe dass die Ausführungsablauf, bis das betroffene Gerät zu blockieren, um die Verarbeitung der Daten.

Iterative Kontrollstrukturen

Diese Befehle werden verwendet, um eine Zustandsmaschine durchzuführen, bedeutet dies, dass ihre einzige Nebenwirkung ist, um eine Registrierung, die derzeitigen Stand des Programms übereinstimmt ändern.

In einem Prozessor, entspricht dieser Zustand auf den Wert des Programmzählers.

Bestellungen Tags

Ein Label ist eine Zahl oder eine Kennung, die mit einer Anweisung von dem Quellencode zugeordnet. Es ist beabsichtigt, als Steuerzielstruktur anderer Stelle im Programm befindet, dienen. Abgesehen von dieser Rolle der Lage, hat ein Label, keine Auswirkungen auf das Programm: sie nicht das Verhalten des Befehls zu ändern, um dem er zugeordnet ist.

Zeilennummern sind eine Art von Etiketten von Sprachen wie FORTRAN oder BASIC verwendet. Diese vorderen Zeilen Quellcode, müssen sie in den meisten dieser Sprachen zu erhöhen und, wenn das Programm, jedoch nicht notwendigerweise zusammenhängend sind. Zum Beispiel in BASIC:

In anderen Sprachen, die Etiketten sind alphanumerische Kennungen, die in der Regel in der obersten Zeile angeordnet sind und die mit einem Doppelpunkt. Beispielsweise in C:

Es gibt zwei Familien von Anweisungen, um diese Etiketten senden können: unbedingte Sprünge und bedingte Sprünge.

Unbedingte Sprünge

Ein unbedingter Sprung, gehe oft genannt wird, verwendet werden, um die Ausführung zu einem Etikett zurückzukehren. Dieser Sprung ist systematisch, verursacht dies einen Bruch der Ausführungsablauf, auch "außerhalb der Reihenfolge" oder einer Verbindung. Die Anweisung nach dem Sprung in das Programm kann daher nicht selbst von einem anderen Sprung erreicht werden.

Beispiele für die Umsetzung:

  • BASIC: GOTO Label
  • Asm 86: JMP Label

Bedingte Sprünge

Bedingte Sprünge ermöglicht es Ihnen, eine Verbindung herzustellen, wenn eine Bedingung erfüllt ist. Wenn die Bedingung nicht verifiziert ist, wird die Ausführung sequentiell. Der Zustand wird manchmal als "Abbruchbedingung", da sie meist eine Pause in der Ausführungsablauf, wenn die Bedingung erfüllt ist.

In einer Hochsprache ist diese Bedingung das Ergebnis der Auswertung eines Ausdrucks. Assemblersprache ist ein Indikator für einen spezifischen Bit-Register, durch andere Befehle in der Sprache geändert werden kann.

Beispiele für die Umsetzung:

  • BASIC: IF Bedingung GOTO Label
  • Asm 86: JZ-Label

Andere Befehle Etiketten

Weitere Kontrollstrukturen, die später vorgestellt wird auch das Konzept der Etikette.

Dies ist zum Beispiel der Fall des Anrufs Routinen oder Schleifenausgabebefehle.

Blockbefehle

Formal ist der bedingte Sprung die einzige Anweisung notwendig, eine endliche Zustandsmaschine durchzuführen. Während die meisten Prozessoren unterstützen auch aus Leistungsgründen, der unbedingte Sprung, ist es oft nur auf dieser Ebene verwendet.

Programmiersprachen, aber die Macher haben schnell festgestellt, dass Etiketten waren schlecht auf die kognitiven Mechanismen des Menschen angepasst. Oft als Spaghetti-Code, Programme mit vielen Sprunganweisungen sind schwer zu verstehen und damit von Programmierern zu erhalten. Diese in der Tat kämpfen, um die Semantik wahrnehmen und sind gezwungen, geistig legen die verschiedenen Zustände des Programms durch das Surfen im Schild Label.

So erschien neues Spiel Steuerbefehle, die nicht mehr arbeiten, mit Etiketten, sondern auf Blöcke von Anweisungen. Auf einer Sprache zur anderen wurde eine große Anzahl von Blöcken von Befehlen erfunden, aber es wird allgemein in zwei Hauptfamilien eingeteilt:

  • Alternative: Führen Sie einen Block von Befehlen, wenn eine bestimmte Bedingung erfüllt ist.
  • Loops: führen Sie einen Block von Anweisungen wiederholt.

Dieser Ansatz fällt in die strukturierte Programmierung.

Befehlsblöcke

Ein Anweisungsblock besteht aus mehreren zusammenhängenden Anweisungen. Wenn man bedenkt, wie diese Blöcke zu melden, gibt es zwei Hauptklassen von Sprachen:

In der ersten Familie Steueranweisungen bestehen aus zwei Schlüsselbegriffe: eine erste Wort, das den Anfang und ein letztes Wort, das das Ende des Blocks von Befehlen angibt, markiert; die Form der letzte Wort variiert von einer Sprache zur anderen:

  • Ada: das letzte Wort ist Ende + Raum + Initialwort zB if ... end if, Loop ... End-Schleife
  • Algol 68, bash: gespiegelt Anfangswort: zB wenn ... fi, Fall ... esac
  • Fortran 77: Ende + Anfangswort zB IF ... ENDIF, DO ... ENDDO
  • Modula-2: das gleiche letztes Wort, um alle Kontrollstrukturen zu beenden.
  • Turbo Basic: jede Steuerstruktur auf seine letzte Wort: if ... end if; for ... next; While ... Wend

In der zweiten Familie von Sprachen arbeiten die Steueranweisungen standardmäßig auf atomarer Anleitung. Die Sprache definiert einen anderen Mechanismus, um Blöcke, die mit diesen Anweisungen verwendet werden können, zu erklären:

  • Schlüsselwörter - Algol 60 und Pascal begin ... end; PL / 1: DO ... END
  • Satzzeichen - C, C ++, Java, Perl und PHP: Klammern {...}; BCPL: $
  • Layout - Haskell und Python Einzug als Syntax

Alternativen

Alternativen sind Programmierstrukturen Führen einer logischen Test auf einen Zustand versetzt, eine Wahl zwischen verschiedenen Blöcken von Anweisungen in Abhängigkeit vom Ergebnis dieses Tests. Der Zustand wird allgemein als "Fortsetzungsbedingung", weil der Ausführungsablauf geht weiter mit der Anweisungsblock unmittelbar nach dem Zustand, wenn es wahr ist.

Testen Sie, ob

Der Test ist, ob die Alternative bilden die einfachste: Wenn-Test überprüft wird ausgeführten Befehl 1 und Befehl 2; Wird die Prüfung nicht unmittelbar überprüft wird ausgeführt Befehl 2

Pseudo-Code:

Beispiele für die Umsetzung:

  • BASIC und Pascal: IF Bedingung THEN-Anweisung
  • C: if-Anweisung
  • Python: wenn Bedingung: Anweisung
  • Forth: IF Bedingung THEN-Anweisung

Das Schlüsselwort übereinstimmt, wenn ja Englisch; Dann passt das Schlüsselwort, während.

Testen Sie, ob sonst

Wenn-Test überprüft wird ausgeführten Befehl 1 und Befehl 3; ansonsten führt Anweisung 2 Anweisung 3 und.

Beispiele für die Umsetzung:

  • Pascal: if Bedingung then Anweisung else-Anweisung
  • C: wenn else-Anweisung Anweisung

Das Schlüsselwort übereinstimmt else if nicht in Englisch. Historisch gesehen, haben wir einen ersten, wenn dann sonst finden in Algol 60.

Testen Sie, ob sonst

Wenn Test 1 wird überprüft, ausgeführten Befehl 1 und Befehl 3; andernfalls überprüft, Test 2 ausgeführt Instruction 2 und Instruction 3; wenn nicht direkt Instruction 3 ausgeführt wird.

Instruction viel mehr, wenn wir können Kette nach Wunsch: Nur die erste Bedingung wird geprüft, welche ausgeführt wird, werden. Können in der Regel assoziieren eine Klausel, die sonst nur, wenn kein anderes ausgeführt, wenn Klausel überprüft worden sein.

In Sprachen, in denen die Definition der Befehlsblöcke ist unabhängig von den Kontrollstrukturen, ist diese Aussage redundant, da sie beträgt String so nach nichts anderes. Zum Beispiel in C schreiben wir:

Einige dieser Sprachen noch eine Erklärung zu definieren sonst, wenn aus Gründen der Leistung, zum Beispiel.

Test nach

Der Test ist eine Spezialisierung nach Anweisung wenn ja, welche Sie je nach dem Wert einer Variablen, die ausgeführt werden Block auswählen können. Es wird verwendet, wenn eine Überweisung mehrere Mündungen, und dass wir eine Bedingung mehrmals testen, immer die gleiche Variable.

Strukturell ist es gleichbedeutend mit einer Reihe von anderen, wenn, aber zu wissen, dass der Wert der Variablen getestet werden nicht in die Beurteilung der Voraussetzungen verändert werden kann der Compiler einige Optimierungen vornimmt.

Weiter Sprachen kann der Ausdruck nach dem Schlüsselwort Fall ein einzelner Wert für eine Prüfung der Gleichheit, einer Sammlung, einem Bereich oder einem regulären Ausdruck, zum Beispiel.

Der Schaltkasten C-Sprache unterscheidet sich deutlich von dem Modell oben. Sein Verhalten durch das unfertige Bruch mit dem Wort Schlüsselkasten, je näher ein Label unterschreitet.

Der Schalter Fall erscheint in Algol 68.

Locken

Eine Schleife ist eine Steuerstruktur zum Ausführen einer Codeabschnitt wiederholt die Steuerstruktur frühen Verbinden der Ordnungszeiger in dem Code als eine Fortsetzungsbedingung erfüllt ist oder, wie die Schleifen, ein Zustand, Release nicht erfüllt ist.

Normalerweise wird eine Schleife gegebenenfalls ausgeführt werden, eine Reihe von im Voraus bekannt ist, oder bis eine Bedingung ist es möglich, die Schleife zu verlassen. Aber manchmal ein Programmierfehler, die die Bedingung macht nie wahr wird. Das Programm führt dann auf unbestimmte Zeit in dieser Endlosschleife.

Fortran II führte den Schnallen im Jahr 1958.

Die Sprachen, bieten in der Regel verschiedene Arten von Schleifen:

  • Voraussetzung Schleife: die Bedingung vor der ersten Schleife überprüft
  • Nachbedingung Schleife: der Zustand nach der ersten Schleife überprüft
  • Schleifenstopbedingung: die Bedingung wahr ist in der Mitte der Schleife
  • Schleife: ein Zähler wird verwendet, um die Anzahl der Iterationen zu zählen
  • Schleifenstrecke: die Schleife an jedem der Elemente einer Liste ausgeführt

Die Sprachen können verschiedene Arten von Schleifen in Pre-und Post-Zustand bieten:

  • loop "as", die ausgeführt wird, während die Bedingung wahr
  • Schleife "zu", der durchgeführt wird, bis die Bedingung erfüllt ist


Loop "als" Vorbedingung

Ist Test geprüft Anweisung 1 ausgeführt wird, und dann zu dem Ende des Blocks kommen immer wieder ausgewertet Testen. Beim Test liefert ein falsches Ergebnis verlassen wir die Schleife durch einen Sprung Anweisung 2. Der Test wird in der Regel als "Fortsetzungsbedingung", wie die Ausführungsablauf fährt mit Anweisung 1, wenn der Test wahr ist.

Beispiele für die Umsetzung:

  • C: while-Anweisung
  • Pascal: do Anweisung während condition_de_continuation

Das Schlüsselwort in Englisch, während Spiele wie Französisch.

Loop "bis" in Nachbedingung

Diese Schleife ermöglicht es, eine Anweisung oder einen Satz von Instruktionen zu wiederholen, bis eine Abbruchbedingung erfüllt ist. Die Serie von Anweisungen wird mindestens einmal ausgeführt wird, unabhängig von dem Zustand.

Beispiele für die Umsetzung:

  • Pascal: repeat-Anweisung bis zu condition_d_arret
  • Perl: do {} Anweisung bis zu;

Das Schlüsselwort ist bis zum Französisch, bis, wiederholen, um zu wiederholen, in der Tat zu tun.

Loop Ausgangsregler

Diese Befehle sind in der Mitte einer Schleife verwendet, um ein vorzeitiges Verlassen des Schleife, in der Regel, wenn eine bestimmte Bedingung erfüllt ist, zu erzielen.

Dies sind Befehle wie die Sprache C

Ada der Befehl, das entspricht einer Kennung, die den Einsatz in verschachtelten Schleifen ermöglicht akzeptieren. Diese Sprache definiert auch eine Exit-WHEN-Anweisung, die eine Bedingung verknüpft.

Die C-Sprache definiert auch einen Befehl, der die Befehlszeiger zwingt, bis zum Ende der Schleife zu springen. Wenn der Stoppzustand der Schleife wurde noch nicht bestätigt, wird die Schleife beginnt eine neue Iteration, ansonsten wird das Programm verlässt die Schleife und geht zu der darauf folgende Zeile.

Aktuelle Implementierungen Sprache Pascal und Verfahren.

Alle diese Befehle sind eine Form der unbedingte Sprung: wenn sie nicht mit formalen Etiketten, sie machen es möglich, den Wert des Programmzeiger ändern, um eine bestimmte Stelle des Programms anzugehen.

Die Python oder Ruby-Sprache verfügen Zuordnen einer Klausel in einer Schleife, eine benutzerdefinierte Verarbeitung, wenn eine normale Schleifen Ausfahrt durchzuführen.

Einige Sprachen können mehrere Schleifen in einer einzigen Anweisung zu brechen, oder benennen Sie die Schlaufen in der Lage zu entscheiden, wie eine Schleife der Programmierer wollen aus verschachtelten Schleifen sein. Das Fehlen einer solchen Möglichkeit wird oft durch die Verwendung eines Verfahrens und einer "Rückkehr" in der Mitte der verschachtelten Schleifen umgangen.

Erweiterungen des Konzepts der Schlaufen

Es gibt auch andere Schleifenvarianten, deren Verhalten identisch zu dem einer while-Schleife ist, aber sie zusätzliche Variablen in die Register PC zum Speichern ihrer Zustand erfordern.

Zähler

Ein Zähler kann eine Schleife mit einer Integer-Variable oder einen Zeiger verbunden, um bei jeder Iteration inkrementiert werden. Es wird oft verwendet, um die Daten eines indizierten Sammelprozeß.

Iteratoren

Ein Iterator ist eine Aufgabe, die für eine Schleife durch alle Elemente in einer Datenstruktur ermöglicht.

Sprachen wie C ++ oder Objective C nicht über spezifische Stichworte, um Iteratoren, die sie verwenden Bibliotheksverfahren mit allgemeineren Kontrollstrukturen verbunden.

Objective C Beispiel:

In anderen Sprachen, hat dieses Konzept Kontrollstrukturen gewidmet. Beispiele für die Umsetzung:

  • Python für Wert in der Sammlung: Anweisung
  • Perl foreach Wert $ Anweisung;

Unterprogramme

In den 1950er Jahren, Computerspeicher war teuer und Unterprogramme wurden in erster Linie verwendet, um die Größe der Programme zu reduzieren: ein Satz von Anweisungen wurde einmal geschrieben und können von mehreren Stellen im Programm aufgerufen werden.

Die Unterstützungsprogramme auch fähige Computer verwenden rekursive Algorithmen.

Beispiel Basic-Unterroutine

In diesem Beispiel, Zeile 20, der aktuelle Wert des Programmzählers wird archiviert und dann springt das Programm zu Zeile in Zeile 60 50 angelangt, die RETURN-Anweisung, die in dem Programmzähler und damit gespeicherte Wert zuweisen Rückkehr zum Programmaufruf Position.

Betrieb

Diese strukturellen Kontrollen erfordern daher eine Batteriesteuerung, um die Rücksprungadresse des Unterprogramms aufzunehmen.

Die auf dem Begriff Stapel mit zwei Befehlen:

  • Call: Stapel der Y-Wert der PC-Register und springt an die Adresse X
  • RETURN: öffnet den Y-Wert und springt an diese Adresse.

Verfahren

Heute Routinen werden verwendet, um die Strukturierung eines Programms zu verbessern. Mit einer Sprungmarke markiert ist, kann sie daher als eine Verlängerung des unbedingten Sprung und aus der Sicht der strukturierten Programmierung berücksichtigt werden, die von den meisten der Defekte geteilt.

Viele moderne Sprachen somit nicht direkt unterstützen das Konzept eines Unterprogramms zugunsten der High-Level-Konstrukte, die aufgerufen werden können, von einer Sprache zu einer anderen Prozedur, Funktion, Methode oder eine Routine zum Beispiel. Diese Gebäude fügen Sie den Begriff der Übergabe von Parametern und insbesondere die Aufteilung der Namensräume, um zu verhindern, das Programm hat einen Nebeneffekt auf der aufrufenden Routine.

Erweiterungen

Es gibt verschiedene Erweiterungen, um den Begriff der Vorgehensweise wie Koroutinen, Signale und Slots, Callback-Funktionen, virtuelle Methoden ...

Es ändert sich dynamisch, das heißt, die Ausführung, die die Struktur des Ausführungsablaufs des Programms zu sagen.

Ausnahmen

Jedes Programm in der Ausführung sind Irrtum, für die Erkennung und Reparatur-Strategien sind möglich. Diese Fehler keinen Fehler, aber spezifischen Bedingungen im normalen Verlauf einer Teil eines Programms.

Beispielsweise ist die Abwesenheit eines nützlichen Datei nicht um einen Programmfehler; Durch die Nachteile, nicht umgehen seiner Abwesenheit würde sein.

Wenn man kein Werkzeug, um die normale Ausführung und hervorragende Leistung des Programms, einen Algorithmus, die ordnungsgemäße Durchführung wird auf einfache und elegante Art und Weise zum Ausdruck zu trennen ist, kann schwierig werden, halten sowohl "embedded" durch logische Verarbeitung dieser Ausnahmesituationen; an der Programmiersprache Strukturen zur normalen Laufleistung in einem außergewöhnlichen Rahmen unterscheiden kann hilfreich sein. Diese Kontrollstrukturen bilden ein Management-System von Ausnahmen.

Beispiele für die Umsetzung:

  • Python: try: except Anweisung Exception Handler

Concurrent programming

In einem Multitasking-System, mehrere Wellen von Hinrichtungen, die so genannte Leichtbau Prozesse gleichzeitig ausgeführt.

Es ist dann erforderlich, um die Synchronisation der Ausführungsströme zu gewährleisten. In den meisten Sprachen wird dies durch externe Bibliotheken getan, einige von ihnen dennoch übernehmen Kontrollstrukturen ermöglichen Aktion auf konkurrierenden Tasks.

Beispiele für die Umsetzung:

  • Ada: Instruction Ende akzeptieren Rendezvous Rendezvous;

Event-Programmierung

Event-Programmierung ist ein weiterer Weg, um den Ablauf der Ausführung eines Programms zu steuern. Dies ist für Manager, die zu einem übergeordneten Schleife zu abonnieren wird, berechnet, um die Ereignisse, die die Software beeinflussen direkt erstellen.

Diese Methode wurde von den Oberflächenprogrammierung Bibliotheken popularisiert worden. Tatsächlich ist es besonders geeignet, Mausbewegungen behandeln, zum Beispiel. Wir finden, das gleiche Prinzip in nicht-grafischen Tools wie awk oder XSLT-Beispiel. Auf einem Niveau in der Nähe des Hardware gefunden eine ähnliche Philosophie mit Unterbrechungen.

(0)
(0)
Kommentare - 0
Keine Kommentare

Fügen Sie einen Kommentar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Zeichen übrig: 3000
captcha