la traduzione dei programmi
ed introduzione a Java
programmi



descrizioni di algoritmi effettuate tramite
linguaggi di programmazione
lo stesso algoritmo, fissato un linguaggio di
programmazione, può essere descritto da
numerosi programmi differenti
ogni programma è costituito da una sequenza
ordinata di operazioni (istruzioni)
Nov 2002
Traduzione dei programmi
2
linguaggi di programmazione



definiti per codificare algoritmi
hanno una precisa sintassi, che deve essere
rigorosamente rispettata
ciascun linguaggio prevede un insieme
(repertorio) di istruzioni


la codifica di un algoritmo deve essere effettuata
utilizzando appropriatamente tali istruzioni
i linguaggi differiscono in base alla tipologia di
istruzioni

Nov 2002
può variare sensibilmente il livello concettuale di
tali istruzioni
Traduzione dei programmi
3
linguaggi di programmazione
a basso livello

quando il linguaggio di programmazione
sfrutta il repertorio delle istruzioni della
CPU o altro repertorio concettualmente
allo stesso livello si parla di linguaggio
di programmazione a basso livello

Nov 2002
il livello è basso poiché le istruzioni usate
sono elementari, semplicissime
Traduzione dei programmi
4
linguaggi di programmazione
ad alto livello


ragionare in termini di istruzioni macchina è
lungo e faticoso, porta facilmente ad errori e
in pratica non consente di affrontare problemi
complessi o, quanto meno, articolati
è possibile concepire linguaggi di
programmazione che fanno uso di istruzioni
concettualmente più complesse ed evolute
rispetto alle istruzioni macchina: vengono
detti linguaggi di programmazione
ad alto livello
Nov 2002
Traduzione dei programmi
5
linguaggi di programmazione
ad alto livello /2

consentono di formulare algoritmi che
sfruttano operazioni meno elementari e
dunque consentono di ragionare ad un
più alto livello concettuale

Nov 2002
si possono affrontare problemi più
complessi
Traduzione dei programmi
6
linguaggi di programmazione
ad alto livello /3

un linguaggio ad alto livello sarebbe di
per sé inutile senza la possibilità di
effettuare (automaticamente) una
traduzione che sostituisca a ciascuna
istruzione di alto livello una sequenza
opportuna di istruzioni di basso livello
(istruzioni macchina) che sia
sostanzialmente equivalente
all’istruzione di alto livello
Nov 2002
Traduzione dei programmi
7
processo di traduzione
dato un programma scritto in un
linguaggio ad alto livello (programma
sorgente), la traduzione consiste nella
costruzione di un programma
equivalente che fa solo uso di istruzioni
macchina
Nov 2002
Traduzione dei programmi
8
processo di traduzione /2
i traduttori sono programmi che
effettuano automaticamente il processo
di traduzione


Nov 2002
in pratica, ad ogni istruzione di “alto livello”
occorre sostituire una sequenza di
opportune istruzioni di basso livello che
producano lo stesso effetto di quella ad
alto livello
sono in grado di rilevare gli eventuali errori
sintattici
Traduzione dei programmi
9
compilatori ed interpreti

esistono due approcci alla traduzione

compilazione, in cui il traduttore (compilatore)
accetta in input un programma sorgente scritto in
un linguaggio ad alto livello e produce in output
un programma eseguibile, equivalente a quello
dato


interpretazione, in cui il traduttore (interprete)
considera singolarmente ciascuna istruzione di alto
livello, la traduce e la esegue

Nov 2002
ogni eseguibile è specifico per una CPU!
si usa di fatto una macchina virtuale
Traduzione dei programmi
10
compilatori


la compilazione viene fatta in linea di principio
una sola volta
ogni esecuzione del programma tradotto sarà
sensibilmente più rapida rispetto
all’esecuzione tramite un interprete


più saranno le esecuzioni e maggiore sarà il
vantaggio della compilazione
la compilazione, passando anche attraverso
complesse fasi di ottimizzazione, può
impegnare significativamente le risorse
dell’elaboratore
Nov 2002
Traduzione dei programmi
11
interpreti




vantaggiosi nel caso di una sola esecuzione
(o poche)
non penalizzanti nel caso di elaborazione
leggera
hanno il pregio dell’immediatezza e
semplificano la successiva attività di
debugging (correzione degli errori)
spesso un interprete è corredato da un
compilatore per lo stesso linguaggio (l’inverso
di norma non accade)
Nov 2002
Traduzione dei programmi
12
compilatori vs. interpreti



Tc = tempo compilazione
Te = tempo esecuzione del compilato
Tv = tempo esecuzione in macchina
virtuale



Tv >> Te
N = # previsto esecuzioni
confrontare Tc + N∙Te con N∙Tv
Nov 2002
Traduzione dei programmi
13
linguaggi di programmazione

basso livello


macchina, assembler
alto livello

svariati paradigmi

Nov 2002
imperativi, dichiarativi
Traduzione dei programmi
14
linguaggi ad alto livello
dichiarativi
logici
funzionali
linguaggi di
programmazione
basi
di dati
FORTRAN,
PASCAL
C, BASIC, COBOL
PROLOG
LISP
procedurali
C++, JAVA, ADA orientati agli oggetti
imperativi
elaborazione
parallela / distribuita
Nov 2002
Traduzione dei programmi
16
ciclo edita-compila-correggiesegui-correggi
sì
debugging
editing
programma
sorgente
no
compila
sorgente
errori
?
no
funziona?
esegui
programma
sì
WOW!
Nov 2002
Traduzione dei programmi
17
linguaggio Java



alto livello
orientato agli oggetti
molto “trendy”



utilizzato dapprima solo nel Web, poi
praticamente in tutte le situazioni
portatile e diffuso
traduzione sui generis
Nov 2002
Traduzione dei programmi
18
la traduzione dei sorgenti Java
file .class
sorgente Java
compilatore
file .java
javac
bytecode
macchina virtuale
Java (Java Virtual
Machine, JVM)
programma in
esecuzione
interprete
java
Nov 2002
Traduzione dei programmi
19
primo programma Java
public class Primo {
public static void main(String args[]) {
System.out.println("CIAO!");
}
}

il nome della classe determina i nomi dei file


Primo.java
Primo.class
Nov 2002
Traduzione dei programmi
20
esecuzione primo programma

tramite JCreator


tramite linea di comando DOS


semplice, ma si perde “visibilità”
“manuale”, ma universale
numerose altre possibilità…
Nov 2002
Traduzione dei programmi
21