introduzione a java dott. ing. leonardo rigutini dipartimento ingegneria dellinformazione...

41
Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dell’Informazione Università di Siena Via Roma 56 – 53100 – SIENA [email protected] http://www.dii.unisi.it/ ~ rigutini/

Upload: gaetano-battaglia

Post on 01-May-2015

225 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Introduzione a JAVA

Dott. Ing. Leonardo RigutiniDipartimento Ingegneria dell’InformazioneUniversità di SienaVia Roma 56 – 53100 – [email protected]://www.dii.unisi.it/~rigutini/

Page 2: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

JAVA

Page 3: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Il linguaggio di programmazione JAVA Nel 1991 un gruppo di Sun MicroSystems, guidato da James

Gosling e Patrick Naughton, progettò un linguaggio chiamato in codice “Green”, per l’utilizzo in apparecchi di consumo: Elettrodomestici intelligenti, telefoni mobili, ecc….

Il linguaggio era stato progettato per essere SEMPLICE e NEUTRALE rispetto all’architetture, in modo da operare su hardware diversi: Non si trovò mai un cliente per questa tecnologia

Nel 1994, la squadra si rese conto che un’altra area poteva sfruttare le proprietà di “Green”: il filone client/server Indipendenza dall’architettura Esecuzione in tempo reale Affidabilità e sicurezza

Page 4: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Nasce JAVA

Nel 1995 fu presentato dalla Sun il browser HotJava che aveva una caratteristica unica: Poteva scaricare piccoli programmi, chiamati applet , dal web ed

eseguirli sulla macchina client con un elevato grado di sicurezza

Gli applet scritti nel linguaggio che adesso si chiama Java, permettevano agli sviluppatori Web di predisporre una serie di animazioni e integrazioni che potevano migliorare molto le potenzialità della pagina

Dal 1996, sia Netscape (allora molto diffuso) che Explorer supportano Java

Page 5: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

La crescita di Java

Da allora Java è cresciuto a ritmo fenomenale: I programmatori lo hanno adottato per la sua elevata semplicità rispetto

al rivale/progenitore (il C++)

Inoltre la Sun rilasciava con Java, una libreria enormemente ricca (JDK – Java Development Kit) che forniva agli sviluppatori una innumerevole quantità di classi per i problemi più diversi

Nel 1998 la Sun rilasciò la nuova versione del linguaggio, chiamata Java2, e la sua libreria ampliata con nuove classi: La nuova release aveva due versioni, la micro-edition(J2ME), pensata

per lo sviluppo su piccoli dispositivi integrati (gli anni del boom del cellulare) e la enterprise edition (J2EE), pensata per le workstation

Page 6: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

JAVA ed internet

Poiché Java era stato pensato per Internet, ha due qualità che lo rendono molto adatto per i principianti: Sicurezza – le applet si avviano automaticamente una volta scaricate dal

browser, quindi è importante che esse siano intrinsecamente sicuri Trasferibilità – lo stesso programma Java è eseguibile su qualsiasi

piattaforma (Windows, Unix-like o Machintosh)

Quando si visita un sito, il server web non ha idea di quale computer state utilizzando, ma restituisce semplicemente il codice trasferibile che è stato generato dal compilatore Java la macchina virtuale Java sul computer client si occuperà di eseguire

questo codice trasferibile

Page 7: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Tipi di programmi Java

Applets Piccoli programmi Java utilizzati all'interno di pagine HTML Vengono scaricate insieme alla pagina HTML ed eseguite lato client (dal

browser o da un applet viewer) Normalmente i browser incorporano una JVM con cui eseguono l'applet

Servlets e JSP Sono programmi Java che risiedono sul server Web e vengono invocati

dalle pagine HTML Vengono eseguiti lato server solitamente per la generazione di pagine

Web dinamiche (accesso a Database, risposta a dati inviati o operazioni effettuate dall’utente)

Applicazioni Sono normali programmi eseguiti su una JVM (lanciata esplicitamente da

riga di comando)

Page 8: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Scrivere un programma in Java

