Riccardo Silvestri
Lezioni
- Inizio
Il linguaggio java e la sua installazione. Il primo programma, compilazione ed esecuzione. Breve guida ad un IDE intellij. Primi rudimenti di Java: struttura di una classe, commenti, tipi e tipi primitivi, variabili locali e campi, operatori aritmetici, metodi. Package e la struttura di un programma Java. I/O da console. Controllo del flusso. Esempi tramite metodi statici. Operatori relazionali e booleani. Esercizi.
- Array ed eccezioni
Array, array multidimensionali, inizializzazione di array. Enhanced for. La classe Arrays
. Argomenti dalla linea di comando. Numero variabile di parametri. Errori ed eccezioni (prima parte): catturare eccezioni. Esempi. Esercizi.
- Classi e Oggetti
Orientazione agli oggetti. Come definire nuovi tipi di oggetti: costruttori, metodi getter e setter. Mutabilità e immutabilità. Classi annidate. Errori ed eccezioni (seconda parte): lanciare eccezioni. Esempi. Esercizi.
- Ereditarietà
Estendere e condividere. Ereditarietà e polimorfismo. Super-classe/sotto-classe, super-tipo/sotto-tipo. Costruttori e super
. Ridefinire, @Override
, dynamic binding. Cast e instanceof
. final
applicato a metodi e classi. Sotto-tipi e array. La classe Object
: metodi equals
e toString
. Esempi. Esercizi.
- Classi astratte e interfacce
Classi astratte: metodi astratti, protected
. Design patterns: Template. Interfacce: contratto, metodi di default. Esempi. Esercizi.
- Genericità I
Metodi generici: variabili di tipo, tipo inferito, type erasure. Tipi generici: invarianza dei tipi generici. Classi generiche. Interfacce generiche: Comparable<T>
. Esempi. Esercizi.
- Collezioni
Panoramica delle principali interfacce e classi del framework Collections: Collection
, List
, Set
, Map
. Tabelle hash e il metodo hashCode
. Rappresentazione di alberi tramite mappe. Genericità II: wildcard, limitazioni extends
e super
. Esempi. Esercizi. Presentazione del primo homework.
- Files
Localizzare file: percorsi Path
, informazioni circa file e directory. Errori ed eccezioni (terza parte): checked exception, gerarchia delle eccezioni, try-with-resources. 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. Esempi. Esercizi.
- Classi locali
Classi locali: motivazioni. Esempi: memoizzazione, visita di alberi. Classi anonime: factory methods. Esempi. Esercizi.
- Espressioni lambda
Espressioni lambda e interfacce funzioni. Riferimenti a metodi e costruttori. Esempi. Esercizi.
- Estensibilità e riusabilità
Discussione dei principi di progettazione software: estensibilità, riusabilità e information hiding. Anche in relazione alle strutture dei due homework. Rivisitazioni di concetti, discussione di esercizi e presentazione del secondo homework.
- Streams
I flussi Stream
e le loro operazioni: operazioni intermedie e terminali. Programmazione stile pipeline. Il tipo Optional
: motivazioni e uso. Le principali operazioni sui flussi e i collettori in Collectors
. Esempi. Esercizi.
- Threads
La programmazione multithreading: concetti di base. I threads: Thread
, creazione e vita di un thread. Uso di thread per la reattività di un'applicazione. Esempi. Esercizi. Discussione degli errori più comuni nei primi due homework e del ruolo del testing.
- Web e computazioni asincrone
Web: URL, connessioni in java.net
. Cenni su espressioni regolari: Pattern
e Matcher
. Computazioni asincrone: ExecutorService
, Future
. Esempi. Esercizi.
- Parallelismo e sincronizzazione
Parallelizzare compiti ad alta intensità di calcolo: suddividere il lavoro, determinare il numero di thread e di task, bilanciamento del lavoro. Sincronizzazione: motivazioni, synchronized
, variabili atomiche. Esempi. Esercizi.
- Coordinare task
Uso di esecutori (ExecutorService
) per eseguire molti task: CachedThreadPool
e WorkStealingPool
. Ridurre le dipendenze tra task: ExecutorCompletionService
, LongAdder
. Ridurre la sincronizzazione. Design pattern produttore-esecutore: code sincronizzate. Uso del framework Fork-Join. Esempi. Esercizi.
- Hello JavaFX
Le basi di JavaFX: JavaFX Application Thread, Stage
, Scene
, scene graph. Controlli e layout: Group
, VBox
, HBox
, Button
, Slider
, ComboBox
. Gestione degli eventi: handler e listener. Esempi. Esercizi.
- Il progetto
Partendo da richieste di desiderata relativamente a un'applicazione WSA si cerca di arrivare a una descrizione sufficientemente precisa delle funzionalità e ad una specifica ad alto livello dell'architettura software dell'applicazione.
- JavaFX: mini Web Browser
Inizio della costruzione di un mini Web Browser: WebView
, WebEngine
, ContextMenu
, MenuItem
, binding, task asincroni Worker
. Esercizi.
- JavaFX: mini Web Browser II
Continua la costruzione di un mini Web Browser. Visualizzazione dell'albero di Parsing: TreeView
, org.w3c.dom.Document
SplitPane
, ToggleButton
, Tooltip
, TreeCell
. Risorse: immagini per icone, Image
e ImageView
. Esercizi.
- JavaFX e Task Asincroni
Task asincroni per downloading di immagini: Worker
, Task
, Service
. Monitorare il progresso di un task: ProgressIndicator
. Cancellare un task. Esercizi.
- Homework 3 e Progetto
Discussione delle specifiche e dell'implementazione del terzo homework e del progetto.
- Game
Sincronizzazione di thread con wait
-notifyAll
. Loading dinamico di classi da class file durante l'esecuzione. Esercizi.