it-swarm.dev

Was ist der Unterschied zwischen imperativer, prozeduraler und strukturierter Programmierung?

Durch Recherchen (Bücher, Wikipedia, ähnliche Fragen zu SE usw.) wurde mir klar, dass die imperative Programmierung eines der wichtigsten Programmierparadigmen ist, bei denen Sie eine Reihe von Befehlen (oder Anweisungen) beschreiben, die der Computer ausführen soll (also hübsch) viel befehlen es, bestimmte Maßnahmen zu ergreifen, daher der Name "Imperativ"). So weit, ist es gut.

Die prozedurale Programmierung ist andererseits eine bestimmte Art (oder Teilmenge) der imperativen Programmierung, bei der Sie Prozeduren (d. H. Funktionen) verwenden, um die Befehle zu beschreiben, die der Computer ausführen soll.

Erste Frage: Gibt es eine imperative Programmiersprache, die nicht prozedural ist? Mit anderen Worten, können Sie Imperative Programmierung ohne Prozeduren haben?

pdate: Diese erste Frage scheint beantwortet zu sein. Eine Sprache kann zwingend sein, ohne prozedural oder strukturiert zu sein. Ein Beispiel ist die reine Assemblersprache.

Dann haben Sie auch die strukturierte Programmierung, die eine andere Art (oder Teilmenge) der imperativen Programmierung zu sein scheint, die entstanden ist, um die Abhängigkeit von der GOTO-Anweisung zu beseitigen.

Zweite Frage: Was ist der Unterschied zwischen prozeduraler und strukturierter Programmierung? Kannst du eins ohne das andere haben und umgekehrt? Können wir sagen, dass prozedurale Programmierung eine Teilmenge der strukturierten Programmierung ist, wie im Bild?

enter image description here

90
Daniel Scocco

Viele der Begriffe können für Programmiersprachen wiederverwendet (oft missbraucht) werden, insbesondere für andere als objektorientierte.

