JAVA JAVA Introduzione INTRODUZIONE C++ JDK e JRE API IDE (BLUEJ) Cross Platform Web Dinamico Versioni e IDE DIAPOSITIVA 2 1
JAVA La programmazione orientata agli oggetti JAVA La programmazione OOP Nascita della OOP NASCITA DELLA OOP 1970 Programmi Dati Algoritmo Sistema Programmazione strutturata Programmazione OOP DIAPOSITIVA 4 2
JAVA La programmazione OOP Classi e Oggetti CLASSI E OGGETTI Classe Cane Oggetto pabn Oggetto snoopy Oggetto scoobydoo Oggetto spank Oggetto pluto DIAPOSITIVA 5 JAVA La programmazione OOP Incapsulamento INCAPSULAMENTO ATTRIBUTI - nome - colori - tipo - amici - datanascita - difantasia - abilita Classe Cane METODI - abbaia () - scodinzola () - mangia () - gioca() DIAPOSITIVA 6 3
JAVA La programmazione OOP Ereditarietà EREDITARIETÀ Classe Cane Classe Alano Classe Barboncino Classe Mastino Classe Collie Classe PT DIAPOSITIVA 7 JAVA La programmazione OOP Polimorfismo POLIMORFISMO Classe PT Classe Cane Classe Collie commissariorex lassie DIAPOSITIVA 8 4
JAVA La programmazione OOP Linguaggi LINGUAGGI Linguaggi puri Linguaggi ibridi DIAPOSITIVA 9 JAVA La portabilità 5
JAVA Portabilità PORTABILITÀ Sistema Linux con JVM COMPILAZIONE INTERPRETAZIONE Codice Sorgente Bytecode Sistema MAC con JVM Java Runtime Enviroment (JVM e le librerie di classi) Compilatore ed altri strumenti JDK Sistema WIN con JVM DIAPOSITIVA 11 JAVA BlueJ 6
JAVA BLUEJ BLUEJ IDE per sviluppare in Java Multi-Piattaforma Licenza GNU Kent University BlueJ DIAPOSITIVA 13 JAVA BLUEJ Selezione JVM SELEZIONE JVM DIAPOSITIVA 14 7
JAVA BLUEJ Creazione di un progetto CREAZIONE PROGETTO Project New Project Raggiungi la posizione desiderata Digita il nome del progetto BlueJ crea una cartella con questo nome (che rappresenta il progetto) DIAPOSITIVA 15 JAVA BLUEJ Creazione di una classe CREAZIONE CLASSE Pulsante <New Class> BlueJ crea un file con questo nome DIAPOSITIVA 16 8
JAVA BLUEJ Creazione di una classe per eseguire codice CREAZIONE CLASSE PER ESEGUIRE CODICE DIAPOSITIVA 17 JAVA BLUEJ Creazione di una classe per eseguire codice CREAZIONE CLASSE PER ESEGUIRE CODICE DIAPOSITIVA 18 9
JAVA BLUEJ Creazione di una classe propriamente detta CREAZIONE CLASSE PROPRIAMENTE DETTA DIAPOSITIVA 19 JAVA BLUEJ Creazione di un oggetto CREAZIONE OGGETTO DIAPOSITIVA 20 10
JAVA BLUEJ Creazione di un oggetto CREAZIONE OGGETTO DIAPOSITIVA 21 JAVA Gli elementi del linguaggio 11
JAVA Gli elementi del Linguaggio Tipi di dato TIPI DI DATO TIPO BIT VALORI VALORI unsigned VALORE INIZIALE boolean 1 - - false char 16 unicode [0; 2 16-1] - \u0000 byte 8 [-128; 127] [0; 255] 0 short 16 [-2 15 ; 2 15-1] [0; 2 16-1 0 int 32 [-2 31 ; 2 31-1] [0; 2 32-1] 0 long 64 [-2 63 ; 2 63-1] [0; 2 64-1] 0 float 32 precisione singola 0.0 double 64 precisione doppia 0.0 void - - - - DIAPOSITIVA 23 JAVA Gli elementi del Linguaggio Operatori OPERATORI OPERATORI SIGNIFICATO ++ -- Autoincremento / decremento + - * / % Aritmetici + Concatenazione ==!= > >= < <= Confronto &&! Logici = Assegnazione += -= *= /= %= Assegnazione combinati. Accesso ai membri di un oggetto /*..*/ /**..*/ //.. Commenti DIAPOSITIVA 24 12
JAVA Gli elementi del Linguaggio Modificatori MODIFICATORI Modificatore Applicato a Significato unsigned attributi solo valori non negativi static attributi e metodi di classe (e non di ciascun oggetto) final attributi rende la variabile costante final classe rende la classe non estendibile final metodo rende impossibile l overriding del metodo DIAPOSITIVA 25 JAVA Gli elementi del Linguaggio Modificatori MODIFICATORI Modificatore Applicato a Significato public classi, attributi e metodi visibile da tutte le classi di tutti i package private classi, attributi e metodi visibile solo nella classe protected package classi, attributi e metodi classi, attributi e metodi visibile a tutte le classi dello stesso package (sottoclassi comprese) visibile a tutte le classi dello stesso package (sottoclassi escluse) abstract metodo è un metodo senza corpo abstract synchronized classe metodo classe non istanziabile: impone a tutte le sottoclassi di implementare tutti i metodi astratti è un metodo che accede a un dato da usare in mutua esclusione DIAPOSITIVA 26 13
JAVA Gli elementi del Linguaggio Istruzioni condizionali ISTRUZIONI CONDIZIONALI DIAPOSITIVA 27 JAVA Gli elementi del Linguaggio Istruzioni condizionali ISTRUZIONI CONDIZIONALI DIAPOSITIVA 28 14
JAVA Gli elementi del Linguaggio Istruzioni Iterative ISTRUZIONI ITERATIVE DIAPOSITIVA 29 JAVA Gli elementi del Linguaggio Variabili Reference VARIABILI REFERENCE DIAPOSITIVA 30 15
JAVA Metodi speciali JAVA Metodi Speciali Costruttori COSTRUTTORI Il costruttore è un metodo speciale che viene invocato da Java quando viene creata una nuova istanza di un oggetto (con l operatore new). Costruttore Si usa per inizializzare tutti gli attributi della classe Ha lo stesso nome della classe Non restituisce niente Non può essere invocato esplicitamente DIAPOSITIVA 32 16
JAVA Metodi Speciali Finalizzatore FINALIZZATORE Sappiamo che dichiarare una variabile di un certo oggetto alloca spazio solo per il riferimento all oggetto il quale verrà realmente allocato in memoria successivamente con l operatore new. Il Garbage Collector conta i riferimenti ai vari oggetti allocati e quando il numero di riferimenti è zero libera la memoria Garbage Collector Prima di eliminare un oggetto dalla memoria Java invoca il metodo finalize(), che può essere usato per chiudere file, chiudere connessioni a DB, ecc. DIAPOSITIVA 33 JAVA Metodi Speciali equals() EQUALS() DIAPOSITIVA 34 17
JAVA Metodi Speciali tostring() TOSTRING() DIAPOSITIVA 35 JAVA API e package 18
JAVA API e Package API E PACKAGE Un package è una libreria di classi. La gerarchia di package riflette la gerarchia a livello di file system. Package Per inserire una classe in un package non basta far risiedere il file che la definisce in una certa cartella, bisogna specificare: package <nome_package>; Quando in una classe si fa uso di classi di altri package, bisogna indicarlo: import <path_package>.*; DIAPOSITIVA 37 JAVA API e Package API E PACKAGE Le API delle librerie standard di Java vengono fornite con il JRE e consentono l indipendenza dal sistema. API Le API di Java coprono le esigenze base più disparate: dalla grafica alla gestione del multi-threading; dalle classi contenitore per i tipi base (più la classe String) alle classi per la gestione della programmazione su reti. http://download.oracle.com/javase/7/docs/api Documentazione Java 7 DIAPOSITIVA 38 19
JAVA Oveloading e Overriding JAVA Overloading ed Overriding OVERLOADING ED OVERRIDING Per overloading si intende la presenza nella stessa classe di più metodi con lo stesso nome ma con firme diverse. Overloading DIAPOSITIVA 40 20
JAVA Overloading ed Overriding OVERLOADING ED OVERRIDING Per overriding si intende la possibilità di riscrivere un metodo ereditato Overriding DIAPOSITIVA 41 JAVA La documentazione 21
JAVA La Documentazione LA DOCUMENTAZIONE Java offre lo strumento javadoc che interpretando il codice opportunamente commentato genera la documentazione del progetto in HTML. javadoc In BlueJ si trova in: Tools Project Documentation DIAPOSITIVA 43 JAVA La Documentazione DIAPOSITIVA 44 22
JAVA Gestione delle eccezioni JAVA Gestione delle eccezioni Sommario GESTIONE DELLE ECCEZIONI Classificazione degli errori La gerarchia delle classi Il blocco try-catch Propagazione dell eccezione Metodi della classe Exception DIAPOSITIVA 46 23
JAVA Gestione delle eccezioni Classificazione degli errori CLASSIFICAZIONE DEGLI ERRORI I seguenti eventi possono generare l arresto di un programma utente: l accesso a un vettore con un indice sbagliato il tentativo di apertura di un file che fallisce ecc. ecc. In questi casi il programma viene chiuso presentando a video un messaggio che riporta: - Il nome dell errore - La linea di codice che ha generato l errore - Lo stack dei metodi che hanno portato a quella linea di codice In alcune circostanze questo (spiacevole) comportamento si può evitare! DIAPOSITIVA 47 JAVA Gestione delle eccezioni Classificazione degli errori CLASSIFICAZIONE DEGLI ERRORI Java separa gli errori irreparabili (definiti appunto errori) da quelli che Invece non compromettono il proseguimento del programma (definiti eccezioni). Un errore potrebbe essere il malfunzionamento fisico di un dispositivo di sistema. Un errore non può essere gestito. Un eccezione potrebbe essere il tentativo di eseguire una divisione per zero. In questi casi si può pensare di gestire la situazione. DIAPOSITIVA 48 24
JAVA Gestione delle eccezioni Classificazione degli errori CLASSIFICAZIONE DEGLI ERRORI In un programma java quindi ci sono delle porzioni di codice che generano (sollevano) eccezioni e delle altre parti di codice che le gestiscono. Pertanto il programmatore nei confronti di una possibile eccezione può decidere di: - ignorarla - gestirla subito - gestirla altrove nel programma DIAPOSITIVA 49 JAVA Gestione delle eccezioni La gerarchia delle classi LA GERARCHIA DELLE CLASSI Le eccezioni sono organizzate in una gerarchia di classi dove la classe base è la classe Exception che viene specializzata in un certo numero di sottoclassi. http://download.oracle.com/javase/1.4.2/docs/api/java/lang/package-tree.html DIAPOSITIVA 50 25
JAVA Gestione delle eccezioni Il blocco try-catch IL BLOCCO TRY-CATCH Java permette di eseguire porzioni di codice potenzialmente pericoloso in un blocco try-catch. DIAPOSITIVA 51 JAVA Gestione delle eccezioni Il blocco try-catch IL BLOCCO TRY-CATCH Nel blocco try inserisco il codice potenzialmente pericoloso che viene eseguito tutto o fino al sollevamento dell eccezione. A seguire inserisco uno o più clausole catch: ogni clausola catch è in grado di catturare una singola eccezione o una famiglia di eccezioni. Se viene sollevata un eccezione durante l esecuzione del blocco try, si valutano in ordine tutti i catch: viene eseguito solo il blocco di codice del primo catch che è in grado di gestire l eccezione verificatasi. E se l eccezione verificatasi non è gestita da alcun catch? Che senso ha avere più catch? A seguire inserisco il blocco finally che viene sempre e comunque eseguito. DIAPOSITIVA 52 26
JAVA Gestione delle eccezioni Propagazione dell eccezione PROPAGAZIONE DELL ECCEZIONE Un catch è in grado di gestire una condizione anomala che si è verificata in un blocco try. Nel blocco try ci possono essere tante istruzioni e anche invocazioni di metodi. BLOCCO DI CODICE invoco il metodo x METODO x invoco il metodo y METODO y istruzione Qualora nell esecuzione di un metodo venga sollevata un eccezione e non venga gestita al suo interno, questa viene propagata al metodo chiamante. DIAPOSITIVA 53 JAVA Gestione delle eccezioni Metodi della classe Exception METODI DELLA CLASSE EXCEPTION In un modulo catch viene per definizione resa disponibile un istanza di una classe Exception o di una sua sottoclasse. Possiamo usare il metodo tostring che mostra il messaggio di errore. Possiamo usare il metodo printstacktrace() ereditato da Throwable per stampare l elenco dei metodi che non hanno gestito l eccezione. DIAPOSITIVA 54 27
JAVA Classi astratte ed interfacce JAVA Classi Astratte e Interfacce Classi Astratte CLASSI ASTRATTE Un metodo è astratto quando viene dichiarato con il modificatore abstract che sta ad indicare quanto segue: 1) Il metodo è privo di implementazione 2) Tutte le sottoclassi devono implementare questo metodo Metodi Astratti Se una classe ha anche un solo metodo abstract è essa stessa una classe astratta. Una classe astratta non può essere istanziata ed obbliga tutte le sue sottoclassi ad implementare tutti i suoi metodi abstract. Una classe può essere dichiarata astratta anche se non ha alcun metodo astratto Classi Astratte DIAPOSITIVA 56 28
JAVA Classi Astratte e Interfacce Interfacce INTERFACCE Le interfacce sono il metodo con il quale Java implementa la ereditarietà multipla. Un interfaccia è un contenitore simile a una classe ma che presenta qualche limitazione: 1) tutte le variabili (se ci sono) sono per definizione public static e final 2) tutti i metodi (se ci sono) sono per definizione abstract e public Le interfacce Una classe può implementare una o più interfacce (oltre che estendere una classe) in questo caso sarà obbligata ad implementare tutti i metodi delle interfacce. DIAPOSITIVA 57 JAVA Classi Astratte e Interfacce Interfacce INTERFACCE Per esempio una classe che implementa l interfaccia predefinita Comparable è tenuta a definire il metodo int compareto (Object) il quale viene adoperato in presenza di operatori di confronto. DIAPOSITIVA 58 29
JAVA File e Flussi JAVA File e Flussi Sommario FILE E FLUSSI Introduzione ai flussi La gerarchia delle classi Concatenazione dei flussi Input da tastiera File di testo File di dati DIAPOSITIVA 60 30
JAVA File e Flussi Introduzione ai Flussi INTRODUZIONE AI FLUSSI Java gestisce tutte le operazioni di I/O con il concetto di flusso (stream in inglese) Connessione remota Tastiera Flusso di Input Programma File di dati Risorsa esterna DIAPOSITIVA 61 JAVA File e Flussi Introduzione ai Flussi INTRODUZIONE AI FLUSSI Java gestisce tutte le operazioni di I/O con il concetto di flusso (stream in inglese) Connessione remota Flusso di Output Monitor Programma File di dati Risorsa esterna DIAPOSITIVA 62 31
JAVA File e Flussi Introduzione ai Flussi INTRODUZIONE AI FLUSSI Java gestisce tutte le operazioni di I/O con il concetto di flusso (stream in inglese) Un flusso di byte indica la trasmissione di dati strutturati Flusso di byte Un flusso di caratteri indica la trasmissione di testi Flusso di caratteri DIAPOSITIVA 63 JAVA File e Flussi La gerarchia delle classi LA GERARCHIA DELLE CLASSI Object Le classi per i flussi di caratteri Reader Writer BufferedReader InputStreamReader PrintWriter OutputStreamWriter FileReader FileWriter Object Le classi per i flussi di byte InputStream OutputStream FileInputStream ObjectInputStream FileOutputStream ObjectOutputStream DIAPOSITIVA 64 32
JAVA File e Flussi Concatenazione di flussi CONCATENAZIONE DI FLUSSI In entrambe le gerarchie ci sono due classi per l input e due classi per l output. Le due classi forniscono due punti di vista sullo stesso tipo di flusso. Queste due classi di solito si usano insieme: una di seguito all altra. Flusso Basso Livello Flusso Alto Livello Object Le classi per i flussi di caratteri Reader Writer BufferedReader InputStreamReader PrintWriter OutputStreamWriter FileReader FileWriter Object Le classi per i flussi di byte InputStream OutputStream FileInputStream ObjectInputStream FileOutputStream ObjectOutputStream DIAPOSITIVA 65 JAVA File e Flussi Input da tastiera INPUT DA TASTIERA L input da tastiera è visto come un flusso di caratteri che partono dallo standard input (tastiera) ed arrivano al programma. Tastiera Flusso di Input Programma Object Le classi per i flussi di caratteri Reader Writer BufferedReader InputStreamReader PrintWriter OutputStreamWriter FileReader FileWriter DIAPOSITIVA 66 33
JAVA File e Flussi Input da tastiera INPUT DA TASTIERA Con la classe InputStreamReader leggo i byte dallo standard input e li codifico in caratteri utilizzando un certo charset. La classe BufferedReader gestisce per noi un buffer in modo da fornire solo dati significati (si pensi al metodo readline()). Tastiera InputStreamReader BufferedReader Programma Object Le classi per i flussi di caratteri Reader Writer BufferedReader InputStreamReader PrintWriter OutputStreamWriter FileReader FileWriter DIAPOSITIVA 67 JAVA File e Flussi Input da tastiera INPUT DA TASTIERA Con la classe InputStreamReader leggo i byte dallo standard input e li codifico in caratteri utilizzando un certo charset. La classe BufferedReader gestisce per noi un buffer in modo da fornire solo dati significati (si pensi al metodo readline()). Tastiera InputStreamReader BufferedReader Programma DIAPOSITIVA 68 34
JAVA File e Flussi File di testo FILE DI TESTO Flusso di Input Flusso di Output File di testo Programma File di testo Apertura in sovrascrittura (o creazione) in scrittura (o append) in lettura Chiusura Scrittura Lettura Operazioni sui file Cominciamo a studiare l operazione di lettura. DIAPOSITIVA 69 JAVA File e Flussi File di testo Lettura FILE DI TESTO: LETTURA Prima di tutto dobbiamo aprire il file in lettura. Flusso di Input File di testo Programma Object Le classi per i flussi di caratteri Reader Writer BufferedReader InputStreamReader PrintWriter OutputStreamWriter FileReader FileWriter DIAPOSITIVA 70 35
JAVA File e Flussi File di testo Lettura FILE DI TESTO: LETTURA Con la classe FileReader leggo i caratteri dal file. La classe BufferedReader gestisce per noi un buffer in modo da fornire solo dati significativi (si pensi al metodo readline()). FileReader BufferedReader File di testo Programma Object Le classi per i flussi di caratteri Reader Writer BufferedReader InputStreamReader PrintWriter OutputStreamWriter FileReader FileWriter DIAPOSITIVA 71 JAVA File e Flussi File di testo Lettura FILE DI TESTO: LETTURA Con la classe FileReader leggo i caratteri dal file. La classe BufferedReader gestisce per noi un buffer in modo da fornire solo dati significativi (si pensi al metodo readline()). FileReader BufferedReader File di testo Programma DIAPOSITIVA 72 36
JAVA File e Flussi File di testo Scrittura FILE DI TESTO: SCRITTURA Prima di tutto dobbiamo aprire il file in scrittura. Flusso di Output Programma File di testo Object Le classi per i flussi di caratteri Reader Writer BufferedReader InputStreamReader PrintWriter OutputStreamWriter FileReader FileWriter DIAPOSITIVA 73 JAVA File e Flussi File di testo Scrittura FILE DI TESTO: SCRITTURA Con la classe FileWriter scrivo fisicamente sul file. La classe PrintWriter fornisce metodi di scrittura evoluti come print() e println(). PrintWriter FileWriter Programma File di testo Object Le classi per i flussi di caratteri Reader Writer BufferedReader InputStreamReader PrintWriter OutputStreamWriter FileReader FileWriter DIAPOSITIVA 74 37
JAVA File e Flussi File di testo Scrittura FILE DI TESTO: SCRITTURA Con la classe FileWriter scrivo fisicamente sul file. La classe PrintWriter fornisce metodi di scrittura evoluti come print() e println(). PrintWriter FileWriter Programma File di testo DIAPOSITIVA 75 JAVA File e Flussi File di testo Scrittura FILE DI TESTO: SCRITTURA DIAPOSITIVA 76 38
JAVA File e Flussi File di testo Scrittura FILE DI TESTO: SCRITTURA Le apertura in scrittura di un file consentono solo le due modalità indicate: - in sovrascrittura (creazione) - in append (aggiunta in coda) In nessun caso è possibile modificare o eliminare un valore archiviato in un file. DIAPOSITIVA 77 JAVA File e Flussi File di testo File di testo per dati FILE DI TESTO PER DATI Possiamo inserire (e poi leggere) in un file di testo anche valori di tipo diverso. In lettura, una volta acquisita la stringa: 10;3.14, possiamo separare i vari campi con uno strumento che si chiama StringTokenizer. DIAPOSITIVA 78 39
JAVA File e Flussi File di testo File di testo per dati FILE DI TESTO PER DATI È una classe del package java.util che separa una stringa in vari token separati da un delimitatore. StringTokenizer hasmoretoken() restituisce true se ci sono altri token da estarre nexttoken() restituisce il token attuale e si sposta su quello successivo DIAPOSITIVA 79 JAVA File e Flussi File strutturati FILE STRUTTURATI Flusso di Input Flusso di Output File di dati Programma File di dati Apertura in sovrascrittura (o creazione) in scrittura (o append) in lettura Chiusura Scrittura Lettura Operazioni sui file Cominciamo a studiare l operazione di lettura. DIAPOSITIVA 80 40
JAVA File e Flussi File strutturati Lettura FILE STRUTTURATI: LETTURA Prima di tutto dobbiamo aprire il file in lettura. Flusso di Input File di dati Programma Object Le classi per i flussi di byte InputStream OutputStream FileInputStream ObjectInputStream FileOutputStream ObjectOutputStream DIAPOSITIVA 81 JAVA File e Flussi File strutturati Lettura FILE STRUTTURATI: LETTURA Con la classe FileInputStream leggo i byte dal file. La classe ObjectInputStream formatta questi dati nel tipo richiesto: fornisce infatti metodi come readint(), readdouble(), readbool() e anche readobject() (per gli oggetti). FileInputStream ObjectInputStream File di dati Programma Object Le classi per i flussi di byte InputStream OutputStream FileInputStream ObjectInputStream FileOutputStream ObjectOutputStream DIAPOSITIVA 82 41
JAVA File e Flussi File strutturati Lettura FILE STRUTTURATI: LETTURA Con la classe FileInputStream leggo i byte dal file. La classe ObjectInputStream formatta questi dati nel tipo richiesto: fornisce infatti metodi come readint(), readdouble(), readbool() e anche readobject() (per gli oggetti). FileInputStream ObjectInputStream File di dati Programma Object Le classi per i flussi di byte InputStream OutputStream FileInputStream ObjectInputStream FileOutputStream ObjectOutputStream DIAPOSITIVA 83 JAVA File e Flussi File strutturati Scrittura FILE STRUTTURATI: SCRITTURA Prima di tutto dobbiamo aprire il file in scrittura. Flusso di Output Programma File di dati Object Le classi per i flussi di byte InputStream OutputStream FileInputStream ObjectInputStream FileOutputStream ObjectOutputStream DIAPOSITIVA 84 42
JAVA File e Flussi File strutturati Scrittura FILE STRUTTURATI: SCRITTURA Con la classe FileOutputStream scrivo fisicamente sul file. La classe ObjectOutputStream fornisce metodi come writeint(), writedouble(), writebool() e anche writeobject() (per gli oggetti). ObjectOutputStream FileOutputStream Programma File di testo Object Le classi per i flussi di byte InputStream OutputStream FileInputStream ObjectInputStream FileOutputStream ObjectOutputStream DIAPOSITIVA 85 JAVA File e Flussi File strutturati Scrittura FILE STRUTTURATI: SCRITTURA Con la classe FileOutputStream scrivo fisicamente sul file. La classe ObjectOutputStream fornisce metodi come writeint(), writedouble(), writebool() e anche writeobject() (per gli oggetti). ObjectOutputStream FileOutputStream Programma File di testo DIAPOSITIVA 86 43
JAVA File e Flussi File strutturati Scrittura FILE STRUTTURATI: SCRITTURA La classe UnaClasseQualsiasi per potere essere usata come argomento di writeobject() deve implementare l interfaccia Serializable. DIAPOSITIVA 87 JAVA Gestione del Multithreading 44
JAVA Gestione del Multi-threading Introduzione MULTI-THREADING Con il termine thread (processo leggero) si indicano le varie trame (o filoni) di un processo. Thread Supponiamo per esempio che un processo avvii un nuovo thread per farsi aiutare nel portare avanti un lavoro. DIAPOSITIVA 89 JAVA Gestione del Multi-threading Introduzione MULTI-THREADING Con il termine thread (processo leggero) si indicano le varie trame (o filoni) di un processo. Thread Un processo (o anche un thread) può avviare un numero imprecisato di thread. DIAPOSITIVA 90 45
JAVA Gestione del Multi-threading Introduzione MULTI-THREADING Con il termine thread (processo leggero) si indicano le varie trame (o filoni) di un processo. Thread Inoltre un processo potrebbe anche avviare più thread e poi morire. DIAPOSITIVA 91 JAVA Gestione del Multi-threading Introduzione MULTI-THREADING Con il termine thread (processo leggero) si indicano le varie trame (o filoni) di un processo. Thread Ovviamente non tutti i thread devono completare il lavoro loro assegnato contemporanemente DIAPOSITIVA 92 46
JAVA Gestione del Multi-threading Introduzione MULTI-THREADING Con il termine thread (processo leggero) si indicano le varie trame (o filoni) di un processo. Thread Il multi-threading può essere adoperato quando un processo deve svolgere diverse attività in contemporanea. Multi-threading Per esempio, quando si esegue un programma Java, in realtà si lancia il processo della JVM (java.exe) il quale lancia diversi thread: il gestore degli eventi utili alla grafica, il garbage collector, il programma utente java mandato in esecuzione, ecc. DIAPOSITIVA 93 JAVA Gestione del Multi-threading Informazioni sul thread corrente INFORMAZIONI SUL THREAD CORRENTE Cominciamo ad imparare come leggere e modificare informazioni relative al thread del programma in esecuzione ESERCIZIO 00-00-04-13 DIAPOSITIVA 94 47
JAVA Gestione del Multi-threading La classe Thread LA CLASSE THREAD E se volessimo avviare un thread dal main? Una strada è quella di creare una nuova classe che deriva da Thread Una sottoclasse di Thread deve fare overriding del metodo run() che viene invocato dalla JVM all avvio del thread e contiene il lavoro del thread Una volta istanziata la classe possiamo avviare il thread (metodo start), fermarlo (metodo stop), e/o distruggerlo (metodo destroy). DIAPOSITIVA 95 JAVA Gestione del Multi-threading La classe Thread Un esempio monothread Margherita: i costruttori MARGHERITA: I COSTRUTTORI ESERCIZIO 00-00-03-14 DIAPOSITIVA 96 48
JAVA Gestione del Multi-threading La classe Thread Un esempio monothread Margherita: il metodo run() MARGHERITA: IL METODO RUN() ESERCIZIO 00-00-03-14 DIAPOSITIVA 97 JAVA Gestione del Multi-threading La classe Thread Un esempio monothread Margherita: uso numero 1 MARGHERITA: USO #1 ESERCIZIO 00-00-03-14 DIAPOSITIVA 98 49
JAVA Gestione del Multi-threading La classe Thread Un esempio monothread Margherita: uso numero 2 MARGHERITA: USO #2 ESERCIZIO 00-00-03-14 DIAPOSITIVA 99 JAVA Gestione del Multi-threading La classe Thread Un esempio monothread Margherita: uso numero 3 MARGHERITA: USO #3 ESERCIZIO 00-00-03-14 DIAPOSITIVA 100 50
JAVA Gestione del Multi-threading La classe Thread Un esempio multi-thread Margherita MARGHERITA E se volessimo avviare più thread dal main? Modifichiamo l esempio in modo che ogni thread stampi il suo output in una certa colonna a se intestata. DIAPOSITIVA 101 JAVA Gestione del Multi-threading La classe Thread Un esempio multi-thread Margherita: i costruttori MARGHERITA: I COSTRUTTORI ESERCIZIO 00-00-03-15 DIAPOSITIVA 102 51
JAVA Gestione del Multi-threading La classe Thread Un esempio multi-thread Margherita: il metodo run() MARGHERITA: IL METODO RUN() ESERCIZIO 00-00-03-15 DIAPOSITIVA 103 JAVA Gestione del Multi-threading La classe Thread Un esempio multi-thread Margherita: uso numero 1 MARGHERITA: USO #1 ESERCIZIO 00-00-03-15 DIAPOSITIVA 104 52
JAVA Gestione del Multi-threading La classe Thread Un esempio multi-thread Margherita: uso numero 2 MARGHERITA: USO #2 ESERCIZIO 00-00-03-15 DIAPOSITIVA 105 JAVA Gestione del Multi-threading La classe Thread Un esempio multi-thread Margherita: uso numero 3 MARGHERITA: USO #3 ESERCIZIO 00-00-03-15 DIAPOSITIVA 106 53
JAVA Gestione del Multi-threading La classe Thread Un esempio multi-thread Margherita: uso numero 4 MARGHERITA: USO #4 ESERCIZIO 00-00-03-15 DIAPOSITIVA 107 JAVA Gestione del Multi-threading La classe Thread Un esempio multi-thread Margherita: uso numero 5 MARGHERITA: USO #5 Se imposto ad un valore casuale la quantità di tempo che un thread deve aspettare prima di passare al petalo successivo ottengo un interfogliamento meno banale. ESERCIZIO 00-00-03-15 DIAPOSITIVA 108 54
JAVA Gestione del Multi-threading L interfaccia Runnable L INTERFACCIA RUNNABLE E se la mia classe thread è già sottoclasse di qualcun altro? L ereditarietà multipla in Java si ottiene con le interfacce. Una classe che implementa l interfaccia Runnable è tenuta a implementare il metodo run(). Un oggetto di una siffatta classe può essere abbinato ad un oggetto della classe Thread. Runnable La classe Thread ha tra gli altri un costruttore che prende come argomento un riferimento ad un oggetto che implementi l interfaccia Runnable. Il riferimento all oggetto stesso this è un riferimento valido in tal senso. DIAPOSITIVA 109 JAVA Gestione del Multi-threading L interfaccia Runnable un esempio multi-thread Margherita Runnable: attributi e costruttore MARGHERITA RUNNABLE: ATTRIBUTI E COSTRUTTORE ESERCIZIO 00-00-04-16 DIAPOSITIVA 110 55
JAVA Gestione del Multi-threading L interfaccia Runnable un esempio multi-thread Margherita Runnable: gli altri costruttori MARGHERITA RUNNABLE: GLI ALTRI COSTRUTTORI ESERCIZIO 00-00-04-16 DIAPOSITIVA 111 JAVA Gestione del Multi-threading L interfaccia Runnable un esempio multi-thread Margherita Runnable: i metodi da inoltrare MARGHERITA RUNNABLE: I METODI DA INOLTRARE Il metodo run() non subisce modifche ESERCIZIO 00-00-04-16 DIAPOSITIVA 112 56
JAVA Gestione del Multi-threading L interfaccia Runnable un esempio multi-thread Margherita Runnable: usi numeri 1 e 2 MARGHERITA RUNNABLE: USI #1 E #2 Questa classe Margherita può essere utilizzata esattamente come quella precedente che estendeva Thread. ESERCIZIO 00-00-04-16 DIAPOSITIVA 113 JAVA Gestione del Multi-threading L interfaccia Runnable un esempio multi-thread Margherita Runnable: uso numero 3 MARGHERITA RUNNABLE: USO #3 Questa classe Margherita può essere utilizzata esattamente come quella precedente che estendeva Thread. ESERCIZIO 00-00-04-16 DIAPOSITIVA 114 57
JAVA Gestione del Multi-threading L interfaccia Runnable un esempio multi-thread Margherita Runnable: uso numero 4 MARGHERITA RUNNABLE: USO #4 Questa classe Margherita può essere utilizzata esattamente come quella precedente che estendeva Thread. ESERCIZIO 00-00-04-16 DIAPOSITIVA 115 JAVA Gestione del Multi-threading L interfaccia Runnable Altri usi possibili ALTRI USI DI RUNNABLE Abbiamo dichiarato un oggetto di tipo Thread nella classe Margherita e inoltrato alcuni metodi tipici. Alternativamente a ciò si potrebbe: Scrivere il solo metodo run() nella classe che implementa Runnable Nel main (o altrove) istanziare un oggetto di questa classe istanziare un oggetto di tipo Thread al quale si lega l oggetto appena istanziato fare uso dei metodi start(), stop(), getname(), ecc, dell oggetto di tipo Thread Questa soluzione induce a produrre un codice meno pulito ma in alcuni casi può risultare utile DIAPOSITIVA 116 58
MUTUA ESCLUSIONE Quando un dato deve essere usato in mutua esclusione da Thread diversi, i metodi che accedono a questo dato devono essere dichiarati con il modificatore synchronized Utente 1 Operatore Posti Disponibili Utente 2 00-00-03-20 ESERCIZIO DIAPOSITIVA 117 JAVA Gestione del Networking NETWORKING 401 144 DIAPOSITIVA 118 59