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 sorgente codice sorgente compilatore compilatore byte byte code code interprete interprete
BYTECODE: ESEMPIO void spin ( ) { int i; for (i = 0; i < 100; i++) { } ; } 0 iconst_0 // push int constant 0 1 istore_1 // store into local 1 (i=0) 2 goto 8 // first time, don t increment 5 iinc 1 1 // increment local i by 1 (i++) 8 iload_1 // push local 1 (i) 9 bipush 100 // push int constant (100) 11 if_icmplt 5 // compare, loop if < (I<100) 14 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 codice sorgente codice sorgente compilatore compilatore macchina macchina A compilatore compilatore macchina macchina B. eseguibile macchina eseguibile macchina A eseguibile macchina eseguibile macchina B Sistema ANDF compilatore compilatore macchina macchina A interprete macchina interprete macchina A codice sorgente codice sorgente compilatore compilatore macchina macchina B byte byte code code interprete macchina interprete macchina B..
ESEMPIO Il formato dei dati è specificato esattamente, e non di minima, come nel C: byte 8 bit complemento a 2 short 16 bit int 32 bit long 64 bit float 32 bit IEEE 754 floating double 64 bit char 16 bit Unicode
PORTABILE Il sistema Java (compilatore + interprete + librerie run-time) è facilmente portabile su piattaforme diverse codice sorgente codice sorgente compilatore compilatore byte byte code code interprete interprete libreria libreria S.O. 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
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 Sorgente Sorgente Java Java Loader Loader delle delle classi classi Verifica Verifica del del byte-code byte-code Compilatore Compilatore Rete Interprete Interprete 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 Sorgente Sorgente Java Java Loader Loader delle delle classi classi Verifica Verifica del del byte-code byte-code Compilatore Compilatore Rete Interprete Interprete Generatore Generatore di di codice codice Byte-code Byte-code Java Java 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 Disk HTTP used over this TCP connection HTTP Server HTTP Server Internet
URL: Uniform Resource Locator <protocollo> :// <nome del server> <nome del file> Esempio: http://www.dsi.unimi.it/dsi/corsi/programmi/f2 deve essere risolto in 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> </HEAD> <BODY> <P> Testo Esempio Testo Hallo! <APPLET CODE= HelloWorld.class WIDTH=300 HEIGHT=80> Qui c è un applet che ti saluta </APPLET> </BODY> </HTML> testo che esce se il browser non supporta gli applet
JAVA BROWSER rete TCP / IP http client ftp ftp client client java loader interprete HTML interprete JAVA I/O library local disk UI library
UN NUOVO PARADIGMA: NETWORK COMPUTING Approccio tradizionale DATI PROGRAMMI RETE Network computing RETE PROGRAMMI E DATI PC NC load and run
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 diventa: set path= C:\WINDOWS;C:\WINDOWS\COMMAND; 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: Nel campo valore: CLASSPATH.;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à: Per l esecuzione: javac InputTest.java 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.