JAVA INTRODUZIONE C++ JDK e JRE API IDE (BLUEJ) JAVA Introduzione. Versioni e IDE DIAPOSITIVA 2 ALESSANDRO URSOMANDO



Documenti analoghi
Corso sul linguaggio Java

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

20 - Input/Output su File

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Oggetti Lezione 3. aspetti generali e definizione di classi I

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Programmazione a Oggetti Lezione 10. Ereditarieta

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Gestione delle Eccezioni

Java Virtual Machine

Il linguaggio Java I file sequenziali

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Corso di Informatica

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Un flusso (stream) è una astrazione che produce e/o consuma informazioni.

Concetto di Funzione e Procedura METODI in Java

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Telematica II 17. Esercitazione/Laboratorio 6

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Realizzazione di una classe con un associazione

GESTIONE DEI PROCESSI

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

I file di dati. Unità didattica D1 1

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

Struttura di un programma Java

Input/Output in Java

Modulo 4: Ereditarietà, interfacce e clonazione

Inizializzazione, Assegnamento e Distruzione di Classi

Flussi, lettori e scrittori

dall argomento argomento della malloc()

Progettazione : Design Pattern Creazionali

LABORATORIO DI INFORMATICA parte 6 -

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione in Java Parte I: Fondamenti

Corso Android New Edition Corso Online Programmatore Android New Edition

Esercizi su. Funzioni

Tecnologie di Sviluppo per il Web

Gestione di errori e situazioni eccezionali. Gestione delle eccezioni. Gestione tradizionale di errori e situazioni eccezionali (2)

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD

Java: Compilatore e Interprete

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Test di unità con JUnit4

UML Diagrammi delle classi. UML Diagramma classi 1

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione

Funzioni in C. Violetta Lonati

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse

Multithreading in Java. Fondamenti di Sistemi Informativi

4. Un ambiente di sviluppo per Java

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

Introduzione alla programmazione in C

Arduino: Programmazione

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

Esercitazione n 4. Obiettivi

Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione

Proff. Fabio Ciao e Raffaele Bortone

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Parola chiave extends

Architettura MVC-2: i JavaBeans

Programmazione concorrente in Java. Dr. Paolo Casoto, Ph.D

3. La sintassi di Java

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux


Approccio stratificato

Prova di Laboratorio di Programmazione

Utilizzo delle classi

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe È qualcosa che abbiamo già visto varie volte

Linguaggio C. Fondamenti. Struttura di un programma.

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Socket & RMI Ingegneria del Software - San Pietro

Oggetto: MASTER DI ALTA FORMAZIONE PROFESSIONALE IN PROGRAMMATORE JAVA PARTECIPAZIONE GRATUITA

Gestione dei File in C

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Adobe Flash CS5.5 e Web Animation. Lezione 7: introduzione ad ActionScript 3.0, livelli guida, realizzazione di un player audio in streaming

Guida all uso di Java Diagrammi ER

Le variabili. Olga Scotti

Esercitazione N7:Gioco dei 21 fiammiferi (impariamo java giocando)

Esempi di algoritmi. Lezione III

Mac Application Manager 1.3 (SOLO PER TIGER)

Programmazione a Oggetti Modulo B

Architetture Applicative

Variabili e tipi di dato

Informatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1)

Eclipse - Nozioni Base

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Introduzione all uso di Eclipse

Introduzione a Classi e Oggetti

5.3 TABELLE RECORD Inserire, eliminare record in una tabella Aggiungere record Eliminare record

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1)

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

La selezione binaria

Transcript:

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