Metodologie di Programmazione: Lezioni

Riccardo Silvestri

Lezioni

  1. 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.
  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. Esempi. Esercizi.
  3. 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.
  4. 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.
  5. Classi astratte e interfacce
    Classi astratte: metodi astratti, protected. Design patterns: Template. Interfacce: contratto, metodi di default. Esempi. Esercizi.
  6. 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.
  7. 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.
  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. Classi locali
    Classi locali: motivazioni. Esempi: memoizzazione, visita di alberi. Classi anonime: factory methods. Esempi. Esercizi.
  10. Espressioni lambda
    Espressioni lambda e interfacce funzioni. Riferimenti a metodi e costruttori. Esempi. Esercizi.
  11. 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.
  12. 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.
  13. 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.
  14. Web e computazioni asincrone
    Web: URL, connessioni in java.net. Cenni su espressioni regolari: Pattern e Matcher. Computazioni asincrone: ExecutorService, Future. 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, synchronized, variabili atomiche. Esempi. Esercizi.
  16. 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.
  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. 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.
  19. JavaFX: mini Web Browser
    Inizio della costruzione di un mini Web Browser: WebView, WebEngine, ContextMenu, MenuItem, binding, task asincroni Worker. Esercizi.
  20. 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.
  21. JavaFX e Task Asincroni
    Task asincroni per downloading di immagini: Worker, Task, Service. Monitorare il progresso di un task: ProgressIndicator. Cancellare un task. Esercizi.
  22. Homework 3 e Progetto
    Discussione delle specifiche e dell'implementazione del terzo homework e del progetto.
  23. Game
    Sincronizzazione di thread con wait-notifyAll. Loading dinamico di classi da class file durante l'esecuzione. Esercizi.