Programma (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m evasione
Etichetta: Rollback
Voci correlate: formattazione
 
(45 versioni intermedie di 28 utenti non mostrate)
Riga 1:
{{C|La voce presenta vari passaggi di dubbia correttezza, oltre che poco chiari. Inoltre in diversi punti la trattazione è palesemente basata su una visione semplicistica e stereotipica dell'argomento.|informatica|gennaio 2024}}
{{F|programmazione|maggio 2012}}
[[File:Algoritmo_para_Procesar_y_Organizar_en_GTD.png|thumb|upright=1.3|Esempio di [[diagramma di flusso]] di un [[algoritmo]] di un programma]]
[[File:Hello World Perl GTk2.png|miniatura|upright=1.4|[[Codice sorgente]] ed [[esecuzione (informatica)|esecuzione]] di un semplice programma dimostrativo (chiamato "[[Hello world]]") scritto in linguaggio [[Perl]]]]
 
In [[informatica]], un '''programma''' è una sequenza di istruzioni [[codifica]]te in un [[linguaggio di programmazione|linguaggio]] interpretabile da un [[elaboratore]], espressione di un [[algoritmo]] per la [[calcolo automatico|risoluzione automatica]] di una certa classe di problemi.<ref>{{Cita web|url=https://www.thefreedictionary.com/computer+program|titolo=computer program|sito=TheFreeDictionary.com|accesso=2022-04-06}}</ref>
Un '''programma''', in [[informatica]], è un [[software]] che può essere [[Esecuzione (informatica)|eseguito]] da un [[elaboratore]] che riceve in [[input]] determinati [[dati]] di un problema che ammette una soluzione [[algoritmo|algoritmica]] e restituisce in [[output]] gli eventuali risultati ottenuti a seguito dell'esecuzione delle istruzioni.
L'insieme dei programmi presenti su un elaboratore ne forma il ''[[software]]''.
 
== Descrizione ==
{{vedi anche|Algoritmo|Software}}
Un programma è un insieme di linee di [[codice sorgente|codice]] a loro volta costituite da un insieme di istruzioni. Il problema deve essere risolvibile attraverso un [[algoritmo]] affinché un [[programmatore]] possa [[codifica]]rlo in [[Istruzione (informatica)|istruzioni]] in un [[linguaggio di programmazione]]; in questa fase - detta [[Programmazione (informatica)|programmazione]] - viene realizzato il [[codice sorgente]] del programma che definisce il suo [[flusso di esecuzione]].
[[File:Hello World Perl GTk2.png|miniatura|upright=1.4thumb|[[Codice sorgente]] ed [[esecuzione (informatica)|esecuzione]] di un semplice programma dimostrativo (chiamato "[[Hello world]]") scritto in linguaggio [[Perl]]]]
 
Un programma è un insieme di linee di [[codice sorgente|codice]] a loro volta costituite da un insieme di istruzioni. Il problemaprocedimento deve essere risolvibileeseguibile attraverso un [[algoritmo]] affinché un [[programmatore]] possa [[codifica]]rlo in [[Istruzione (informatica)|istruzioni]] in un [[linguaggio di programmazione]]; in questa fase - detta [[Programmazione (informatica)|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 (informatica)|processo]], includendo quindi anche quei programmi che girano in [[Esecuzione in background|background]] come ad esempio in un [[sistema operativo]] in esecuzione come a es. le [[libreria software|librerie]]. Analogamente differisce dal termine "[[applicazione (informatica)|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 [[sistema embedded|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.{{Chiarire}} 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.
 
La programmazione del computer (conosciuta anche come [[sviluppo del software]] e [[ingegneria del software]]) è il processo di scrittura o modifica del [[codice sorgente]]. In un ambiente formale, un analista di sistema raccoglie informazioni dai manager su tutti i processi dell'organizzazione da automatizzare. Questo professionista prepara poi un piano dettagliato per il sistema nuovo o modificato. Il piano assomiglia alle planimetrie utilizzate in architettura. Un programmatore di computer è uno specialista responsabile di scrivere o modificare il codice sorgente per implementare il piano dettagliato.<ref>{{Cita libro|nome=George Walter|cognome=Reynolds|titolo=Principles of information systems : a managerial approach|url=https://www.worldcat.org/oclc/50919802|accesso=2022-04-06|edizione=6th ed|data=2003|editore=Thomson/Course Technology|OCLC=50919802|ISBN=0-619-06489-7}}</ref>
==Fasi della programmazione==
{{vedi anche|Programmazione (informatica)}}
===Scrittura===
{{Vedi anche|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.
 
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 (informatica)|processo]], includendo quindi anche quei programmi che girano in [[Esecuzione in background|background]] come ad esempio in un [[sistema operativo]] in esecuzione come aper es.esempio le [[libreria software|librerie]]. Analogamente, differisce dal termine "[[applicazione (informatica)|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 [[sistema embedded|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.{{Chiarire}} 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.
===Esecuzione===
{{Vedi anche|Esecuzione (informatica)}}
Un programma scritto in linguaggio [[assembly]] o in un [[linguaggio di programmazione ad alto livello]] ([[codice sorgente]]), può essere eseguito solo [[compilatore|compilando]] il codice sorgente in [[codice oggetto]] ovvero traducendolo in [[linguaggio macchina]] che darà vita poi al [[programma eseguibile]], oppure servendosi di un [[interprete (informatica)|interprete]].
 
=== Scrittura ===
* '''Da parte del [[sistema operativo]]''': Nella maggior parte dei computer moderni, basati sull'[[architettura di von Neumann]], l'esecuzione di un [[programma eseguibile|programma binario]] prevede che, sotto l'attività e il controllo del [[sistema operativo]], il programma stesso sia inizialmente caricato in [[memoria primaria]] (es. [[RAM]]), tipicamente a partire da una [[periferica]] di [[memoria di massa]] (o [[memoria secondaria]]), come ad esempio un [[disco rigido]]. Viene quindi identificato il "punto d'ingresso" (''entry point'') del programma (cioè la prima istruzione), e il rispettivo [[indirizzo di memoria]] viene copiato in un [[registro (informatica)|registro]] del [[processore]] detto ''[[program counter]]''. A questo punto viene avviato nel processore, da parte dell'[[unità di controllo (informatica)|Unità di Controllo]], un ''[[ciclo di fetch-execute]]'' che ripetutamente preleva l'istruzione "puntata" dal ''program counter'', incrementa il ''program counter'' in modo da farlo puntare all'istruzione successiva, ed esegue l'istruzione caricata sequenzialmente nell'ordine. Si può osservare che il ciclo ''fetch-execute'', per [[Default (informatica)|default]], comporta dunque l'esecuzione [[sequenza (informatica)|sequenziale]] delle istruzioni del programma. L'istruzione corrente, tuttavia, può modificare il ''program counter'': questa operazione corrisponde ad un'istruzione di salto ''[[struttura di controllo#Goto|goto]]'' o ad una di salto condizionato che è il meccanismo fondamentale su cui si basa l'[[implementare|implementazione]] delle [[struttura di controllo|strutture di controllo]] più evolute da parte di [[compilatore|compilatori]] e interpreti. Un programma in esecuzione è visto dal sistema operativo come un [[processo (informatica)|processo]] o insieme di processi, gestiti attraverso [[chiamata di sistema|chiamate di sistema]], e più programmi/processi possono essere eseguiti contemporaneamente attraverso l'eventuale [[multitasking]] offerto dal sistema operativo stesso e gestito dallo [[scheduler]].
{{vedi anche|Programmazione (informatica)|Codice sorgente}}
[[File:05arearettangolocodice.png|thumb|[[Codice sorgente]] scritto in [[C++]]]]
 
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 ===
{{vedi anche|Compilazione|Interprete (informatica)|Linker|Piattaforma (informatica)}}
[[File:Html-source-code.png|thumb|Codice sorgente in [[HTML]] e [[JavaScript]]]]
 
L'esecuzione del codice, una volta [[Preprocessing|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 (informatica)|divide et impera]].
 
=== Esecuzione ===
{{Vedivedi anche|Esecuzione (informatica)}}
[[File:Operating_system_placement-it.svg|thumb|Livello di esecuzione dall'utente all'hardware]]
[[File:CPU_block_diagram.svg|thumb|[[Ciclo del processore]] (fetch-execute)]]
 
Un programma scritto in linguaggio [[assembly]] o in un [[linguaggio di programmazione ad alto livello]] ([[codice sorgente]]), può essere eseguito solo [[compilatore|compilando]] il codice sorgente in [[codice oggetto]] ovvero traducendolo in [[linguaggio macchina]] che darà vita poi al [[programma eseguibile]], oppure servendosi di un [[interprete (informatica)|interprete]].
* '''Da parte del [[sistema operativo]]''': Nella maggior parte dei computer moderni, basati sull'[[architettura di von Neumann]], l'esecuzione di un [[programma eseguibile|programma binario]] prevede che, sotto l'attività e il controllo del [[sistema operativo]], il programma stesso sia inizialmente caricato in [[memoria primaria]] (es. [[RAM]]), tipicamente a partire da una [[periferica]] di [[memoria di massa]] (o [[memoria secondaria]]), come ad esempio un [[disco rigido]]. Viene quindi identificato il "punto d'ingresso" (''entry point'') del programma (cioè la prima istruzione), e il rispettivo [[indirizzo di memoria]] viene copiato in un [[registro (informatica)|registro]] del [[processore]] detto ''[[program counter]]''. A questo punto viene avviato nel processore, da parte dell'[[unità di controllo (informatica)|Unità di Controllo]], un ''[[ciclo di fetch-execute]]'' che ripetutamente preleva l'istruzione "puntata" dal ''program counter'', incrementa il ''program counter'' in modo da farlo puntare all'istruzione successiva, ed esegue l'istruzione caricata sequenzialmente nell'ordine. Si può osservare che il ciclo ''fetch-execute'', per [[Default (informatica)|default]], comporta dunque l'esecuzione [[sequenza (informatica)|sequenziale]] delle istruzioni del programma. L'istruzione corrente, tuttavia, può modificare il ''program counter'': questa operazione corrisponde ad un'istruzione di salto ''[[struttura di controllo#Goto|goto]]'' o ad una di salto condizionato che è il meccanismo fondamentale su cui si basa l'[[implementare|implementazione]] delle [[struttura di controllo|strutture di controllo]] più evolute da parte di [[compilatore|compilatori]] e interpreti. Un programma in esecuzione è visto dal sistema operativo come un [[processo (informatica)|processo]] o insieme di processi, gestiti attraverso [[chiamata di sistema|chiamate di sistema]], e più programmi/processi possono essere eseguiti contemporaneamente attraverso l'eventuale [[multitasking]] offerto dal sistema operativo stesso e gestito dallo [[scheduler]].
* '''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 [[circuito elettronico|circuiti elettronici]] di base ([[circuito integrato|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 (informatica)|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 [[programma eseguibile|programmi eseguibili]] richiedono di norma la presenza di un determinato [[sistema operativo]], di determinate [[libreria software|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ù [[linguaggio di programmazione ad alto livello|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 correlateNote ==
<references/>
 
== Voci correlate ==
* [[Application programming interface]]
* [[ABEND]]
* [[Crash (informatica)]]
Line 34 ⟶ 52:
* [[Salvataggio (informatica)]]
 
== Altri progetti ==
{{Interprogetto|preposizione=sul|wikt=programma}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{FOLDOC|software|software}}
* {{Garzanti}}
* {{cita web|http://www.webopedia.com/TERM/P/program.html|Definizione di "programma" su Webopedia}}
* {{cita web | 1 = http://www.Agtivity.com/computer_program.htm | 2 = Definizione di "programma" su Agtivity | accesso = 1º maggio 2019 | urlarchivio = https://web.archive.org/web/20130614131214/http://www.agtivity.com/computer_program.htm | dataarchivio = 14 giugno 2013 | urlmorto = sì }}
* {{cita web|url=http://wombat.doc.ic.ac.uk/foldoc/foldoc.cgi?query=software|titolo=Definizione di "programma" su FOLDOC|urlmorto=sì|urlarchivio=https://web.archive.org/web/20050907153523/http://wombat.doc.ic.ac.uk/foldoc/foldoc.cgi?query=software|dataarchivio=7 settembre 2005}}
 
{{Componenti di Windows}}
{{Controllo di autorità}}
{{Portale|informatica}}