Una caratteristica che ha reso popolare il Java è quella di essere indipendente dal S.O. in cui un programma è compilato. Ma come è resa possibile questa cosa?

Il compilatore Java produce un codice che non è il codice binario finale, ma un codice binario intermedio chiamato bytecode (indipendente dall’architettura)

Questo codice intermedio è interpretato da una “macchina virtuale” che lo traduce in istruzioni macchina la Java Virtual Machine (JVM)

La JVM ha bisogno di conoscere il SO su cui sta girando. La Sun mette a disposizione JVM per tutti i sistemi operativi: Windows, Linux, Unix, Mac ecc…

Page 9: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Scrivere un programma in Java

In definitiva, scrivere un programma Java vuole dire creare un file di testo contenente del codice Java: un file per ogni classe (ossia astrazione dell’oggetto)

Il file così creato ha estensione .java e deve essere passato al compilatore Java:

javac xxx.java xxx.class

Questo software crea un file .class con lo stesso nome dell’originario, che contiene il bytecode per la JVM

java xxx esecuzione del main della classe xxx.class

Page 10: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Es

javac e java sono forniti con la distribuzione Java (JDK)

class HelloWorld {public static void main(String[] args) {

System.out.println(“Hello World!”);}

}

JavaCompiler

0101010111010101111010011010101111100101

javac

java JVM

bytecode

HelloWorld.java

HelloWorld.class

Page 11: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

javac.exe e java.exe Forniti con la distribuzione Java della SUN:

JDK

Dipendono dall’architettura su cui si va ad operare: È necessario utilizzare il JDK per Windows se si usa Windows,

ugualmente per Linux, Mac ecc…

Sono applicazioni lanciate dall’utente dalla shell dei comandi oppure dall’ambiente di sviluppo grafico utilizzato

Devono essere nel path di ricerca del S.O. :Es. in windows:

path %path%;C:\Programmi\Java\jdk1.5.0_02;C:\Programmi\Java\jdk1.5.0_02\bin;set JAVAHOME=C:\Programmi\Java\jdk1.5.0_02

Page 12: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

javac.exe

Page 13: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

java.exe

Page 14: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

CLASSPATH

Quando creiamo una classe Java (nell’esempio precedente ‘prova’), affinché sia utilizzabile è necessario che il nome del file sia lo stesso del nome della classe: La classe prova va quindi salvata in un file prova.java e compilata nel

file prova.class Il compilatore javac si occupa di generare il file .class con il nome del

file .java che gli viene fornito come parametro di ingresso

Il file .class deve poi essere nel classpath della macchina virtuale, altrimenti non sarà trovato. E’ possibile specificare il classpath come opzione diretta alla JVM:java.exe –classpath [PATH1;PATH2;…;PATHn] file.class

In alternativa si può definire una variabile di sistema CLASSPATH da cui il compilatore e la JVM leggono automaticamente il classpath

Page 15: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Classpath in javac

Page 16: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Classpath in JVM

Page 17: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Regole di base di JAVA

Page 18: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Regole di base – 1 Java, come quasi tutti i linguaggi di programmazione di alto livello è

case-sensitive, distingue cioè le lettere minuscole da quelle maiuscole: La variabile nome è quindi diversa da Nome

È consigliato inserire delle linee di commento per rendere il codice più leggibile e comprensibile (commentare il codice): La sequenza // permette di commentare la parte di riga rimanente I delimitatori /* e */ permettono di commentare tutto ciò compreso tra

queste due sequenze di caratteri

Es:int a=3; // questa parte finale della riga è commentata/* commento supiù righe */

Page 19: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Regole di base – 2 Istruzione

Ogni istruzione deve essere terminata da un ‘;’ Blocchi di codice

Ogni blocco di codice (sequenza di una o più istruzioni da eseguire in blocco) è racchiuso tra parentesi graffe: ‘{ }’

Formattazione Una singola istruzione per riga L’apertura di un blocco viene indentata per rendere più chiara la struttura

del blocco

