CHE COS’È JAVA
• È un linguaggio (e relativo ambiente di
programmazione) definito dalla Sun
Microsystems …
• … per permettere lo sviluppo di
applicazioni sicure, performanti e robuste
su piattaforme multiple, in reti eterogenee
e distribuite (Internet)
IL LINGUAGGIO JAVA:
CARATTERISTICHE
•
•
•
•
•
•
•
•
•
Semplice e orientato agli oggetti
Interpretato
Architetturalmente neutro e portabile
Robusto
Distribuito
Sicuro
Dinamico
Ad elevate prestazioni
Concorrente (multithread)
SEMPLICE E OO
• Sintassi simile a C e C++ (facile da imparare)
• Elimina i costrutti più "pericolosi" di C e C++
–
–
–
–
–
aritmetica dei puntatori
(de)allocazione esplicita della memoria
strutture (struct)
definizione di tipi (typedef)
preprocessore (#define)
• Aggiunge garbage collection automatica
• Conserva la tecnologia OO di base di C++
• Rivisita C++ in alcuni aspetti (C++--==)
INTERPRETATO
• Il compilatore produce un codice di
tipo intermedio per una “Java Virtual
Machine” (“byte-code”) ...
• … che viene interpretato
codice
codice
sorgente
sorgente
compilatore
compilatore
byte
bytecode
code
interprete
interprete
BYTECODE: ESEMPIO
void spin ( ) {
int i;
for (i = 0; i < 100; i++) {
;
}
0
}
1
2
5
8
9
11
14
iconst_0
// push int constant 0
istore_1
// store into local 1 (i=0)
goto 8
// first time, don’t increment
iinc 1 1
// increment local i by 1 (i++)
iload_1
// push local 1 (i)
bipush 100
// push int constant (100)
if_icmplt 5 // compare, loop if < (I<100)
return
// return void when done
ARCHITETTURALMENTE
NEUTRO
• Il byte-code è indipendente dall’architettura
hardware
(ANDF: Architecture Neutral Distribution Format)
• Pertanto, un programma bytecode può
essere eseguito su qualsiasi sistema su
cui giri un ambiente run-time Java
ESEMPIO
Sistema tradizionale
compilatore
compilatore
macchina
macchinaAA
codice
codice
sorgente
sorgente
compilatore
compilatore
macchina
macchinaBB
eseguibile
eseguibile
macchina
macchinaAA
eseguibile
eseguibile
macchina
macchinaBB
…….
Sistema ANDF
compilatore
compilatore
macchina
macchinaAA
codice
codice
sorgente
sorgente
compilatore
compilatore
macchina
macchinaBB
…….
interprete
interprete
macchina
macchinaAA
byte
bytecode
code
interprete
interprete
macchina
macchinaBB
…….
ESEMPIO
• Il formato dei dati è specificato esattamente, e
non “di minima”, come nel C:
– byte
– short
– int
– long
– float
– double
– char
8 bit complemento a 2
16 bit “
32 bit “
64 bit “
32 bit IEEE 754 floating
64 bit “
16 bit Unicode
PORTABILE
• Il sistema Java (compilatore + interprete + librerie
run-time) è facilmente portabile su piattaforme
diverse
codice
codice
sorgente
sorgente
compilatore
compilatore
byte
bytecode
code
interprete
interprete
libreria
libreria
– il compilatore Java è scritto in Java
– l’ambiente run-time è scritto in ANSI C con interfacce
standard (POSIX) verso il sistema operativo
– nessuna “implementation dependency”
S.O.
ROBUSTO
• Controlli estensivi a compile-time e a run-time, per
rilevare gli errori quanto prima possibile (es.: type
checking)
• Per questo, le caratteristiche insicure di C e C++ sono
rimosse:
– Nessuna gestione esplicita dei puntatori (no aritmetica dei
puntatori, no malloc e free esplicite, …)
– Gestione della memoria con garbage collection
– Array e stringhe “veri”
• Verifica del byte-code a load-time
DISTRIBUITO
• Pensato per essere eseguito in rete
• L’ambiente run-time incorpora funzioni di
rete
(sia di basso livello: TCP/IP, che di alto
livello: HTTP, …)
• La rete è facilmente accessibile (come i file
locali)
SICURO
• L’ambiente di esecuzione si protegge da
bytecode potenzialmente “ostile”
• Esempi:
– il bytecode viene verificato prima dell’interpretazione
(“theorem prover”), in modo da essere certi di alcune
sue caratteristiche
– gli indirizzamenti alla memoria nel bytecode sono
risolti sotto il controllo dell’interprete
COMPILE-LOAD-RUN
Loader
Loader
delle
delleclassi
classi
Sorgente
Sorgente
Java
Java
Rete
Verifica
Verificadel
del
byte-code
byte-code
Interprete
Interprete
Compilatore
Compilatore
Byte-code
Byte-code
Java
Java
Ambiente
Ambiente
run-time
run-time
hardware
hardware
ELEVATE PRESTAZIONI
• La verifica del bytecode permette di saltare
molti controlli a run-time: l’interprete è
pertanto efficiente
• Per maggiore efficienza, possibilità
compilazione on-the-fly del bytecode in
codice macchina
COMPILAZIONE ON-THE-FLY
Loader
Loader
delle
delleclassi
classi
Sorgente
Sorgente
Java
Java
Rete
Interprete
Interprete
Generatore
Generatore
di
dicodice
codice
Compilatore
Compilatore
Byte-code
Byte-code
Java
Java
Verifica
Verificadel
del
byte-code
byte-code
Ambiente
Ambiente
run-time
run-time
hardware
hardware
DINAMICO
• Il codice è eseguibile anche in assenza di alcuni
moduli:
• … le classi necessarie per la esecuzione di un
programma Java possono essere caricate e
collegate dinamicamente quando servono
Esempio: nuove release di moduli caricabili
automaticamente dalla rete quando servono
CONCORRENTE
• Multithreading parte integrante del linguaggio:
– Applicazioni interattive più facili a scriversi
– Migliore "reattività" (anche se non real-time)
Esempio: caricamento asincrono di immagini nei
browser di rete riduce i tempi di attesa
RICCO
La Standard Library Java contiene una
ricca collezione di classi e di metodi
preconfezionati:
–Language support
–Utilities
–Input/output
–Networking
–Abstract Window Toolkit (AWT)
JAVA E INTERNET
WEB BROWSER E SERVER
Server abc.com
Server xyz.com
Client
Hyperlink
Browser
program
to xyz.com
Disk
HTTP used over
this TCP connection
Internet
Disk
HTTP
Server
HTTP
Server
URL: Uniform Resource Locator
<protocollo> :// <nome del server> <nome
del file>
Esempio:
deve essere risolto in un
http://www.dsi.unimi.it/DSI/corsi/programmi/F2
indirizzo internet (IP)
8005/index.html
con l’aiuto di un Domain
Name Server (DNS)
HTML: ESEMPIO
<HTML>
<HEAD>
<TITLE> Esempio </TITLE>
Esempio
</HEAD>
Testo
<BODY>
DSI
<P>
Testo
<A HREF=“http://www.dsi.unimi.it”> DSI </A>
</BODY>
</HTML>
APPLET JAVA
• Sono programmi Java riferiti da link in
pagine HTML
• Vengono caricati e interpretati dal browser
(se questo supporta Java)
• Permettono di “animare” le pagine web
HTML con APPLET: ESEMPIO
<HTML>
<HEAD>
<TITLE> Esempio </TITLE>
Esempio
</HEAD>
Testo
<BODY>
Hallo!
<P>
Testo
<APPLET CODE=“HelloWorld.class WIDTH=300 HEIGHT=80>
Qui c’è un applet che ti saluta
</APPLET>
testo che esce se il browser
non supporta gli applet
</BODY>
</HTML>
JAVA BROWSER
rete
TCP / IP
http
client
interprete
HTML
ftp
ftp
client
client
java
loader
interprete
JAVA
I/O
library
local disk
UI library
UN NUOVO PARADIGMA:
NETWORK COMPUTING
Approccio tradizionale
DATI
PROGRAMMI
RETE
PC
Network computing
PROGRAMMI E DATI
load
and run
RETE
NC
“Installazione del kit di sviluppo di Java
(SDK) ed esecuzione del primo programma”
Installazione del JDK sul
disco fisso
• Ricerca o download dell’eseguibile
JDK
• Doppio click sull’icona del file
A questo punto partirà la procedura
automatica d’installazione. Seguire le
istruzioni a video.
Installazione del JDK sul
disco fisso
Se l’installazione va a termine correttamente sul disco fisso
sarà presente la directory Jdk1.X.X con le seguenti sotto
directory:
•
•
•
•
bin, contente il compilatore e gli altri eseguibili;
demo, contente alcuni demo;
lib, etc.
jre: contiene l’interprete, estensioni, ed altre
informazioni di configurazione
• docs: contiene la documentazione (N.B.: da
scaricare separatamente)
PATH e CLASSPATH
• Cosa è una variabile di ambiente:
– Una variabile del sistema operativo e visibile da tutte
le applicazioni
– Può essere settata temporaneamente in una finestra
– Può essere settata per l’intero sistema
• PATH: contiene la lista delle directory dove il sistema
operativo cerca i comandi da eseguire
• CLASSPATH: contiene la lista delle directory dove il
compilatore java e l’interprete cercano le classi
• JAVA_HOME: per far sapere ad applicazioni che
utilizzano JAVA dove si trova la cartella di
Aggiornamento delle
variabili di ambiente
Prima di poter scrivere ed eseguire un programma
Java è necessario aggiornare le variabili di
ambiente per permettere al sistema operativo di
trovare il compilatore Java e le classi di sistema.
Bisogna aggiornare quindi il PATH e aggiungere
una variabile di ambiente detta CLASSPATH
2.1- Aggiunta nel Path di
Jdk\bin
La procedura è leggermente diversa a seconda del
sistema operativo adoperato:
• Sotto Windows 98 si deve inserire nella variabile
path dell’AUTOEXEC.BAT il percorso
“drive”:\jdk1.XX\bin. Ad esempio la linea
set path= C:\WINDOWS;C:\WINDOWS\COMMAND;
diventa:
Set path=C:\WINDOWS;C:\WINDOWS\COMMAND;c:\jdk1.XX\bin
Aggiunta nel Path di Jdk\bin
• Sotto Windows XP/2000 si deve aprire il control panel,
selezionare System (o Sistema nella versione Italiana),
quindi Environment (o Ambiente). Scorrere la lista fino
a trovare la variabile chiamata PATH e aggiungere il
testo “drive”\jdk1.XX\bin all’inizio o alla fine della linea.
Dove “drive” è il disco su cui si è installato il Jdk
Attenzione il Sistema Operativo cerca in Ordine …..!!!!
2.2-Aggiunta della variabile
ClassPath
La procedura è identica al caso precedente, con la
differenza che la variabile d’ambiente deve essere
aggiunta in quanto non presente in genere fra quelle
standard.
Sotto Win98 quindi bisogna aprire l’AUTOEXEC.BAT e
aggiungere la linea:
SET CLASSPATH=.;c:\Nome_dir_lavoro\
Aggiunta della variabile
ClassPath
• Sotto WinXP/2000 bisogna aprire il pannello
di controllo, quindi aprire l’icona System e
selezionare la scheda Environment . Nel
campo Variabile scrivere:
CLASSPATH
Nel campo valore:
.;c:\Nome_dir_lavoro\
Aggiunta della variabile
ClassPath
Con il punto s’indica al compilatore Java di cercare le
eventuali altre classi nella stessa directory dove si trova il
file sorgente.
La stringa “Directory_Lavoro” si dovrà sostituire con il
nome dato alla directory che conterrà i file .class (mentre
inserire il punto nel ClassPath è necessario, indicare una
directory di lavoro è opzionale)
Scrittura del programma di
esempio
Il modo più semplice per editare un file sorgente Java è
quello di adoperare un programma di scrittura come
Notepad o WordPad di Windows.
Supponiamo di voler scrivere il seguente programma Java,
che stampa a video un messaggio di saluto:
Testo del primo programma
public class HelloWord
{
public static void main (String[] args)
{
System.out.println(“Hello world”);
}
}
Generazione del bytecode
Una volta scritto con un editor il testo si salvi il file con il
nome HelloWorld.java (in Java è obbligatorio chiamare
il file sorgente con lo stesso nome della classe che
contiene il main).
N.B.: Visualizza estensioni
Aprire una finestra Dos, posizionarsi nella directory
dove si è salvato il file sorgente e lanciare il
“Compilatore” (in realtà non è un vero compilatore in
quanto non genera codice oggetto ma bytecode).
3.2-Generazione del bytecode
Il comando da eseguire è:
javac HelloWorld.java
Si ricorda che Java distingue tra maiuscole e minuscole, quindi i nomi
helloWorld, helloworld e Helloworld sono tutti e tre errati.
•Perche trova javac ?
•Perche trova HelloWord. java?
3.3-Esecuzione del bytecode
Per eseguire il file HelloWorld.class generato si deve lanciare la Java
Virtual Macchine.
Il comando da adoperare sarà:
java HelloWorld
Si noti che non deve essere presente l’estensione .class
•Perche trova java ? Quale Java usa ?
•Perche trova HelloWord ?
•Se mi trovassi altrove ?
4-Un altro esempio
In questo secondo esempio si adopererà la
libreria grafica di Java, creando una dialog
box per l’immissione di alcuni dati. Lo scopo
del programma è solo quello di mostrare un
primo esempio di output grafico, non è
necessario comprendere tutte le istruzioni.
Il testo sorgente è:
Testo secondo esempio
import javax.swing.*;
public class InputTest
{
public static void main(String[] args)
{
String nome=JOptionPane.showInputDialog
(“Come ti chiami?”);
System.out.println(“Salve “+nome);
System.exit(0);
}
}
Compilazione ed esecuzione
del secondo esempio
Il file va salvato con lo stesso nome della
classe con in più l’estensione .java
(InputTest.java). Per la generazione del
bytecode il comando sarà:
javac InputTest.java
Per l’esecuzione:
java InputTest
Esecuzione del programma
Eseguendo il programma compare la
seguente finestra di input:
Esecuzione del programma
Immettendo dei caratteri e premendo OK si
otterrà un output su console.