la traduzione dei programmi
ed introduzione a Java
Nov 2002 Traduzione dei programmi 2
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 3
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 può variare sensibilmente il livello concettuale di
tali istruzioni
Nov 2002 Traduzione dei programmi 4
linguaggi di programmazionea 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 il livello è basso poiché le istruzioni
usate sono elementari, semplicissime
Nov 2002 Traduzione dei programmi 5
linguaggi di programmazionead 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 programmazionead alto livello
Nov 2002 Traduzione dei programmi 6
linguaggi di programmazionead alto livello /2 consentono di formulare algoritmi
che sfruttano operazioni meno elementari e dunque consentono di ragionare ad un più alto livello concettuale si possono affrontare problemi più
complessi
Nov 2002 Traduzione dei programmi 7
linguaggi di programmazionead 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 8
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 9
processo di traduzione /2i traduttori sono programmi che effettuano automaticamente il processo di traduzione 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
Nov 2002 Traduzione dei programmi 10
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
ogni eseguibile è specifico per una CPU! interpretazione, in cui il traduttore (interprete)
considera singolarmente ciascuna istruzione di alto livello, la traduce e la esegue
si usa di fatto una macchina virtuale
Nov 2002 Traduzione dei programmi 11
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 12
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 13
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 14
linguaggi di programmazione basso livello
macchina, assembler alto livello
svariati paradigmi imperativi, dichiarativi
Nov 2002 Traduzione dei programmi 16
linguaggi ad alto livello
linguaggi di programmazione
imperativi
dichiarativi
procedurali
orientati agli oggetti
elaborazione parallela / distribuita
logici
funzionali
basi di datiFORTRAN, PASCALC, BASIC, COBOL
C++, JAVA, ADA
PROLOG
LISP
Nov 2002 Traduzione dei programmi 17
ciclo edita-compila-correggi-esegui-correggi
editing programma sorgente
compila sorgente
esegui programma
errori?
funziona?
sì
no
no
sì
WOW!
debu
ggin
g
Nov 2002 Traduzione dei programmi 18
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 19
la traduzione dei sorgenti Java
programma in
esecuzione
sorgente Java
file .java
bytecodefile .class
compilatorejavac
interpretejava
macchina virtuale Java (Java Virtual
Machine, JVM)
Nov 2002 Traduzione dei programmi 20
primo programma Java
il nome della classe determina i nomi dei file Primo.java Primo.class
public class Primo {public static void main(String args[]) {
System.out.println("CIAO!");}
}
Nov 2002 Traduzione dei programmi 21
esecuzione primo programma
tramite JCreator semplice, ma si perde “visibilità”
tramite linea di comando DOS “manuale”, ma universale
numerose altre possibilità…