class HelloWorld {public static main(String[] args) {

// visualizza un messaggio di salutoSystem.out.println(“Hello World !!”);

}}

Page 20: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

IDE

Page 21: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Integrated Development Environment (IDE) Un IDE è una applicazione grafica che fornisce al programmatore

un ambiente di sviluppo completo ma al tempo stesso semplice e chiaro

Tramite una interfaccia grafica (GUI) è possibile costruire il progetto, tenere sotto controllo le varie parti, effettuare il debugging e molto altro ancora

I più comuni ambienti di sviluppo Java sono: JBuilder – della Borland, a pagamento, ma è disponibile una versione

free (chiamata Foundation) NetBeans – della SunMicrosystem, free scaricabile dal sito www.java. Eclipse – della Eclipse Foundation

Page 22: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Integrated Development Environment (IDE) L’uso dei programmi da linea di comando javac e java viene

nascosto dalla IDE: Compilando il progetto, il software passa al compilatore tutti i files

necessari e genera i file .class Anche l’esecuzione del programma è gestita dall’interfaccia e richiede

solamente di specificare quale funzione main() mandare in esecuzione

Anche la gestione del path e del classpath è automatizzata e resa “friendly” dall’interfaccia grafica: Il path corrente è automaticamente inserito nel classpath Aggiungendo librerie automaticamente viene aggiunto il percorso al

classpath Ecc…

Page 23: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

NetBeans

L’ambiente che utilizzeremo in questo laboratorio è il NetBeans, ma tutto ciò che viene fatto è facilmente trasportabile su JBuilder o su Eclipse

Oltre alla libreria standard del Java, ogni IDE può mettere a disposizione librerie proprietarie da utilizzare nel progetto: Non sempre consigliato dato che una caratteristica molto importante del

Java è quella della trasferibilità del codice e molte volte l’uso di librerie proprietarie può limitare questa possibilità

Il NB mette a disposizione una gran quantità di tipologie di progetto: tramite un wizard è possibile scegliere il tipo di progetto, specificarne i

parametri ed iniziare a programmare

Page 24: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Esempio Proviamo adesso a creare una applicazione HelloWorld

utilizzando il NB

Prima di tutto avviamo il NB

Andiamo su File e selezioniamo new Possiamo creare direttamente una classe o un progetto. Nel primo

caso, viene richiesto comunque di creare un progetto per la classe. Una volta scelto il nome del progetto e dove salvarlo passiamo alla

creazione guidata della classe

Ci viene chiesto il nome della classe (HelloWorld) ed il package: Per adesso ignoriamo il package (lasciamo bianco il campo del

package) Notiamo l’opzione “generate main method” che permette di

generare uno “scheletro” per la funzione main all’interno della classe

Page 25: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Esempio

Inseriamo il codice Java nel file HelloWorld.java

Adesso possiamo compilare ed eseguire l’applicazione: Tramite il menù run lanciamo l’applicazione Notiamo la possibilità di lanciare l’applicazione anche sotto debug

class HelloWorld {public static void main(String[] args) {

System.out.println(“Hello World!”);}

}

Page 26: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Esempio

Nella finestra in basso vedremo visualizzato l’output dell’applicazione

E’ possibile verificare che anche in questo caso, rinominando la funzione main() in qualsiasi altro modo (anche Main()) il Netbeans ritorna errore

Page 27: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Debug

Page 28: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Debug in NetBeans

Un IDE permette di effettuare un’operazione molto utile al programmatore: Il debugging

Trovare i punti in cui il programma si comporta in maniera differente da quello che il creatore si aspettava è un lavoro molto difficile e costoso: Il debug a run-time permette di fissare dei break-point

Break-point: punto del programma in cui si desidera fermare il flusso delle istruzioni per verificare ed ispezionare lo stato dell’applicazione

Page 29: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Breakpoint

Viene selezionata la riga di codice in cui si desidera interrompere il programma

Quando l’esecuzione del programma raggiunge tale riga di codice, l’IDE interrompe l’esecuzione e permette all’utente di interagire con il programma: per esempio la lettura di alcuni valori attuali dell’applicazione

