Antworten:
Es gibt verschiedene Unterparadigmen des imperativen Programmierparadigmas, wie das prozedurale oder das objektorientierte Programmierparadigma.
Im imperativen Programmierparadigma beschreiben Sie den Algorithmus Schritt für Schritt in verschiedenen Abstraktionsgraden.
Beispiele für Programmiersprachen, die das prozedurale Paradigma unterstützen:
Es bezieht sich normalerweise auf Sprachen, die eine Hierarchie von Typen aufweisen , die sowohl Methoden als auch Status von Basistypen zu abgeleiteten Typen erben, aber auch das ungewöhnliche prototypbasierte JavaScript enthalten.
Beispiele für Programmiersprachen, die das OO-Paradigma unterstützen:
Es gibt verschiedene Unterparadigmen des deklarativen Programmierparadigmas, wie das funktionale oder das logische Programmierparadigma.
Im deklarativen Programmierparadigma beschreiben Sie ein Ergebnis oder ein Ziel und erhalten es über eine " Black Box ". Das Gegenteil von Imperativ.
Beispiele für Programmiersprachen, die das deklarative Programmierparadigma unterstützen:
Die funktionale Programmierung betont die Anwendung von Funktionen ohne Nebenwirkungen und ohne veränderlichen Zustand. Die obigen deklarativen Systeme weisen bestimmte Aspekte der funktionalen Programmierung auf.
Beispiele für Programmiersprachen, die das deklarative Funktionsparadigma unterstützen:
In der deklarativen Programmierung sagen Sie, was Sie wollen, ohne sagen zu müssen, wie es geht. Bei der prozeduralen Programmierung müssen Sie genaue Schritte angeben, um das Ergebnis zu erhalten.
Beispielsweise ist SQL deklarativer als prozedural, da die Abfragen keine Schritte zum Erzeugen des Ergebnisses angeben.
Lassen Sie mich Ihnen ein Beispiel aus der Praxis geben: Ich brauche eine Tasse Tee.
Verfahren:
Deklarativ:
In einer prozeduralen Sprache definieren Sie den gesamten Prozess und geben die entsprechenden Schritte an. Sie geben nur Bestellungen ein und definieren, wie der Prozess bedient wird.
In einer deklarativen Sprache legen Sie einfach den Befehl oder die Reihenfolge fest und lassen es im System sein, wie diese Reihenfolge ausgeführt werden soll. Sie brauchen nur Ihr Ergebnis, ohne zu überlegen, wie es gemacht werden soll.
Verfahrensprogrammierung :
Bei der prozeduralen Programmierung folgt das Programm beim Start einer Reihe von Anweisungen. Die Anweisungen können sich je nach Datei- oder Speicherinhalt ändern, variieren jedoch insgesamt nicht stark. Die Eingabe in das Programm erfolgt normalerweise nicht über Benutzereingaben in Echtzeit, sondern aus einem vorab gesammelten Datensatz.
Deklarative Programmierung:
Bei der deklarativen ereignisgesteuerten Programmierung wird ein Datenbestand mit optionalen Aktionen zentralisiert, die das Programm ausführen kann. Beispielsweise ist jedes "Ereignis" in einem Textverarbeitungsprogramm eine Maus- oder Tastatur- (oder Datei-) Änderung, die sich auf die Daten und Dokumente auswirkt. Sie müssen nicht in beliebiger Reihenfolge durchgeführt werden. Die ereignisgesteuerte Programmierung erfolgt in Form kleiner Programme (Ereignishandler), die alle mit einem gemeinsamen Datensatz arbeiten, sodass jedes kleine Programm dieselben Daten verwenden kann, das Dokument in diesem Beispiel.
Der Hauptunterschied zwischen zwei Programmiersprachen besteht darin, dass wir dem Computer bei der prozeduralen Programmierung mitteilen, wie das Problem zu lösen ist, und bei der deklarativen Programmierung dem Computer mitteilen, welches Problem gelöst werden soll.
Um den ansiblen Kommentar anzusprechen und vielleicht ein Beispiel zwischen den Unterschieden der beiden zu liefern. Ansible ist prozedural, wenn so etwas wie Marionette oder Terraform deklarativ sind. Beispielsweise erstellen Sie eine ansible yaml-Datei, um 10 ec2-Instanzen wie folgt bereitzustellen:
-ec2: count: 10 image: ami-058c6e5b73b074cd2 instance_type: t2.micro
Wenn Sie diese Datei zweimal ausführen würden, würden Sie 20 t2.micro ec2-Instanzen erhalten. Wenn Sie das Äquivalent in einer deklarativen Sprache wie terraform geschrieben und zweimal ausgeführt hätten, würden nur 10 t2.micro-Instanzen ausgeführt, unabhängig davon, wie oft Sie es ausgeführt haben. Deklarative Sprachen geben den Endzustand an. Prozedurale Sprachen tun einfach das, was Sie sagen, ohne Rücksicht auf den aktuellen oder vergangenen Zustand.
YAML ist also eine deklarative Programmiersprache? Weil wir definieren, was wir wollen, anstatt tatsächliche Logik zu schreiben.
Ich frage dies, denn wenn jemand Ansible kennt, das ein Konfigurationsmanagement-Tool ist, verwendet es YAML, fällt aber immer noch in die Kategorie der prozeduralen Sprache.
Im prozeduralen Ansatz codieren Sie Ihre Anweisung, um das Ergebnis zu erzielen. Im deklarativen Ansatz definieren Sie, was gelöst werden muss, als das Wissen, das Problem zu lösen. Schauen Sie sich das Beispiel eines prozeduralen oder deklarativen Ansatzes an, das ich in beiden Ansätzen implementiert habe.
Wie Sie im Beispiel sehen würden, müssen Sie im deklarativen Ansatz nicht anweisen, wie das Problem gelöst werden soll.