Durch Nachforschungen (Bücher, Wikipedia, ähnliche Fragen zu SE usw.) wurde mir klar, dass Imperative Programmierung eines der wichtigsten Programmierparadigmen ist, bei dem Sie eine Reihe von Befehlen (oder Anweisungen) beschreiben, die der Computer ausführen soll (so dass Sie hübsch sind) Viele befehlen es, bestimmte Maßnahmen zu ergreifen, daher der Name "Imperativ"). So weit, ist es gut.
Prozedurale Programmierung hingegen ist eine bestimmte Art (oder Teilmenge) der imperativen Programmierung, bei der Sie Prozeduren (dh 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?
Update : 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 eine 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? Kann man sagen, dass die prozedurale Programmierung eine Teilmenge der strukturierten Programmierung ist, wie im Bild dargestellt?
quelle
Erste Frage: Ja, viele reine objektorientierte Sprachen sind geeignet. Sie verfügen zwar über Methoden, die den Funktionen sehr nahe kommen, sie sehen diese Methoden jedoch als Nachrichten an 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 im prozeduralen Stil, aber nicht in strukturierter Programmierung abläuft. Auf der anderen Seite unterstützen die meisten OO-Sprachen eine strukturierte Programmierung, jedoch keine prozedurale Programmierung.
Die prozedurale Programmierung beschreibt die globale Reihenfolge des Programms. Prozedurale Programme werden am effektivsten anhand ihrer Aufrufdiagramme verstanden. Die Strukturprogrammierung ist eine lokale Eigenschaft und bezieht sich auf die Verwendung von if und while im Gegensatz zu goto.
Als solche sind diese beiden Eigenschaften nicht zusammenhängend, Sie können eine ohne die andere haben.
quelle
unsafePerformIO
ermöglicht wreaking havok). Andere scherzen, dass Haskell ihre bevorzugte imperative Programmiersprache ist. Tatsache ist jedoch, dass ein sehr großer Teil des Haskell-Codes sauber getrennt lebtIO
, keine nicht standardmäßigen Lücken zum Einschleichen von Nebenwirkungen verwendet und rein funktional ist.Die meisten der populären Sprachen der letzten 50 Jahre sind auf die vorherrschende Computerarchitektur ausgerichtet, die nach einem ihrer Urheber, John von Neumann, Von Neumann-Architektur genannt wird.
Diese Sprachen werden imperative Sprachen genannt.
In einem von Neumaan-Computer werden sowohl Daten als auch Programme im selben Speicher gespeichert. Die CPU, die Befehle 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 von Neumaan-Architektur.
quelle
Ich fürchte, keine der bisher gegebenen Antworten fasst den Kern der Konzepte sehr gut zusammen.
Imperativ, prozedural und strukturiert schließen sich nicht aus, sondern konzentrieren sich nur auf einen Aspekt der Modellierungslogik.
Imperativ ist das Gegenstück zu deklarativ Imperativ bedeutet im Grunde, dass Sie dem Computer mitteilen, was er tun soll, indem er eine Reihe von Anweisungen ausführt, die Sie bereitstellen. Ein deklaratives Programm dagegen sagt, was zu erreichen ist . Mit anderen Worten, definieren Sie Schritte im Vergleich zu einem Ergebnis.
Die prozedurale Programmierung bezieht sich auf die Fähigkeit des Prozessors (entweder Hardware oder ein Interpreter), Anweisungen in Verbindungen zu packen, zu einer solchen Verbindung zu springen und nach dem Sprung zu dem Punkt zurückzukehren, an dem die Verbindung ausgeführt wurde. Dies mag trivial klingen und nach heutigen Maßstäben ist es auch so, aber Sie benötigen eine grundlegende Unterstützung in der Maschine, bevor Sie dies tun können: die Fähigkeit zu springen, eine Art Stapel, auf den eine Adresse gepusht werden kann und zu der später gesprungen werden kann, und a Stapelzeiger. Mikroprozessoren boten diese Funktion bald an, aber Sie können sich einen primitiven Prozessor vorstellen, der nur Befehle ausführen kann, die ihm sequentiell zugeführt werden, wie ein Lochstreifen- oder Lochkartenprozessor.
Strukturierte Programmierung ist der nächste Schritt von der Fähigkeit, zu einem anderen Befehl zu springen. Letztendlich läuft alles auf Sprünge hinaus, aber wenn Sie bedingte Sprünge haben können, können Sie grundlegende Kontrollflussanweisungen wie if-then, for, while, repeat-until und switch erstellen. Diese anzuwenden heißt strukturierte Programmierung.
In jeder modernen Programmierumgebung stehen Ihnen alle oben genannten Funktionen zur Verfügung und sind für Sie selbstverständlich, sodass wir nicht mehr von ihnen als solchen sprechen. Die Unterscheidung zwischen den Sprachen hat sich seit langem zu übergeordneten Paradigmen wie objektorientierter und funktionaler Programmierung gewandelt.
Deklarative Programmierung ist jedoch immer noch nicht alltäglich, vor allem, weil sie zumindest teilweise immer domänenspezifisch sein wird. Sie können keine allgemeine deklarative Sprache haben. Aus diesem Grund stecken wir immer noch in sogenannten Sprachen der 3. Generation, in denen deklaratives Programmieren oder "Modellieren" als 4. Generation betrachtet werden würde.
quelle