Ich programmiere in Java in einem sehr objektorientierten (OO) Stil. OOP kommt sehr intuitiv zu mir, aber ich habe sehr wenig Wissen über andere Arten der Programmierung.
Was genau ist prozedurale Programmierung ? Wie genau unterscheidet es sich von OOP? Ist es dasselbe wie funktionale Programmierung ?
Früher dachte ich, dass jede Programmierung, die nicht OO ist, prozedural ist. Aber ich fange an zu glauben, dass das nicht stimmt.
object-oriented
procedural
Aviv Cohn
quelle
quelle
Antworten:
Wikipedia hat gute Erklärungen für diese Begriffe. Unabhängig davon ist hier die Zusammenfassung:
Deklarative Programmierung ist das Gegenteil von imperativer Programmierung. Sie gibt an, was und nicht wie berechnet werden soll (z. B. SQL, reguläre Ausdrücke).
Funktionale Programmierung modelliert die Berechnung als Ausdrücke , die Werte ergeben (können). Funktionen sind Werte und können an andere Funktionen übergeben oder von diesen zurückgegeben werden. Mutationen werden nicht empfohlen. Alle Variablen sind standardmäßig unveränderlich. Infolgedessen ist es eher deklarativ als imperativ, da es den Schwerpunkt auf die zu berechnenden Elemente legt und nicht auf die dafür erforderliche Abfolge von Zustandsänderungen.
Ihre Beziehungen sind etwas kompliziert, da OOP ein ziemlich geladener Begriff ist. Sie können Objekte sowohl in funktionalen Sprachen als auch in prozeduralen Sprachen verwenden, aber die Sprachen, die als OO angezeigt werden, sind prozedurale Sprachen. Um das Problem weiter zu verwechseln:
Dies veranlasst die Leute zu der Annahme, dass OOP der einzige Weg ist, um eine Abstraktion zu erreichen, und dass funktionale Programmierung und OOP irgendwie gegensätzlich sind oder sich gegenseitig ausschließen. Viele Leute denken auch, dass alle funktionalen Sprachen reine und unzulässige Mutationen sind.
Darüber hinaus werden Imperative / Prozeduren im Allgemeinen austauschbar herumgeworfen, manchmal im Gegensatz zu OOP (was abstraktionslosen Code impliziert, im Allgemeinen C) und manchmal im Gegensatz zu funktionaler Programmierung. Der Begriff strukturierte Programmierung ist, soweit ich das beurteilen kann, größtenteils nicht mehr gebräuchlich (wahrscheinlich, weil zu diesem Zeitpunkt die meisten Leute davon ausgehen, dass goto und globals als schädlich eingestuft werden).
quelle
Die prozedurale Programmierung ist ein Programmieransatz, der einer der Grundbausteine für viele andere Sprachentwürfe ist (funktional ist keiner).
Die meisten Sprachen fallen in die Gruppe der "prozeduralen Programmierung" und es ist wahrscheinlich der natürlichste Entwurfsansatz für die meisten Menschen (wenn Sie in Bezug auf OO denken, dann würde ich sagen, dass Sie in einer Minderheit sind).
BASIC ist prozedural.
Wie andere bereits gesagt haben, handelt es sich um einen Mechanismus zur sequentiellen Strukturierung von Programmen.
Es ist ein Mechanismus zum Definieren von "Prozeduren" erforderlich - Blöcke mit benanntem Code, die OO-Methoden ähneln, die Null bis viele Parameter akzeptieren und optional einen Wert zurückgeben (der dann im Allgemeinen als Funktion bezeichnet wird - was möglicherweise zu einer Verwechslung mit funktionalen Sprachen führt )
Das Paradigma gibt nicht vor, was Sie tun oder wie die Dinge herumgereicht werden.
Es wird lediglich beschrieben, dass das Programm als eine Reihe von Prozeduren (oder Funktionen) strukturiert ist, die nacheinander ablaufen. Die Daten werden dann unabhängig von den Prozeduren definiert.
Dies unterscheidet sich von der objektorientierten Programmierung, bei der das Programm anhand von Datensammlungen und Methoden (nicht Funktionen) strukturiert wird, die auf diese Daten einwirken.
Eine Möglichkeit, darüber nachzudenken, ist der Umfang der Daten.
In einer prozeduralen Sprache ist das Scoping ziemlich einfach. Eine Variable kann sich im Gültigkeitsbereich einer bestimmten Prozedur (lokal deklariert) befinden, bis zu der Ebene, in der das Zeug als erstes aufgerufen wird (global deklariert), wobei verschachtelte Gültigkeitsbereiche dazwischen liegen.
In einer objektorientierten Sprache fügen Sie einen neuen Gültigkeitsbereichskontext hinzu, nämlich den des aktuell verwendeten Objekts, der zu dem obigen orthogonal ist.
Eine andere Möglichkeit, prozedural im Vergleich zu objektorientiert zu denken, besteht darin, eine objektorientierte Sprache zu betrachten, in der alle Methoden als statisch deklariert werden müssen . Das Ergebnis ist eine prozedurale Sprache, in der mithilfe von Klassen Prozeduren zusammengefasst werden können.
quelle
Prozedurale Programmierung ist definitiv keine funktionale Programmierung.
Prozedurale Programmierung ist, wenn Sie ein Modell des Computers als Maschine im Kopf haben und darüber nachdenken, wie Daten im Speicher geändert werden. Sie setzen also zuerst
A
den Wert 3, addieren dann 1 und speichern diesen erneut im SpeicherA
(überschreiben den vorherigen Wert).Funktionale Programmierung würde sagen,
A
ist 3 undB
istA + 1
und lässt dann den Computer herausfinden, wie er berechnetB
. Sobald Sie es definiertA
haben, sollte es unveränderlich sein (unverändert). Mit Functional können Sie beispielsweise eine Funktion als erstklassigen Wert übergeben (eine Funktion kann eine Funktion als Argument annehmen).Objektorientierte Programmierung kombiniert oft beides und ist zu beiden orthogonal. Sie können die funktionale Programmierung verwenden und ein unveränderliches Objekt zurückgeben, und dieses Objekt kann eine Methode haben, die einen berechneten Wert zurückgibt, und dies sogar schleppend - das ist die funktionale objektorientierte Programmierung. Sie können auch ein Objekt haben, das ein "Repository" (abstrakte Version einer Datenbank) darstellt, und Sie können Sachen im Repository "speichern" und Sachen wieder "abrufen" und das Objekt alle Details dazu verarbeiten lassen . Das ist im Grunde objektorientierte prozedurale Programmierung.
quelle
OOP ist nichts anderes als eine etwas verfeinerte Form der prozeduralen Programmierung, die wiederum zur größeren Familie der imperativen Programmierung gehört. Ein Beweis für diese Behauptung ist, dass viele C # / Java-Programmierer dazu neigen, "etwas zu tun" und Methoden wie die folgenden bevorzugen:
Also, ein Programm, das aus einer Reihe von Void-Methoden (früher bekannt als Procedures (sic!)) Und Code besteht, wie:
ist perfekte prozedurale Programmierung.
quelle