Paradigmi di programmazione: quali sono i principi di programmazione esistenti?
I paradigmi di programmazione sono i principi di base dello sviluppo di software. Vanno pensati come stili di programmazione fondamentalmente diversi che si traducono in codici software strutturati in modo diverso.
Il concetto classico è la programmazione imperativa, in cui il codice sorgente definisce chiaramente quali passi deve compiere un programma, e in quale ordine. I suoi sottotipi sono la programmazione procedurale e la programmazione orientata agli oggetti. Secondo il principio della programmazione dichiarativa, invece, viene descritto solo ciò che deve essere fatto da un software (cioè solo il risultato e non i singoli passaggi). I suoi sottotipi sono la programmazione funzionale e la programmazione logica. Cosa distingue questi paradigmi di software l'uno dall'altro?
Programmazione imperativa: il paradigma di programmazione classico
Tra i paradigmi per la programmazione di software, la programmazione imperativa è un "classico". I primi linguaggi di programmazione e, di conseguenza, i primi programmi per computer, erano basati interamente su questo approccio classico, che prevede una sequenza regolata di comandi specifici (dal lat. imperare, "comandare") o di istruzioni operative. Tra le altre cose, questo paradigma di programmazione è alla base di pietre miliari come Pascal e C, nonché di tutti i linguaggi assemblativi. Nella programmazione imperativa, l'attenzione si concentra, tra le altre cose, sul lavoro svolto il più vicino possibile al sistema. Il codice del programma risultante è quindi facile da capire, ma anche molto vasto.
Con la programmazione strutturata, procedurale e modulare, al paradigma di programmazione imperativa si associano altri tre importanti approcci di scrittura o strutturazione del codice software.
Maggiori informazioni sul paradigma della programmazione imperativa sono fornite nel nostro articolo di approfondimento sul tema.
Programmazione strutturata
L'approccio di programmazione strutturata è una forma semplificata di programmazione imperativa. La differenza fondamentale rispetto al principio di base è che invece di istruzioni di salto assolute (istruzioni che portano a non continuare l'elaborazione con il comando seguente, ma altrove), questo paradigma di programmazione di software prevede l'uso di cicli o strutture di controllo. Un esempio è l'uso di "do…while" per eseguire automaticamente un'istruzione fintanto che una certa condizione è vera (almeno una volta).
Programmazione procedurale
Il paradigma di programmazione procedurale estende l'approccio imperativo con la possibilità di scomporre gli algoritmi in parti gestibili. Esse sono dette procedure o - a seconda del linguaggio di programmazione - sottoprogrammi, routine o funzioni. Lo scopo di questa suddivisione è rendere più chiaro il codice del programma ed evitare inutili ripetizioni del codice. In virtù dell'astrazione degli algoritmi, il paradigma di software procedurale rappresenta un passaggio decisivo da semplici linguaggi assemblativi a linguaggi di alto livello più complessi.
Programmazione modulare
Anche la programmazione modulare è classificata come sottocategoria del paradigma di programmazione imperativa. È sostanzialmente molto simile all'approccio procedurale e trasferisce questo stile di programmazione ai requisiti e alle esigenze di progetti di software più vasti e di grandi dimensioni. A tale scopo, il codice sorgente è suddiviso in sottoblocchi logici, reciprocamente indipendenti, al fine di fornire maggiore chiarezza e semplificare il processo di debug (risoluzione degli errori). I singoli blocchi secondari, chiamati moduli, possono essere testati singolarmente prima di essere successivamente collegati a un'applicazione complessiva.
Programmazione dichiarativa: paradigmi di software recenti
Parallelamente al continuo sviluppo di hardware e software, l'approccio dichiarativo ha sviluppato un paradigma alternativo per la programmazione del codice. Il principio di base della programmazione dichiarativa è la descrizione del risultato finale desiderato. Quindi in primo piano c'è il "cosa" del risultato e non il "come" delle fasi della soluzione, come nel caso della programmazione imperativa. Ciò significa che il codice derivante dalla programmazione dichiarativa è più difficile da capire a causa dell'elevato livello di astrazione, ma è molto breve e preciso.
Tra le sottocategorie del paradigma di programmazione dichiarativa vi sono maggiori differenze rispetto a quanto avviene nello stile imperativo. Inoltre, l'esatta definizione o distinzione tra l'una e l'altra non è sempre chiara. I due approcci più importanti del paradigma di programmazione dichiarativa sono la programmazione funzionale e quella logica.
Maggiori informazioni sul paradigma della programmazione dichiarativa sono fornite nell'articolo di approfondimento sul tema.
Programmazione funzionale
Le funzioni sono presenti in ogni linguaggio di programmazione superiore. Tuttavia, l'approccio funzionale nello sviluppo di software considera le funzioni in modo particolare:
un programma risultante dalla programmazione funzionale consiste nell'esecuzione di funzioni successive, per cui ogni parte del programma può essere compresa come una funzione. Le funzioni possono assumere "forme" diverse all'interno della programmazione funzionale. Ad esempio, possono essere collegate tra loro come dati o possono essere utilizzate sotto forma di parametri. Inoltre, possono essere riutilizzate come risultati funzionali. D'altra parte, questo paradigma implica che non vi sono assegnazioni indipendenti di valori.
Questa sottocategoria della programmazione dichiarativa è molto importante per l'informatica in generale, e allo stesso tempo può essere utilizzata in molti modi diversi. La gestione particolare delle funzioni consente ai programmatori che lavorano in modo funzionale di ricavare dalle funzioni e applicare nuove regole di calcolo di vasta portata.
Maggiori informazioni sul metodo della programmazione funzionale sono fornite nell'articolo di approfondimento sul tema.
Programmazione logica
Il paradigma di software logico, noto anche come programmazione predittiva, si basa sulla logica matematica. Invece di una serie di istruzioni, il software programmato secondo questo principio contiene una serie di principi che possono essere visti come una raccolta di fatti e ipotesi. Tutte le richieste al programma vengono elaborate dall'interprete basandosi su questi principi e applicando regole precedentemente definite al fine di ottenere il risultato desiderato.
Maggiori informazioni sul metodo della programmazione logica sono fornite nell'articolo di approfondimento sul tema.
Paradigmi di programmazione a confronto: programmazione dichiarativa e imperativa
Paradigma di programmazione imperativa | Paradigma di programmazione dichiarativa |
---|---|
Come? | Cosa? |
Classico | Nuova corrente |
Un programma basato su questo paradigma consiste in istruzioni successive che dicono al computer cosa fare e in quale ordine. | Un programma secondo questo paradigma consiste in istruzioni su come il programma deve comportarsi con un input. I calcoli vengono eseguiti manipolando i valori, la procedura è controllata dal processo di ricorsione. |
Il nome deriva da "imperare", parola latina che significa "comandare" | Il nome deriva da "declarare", parola latina per "dichiarare". |
È specificata la strada risolutiva desiderata | È specificato il risultato desiderato. |
Linguaggi di programmazione tipici sono C, Pascal, Fortran, ALGOL e tutti i cosiddetti linguaggi assemblativi | Linguaggi di programmazione tipici sono Lisp, ML, Haskell, F #, Prolog e Oz |