Una volta terminata la verifica è possibile “continuare” fino al break-point successivo o fino alla terminazione dell’applicazione

Inoltre esiste la modalità passo-passo in cui l’ambiente si ferma ad ogni istruzione

Page 30: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Esempio Riprendiamo l’applicazione HelloWorld

Inseriamo una istruzione per aumentare il numero di istruzioni: ES : una istruzione di assegnamento ad una variabile

int a = 4; Mettiamo un break-point nella istruzione successiva a questa

Lanciamo l’applicazione in modalità debug

Page 31: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Esempio

Vediamo che l’esecuzione si interrompe alla linea di codice con il break-point

A questo punto è possibile: ispezionare i contenuti dell’oggetto

Page 32: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Esempio

mettere dei watch sulle variabili

Page 33: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Esempio Infine è possibile “continuare” l’applicazione (F9) fino ad un successivo

break-point o alla fine, andare avanti passo-passo (F8), entrare all’interno della funzione corrente(F7), ecc…

Modo 1

Modo 2

Page 34: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Il JavaDoc

Page 35: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

Il JavaDoc

L’ambiente di sviluppo grafico permette di creare la documentazione in automatico: la Sun aveva previsto la possibilità di descrivere, mediante apposita

sintassi, le varie funzioni disponibili in ogni oggetto

Per creare una descrizione di una funzione è sufficiente inserire prima del metodo e fuori da ogni altra funzione la descrizione della funzione delimitata dalle sequenze /** e */

Aggiungendo il tool JavaDoc al progetto, è possibile creare la documentazione della classi e delle funzioni del progetto:

Page 36: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

JavaDoc Descrizione di una classe:

Quando inseriamo la sequenza /** il NB automaticamente inserisce i campi descrittivi della classe in cui l’autore può inserire la descrizione: titolo, descrizione, autore, versione, ecc…

Descrizione di una funzione Quando inseriamo la sequenza /** il NB crea automaticamente le righe

per la descrizione dei parametri di ingresso e di ritorno della funzione: Es:

@param args String[] indica che la funzione ha un parametro di ingresso args di tipo String[] L’autore della funzione può inserire la descrizione della funzione nella

prima riga del blocco generato automaticamente da NB

Page 37: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

JavaDoc – Esempio Creare una classe HelloWorld de-selezionando tutti i check-box

durante il wizard di NB: Verrà creata una classe semplice prova senza alcuna funzione o

variabile

Creiamo il JavaDoc per la classe:

class HelloWorld { }

/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2005</p> * <p>Company: </p> * @author not attributable * @version 1.0 */class HelloWorld { }

Page 38: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

JavaDoc – Esempio Creare una funzione nella classe HelloWorld (creiamo la funzione

main() che per ora è l’unica cha abbiamo visto come si scrive):

Creiamo il JavaDoc per questa funzione:

class HelloWorld {public static void main(String[] args) {}

}

class HelloWorld { /** * * @param args String[] */public static void main(String[] args) {}

}

Page 39: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

JavaDoc – Esempio Inseriamo il titolo e la descrizione della classe e la descrizione della

funzione

/** * <p>Title: Hello World</p> * <p>Description: Classe di prova per il JavaDoc</p> * <p>Copyright: Copyright (c) 2005</p> * <p>Company: </p> * @author not attributable * @version 1.0 */class HelloWorld {

/** * Funzione principale per il test * @param args String[] */public static void main(String[] args) {}

}

Page 40: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

JavaDoc – Esempio Compiliamo, solo il JavaDoc o tutto quanto ed apriamo il file

index.html del JavaDoc:

Page 41: Introduzione a JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA rigutini@dii.unisi.it

JavaDoc – Esempio La funzione è visualizzata in due punti:

nel sommario delle funzioni in cui viene mostrata una lista di tutte le funzioni con un breve descrizione (la prima riga del commento inserito)

nella sezione dettagli, in cui viene visualizzata tutta la descrizione