Metodologie di Programmazione: Programma
Basi del linguaggio Java Installazione, compilazione ed esecuzione: JVM, JRE, JDK. IDE per Java. La piattaforma Java. Tipi e tipi primitivi, variabili locali e campi, operatori, metodi statici. Package e la struttura di un programma Java. I/O da console. Controllo del flusso, ricorsione. Array, array multidimensionali, inizializzazione di array. Enhanced for. La classe Arrays
. Argomenti dalla linea di comando. Numero variabile di parametri.
Classi e oggetti Programmazione orientata agli oggetti. Classi, costruttori, campi, metodi, overloading. Controllo dell'accesso, metodi getter e setter. Mutabilità e immutabilità. Enumerazioni. Responsabilità di una classe e incapsulamento. Classi annidate, classi interne, classi locali e anonime. Factory methods.
Ereditarietà e polimorfismo Estendere una classe. Costruttori e super
, overriding di metodi, polimorfismo e dynamic binding. Cast e instanceof
. final
applicato a metodi e classi. Sotto-tipi e array, super-/sotto-classe, super-/sotto-tipo. La classe Object
: metodi equals
e toString
. Gerarchie di classi.
Classi astratte e interfacce Metodi astratti, protected
. Contratto. Metodi di default. Ereditarietà multipla.
Genericità e collezioni Metodi generici, variabili di tipo, tipo inferito, type erasure. Tipi generici: invarianza dei tipi generici. Classi e interfacce generiche, tipi parametrici. Principali classi e interfacce di Collections. Tabelle hash e il metodo hashCode
. Rappresentazione di alberi tramite mappe. Wildcard: limitazioni extends
e super
.
Lambda Expressions e Streams Principi di programmazione funzionale in Java. Closures, esecuzione differita, interfacce funzionali. Riferimenti a metodi e costruttori. Funzioni di ordine superiore. I flussi Stream
: operazioni intermedie e terminali. Programmazione stile pipeline. Il tipo Optional
: motivazioni e uso. Le principali operazioni sui flussi e i collettori in Collectors
.
Errori ed eccezioni Errori ed eccezioni, catturare, dichiarare, creare e lanciare eccezioni. Gerarchia delle eccezioni. Eccezioni controllate, try-with-resources.
File e URL Localizzare file: percorsi Path
, informazioni circa file e directory. Lettura di file di testo: la classe Files
in java.nio.file
. Scrittura di testo in file: principali metodi. Lettura e scrittura di bytes in file. Le principali classi della piattaforma Java per i flussi di I/O. Web: URL, connessioni in java.net
.
Programmazione concorrente Programmazione multithreading: concetti di base. I threads: Thread
, creazione e vita di un thread. Uso di thread per la reattività di un'applicazione. Computazioni asincrone: ExecutorService
, Future
. Parallelizzare compiti ad alta intensità di calcolo: suddividere il lavoro, determinare il numero di thread e di task, bilanciamento del lavoro. Sincronizzazione: motivazioni, thread safety, synchronized
, variabili atomiche. Uso di esecutori (ExecutorService
) per eseguire molti task: CachedThreadPool
, WorkStealingPool
, ExecutorCompletionService
. Ridurre le dipendenze tra task. Ridurre la sincronizzazione. Strutture dati concorrenti, code sincronizzate. Uso del framework Fork-Join. Design pattern produttore-esecutore. Locks e sincronizzazione. Sincronizzazione di thread con wait
-notifyAll
. Operazioni parallele con Streams.
Interfacce grafiche Struttura di una applicazione JavaFX: JavaFX Application Thread, Stage
, Scene
, scene graph. Principali componenti di JavaFX per GUI: controlli e layout, binding. Task asincroni: Worker
, Task
, Service
, monitorare il progresso di un task ProgressIndicator
, cancellare un task. Risorse: grafica e multimedia. Programmazione ad eventi: gestione degli eventi, handler e listener.
Annotazioni, reflection e class loading Annotazioni e principali usi; introspezione del codice a runtime; loading dinamico di class file durante l'esecuzione.
Principi di sviluppo software Information hiding, disaccoppiare e astrarre; interfaccia-implementazione; ereditarietà versus composizione. Design patterns. Progettazione: specifiche, architettura software, estensibilità e riusabilità. Organizzazione e documentazione del codice. Testing e debugging.
Il programma dettagliato del corso è nelle note delle Lezioni, comprensive degli esercizi, negli homeworks e nel progetto (vedi Esami).
18 Feb 2016