Riccardo Silvestri
Programma
Programma sintetico
- Basi del linguaggio Java: JVM, JRE, JDK, la piattaforma; tipi primitivi, operatori, metodi, controllo del flusso; ricorsione; I/O da console; struttura di un programma.
- Classi e oggetti: programmazione orientata agli oggetti; classi, costruttori, campi, metodi, overloading; controllo dell'accesso; creazione di oggetti; array; enumerazioni; responsabilità di una classe e incapsulamento; classi annidate, classi interne, classi locali e anonime.
- Ereditarietà e polimorfismo: estendere una classe, overriding di metodi, polimorfismo e dynamic binding; super-/sotto-classe, super-/sotto-tipo; gerarchie di classi.
- Errori ed eccezioni: eccezioni, catturare, dichiarare, creare e lanciare eccezioni, gerarchia delle eccezioni; eccezioni controllate.
- File e URL: lettura e scrittura; lavorare con il filesystem; risorse dal web; le principali classi della piattaforma Java per i flussi di I/O.
- Classi astratte e interfacce: metodi astratti, contratto, ereditarietà multipla.
- Principi di sviluppo software: information hiding, disaccoppiare e astrarre; interfaccia-implementazione; ereditarietà versus composizione; testing e debugging; design patterns; riuso del codice, organizzazione e documentazione.
- Strumenti: strumenti per sviluppo di gruppo, testing/debugging e deployment.
- Genericità e collezioni: metodi generici; variabili di tipo, classi e interfacce generiche; tipi parametrici; principali classi e interfacce di Collections.
- Lambda Expressions: principi di programmazione funzionale in Java; closures, esecuzione differita, interfacce funzionali; funzioni di ordine superiore; Streams e operazioni di massa.
- Annotazioni e reflection: annotazioni e principali usi; introspezione del codice a runtime; loading di classi e risorse.
- Programmazione concorrente: threads, thread safety, valori atomici e strutture dati concorrenti, locks e sincronizzazione; computazioni asincrone; operazioni parallele con Streams; processi;
- Interfacce grafiche: struttura di una applicazione JavaFX; principali componenti di JavaFX per GUI, grafica e multimedia; programmazione ad eventi.
- Argomenti opzionali: API per compilare, API per scripting, ambiente REPL Nashorn, shell scripting; database programming; espressioni regolari.
Programma dettagliato
Il programma dettagliato del corso è nelle note delle Lezioni, comprensive degli esercizi, gli homeworks e il progetto (vedi Esami).