Qual è la differenza tra i paradigmi di programmazione dichiarativa e procedurale ? Potresti fornire alcuni esempi?
Quali altri paradigmi di programmazione esistono?
Risposte:
Esistono diversi sotto-paradigmi del paradigma di programmazione imperativa, come il paradigma di programmazione procedurale o orientato agli oggetti.
Nel paradigma della programmazione imperativa, descrivi l'algoritmo passo dopo passo, a vari gradi di astrazione.
Esempi di linguaggi di programmazione che supportano il paradigma procedurale:
Si riferisce in genere a linguaggi che presentano una gerarchia di tipi che ereditano sia i metodi che lo stato dai tipi di base ai tipi derivati, ma include anche l'insolito JavaScript basato su prototipi.
Esempi di linguaggi di programmazione che supportano il paradigma OO:
Esistono diversi sotto-paradigmi del paradigma di programmazione dichiarativa, come il paradigma di programmazione funzionale o logica.
Nel paradigma di programmazione dichiarativa, descrivi un risultato o un obiettivo e lo ottieni tramite una " scatola nera ". L'opposto dell'imperativo.
Esempi di linguaggi di programmazione che supportano il paradigma di programmazione dichiarativo:
La programmazione funzionale enfatizza l'applicazione di funzioni senza effetti collaterali e senza stato mutabile. I sistemi dichiarativi di cui sopra mostrano alcuni aspetti della programmazione funzionale.
Esempi di linguaggi di programmazione che supportano il paradigma funzionale dichiarativo:
La programmazione dichiarativa è dove dici quello che vuoi senza dover dire come farlo. Con la programmazione procedurale, è necessario specificare i passaggi esatti per ottenere il risultato.
Ad esempio, SQL è più dichiarativo che procedurale, poiché le query non specificano i passaggi per produrre il risultato.
Lascia che ti faccia un esempio del mondo reale: ho bisogno di una tazza di tè.
Procedurale:
Dichiarativo:
In un linguaggio procedurale, definisci l'intero processo e fornisci i passaggi su come farlo. Devi solo fornire ordini e definire come verrà servito il processo.
In un linguaggio dichiarativo, è sufficiente impostare il comando o l'ordine e lasciare che sia sul sistema come completare l'ordine. Hai solo bisogno del tuo risultato senza scavare in come dovrebbe essere fatto.
Programmazione procedurale:
Nella programmazione procedurale, all'avvio del programma, segue una serie di istruzioni. Le istruzioni possono cambiare in base ad alcuni file o contenuti di memoria, ma nel complesso non variano molto. l'input al programma in genere non proviene dall'input dell'utente in tempo reale, ma piuttosto da un insieme di dati pre-raccolti.
Programmazione dichiarativa:
Nella programmazione dichiarativa basata su eventi si centralizza attorno a un corpo di dati con azioni opzionali che il programma può intraprendere su di esso. Ad esempio, ogni "evento" in un word processor è qualsiasi modifica del mouse o della tastiera (o file) che influisce sui dati, sui documenti. Non è necessario eseguirli in alcun ordine. La programmazione guidata dagli eventi assume la forma di piccoli programmi (gestori di eventi) che lavorano tutti su un insieme comune di dati, in modo che ogni piccolo programma possa utilizzare gli stessi dati, il documento in questo esempio.
La principale differenza tra due linguaggi di programmazione sono: Nella programmazione procedurale, diciamo al computer come risolvere il problema e nella programmazione dichiarativa, diciamo al computer quale problema vogliamo risolvere.
Per affrontare il commento ansible e forse fornire un esempio tra le differenze dei due. Ansible è procedurale dove qualcosa come un burattino o una terraforma sono dichiarativi. Ad esempio, crei un file yaml ansible per distribuire 10 istanze ec2 come questa:
-ec2: count: 10 image: ami-058c6e5b73b074cd2 instance_type: t2.micro
Se dovessi eseguire quel file due volte, ti ritroveresti con 20 istanze di t2.micro ec2. Se hai scritto l'equivalente in un linguaggio dichiarativo come terraform e lo hai eseguito due volte, avresti solo 10 istanze t2.micro in esecuzione, indipendentemente da quante volte l'hai eseguito. I linguaggi dichiarativi specificano lo stato finale. I linguaggi procedurali fanno solo quello che gli dici senza riguardo allo stato attuale o passato.
Quindi YAML è un linguaggio di programmazione dichiarativo? Perché definiamo ciò che vogliamo invece di scrivere la logica effettiva.
Lo chiedo perché se qualcuno conosce Ansible che è uno strumento di gestione della configurazione, utilizza YAML ma rientra comunque nella categoria del linguaggio procedurale.
Nell'approccio procedurale codifichi le tue istruzioni per ottenere il risultato. Nell'approccio dichiarativo definisci ciò che deve essere risolto come la conoscenza di risolvere il problema. Dai un'occhiata all'esempio di approccio procedurale o dichiarativo che ho implementato in entrambi gli approcci.
Come vedresti nell'esempio, nell'approccio dichiarativo, non è necessario istruire COME risolvere il problema.