# 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, comandi), ciascuna delle quali può essere pensato 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 linguaggio 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 di programmazione.

## Caratteristiche della programmazione imperativa

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 e' 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, nati più per la manipolazione numerica che per quella simbolica, 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 di dichiarazione 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 volte, le istruzioni si dividono in:
* istruzioni di lettura e scrittura (es. scrittura a video, scrittura su disco, lettura da tastiera ecc)
* istruzioni di assegnamento (astrazione di cella di memoria)
* istruzioni di controllo (es. if, while, for, foreach, try, catch ecc.)
I programmi sono poi realizzati sia attraverso interpretazione (BASIC,...) sia mediante compilazione (C, Pascal, FORTRAN, ...)