Hier sind einige kleine Beschreibungen der Begriffe.

  1. Imperative Programmierung - In guten alten Zeiten, als die Programmierung weitgehend in Assembly war, hatte Code Tonnen von GOTOs. Noch höhere Sprachen wie FORTRAN und BASIC verwendeten dieselben Grundelemente. In diesem Programmierparadigma ist das gesamte Programm ein einzelner Algorithmus oder eine vollständige Funktionalität, die linear geschrieben wird - Schritt für Schritt. Dies ist zwingend erforderlich Stil. Verstehe, dass man auch in moderner C-Sprache wirklich total schlechte Imperativarbeit schreiben kann, aber es ist ziemlich einfach, Code in höheren Sprachen zu organisieren.

  2. Strukturierte und modulare Programmierung - Meistens sollten wir den Begriff austauschbar verwenden können, jedoch mit geringfügigen Unterschieden. Als die Sprachen höherer Ebenen immer reicher wurden, wurde klar, dass alle Arbeitseinheiten in kleinere Teile unterteilt werden sollten - das war der Zeitpunkt, an dem Funktionen entstanden und die Programmierung zu einer Hierarchie von Funktionen wurde und viele auf niedrigeren Ebenen wiederverwendet werden konnten.

    • Strukturierte Programmierung ist eine beliebige Programmierung, wenn die Funktionalität in Einheiten wie for loop, while loop, if... then Usw. Blockstruktur unterteilt ist.
    • Auch hier kann der Code (Funktion) wiederverwendet werden.
    • In modulare Programmierung kann eine physische Form eines Pakets erstellt werden - d. H. Ein Stück Code, der versendet werden kann; die ziemlich allgemein und wiederverwendbar sind. Dies nennt man Module von zusammen kompilierten Elementen.
    • Man kann also kaum modulare Programme sehen, die nicht strukturiert sind und umgekehrt; Die technische Definition unterscheidet sich geringfügig, aber der meist strukturierte Code kann modular und auf andere Weise erstellt werden.
  3. Dann kam die "objektorientierte Programmierung", die in der Literatur gut definiert ist. Verstehen Sie, dass objektorientierte Programmierung ist per Definition eine Form der strukturierten Programmierung ist. Der neue Name für all jenen funktionsbasierten Code, der strukturierter Code ist, aber [~ # ~] nicht [~ # ~] objektorientiert ist, wird oft als prozedurale Programmierung bezeichnet.

    • Grundsätzlich wird strukturierter Code, bei dem Funktionen (oder Prozeduren) über Daten dominieren, als prozedural bezeichnet, während klassen- und objektbasierte Darstellung als objektorientiert bezeichnet wird. Beide sind per Definition auch modular aufgebaut.

Viele Leute denken - die gesamte strukturierte Programmierung (möglicherweise überspringen objektbasiert) als zwingende Programmierung; Ich denke, das liegt nur an der fehlenden klaren Definition der imperativen Programmierung - aber es ist falsch. Sie machen strukturierte Programmierung, wenn Sie nicht viele zwingende machen! Aber ich kann immer noch viele Funktionen sowie viele goto-Anweisungen in das C- oder FORTRAN-Programm schreiben, um sie zu verwechseln.

Um genau auf Ihre Fragen einzugehen:

Erste Frage : Die reine Assemblersprache ist eine zwingende Sprache, die NICHT strukturiert oder prozedural ist. (Ein schrittweiser interpretativer Kontrollfluss bedeutet nicht prozedural - aber die Aufteilung der Funktionalität in Funktionen macht eine Sprache prozedural).

  • korrektur * Die meisten modernen Montageformen unterstützen die Verwendung von Funktionen. In der Tat muss alles, was in High-Level-Code möglich ist, auf Low-Level existieren, um zu funktionieren. Obwohl es weitaus besser ist, prozeduralen Code zu erstellen, ist es möglich, sowohl prozeduralen als auch imperativen Code zu schreiben. Im Gegensatz zu letzterem ist es wartbarer und verständlicher (Vermeidung von schrecklichem Spaghetti-Code). Ich denke, es gibt Shell/Bash-Skripte, die besser zu der Auszeichnung passen, rein zwingend zu sein, aber selbst dann, wenn die meisten Funktionen haben, verstehen Entwickler definitiv, wie viel Wert sie haben.

Zweite Frage : Die prozedurale Programmierung ist eine [~ # ~] Form [~ # ~] der strukturierten Programmierung.


[~ # ~] Bonus [~ # ~]

  • Gemäß einer Taxonomie ist die primäre Klassifikation Deklarativ (oder funktionale Sprache) vs. Imperativ. Deklarative Sprachen ermöglichen die Berechnung, ohne den Kontrollfluss zu beschreiben, während der explizite Kontrollfluss (Schritt für Schritt) definiert wird. Basierend auf dieser Klassifizierung kann die imperative Programmierung für einige eine Supermenge strukturierter, modularer und OO Programmierung) sein. Siehe dies: Functional Programming vs. OOP

  • Nach der objektorientierten Programmierung wurden andere Programmierparadigmen erfunden: Weitere Einzelheiten finden Sie hier: Was sind die Unterschiede zwischen aspektorientierter, themenorientierter und rollenorientierter Programmierung?

54
Dipan Mehta

Erste Frage: Ja, viele reine objektorientierte Sprachen qualifizieren sich. Während sie Methoden haben, die den Funktionen sehr nahe kommen, betrachten sie diese Methoden als Nachrichten und geben ihnen nicht genug Gewicht, um die Sprache prozedural aufzurufen.

Zweite Frage: Der Unterschied liegt oft in einem anderen Bereich. Sie können überall eine Funktion mit goto-Anweisungen haben, die prozedural, aber nicht strukturiert programmiert ist. Andererseits unterstützen und fördern die meisten OO Sprachen) die strukturierte Programmierung, nicht jedoch die prozedurale Programmierung.

Die prozedurale Programmierung beschreibt die globale Reihenfolge des Programms. Prozedurale Programme sind diejenigen, die am effektivsten durch Betrachten ihrer Anrufdiagramme verstanden werden. Strukturprogrammierung ist eine lokale Eigenschaft, sie gilt für die Verwendung von if und while im Gegensatz zu goto.

Daher sind diese beiden Eigenschaften nicht miteinander verbunden. Sie können entweder eine ohne die andere haben.

5
thiton

Ich befürchte, dass keine der bisher gegebenen Antworten den Kern der Konzepte sehr gut erfasst.

Imperativ, prozedural und strukturiert schließen sich nicht gegenseitig aus, sondern konzentrieren sich nur auf einen einzelnen Aspekt der Modellierungslogik.

Imperativ ist das Gegenstück zum deklarativen Imperativ bedeutet im Grunde, dass Sie dem Computer mitteilen was zu tun ist, indem Sie ihn eine Reihe von Anweisungen ausführen lassen, die Sie bereitstellen. Ein deklaratives Programm hingegen sagt was zu erreichen ist. Mit anderen Worten, definieren Sie Schritte und definieren Sie ein Ergebnis.

Die prozedurale Programmierung bezieht sich auf die Fähigkeit des Prozessors (entweder Hardware oder eines Interpreters), Anweisungen in Verbindungen einzuwickeln, zu einer solchen Verbindung zu springen und zu dem Punkt nach dem Sprung zurückzukehren, sobald die Verbindung ausgeführt wurde. Dies mag trivial klingen und ist nach heutigen Maßstäben auch so, aber Sie benötigen einige grundlegende Unterstützung in der Maschine, bevor Sie dies tun können: die Fähigkeit zu springen, eine Art Stapel, um eine Adresse zu pushen, auf die später gesprungen und gesprungen werden kann, und a Stapelzeiger. Mikroprozessoren boten diese Funktion bald an, aber Sie können sich einen primitiven Prozessor vorstellen, der nur Anweisungen ausführen kann, die ihm nacheinander zugeführt werden, wie ein Lochstreifen oder ein Lochkartenprozessor.

Die strukturierte Programmierung ist der nächste Schritt von der Fähigkeit, zu einer anderen Anweisung zu springen. Letztendlich kommt es auf Sprünge an, aber wenn Sie bedingte Sprünge haben können, können Sie grundlegende Kontrollflussanweisungen wie Wenn-Dann, Für, Während, Wiederholen bis und Umschalten erstellen. Das Anwenden dieser wird als strukturierte Programmierung bezeichnet.

In jeder modernen Programmierumgebung stehen Ihnen alle oben genannten Punkte zur Verfügung und Sie halten sie für selbstverständlich, sodass wir sie nicht mehr als solche bezeichnen. Die Unterscheidungseigenschaften zwischen Sprachen haben sich lange Zeit auf übergeordnete Paradigmen wie objektorientierte und funktionale Programmierung verlagert.

Deklarative Programmierung ist jedoch immer noch nicht alltäglich, hauptsächlich weil sie zumindest teilweise immer domänenspezifisch sein wird. Sie können keine deklarative Allzwecksprache haben. Aus diesem Grund stecken wir immer noch in sogenannten Sprachen der 3. Generation fest, in denen deklarative Programmierung oder "Modellierung" als 4. Generation betrachtet wird.

3
Martin Maat

die meisten populären Sprachen der letzten 50 Jahre wurden nach einem ihrer Urheber, John von Neumann, um die vorherrschende Computerarchitektur herum entworfen, die Von Neumann-Architektur genannt wird.

Diese Sprachen werden Imperativsprachen genannt.

In einem von Neumaan-Computer werden sowohl Daten als auch Programme im selben Speicher gespeichert. Die CPU, die Anweisungen ausführt, ist vom Speicher getrennt. Daher müssen Anweisungen und Daten vom Speicher zur CPU übertragen werden. Ergebnisse von Operationen in der CPU müssen zurück in den Speicher verschoben werden. Fast alle seit den 1940er Jahren gebauten Digitalcomputer basieren auf der Architektur von Neumaan.

3
anandmon