# Programmazione imperativa

In informatica, la programmazione imperativa è un paradigma di programmazione secondo cui un programma viene inteso come un insieme di istruzioni (dette anche direttive o comandi), ciascuna delle quali può essere pensata come un "ordine" che viene impartito alla macchina virtuale del linguaggio di programmazione utilizzato. Da un punto di vista sintattico, i costrutti di un linguaggio imperativo sono spesso identificati da verbi all'imperativo, per esempio:
(letteralmente: leggi i, stampa i, torna al punto 1).
L'approccio imperativo è l'approccio dominante in programmazione. Nello studio dei linguaggi di programmazione, si definisce il concetto di paradigma di programmazione, ovvero un insieme di regole e strutture che definiscono un tipo di linguaggio basandosi esclusivamente sulle sue strutture, e quindi non sulle sue caratteristiche peculiari legate all'implementazione dello stesso (es. le parole chiave). Sono di tipo imperativo la grande maggioranza dei (sotto-)paradigmi di programmazione (per esempio la programmazione procedurale, la programmazione strutturata, la programmazione orientata agli oggetti e così via) e la grande maggioranza dei linguaggi (per esempio ALGOL, Ada, BASIC, Fortran, Pascal, PHP eccetera).

## Descrizione

La programmazione imperativa viene generalmente contrapposta a quella dichiarativa, in cui un programma consiste in un insieme di "affermazioni" (non "ordini") che la macchina virtuale del linguaggio è (implicitamente) tenuta a considerare vere e/o rendere vere. Un esempio di paradigma dichiarativo è la programmazione logica.
Le caratteristiche essenziali della programmazione imperativa sono strettamente legate all'architettura di von Neumann. Brevemente, possiamo definirla come una architettura costituita da due componenti fondamentali:
* memoria (componente passiva)
* processore (componente attiva)
La principale attività del processore è eseguire calcoli e assegnare valori (svolge quindi un ruolo attivo) a celle di memoria (che è quindi passiva). Si denoti a questo proposito anche il concetto di variabile come astrazione logica di una cella di memoria.

### Linguaggi per la programmazione imperativa

I linguaggi sviluppati per la programmazione imperativa sono nati più per la manipolazione numerica che per quella simbolica, e adottano uno stile prescrittivo, ovvero uno stile in cui tutte le operazioni da compiere sono già state previste all'interno del programma stesso. L'ordine di esecuzione è formalmente top-down, e quindi l'azione si svolge in maniera del tutto sequenziale (con l'eccezione delle strutture di controllo che possono frammentare l'azione).
Un programma, che secondo il paradigma imperativo è una unione di istruzioni e dati, è strutturato in:
* una parte dichiarativa in cui si dichiarano tutte le variabili del programma e il loro tipo;
* una parte che descrive l'algoritmo risolutivo utilizzato, mediante istruzioni del linguaggio.
A loro volta, le istruzioni si dividono in:
* istruzioni di lettura e scrittura (scrittura a video, scrittura su disco, lettura da tastiera, ...);
* istruzioni di assegnamento (astrazione di cella di memoria);
* istruzioni di controllo (if, while, for, foreach, try, catch, ...).
I programmi sono poi realizzati sia attraverso interpretazione (BASIC,...) sia mediante compilazione (C, Pascal, FORTRAN, ...).