Programmi
Interpreti e compilatori
La programmazione
• La macchina non può leggere una nostra
istruzione scritta con il nostro linguaggio
• È necessario realizzare un linguaggio di
programmazione che possa tradurre ciò che
scriviamo nei termini del linguaggio
macchina
Due scuole di pensiero
• Interprete
• Compilatore
Interprete
• La prima scuola preferisce scrivere un programma
che riconosca le istruzioni nel linguaggio scelto e
le esegua. Questo programma chiamato interprete
legge un’istruzione dopo l’altra, la traduce e la
esegue. Il programma da noi scritto non subisce
nessuna trasformazione definitiva e l’interprete
dovrà essere utilizzato ogni volta che si intende
lanciare il programma.
Compilatore
• La seconda scuola preferisce preparare un
programma che legga il nostro programma
(contenuto in un file che verrà detto
sorgente) e lo traduca una volta per tutte
generando un file eseguibile in linguaggio
macchina. Questo file sarà immediatamente
comprensibile per l’elaboratore e sarà
eseguibile a essere lanciato ogni volta che si
riutilizzerà il programma.
Pregi e difetti dell’interprete
• Pregi: può essere più comodo nella fase di
preparazione del software, in quanto si programma
e si esegue nel medesimo ambiente. Nel caso di un
errore potremmo andare direttamente nel punto
sospetto ed effettuare nel punto sospetto ed
effettuare la correzione.
• Difetti: in termini di efficienza del programma in
quanto la necessità di tradurlo ogni volta ne
rallenta inevitabilmente l’esecuzione.
Pregi e difetti del compilatore
• Pregi: il programma compilato essendo stato
tradotto definitivamente sarà più veloce di un suo
equivalente interpretato
• Difetti: tiene separati l’ambiente di
programmazione da quello d’esecuzione . In caso
di errore sarà necessario richiamare l’editor con
cui abbiamo scritto il programma, aprire il file
sorgente, correggerlo, ricompilarlo e eseguirlo.
I concetti chiave del programma
• Variabile: può essere considerato lo scaffale
in cui fingiamo di riporre le nostre
informazioni. Se oggetto della nostra
operazione è una parola (telefono) dovremo
preoccuparci di definire e utilizzare una
variabile adatta a contenerla.
Pascal
Var
parola
: string [30];
numero
: integer;
Ovvero abbiamo una variabile parola che è
del tipo string (caratteri alfanumerici) lunga
al massimo 30 caratteri. Abbiamo definito
anche una variabile numero del tipo integer
(solo numeri interi)
Caratteristiche della variabile
• Nella variabile numero non potremmo mai
memorizzare la parola telefono e un
eventuale carattere alfanumerico (1e 0)
poiché questa caratteristica è invece
determinata dalla variabile parola in quanto
la presenza di string permette di contenere
appunto dei caratteri alfanumerici ma non
solo numeri
Se il programma è un algoritmo
• Come s’è detto varie volte un programma è
la traduzione nei termini d’un linguaggio di
programmazione del percorso disegnato da
un algoritmo. Ora un algoritmo può essere
costituito da una serie di istruzioni
sequenziali (apri lo schedario, prendi la
scheda), ma può anche chiedere di operare
delle scelte (prendi la scheda che contiene la
parola Ripellino).
Apri lo schedario, prendi una
scheda
• Il primo tipo di operazioni può essere
rappresentato da un linguaggio di
programmazione come una serie di
istruzioni da eseguire una dopo l’altra
Prendi la scheda che contiene la
parola Ripellino
• Il secondo tipo richiede la selezione
dell’istruzione da eseguire a seconda del
verificarsi di certe condizioni.
• Questa condizione si può rappresentare
tramite un diagramma di flusso.
Diagramma di flusso
Es
Leggo parola
NO
SI
Parola= Ripellino
Lettura del Diagramma
• Leggo la variabile parola, il contenuto della
variabile parola è uguale alla sequenza di
caratteri Ripellino? Se la risposta è si allora
esegui le istruzioni a cui porta il lato destro
del grafo, se la risposta è no allora gira a
sinistra.
In termini di linguaggio di
programmazione
• If parola =‘Ripellino’ then writeln (‘Trovato’)
• If parola <> ‘Ripellino’ then writeln (‘Non trovato’)
• If parola = ‘Ripellino’ then writeln (‘Trovato’) else writeln
(‘Non trovato’)
Gli apici ‘’ prima e dopo il nome di Ripellino indicano al
computer l’inizio e la fine di una sequenza di caratteri
alfanumerici. Writeln è l’istruzione di stampa del Pascal.
L’ultima riga va letta: se trovi ciò che cerchi allora fai questo
altrimenti fai quest’altro.
Il cuore del linguaggio di
programmazione
• La capacità di modificare il flusso
sequenziale delle istruzioni che
compongono un programma al verificarsi di
condizioni precise.
• Ma se non trova ciò che è stato richiesto?
Il loop
• Una delle caratteristiche principali del computer
oltre alla capacità di gestire grandi quantità di dati
è quella di poter ripetere una stessa operazione un
numero indefinito di volte fino al verificarsi di una
determinata condizione. Per questo motivo nel
diagramma di flusso di un programma viene
racchiusa una serie di istruzioni in un ciclo (loop)
che viene eseguito fino a che non venga verificata
una certa condizione.
Esempio di loop
• While (parola <> ‘Ripellino’) or not
(eof(archivio)) do begin
• readln (archivio, parola);
• End;
• If parola=‘Ripellino’ then writeln
(‘Trovato’) else writeln (‘Non Trovato’);
While do?
• While…do è l’istruzione che apre il loop,
• begin e end marcano l’inizio e la fine delle
istruzioni del ciclo, in questo caso una solamente,
- parola <> ‘Ripellino’ - è la prima condizione di
interruzione del loop,
• or è un operatore logico, not è un operatore di
negazione,
• eof() è una funzione che restituisce true quando
incontra la fine del file
Not eof?
• Not (eof(archivio))costituisce la seconda
condizione di fine loop
• Readln è l’istruzione di lettura
• Parola è la variabile da leggere,
• Archivio è il file che contiene i nomi da
scorrere.
L’end of file?
• Il programma seguiterebbe a scorrere il file
archivio fino a trovare il nome cercato o
fino a che non incontra l’end of file.
• Il loop si interrompe se la variabile parola è
sicuramente uguale a ‘Ripellino’. Altrimenti
se non trova la parola ricercata continua il
ciclo.
Esempi di linguaggi di
programmazione
• Interprete: BASIC
• Compilatore: C (linguaggio utilizzato per
realizzare sistemi operativi)
Altra piccola distinzione
• Linguaggi procedurali
• Linguaggi dichiarativi
Linguaggi procedurale
• Nel caso di un programma, scritto con
questo linguaggio, esso conterrà una serie di
ordini dati sequenzialmente alla macchina
che li dovrà eseguire
Linguaggi dichiarativi
• Un linguaggio dichiarativo svolge la
funzione di descrivere, ovvero di dichiarare
quali sono i dati del problema. Il computer
analizzerà i dati e ne dedurrà la risposta da
dare. I linguaggi dichiarativi sono più
comodi per il programmatore e per l’utente,
ma più faticosi per il computer che deve
derivare le procedure da seguire dall’analisi
del problema che gli viene sottoposto.
Esempi
• Linguaggi procedurali: Cobol, Pascal,
Fortran, BASIC, C
• Linguaggi dichiarativi: PROLOG
Linguaggi orientati agli oggetti
Nascono da due considerazioni:
• A) i programmatori si sono accorti che certe
porzioni del programma possono essere utilizzate
più volte, quindi è vantaggioso concepire in modo
modulare o dei format i programmi
• B) nel costruire programmi modulari è spesso utile
partire dagli oggetti dei quali il programma si
occupa definendone le proprietà e comportamenti
e stabilendo fra essi legami e gerarchie.
Facciamo un esempio
• Supponiamo di scrivere un programma per gestire
la vendita delle automobili in un autosalone:
• Caratteristiche generiche di ogni auto (marca
modello cilindrata prezzo ecc) verranno attribuite
a un oggetto del nostro programma -- oggetto
automobile -- che potremmo utilizzare ogni volta
che parliamo di automobile, e che potremmo
arricchire con nuove e specifiche caratteristiche a
seconda per esempio se si tratti di auto usate o
nuove. Possiamo aggiungere categorie oppure
attribuire determinati comportamenti.
E nel S.O?
• La programmazione ad oggetti funziona
particolarmente bene per realizzare
programmi da utilizzare all’interno di un
sistema operativo :
• icone
• finestre
• menù
• pulsanti
I linguaggi orientati agli oggetti
• C++ (evoluzione di C)
• Smalltalk
• Java