Programma (informatica)

Da Wikipedia, l'enciclopedia libera.
Jump to navigation Jump to search
Esempio di diagramma di flusso di un algoritmo di un programma

Un programma, in informatica, è un procedimento algoritmico applicato ad un problema dato da automatizzare, tipicamente codificato in una serie di linee di codice scritte in un certo linguaggio di programmazione da un programmatore in fase di programmazione a formare un software, che può essere eseguito da un elaboratore, ricevendo in input determinati dati e restituendo in output gli eventuali risultati ottenuti a seguito dell'esecuzione/elaborazione delle sue istruzioni.

Descrizione[modifica | modifica wikitesto]

Magnifying glass icon mgx2.svgLo stesso argomento in dettaglio: Algoritmo e Software.
Codice sorgente ed esecuzione di un semplice programma dimostrativo (chiamato "Hello world") scritto in linguaggio Perl

Un programma è un insieme di linee di codice a loro volta costituite da un insieme di istruzioni. Il problema deve essere risolvibile attraverso un algoritmo affinché un programmatore possa codificarlo in istruzioni in un linguaggio di programmazione; in questa fase - detta programmazione - viene realizzato il codice sorgente del programma che definisce il suo flusso di esecuzione.

Il termine indica una sequenza logicamente ordinata di comandi, istruzioni e operazioni e differisce dal termine - più generico - di software in quanto un programma è un software che può essere caricato nella memoria RAM per essere eseguito sotto forma di processo, includendo quindi anche quei programmi che girano in background come ad esempio in un sistema operativo in esecuzione come a es. le librerie. Analogamente differisce dal termine "applicazione" il quale viene usato normalmente nella prospettiva dell'utente finale per intendere un servizio di cui questi può usufruire, a prescindere dal fatto che questo sia realizzato da un solo programma o da un insieme di programmi - e infatti i programmi operanti su sistemi embedded non sono dunque applicazioni per l'utente ma consentono comunque la funzionalità del dispositivo. In questo caso l'applicazione si compone di un'interfaccia utente e di un nucleo elaborativo.[non chiaro] L'espressione "sistema software" è usata poi, di norma, per indicare esplicitamente una collezione di componenti software come programmi, librerie, file e altro, interagenti fra loro.

Magnifying glass icon mgx2.svgLo stesso argomento in dettaglio: Programmazione (informatica).

Scrittura[modifica | modifica wikitesto]

Codice sorgente scritto in C++
Magnifying glass icon mgx2.svgLo stesso argomento in dettaglio: Codice sorgente.

Un programma per essere scritto deve rispettare la sintassi e la semantica del particolare linguaggio di programmazione scelto. Errori di scrittura vengono poi rilevati e segnalati in fase di compilazione o interpretazione. Il presupposto base per la corretta scrittura e funzionalità del programma, secondo le specifiche desiderate, è anche la corretta elaborazione a monte dell'algoritmo di risoluzione del problema da automatizzare.

Compilazione/interpretazione e linking[modifica | modifica wikitesto]

Magnifying glass icon mgx2.svgLo stesso argomento in dettaglio: Compilazione, Interprete (informatica), Linker e Piattaforma (informatica).
Codice sorgente in HTML e JavaScript

L'esecuzione del codice, una volta precompilato, compilato e/o interpretato, avviene sequenzialmente nel rispetto di selezioni/controlli e iterazioni; spesso inoltre il codice risulta altamente concatenato ovvero il risultato di una certa istruzione (ad es. il valore di una certa variabile) è sfruttato come input o è propedeutico a istruzioni successive secondo la logica del divide et impera.

Esecuzione[modifica | modifica wikitesto]

Magnifying glass icon mgx2.svgLo stesso argomento in dettaglio: Esecuzione (informatica).
Livello di esecuzione dall'utente all'hardware

Un programma scritto in linguaggio assembly o in un linguaggio di programmazione ad alto livello (codice sorgente), può essere eseguito solo compilando il codice sorgente in codice oggetto ovvero traducendolo in linguaggio macchina che darà vita poi al programma eseguibile, oppure servendosi di un interprete.

Ciclo del processore (fetch-execute)
  • Da parte dell'hardware: Un programma scritto direttamente o convertito in linguaggio macchina può essere eseguito direttamente da un computer (inteso come hardware). L'esecuzione di codice da parte di una macchina hardware nel ciclo di fetch-execute è possibile in virtù della capacità del processore di eseguire una serie di istruzioni base (instruction set), sulla quale il programma è mappato/tradotto a livello di linguaggio macchina, grazie ai circuiti elettronici di base (circuiti integrati) che compongono il processore stesso. Dal punto di vista utente, nei calcolatori moderni questo normalmente avviene grazie all'esercizio, gestione o controllo delle risorse hardware (processore, memoria, ecc...) operata dal sistema operativo che funge da piattaforma software del sistema. L'unica eccezione si verifica al momento dell'accensione del computer, quando viene fatto il boot e viene eseguito il firmware che si occupa di testare l'elettronica e di caricare il sistema operativo. Una volta che il processo di boot ha passato il controllo al sistema operativo, nessun programma può essere eseguito direttamente dall'hardware. Col tempo è divenuto raro che un programma sia adatto all'esecuzione diretta da parte di un computer inteso come solo hardware; di norma, esso richiede una macchina virtuale che comprende l'hardware del computer con l'aggiunta di uno o più livelli di software che contribuiscono a creare l'ambiente di esecuzione adatto per il programma stesso. Gli stessi programmi eseguibili richiedono di norma la presenza di un determinato sistema operativo, di determinate librerie, e così via. Benché le linee generali del funzionamento di una macchina virtuale siano talvolta piuttosto simili a quelle descritte sopra per la macchina di von Neumann, in molti casi esse se ne discostano in maniera sostanziale, introducendo numerosi concetti non presenti in tale architettura (per esempio, lo stack dei record di attivazione). Si può dire che un linguaggio di programmazione è tanto più ad alto livello quanto più la corrispondente macchina virtuale esibisce caratteristiche concettualmente distanti dai meccanismi fondamentali dell'architettura di von Neumann (o, in generale, dell'architettura hardware sottostante).

Voci correlate[modifica | modifica wikitesto]

Altri progetti[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

Controllo di autoritàLCCN (ENsh85029524 · GND (DE4047394-6 · BNE (ESXX526558 (data)
Informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica