Metodologie di Programmazione: Lezioni

Riccardo Silvestri

Lezioni

  1. Inizio
    Il linguaggio java e la sua installazione. Compilazione ed esecuzione. Breve guida ad un IDE intellij. Panoramica degli elementi di base di Java: struttura di una classe, commenti, tipi e tipi primitivi, variabili locali e campi, metodi. Package e la struttura di un programma Java. I/O da console. Operatori aritmetici, relazionali e booleani. Controllo del flusso. Esempi tramite metodi statici. Esercizi.
  2. 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 con try-catch. Esempi. Esercizi.
  3. Classi e Oggetti
    Orientazione agli oggetti. Come definire nuovi tipi di oggetti: costruttori, metodi getter e setter, membri statici e non statici. Mutabilità e immutabilità. Classi annidate statiche. Errori ed eccezioni (seconda parte): lanciare eccezioni, throw. Esempi. Esercizi.
  4. Ereditarietà
    Estendere e condividere. Ereditarietà: extends, 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.
  5. Classi astratte e interfacce
    Classi astratte abstract: metodi astratti, modificatore protected. Design patterns: Template. Interfacce interface: implements, contratto, metodi di default. Esempi. Esercizi.
  6. Genericità
    Metodi generici: variabili di tipo, tipo inferito, type erasure. Tipi generici: invarianza dei tipi generici. Classi generiche. Interfacce generiche: Comparable<T>. Esempi. Esercizi.
  7. Collezioni
    Panoramica delle principali interfacce e classi del framework Collections: Collection<E>, List<E>, Set<E>, Map<E>. Tabelle hash e il metodo hashCode. Rappresentazione di alberi tramite mappe. Genericità (seconda parte): wildcard, limitazioni extends e super. Esempi. Esercizi.
  8. 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.
  9. Strutturare codice
    Presentazione del primo homework. Discussione del framework dell'homework e i principi di base per strutturare e organizzare il codice per evitare replicazione di codice, favorire l'estensibilità e il riuso del codice tramite appropriata introduzione e definizione di interfacce e classi e uso della genericità, anche allo scopo di scrivere codice più snello e leggibile e per facilitarne la manutenzione, il testing e il debugging.
  10. Classi locali
    Classi locali: motivazioni. Esempi: memoizzazione, visita di alberi. Visitor design pattern. Classi anonime: factory methods. Factory design pattern. Esempi. Esercizi.
  11. Espressioni lambda
    Stile di programmazione funzionale. Espressioni lambda e interfacce funzionali. Riferimenti a metodi e costruttori. Esempi. Esercizi.
  12. Streams
    I flussi Stream e le loro operazioni: operazioni intermedie e terminali. Pipeline e programmazione stile dichiarativo. Il tipo Optional: motivazioni e uso. Le principali operazioni sui flussi e i collettori in Collectors. Esempi. Esercizi.
  13. Threads
    La programmazione multithreading (o concorrente): concetti di base. I threads: oggetti Thread, creazione, stati della vita di un thread Thread.State, thread corrente Thread.currentThread(), interruzione di un thread interrupt e "addormentamento" Thread.sleep. Uso di thread per la reattività di un'applicazione. Informazioni sui thread attivi: daemon threads, Thread.getAllStackTraces(). Esempi. Esercizi.
  14. Web e computazioni asincrone
    Web: URL, connessioni in java.net, downloading di una pagina web. Cenni su espressioni regolari: Pattern e Matcher. Computazioni asincrone: ExecutorService, Future, Executors. Esecuzioni multithreading per interrogare servizi web. Esempi. Esercizi.
  15. 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, race condition, synchronized, variabili atomiche, visibilità e volatile. Strategie per thread safety: dati condivisi, confinamento, immutabilità e lock. Esempi. Esercizi.
  16. Coordinare task
    Tecniche per coordinare task concorrenti. Uso di ExecutorService per eseguire molti task: CachedThreadPool e WorkStealingPool. Ridurre le dipendenze tra task. Uso di ExecutorCompletionService e LongAdder. Design pattern produttore-esecutore: code sincronizzate ConcurrentLinkedQueue. Uso del framework Fork-Join. Esempi. Esercizi.
  17. 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.
  18. JavaFX: mini Web Browser
    Costruzione di un mini Web Browser con JavaFX: WebView, WebEngine, ContextMenu, MenuItem. Proprietà e binding. Task asincroni: Worker. Icone e risorse. Esercizi.
  19. Homework 2 Presentazione del secondo homework.
  20. JavaFX e Task Asincroni
    Task asincroni per downloading di immagini: Worker, Task, Service. Esecuzione asincrona sul JavaFX Application Thread: Platform.runLater. Monitorare il progresso di un task: ProgressIndicator. Cancellare un task. Esercizi.
  21. Progetto Presentazione del progetto.
  22. Game I
    Inizio implementazione gioco tipo Find-Treasure. JavaFX: gestione eventi mouse per muovere forme, grafica 2D, Canvas. Generazione labirinti.
  23. Game II
    Completamento implementazione del gioco Find-Treasure. Sincronizzazione di thread: wait-notify, esecuzioni periodiche con Timeline. Loading di class file: URLClassLoader.
  24. Reflection
    Introduzione alla reflection. Le principali classi e metodi: Class, Method, Constructor, Field, Parameter. Trattamento dei tipi: Type, ParameterizedType. Esempi. Esercizi.

23 Mag 2016