title: Programmazione imperativa
text: # 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, ...).
  
  