Sei sulla pagina 1di 6

Introduzione all’ambiente di studio (parte 2):

per capire cosa stiamo facendo e per ritagliarci un angolino nel mondo delle scienze

Come risolvere un problema utilizzando un computer (calcolatore automatico), creiamo i programmi

Viste le definizioni di problema, soluzione e algoritmo vediamo ora come possiamo mettere in condizioni il nostro computer
di aiutarci a risolvere i nostri problemi

La programmazione:

• E` l'attività con cui si predispone l'elaboratore ad eseguire un particolare insieme di azioni su particolari informazioni
(dati), allo scopo di risolvere un certo problema.

Dopo aver costruito l’algoritmo per la soluzione di un determinato problema, si passa alla realizzazione del programma
eseguibile al computer (implementazione).
L’ implementazione che comprende le fasi che vanno dalla codifica (scrittura del codice, riscrittura) dell’algoritmo in un
linguaggio di programmazione (linguaggio per scrivere istruzioni che verranno tradotte -compilate o interpretate- nel
linguaggio macchina eseguibile dal nostro “esecutore” che è il computer) (il risultato di questa fase si chiama genericamente
codice sorgente o listato del programma o semplicemente programma) al completamento del programma, perfettamente
funzionante.
In pratica l’implementazione è la concretizzazione nel programma di una descrizione astratta, l’algoritmo.
È importante che il programma sia corredato da due tipi di documentazione
quella necessaria al suo utilizzo, indirizzata agli utenti utilizzatori del programma applicativo he si sta scrivendo
(documentazione esterna tipicamente la troviamo nei manuali del nostro applicativo) e
quella necessaria a comprendere come il programma è stato realizzato (la sua logica di calcolo) per poter effettuare
successive revisioni manutenzioni nuovi sviluppi (documentazione interna, indirizzata agli sviluppatori di software,
programmatori, chi scrive il codice del programma) questa documentazione in genere viene scritta in forma di commenti al
codice direttamente all’interno del listato del programma, in genere facendola precedere da e o inserendola tra alcuni
caratteri speciali che avvisano il compilatore o l’interprete che ciò che stiamo scrivendo non istruzioni che vanno eseguiti, in
VBA i commenti vengono fatti precedere dal carattere speciale apicetto ‘).
Durante le varie fasi bisogna provvedere al controllo della correttezza (verifica) per assicurarsi che il programma funzioni
correttamente.
Già durante la stesura dell’algoritmo si devono stabilire i casi di prova per la verifica della correttezza e scrivere la
documentazione con le indicazioni per l’utilizzo del programma.
L’implementazione comprende:
La codifica
La codifica dell’algoritmo consiste nella scrittura del programma in un linguaggio di programmazione.
Ogni linguaggio di programmazione impone proprie regole per la codifica del programma.
Alcuni linguaggi sono case sensitive, cioè distinguono tra caratteri maiuscoli e minuscoli mentre altri no.
Per quanto riguarda le istruzioni, se il linguaggio è case sensitive bisogna rispettare le regole imposte cioè la scrittura
corretta per ogni istruzione che potrà contenere lettere maiuscole e/o minuscole, altrimenti l’istruzione non viene
riconosciuta o la sua interpretazione può risultare ambigua; se non è case sensitive è conveniente scrivere tutto in minuscolo;
per quanto riguarda gli identificatori, se il linguaggio è case sensitive un identificatore scritto in minuscolo viene considerato
diverso dallo stesso scritto in maiuscolo; anche se il linguaggio non è case sensitive, conviene comunque adottare una regola e
seguirla sempre per non confondersi; è tendenza comune scrivere gli identificatori in minuscolo; se l’identificatore è una
parola composta, per maggior comprensibilità conviene far iniziare le parole successive con la maiuscola (per esempio
numeroRighe). Il linguaggio VBA non è case sensitive.
Ogni linguaggio usa delle parole riservate e degli identificatori.
Le parole riservate sono parole predefinite del linguaggio che hanno un significato particolare e possono essere usate solo
per lo scopo previsto e non come identificatori che sono tutte le altre parole utilizzate nel programma, tutti i nomi a scelta del
programmatore, per esempio per i nomi delle variabili.
Gli identificatori devono sempre essere diversi dalle parole riservate.
Ogni identificatore inoltre deve essere univoco, cioè deve essere utilizzato per un solo scopo.
Suggerimenti per la codifica:
Oltre alle regole di codifica imposte dal linguaggio adottato, è bene seguire anche alcune altre semplici regole, che, pur non
essendo obbligatorie, permettono di semplificare la lettura e comprensione del codice, di cosa esso effettivamente fa della sua
esecuzione;
per esempio:
scegliere nomi significativi per tutti gli identificatori (variabili, procedure ecc.), in modo che il nome ne ricordi e spieghi l’uso;
scrivere le istruzioni con il metodo dell’indentazione in modo da evidenziare le strutture di controllo del flusso del
programma e i vari blocchi di istruzioni.
Le strutture di controllo del flusso si identificano nelle istruzioni per il controllo del flusso che corrisponde alla sequenza di
esecuzione delle istruzioni, ad esempio istruzioni di ciclo - loop - WHILE o istruzioni condizionali IF THEN ELSE , i blocchi di
istruzioni detti anche corpi o istruzioni composte sono insiemi di più istruzioni semplici visti come un’unica istruzione.
Ebcdic, Ascii: sono due diversi codici per la codifica di caratteri, ad ogni carattere alfanumerico o simbolo rappresentabile è
associato un particolare numero compreso tra 0 e 255. Il codice Ascii in genere è usato nei personal computer, il codice
Ebcdic nei mainframe computer più grandi

La potenza dei numeri irrazionali (nota discorsiva sulla codifica in genere):


questi numeri avendo un numero di cifre decimali infinito contengono dentro di se tutte le informazioni possibili codificabili,
supponendo di codificare un carattere con un numero che va da 0 a 255 (256 caratteri codificabili), ad esempio secondo il
codice Ascii e volendo scrivere un qualunque testo con questi caratteri una volta codificati con i numeri da 0 256 e messi in
sequenza come nel testo voluto (cosa che normalmente avviene con un programma di word processing) possiamo dire che
all’interno della parte decimale (che contiene un numero infinito di cifre) di un numero irrazionale troveremo la divina
commedia, i promessi sposi, il nostro saggio di fisica etc…. poiché saranno presenti tutte le possibili sequenze di caratteri
ottenibili combinando in tutti i modi possibili i nostri codici o i nostri caratteri.

Prima di passare alle fasi successive dell’implementazione trattiamo alcuni concetti relativi ai linguaggi di programmazione.

Abbiamo detto che un programma non è altro che un algoritmo codificato in un linguaggio di programmazione.
Ma quale linguaggio scegliere per la codifica di un algoritmo?
Il linguaggio naturale sarebbe facilmente comprensibile ma non è eseguibile da una macchina.
Il linguaggio macchina è eseguibile ma di difficile comprensione.
Il linguaggio naturale e il linguaggio macchina si collocano in posizioni opposte, soddisfacendo uno solo dei requisiti.
I linguaggi di programmazione ad alto livello sono progettati proprio per colmare tale divario.
Sono linguaggi adatti a implementare algoritmi pur rimanendo comprensibili all’uomo.
La fatica di tradurre un programma nel linguaggio macchina è affidata a particolari programmi, i compilatori, che traducono
programmi scritti nel linguaggio di più alto livello in programmi equivalenti nel linguaggio macchina, oppure agli interpreti.

Il linguaggio macchina dipende dall'architettura hardware del computer (dalla macchina appunto). Varia a seconda del
processore. Un programma scritto in linguaggio macchina per un'architettura, non funziona in un'altra architettura. Per
funzionare il programma deve essere riscritto ex novo. Invece se per scrivere il nostro programma usiamo un linguaggio ad
alto livello, ci basterà compilarlo con il compilatore adatto alla macchina che abbiamo, per poterlo eseguire su di essa,
lasciando inalterato il codice sorgente (almeno per un ottima percentuale del codice).
Il linguaggio macchina (o codice macchina) è il linguaggio in cui sono scritti i programmi direttamente eseguibili per
computer: può venire classificato come linguaggio di programmazione, sebbene quest'ultima espressione sia più spesso
riservata per indicare i linguaggi di alto livello con cui si scrivono programmi non direttamente eseguibili, ma che richiedono
una traduzione in linguaggio macchina. Il computer riesce a capire due soli stati 0 e 1 non passa corrente o passa corrente,
essendo costituito da circuiti elettronici. Quindi il linguaggio macchina è basato su un alfabeto detto binario in quanto
comprende due soli simboli, generalmente indicati con 0 e 1: un simbolo di questo alfabeto viene detto bit.
Dobbiamo sottolineare che questo comunque non è limitativo perché accorpando piu bit in sequenza possiamo codificare
qualsiasi informazione vogliamo, basterà allungare a seconda della necessità la sequenza di bit che useremo.
Il processore o CPU è quella componente hardware di un computer che è in grado di eseguire i programmi scritti in
linguaggio macchina. In altre parole in linguaggio macchina sono definite l'insieme di istruzioni fondamentali che un
processore è in grado di compiere (instruction set) in cui i codici di programmi da eseguire devono essere tradotti.
Uno dei punto di forza del linguaggio macchina è sicuramente la velocità di esecuzione del programma. Il processore legge ed
esegue i comandi. Non deve perdere tempo a interpretarli. D'altra parte, essendo scritto in linguaggio binario, il codice
macchina è decisamente poco comprensibile per l'uomo. Ecco un esempio pratico di codice macchina:

10011100 00101100 10010110


10101101 10110101 11010101
01001001 11011001 01100010
01001011 10010011 10010110

Addirittura agli albori della programmazione questo codice si concretizzava in una o più schede perforate (0,1).
Per programmare in linguaggio macchina bisogna conoscere i registri del processore, il funzionamento dei comandi di basso
livello, l'hardware del processore, ecc. Soltanto i programmatori più esperti hanno le conoscenze per farlo.
Le istruzioni del linguaggio macchina sono istruzioni minimali e a bassissimo livello, agendo su componenti direttamente
collegabili all’hardware appunto come i registri, che fanno operazioni molto semplici, per cui scrivere direttamente un
programma in linguaggio macchina risulta assai difficile e complesso, anche per scrivere un programma che fa relativamente
poco occorrono molte righe di codice.

I linguaggi naturali non sono altro che quelli che usiamo normalmente come l’italiano, l’inglese etc…
Per definire un linguaggio naturale si parte dalla definizione di un alfabeto
Ad esempio in italiano ci sono 21 lettere, in inglese 26, . . .
Con i caratteri dell’alfabeto possiamo formare un insieme di sequenze, dette parole
Non tutte le sequenze sono parole del linguaggio naturale
La grammatica del linguaggio fornisce le regole per decidere quali sequenze sono parole del linguaggio
parole corrette grammaticalmente
Con le parole, corrette, possiamo formare un insieme di parole, dette frasi
Non tutte le sequenze sono frasi del linguaggio naturale
La sintassi del linguaggio fornisce le regole per decidere quali sequenze sono frasi del linguaggio frasi corrette
sintatticamente, o sintatticamente ben formate
In italiano la regola base della sintassi dice che le frasi sono costruire con sequenze di parole che seguono la struttura
soggetto verbo complemento
soggetto, verbo e complemento non sono altro che dei nomi, cioè denotano, alcuni particolari e ben precisi sottoinsiemi
dell’insieme di tutte le parole del linguaggio
ad esempio la sequenza di parole il lo la non è quindi una frase della lingua italiana
ad esempio la sequenza di parole gatto mangia topo è una frase della lingua italiana, ovvero è sintatticamente ben formata
Solo alcune delle frasi del linguaggio, cioè di quelle ben formate sono anche valide, cioè hanno un significato
La semantica del linguaggio stabilisce quali tra le frasi ben formate sono anche valide e quindi si occupa dell’interpretazione
(del significato) delle frasi ad esempio la frase il gatto mangia il topo è una frase ben formata che è anche valida, cioè ha un
significato
La sintassi di un linguaggio si occupa della forma delle frasi del linguaggio, ovvero delle regole che permettono di costruire
frasi ben formate del linguaggio
La semantica di un linguaggio si occupa dell’interpretazione del linguaggio, ovvero del significato delle frasi corrette
sintatticamente
Esempio di frasi corrette sintatticamente in italiano, ma non tutte valide dal punto di vista del significato (prive di significato)
il gatto mangia il topo
il topo mangia il monte
Ricordiamo anche che usando un qualsiasi linguaggio (naturale o di programmazione) possiamo formare una frase corretta
sintatticamente e che ha anche un significato ma che però non corrisponde a ciò che volevamo dire come nell’esempio del bar
di Parigi e del budino.

Come i linguaggi naturali anche i linguaggi di programmazione seguono le proprie regole di sintassi e semantica solo in
maniera più rigida, siamo obbligati a rispettarle molto attentamente se no il compilatore non compila o il pc non esegue
correttamente e o come vorremmo il nostro programma. Il computer è molto rigido da questo punto di vista: o scriviamo le
cose come vogliono queste regole o se no non riusciamo a far girare i nostri programmi dobbiamo scrivere le cose con la
massima precisione, basta sbagliare una virgola e il pc non capisce e non dico virgola a caso, basta infatti omettere un punto e
virgola (che in alcuni linguaggi fa da separatore per le istruzioni) perché il compilatore non capisca e ci segnali errore.
Quando usiamo il linguaggio naturale, avendo in genere come interlocutore un uomo invece che una macchina, l'altro
interlocutore con il suo cervello riesce a correggere alcuni errori che facciamo parlando o scrivendo e capisce lo stesso (anche
se rischio ambiguità potrebbe capire male consigliabile utilizzare i feedback), il computer o macchina calcolatrice che in
genere usiamo noi (senza entrare nel campo dell’ intelligenza artificiale) non è in grado di fare questo passaggio di correzione
automatica e quindi la vita tra interlocutori umani è più semplice anche se forse più rischiosa nel generare malintesi, perché
alla fine possiamo permetterci (come normalmente in effetti facciamo di dire o scrivere cavolate non rispettando sintassi o
semantica e il nostro interlocutore correggerà mentalmente tali errori e capirà (speriamo) bene mentre quando gli
interlocutori sono programmatore e macchina le regole vanno rispettate precisamente bisogna rispettare il formalismo
dettato dalle regole se no la macchina non fa nulla o non fa ciò che vogliamo.

Fasi successive alla codifica


Dopo la codifica si procede in modo diverso se si usa un linguaggio interpretato o compilato.
Se si usa un linguaggio interpretato non è necessaria la compilazione dell’intero programma prima della sua esecuzione ma
ogni istruzione del programma viene tradotta, da un programma detto interprete, una per una (nella sequenza in cui si
presentano nel programma sorgente) in linguaggio macchina e viene immediatamente eseguita e poi analogamente viene
elaborata l’istruzione successiva. (VBA è un linguaggio interpretato).
Se si usa un linguaggio compilato bisogna compilare il codice sorgente, tramite l’uso di un programma detto compilatore, e
quindi linkare il programma a dei moduli, anch’essi programmi a cui il programma principale fa riferimento, necessari per
l’esecuzione del nostro applicativo.
Il compilatore traduce il programma sorgente in programma oggetto (in linguaggio macchina); prende in input il programma
sorgente e produce come output il programma oggetto questo viene passato ad un linker che genere un programma
eseguibile.
La produzione del programma oggetto può avvenire soltanto se nel programma sorgente non sono presenti errori formali; se
ci sono errori di sintassi (cioè se abbiamo scritto il nostro programma non seguendo esattamente le regole di scrittura del
linguaggio usato), infatti, la compilazione viene impedita; gli errori vengono segnalati dal compilatore con opportuni
messaggi.
Bisogna correggere gli errori di compilazione prima di poter ottenere il programma oggetto.
I messaggi di diagnostica del compilatore si suddividono di solito in:
errori: errori veri e propri che impediscono la produzione del programma oggetto;
warning o avvertimenti: segnalazioni di situazioni anomale che potrebbero essere causa di errore.
Se non ci sono errori veri e propri, ma solo warning, il programma oggetto viene prodotto; è opportuno però controllare ogni
warning, per assicurarsi che non ci possano essere cause nascoste di errori in fase di esecuzione del codice (cioè a run time).
Il fatto di ottenere il programma oggetto dal nostro compilatore anche privo di warning non ci assicura che il nostro
programma sia corretto dal punto di vista dell’esecuzione, cioè che esegua correttamente quello che vogliamo noi, perché
nella scrittura del programma potremmo aver introdotto i così detti errori semantici. Cioè potremmo aver scritto
sintatticamente bene il nostro programma ma non aver scritto ciò che volevamo scrivere, e quindi il programma fa una cosa
diversa (quella che abbiamo effettivamente scritto) rispetto a quella che volevamo che facesse. Ad esempio se entriamo in un
bar a Parigi e diciamo al barista in un perfetto francese (sintatticamente corretto) “vorrei un budino di riso” il barista capirà
la frase e eseguirà il comando dandoci il budino di riso ma se noi volevamo un caffè e ci siamo sbagliati a tradurre la parola
caffè in francese traducendola con un'altra parola che vuol dire un'altra cosa in francese, bene non otteniamo quello che
vogliamo, il barista non fa quello che volevamo ma fa quello che gli abbiamo chiesto. Errori tipo questo si chiamano logici o
semantici cioè di significato del nostro programma, cioè il programma richiede al computer di fare un calcolo che non è quello
che il nostro algoritmo doveva fare.
Ricordiamoci che diciamo che una funzione (programma) ha significato quando si può calcolare e il suo significato è il
risultato del suo calcolo quindi semantica o significato sono strettamente collegati alla calcolabilità di una funzione e a cosa il
nostro programma calcola.
Prima di riuscire ad ottenere un programma che sia corretto sintatticamente e semanticamente dovremo con molta
probabilità scrivere il codice correggerlo riscriverlo ricorreggerlo ciclicamente per diverse volte, correggendo tutte le volte
nostri errori, questo è il compito principale di un programmatore, che gli occuperà la maggior parte del tempo: correggere i
propri errori.

Esecuzione del programma


Eseguire il programma significa utilizzarlo per risolvere un caso particolare del problema per cui è stato preparato.
L’utente deve fornire i dati iniziali (input del programma) e, dopo l’elaborazione, ottiene i risultati che aspettava (output del
programma).
L’output dell’esecuzione può comprendere, oltre al vero e proprio output del programma, anche messaggi di errore per errori
a tempo di esecuzione (terza categoria di errori che dobbiamo aggiungere a quelli sintattici e a quelli semantici esemplificati
prima, siamo letteralmente circondati, sommersi, inseguiti dagli errori e il bello è che dobbiamo anche liberarcene come si
dice in gergo dovremmo debuggare – ripulire dai bug - il nostro programma).

Possiamo quindi riassumere le tipologie di errori che dovremo eliminare dai nostri programmi:
errori sintattici (di sintassi) segnalati in fase di compilazione (o di scrittura del codice se il linguaggio è interpretato)
questi errori non ci permettono di eseguire il programma ci bloccano in fase di compilazione o scrittura/interpretazione
errori semantici (di semantica) che si verificano durante l’esecuzione del nostro programma (a run time), anche se il
programma è corretto sintatticamente in quanto la compilazione ha dato ok o l’interprete non ci ha segnalato errori in fase di
scrittura del codice possiamo avere due tipi di errori semantici:
quelli dovuti al fatto cha abbiamo scritto qualcosa che ha un significato però diverso da quello che volevamo scrivere cioè
abbiamo implementato una logica diversa da quella voluta, in tal caso il programma viene eseguito correttamente arriva alla
sua naturale conclusione ma da risultato inatteso diverso dal voluto oppure
quelli per cui il programma in fase di esecuzione non si conclude normalmente, non arriva alla fine naturalmente prevista nel
flusso delle istruzioni ma si interrompe in modo anomalo in tal caso abbiamo scritto un programma corretto sintatticamente
ma privo di significato.

Ritornando a quanto detto sopra riguardo al budino di riso e al caffè appare ora chiaro che possiamo distinguere ancora due
tipi di errori semantici (di significato o logici)
uno che si verifica quando la frase è sintatticamente corretta ma non esprime quello che volevamo esprimere (dunque
possiamo eseguire il programma che arriva alla sua naturale conclusione ma fa una cosa diversa da quella che volevamo)
il programma ha significato è calcolabile ma c’è un errore di significato (semantico) in relazione a ciò che volevamo
esprimere. (significato/logica di calcolo diversi da quanto voluto)
un altro che invece si verifica quando la frase non ha proprio significato il programma non può calcolare quello che gli
chiediamo di calcolare (quando il nostro programma genera un errore e non arriva alla terminazione della sua elaborazione
come quando scriviamo un ciclo per cui non si verifica mai la condizione di uscita dal ciclo per cui va in loop oppure quando si
va con le nostre istruzioni a sporcare un’area di memoria protetta). (privo di significato logica errata dal punto di vista del
calcolo, funzione non calcolabile, il programma non può eseguire il calcolo e si interrompe in modo anomalo).

Sottolineiamo un po' il collegamento che esiste nel campo dei linguaggi di programmazione tra i concetti di semantica
significato funzione programma calcolabilità logica e matematica.
Intanto abbiamo già visto come un programma riceve dei dati in input (dati noti) e restituisce dei dati in output (dati che in
qualche modo rappresentano il risultato, la soluzione al nostro problema) dunque è assimilabile ad una funzione e come essa
si può calcolare. Pensiamo ad una funzione algebrica ad esempio 3x +1, dalle nostre nozioni di matematica sappiamo che tale
funzione è sempre calcolabile per ogni x, e diciamo che ha sempre significato (avere significato corrisponde ad essere
calcolabile) mentre la funzione (4x+4)/x diciamo che non ha significato o equivalentemente non è calcolabile (non si può
calcolare il risultato di questa espressione) per x=0. La semantica, che è definita come la scienza dei significati, applicata ai
programmi studia il significato dei programmi, bene il significato dei programmi è definito proprio come il risultato (calcolo)
che essi producono con il loro calcolo, un programma con un errore semantico (si può compilare e eseguire) ma genera o una
situazione di impossibilita di calcolo (mancanza di significato del programma), crash del programma che non termina
secondo la conclusione naturale del flusso di istruzioni definito dell'algoritmo oppure termina secondo tale flusso ma da un
risultato diverso dall'atteso, cioè il significato del programma che abbiamo scritto ed eseguito è diverso da quello del
programma che avremmo voluto scrivere e soprattutto eseguire.
Gli errori logici di questo secondo tipo, se non intercettati nella fase di test, una volta in produzione sono molto insidiosi
perché apparentemente tutto funziona bene, il nostro programma arriva alla fine naturale, prevista dal nostro flusso
(sequenza) di istruzioni ma ha prodotto un risultato diverso dal voluto stiamo facendo nella realtà della produzione degli
errori nascosti, delle cose non volute, ad esempio se il programma aggiorna i saldi dei conti correnti avremo clienti contenti,
quelli per cui il saldo aumenta anche se non dovrebbe visti i movimenti di conto e clienti scontenti quelli per cui il saldo
diminuisce anche se non dovrebbe visti i movimenti di conto, quelli scontenti ci faranno reclamo e ci allerteranno circa
l’errore ma se abbiamo solo errori che rendono contenti i clienti questi o scappano e cosi ci fanno capire che c’è qualcosa che
non va o non ci avvisano e noi perdiamo soldi. Le cose che dobbiamo fare per prevenire questi errori insidiosissimi è studiare
bene la logica risolutiva dell’algoritmo, tradurla attentamente nel linguaggio di programmazione, testare testare testare il
nostro programma in ambiente di prova, fare anche prove in ambiente di produzione dove e come possibile e verificare che in
tutti i casi provati il nostro programma genera sempre e solo i risultati attesi voluti.

Tiriamo un po' le fila:

Il nostro obiettivo è risolvere un problema utilizzando un computer


• Fasi del processo di programmazione
1. Astrazione del problema
Rappresentare graficamente la situazione analizzata;
Evidenziare sinteticamente gli elementi utili allo scopo dell’analisi;
Evidenziare le proprietà degli elementi utili;
Evidenziare le relazioni esistenti tra gli elementi utili;
2. Ricerca della soluzione migliore (idea)
3. Conversione dell’idea in una soluzione formale (algoritmo)
4. Traduzione dell’algoritmo in una sequenza di istruzioni comprensibili all’esecutore (in questo caso
l’elaboratore elettronico)
5. Test del programma con un insieme significativo di dati per garantire che funzionerà in ogni occasione
(qualsiasi siano i dati di input)
In qualche modo ci darà una misura dell’affidabilità del software che stiamo scrivendo, una sorta di certificazione che il
nostro software non darà problemi in esecuzione. Purtroppo, anche se facciamo tutti i test che vogliamo individuando i
più disparati casi di prova, potrà sempre sfuggirci qualche cosa, qualche caso particolare, che poi invece si può verificare
quando passiamo dall’ambiente di prova all’ambiente di produzione in cui il programma viene usato seriamente per fare
nella realtà quello per cui è stato progettato, qualche volta ci troveremo difronte ad errori del nostro programma non
intercettati in fase di sviluppo o test ma rilevati in produzione anche in questo caso ovviamente dovremo risolverli, appena
ce ne accorgiamo.
Quindi nei primi tempi successivi alla messa in produzione dovremo stare con gli occhi aperti e verificare che tutto funzioni
Se qualcosa non funziona dovremo apportare modifiche, poi più tempo il programma gira in produzione senza presentare
nuovi errori e più saremo tranquilli circa l’affidabilità del nostro programma (più tempo è che gira in produzione senza
errori più sicura sarà la sua certificazione)
6. Produrre opportuna documentazione del programma a beneficio di chi lo userà ed eventualmente lo
modificherà

Struttura di un elaboratore elettronico

Si chiama anche Sistema di Elaborazione perché costituito da varie Risorse classificabili principalmente in:
Hardware e Software

Il termine hardware (ferraglia) indica tutte le componenti fisiche ed elettroniche di un computer, che possono essere toccate
con mano.

Esempi tipici di hardware sono:


• lo schermo, la tastiera, il mouse, la stampante
• il case(Tower o Desktop)
• e tutti i dispositivi elettronici (scheda madre, processore che esegue i nostri programmi, RAM memoria
centrale, schede video, schede audio, schede modem /fax)
• ed elettromeccanici (floppy disk, hard disk, CDROM memoria di massa).
Con il termine software vengono identificati i programmi e la documentazione
I programmi sono una sequenza di operazioni elementari, dette istruzioni, che rispettano la sintassi di un dato linguaggio di
programmazione, e permettono ad un computer di funzionare come fornitore di servizi per l ’utente.
Tra i programmi più diffusi ci sono:
• i Programmi di Base: Sistemi Operativi (che gestiscono le risorse hardware e software della macchina, fornendo servizi di
base ai software applicativi ad esempio controllano l’utilizzo della memoria o delle periferiche tipo le stampanti da parte
degli applicativi), i Compilatori per linguaggi di programmazione
• i Programmi Applicativi: gli elaboratori di testo, i programmi per la grafica, i video giochi, etc…

Come collaborano ora le due componenti hardware e software per risolvere i nostri problemi:
semplicemente i nostri programmi in linguaggio ad alto livello inizialmente contenuti nella memoria di massa più grande ma
ad accesso più lento rispetto alla RAM, tramite il traduttore (compilatore/interprete) vengono tradotti in linguaggio
macchina (in istruzioni eseguibili dal nostro processore) quindi tali istruzioni vengono caricate un po' alla volta nella
memoria centrale più piccola ma più veloce della memoria di massa e vengono eseguite dal processore.

Potrebbero piacerti anche