Programmazione imperativa: il paradigma di programmazione più antico

Che si tratti di sviluppo di app, programmazione di macchine o sviluppo di software aziendali, prima di scrivere la prima riga di codice lo sviluppatore deve decidere quale linguaggio di programmazione utilizzare. Esiste una vasta scelta di possibili linguaggi di programmazione. Tuttavia, ognuno di essi può essere assegnato a due paradigmi di programmazione fondamentalmente diversi: la programmazione imperativa e la programmazione dichiarativa. Entrambi gli approcci presentano vantaggi e svantaggi.

Quali sono le caratteristiche dei linguaggi di programmazione imperativa? Di quali punti deboli devono tenere conto gli sviluppatori? In questo articolo rispondiamo alle domande più importanti sul paradigma imperativo.

Che cos'è la programmazione imperativa?

La programmazione imperativa (dal latino imperare = comandare) è il più antico paradigma di programmazione. Secondo questo paradigma, un programma consiste in una sequenza chiaramente definita di istruzioni date a un computer.

Il codice sorgente dei linguaggi imperativi mette insieme i comandi che determinano cosa deve essere fatto dal computer, e quando, per raggiungere il risultato desiderato. I valori utilizzati nelle variabili vengono modificati durante il runtime del programma. Per controllare i comandi, vengono integrate nel codice strutture di controllo come loop o rami.

I linguaggi di programmazione imperativi sono molto concreti e lavorano vicino al sistema. Da un lato, quindi, il codice è di facile comprensione, dall'altro sono necessarie molte righe di codice sorgente per descrivere quello che, nei linguaggi di programmazione dichiarativi, si può ottenere con una frazione di questi comandi.

I linguaggi di programmazione imperativi più conosciuti:

  • Fortran
  • Java
  • Pascal
  • ALGOL
  • C
  • C#
  • C++
  • Assembler
  • BASIC
  • COBOL
  • Python
  • Ruby

I vari linguaggi di programmazione imperativi possono a loro volta essere assegnati a tre ulteriori stili di programmazione subordinati: lo stile di programmazione strutturato, procedurale e modulare.

Lo stile di programmazione strutturato estende il principio di base imperativo mediante strutture di controllo specifiche, sequenze, selezione (selezione) e iterazione (ripetizione). Alla base c'è il contenimento o la completa eliminazione delle istruzioni di salto, che complicano inutilmente il codice progettato in modo imperativo.

L'approccio procedurale divide l'attività che deve essere svolta da un programma in attività secondarie più piccole, che sono descritte singolarmente nel codice. Si creano così moduli di programmazione che possono essere utilizzati anche in altri programmi. Il modello di programmazione modulare fa un ulteriore passo avanti: qui i singoli componenti del programma sono progettati, sviluppati e testati in modo completamente indipendente l'uno dall'altro. Infine, i singoli moduli combinati formano il software effettivo.

Programmazione imperativa vs dichiarativa

I linguaggi di programmazione imperativi differiscono dai linguaggi dichiarativi per un aspetto fondamentale. Riassumendo in una frase: la programmazione imperativa si concentra sul COME, la programmazione dichiarativa sul COSA.

Cosa vuol dire questo? I linguaggi di programmazione imperativi sono scritti come una guida passo passo (come) per il computer. Descrivono esplicitamente quali passaggi devono essere eseguiti e in quale ordine per raggiungere la soluzione desiderata. Nella programmazione dichiarativa, invece, viene descritto direttamente il risultato finale desiderato (cosa). Facendo un parallelo esplicativo con la cucina, i linguaggi imperativi danno ricette, i linguaggi dichiarativi danno foto del piatto finito.

Nei linguaggi dichiarativi, il codice sorgente rimane molto astratto riguardo alla procedura concreta. Per arrivare alla soluzione, viene utilizzato un algoritmo che trova e utilizza automaticamente i metodi adeguati. Questo approccio presenta molti vantaggi: non solo i programmi possono essere scritti molto più velocemente, ma le applicazioni sono anche molto facili da ottimizzare. Infatti, se in futuro viene sviluppato un nuovo metodo, l'algoritmo può semplicemente accedere al metodo più recente grazie alle istruzioni astratte contenute nel codice sorgente.

Programmazione imperativa: un esempio

I linguaggi di programmazione imperativa sono caratterizzati dal loro carattere istruttivo e pertanto di solito richiedono molte più righe di codice per esprimere ciò che può essere descritto con poche istruzioni nello stile dichiarativo. Nel seguente esempio, si vuole generare un elenco di nomi:

Programmazione imperativa (PHP)

$listaPartecipanti = [1 => 'Pietro', 2 => 'Anna', 3 => 'Sara'];
$nomi = [];
foreach ($listaPartecipanti as $id => $name) {
    $nomi[] = $name;
}

Programmazione dichiarativa (PHP)

$nomi = array_values($listaPartecipanti);

Vantaggi e svantaggi del linguaggio di programmazione imperativa

Oggi si utilizzano molti linguaggi di programmazione basati sul paradigma della programmazione imperativa.

Da un lato, ciò è dovuto al fatto che questo approccio è la forma originaria di programmazione. D'altra parte, nonostante i modelli alternativi, il paradigma imperativo presenta ancora vantaggi pratici.

I linguaggi sono relativamente facili da imparare perché il codice viene letto come una guida passo passo. Nella loro formazione, quindi, i programmatori di solito imparano prima un linguaggio imperativo.

La facile leggibilità è un fattore decisivo nella quotidianità aziendale: dopo tutto, la manutenzione e l'ottimizzazione delle applicazioni non dovrebbero dipendere dalla persona, ma devono poter essere svolte facilmente da diversi dipendenti, anche se non hanno scritto il codice da zero.

Svantaggio della programmazione procedurale: se si devono risolvere problemi più complessi, il codice cresce molto rapidamente. Sebbene rimanga molto leggibile, le sue dimensioni lo rendono confuso.

Poiché l'esecuzione non è chiaramente separata dalla programmazione come nello stile dichiarativo, quando si interviene successivamente è facile incappare in effetti secondari o errori indesiderati. Anche le estensioni sono più difficili da implementare nel codice puramente imperativo, a differenza del paradigma dichiarativo, in cui vengono aggiunte separatamente usando dei metodi.

Vantaggi Svantaggi
Facile leggibilità Il codice diventa rapidamente molto esteso e quindi confuso
Relativamente facile da imparare Il rischio di errori durante l'elaborazione è maggiore
Modello di pensiero di facile comprensione per i principianti (strada verso la soluzione) La manutenzione blocca lo sviluppo dell'applicazione poiché la programmazione avviene in prossimità del sistema
Possono essere prese in considerazione le caratteristiche di applicazioni speciali L'ottimizzazione e l'espansione sono più difficili

Nella pratica, oggi vengono generalmente utilizzate forme miste di paradigmi, in quanto sia gli stili di programmazione imperativa che dichiarativa comportano vantaggi e svantaggi. Tuttavia, prevale sempre più lo stile di programmazione dichiarativo, integrato da metodi imperativi.

Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.