mercoledì 30 maggio 2018

Lezione 30/05/2018: esercizi su ricorsione e design pattern

Controllo ricorsivo di una stringa palindroma. Il problema delle regine. Ricerca binaria ricorsiva. Esercizi sui design pattern: Configuration con singoletto e singoletti multipli; publisher/subscriber per eventi di bottoni; strategy per l'ordinamento di sequenze; builder eager e lazy su ListaDiInteri.

martedì 29 maggio 2018

Lezione del 29/05/2018: i moduli (Java 9); decorator pattern; rassegna su input/output; serializzazione

I moduli di Java 9. Motivazioni, parole chiave module, exports, requires, requires transitive. Utilizzo di moduli pre-Java 9 mediante classpath (unnamed module) e come moduli automatici (nel module path).


Il Decorator Pattern: aggiungere responsabilità a una classe senza che essa lo sappia. L'esempio della rappresentazione grafica delle automobili.
 
Input & output: gli oggetti System.out e System.in. InputStream, PrintStream e la classe Scanner. File di testo e file binari. Gli stream. Gerarchie di classi stream. Leggere e scrivere un file di testo: la classe java.io.File. BufferedReader/FileReader, BufferedWriter/FileWriter. Leggere e scrivere un file di testo formattato: le classi Formatter e Scanner. Il package java.nio: Path, Paths e Files. Serializzare e deserializzare un oggetto. L'interfaccia Serializable. La parola chiave transient.

venerdì 25 maggio 2018

Lezione del 25/05/2018: Factory, Builder, Singleton

Separare la creazione degli oggetti. Il Simple Factory e il Factory Pattern. Permettere una singola istanza per una classe: il Singleton Pattern. L'esempio di Paperino e della rete semantica. Il Builder pattern.

mercoledì 23 maggio 2018

Lab del 23/05/2018: esercizi su ricorsione, stream e design pattern

Ricorsione: generazione di stringhe binarie con predicato filtrante; visita e stampa ricorsiva del contenuto di una cartella. Stream: l'esercizio Titolo con tutti i punti (ultima diapositiva della lezione sugli stream). Design pattern: array con ordinamento flessibile (strategy pattern).


martedì 22 maggio 2018

Lezione del 22/05/2018: design pattern; reactive stream; esercizio su ricorsione

Che cos'è un design pattern. Lo Strategy Pattern: il simulatore di anatre. L'Observer Pattern: un'applicazione di monitoraggio del tempo. La metafora dell'abbonamento. java.util.Observable e java.util.Observer. Reactive stream: Publisher, Subscriber, Subscription e Processor. Esercizio sulla ricorsione: generare tutte le stringhe binarie di lunghezza n.

venerdì 18 maggio 2018

Lezione del 18/05/2018: la ricorsione

La ricorsione. Pensare ricorsivamente. Esempio: il fattoriale. Funzionamento della ricorsione: record di attivazione e stack. Non prevedere un caso base: la ricorsione infinita. Esempi: riconoscimento di una stringa palindroma, concatenazione ricorsiva di stringhe, ricerca binaria ricorsiva. Utilizzo di metodi di comodo mediante l'overloading. Strutture dati  Esercizi sulla ricorsione: ricerca binaria.
Esercizi: riconoscimento di una stringa palindroma, concatenazione ricorsiva di stringhe. Utilizzo di metodi di comodo mediante l'overloading. Strutture dati ricorsive. Esercizi sulla ricorsione: generazione di tutte le combinazioni di caratteri; generazione delle permutazioni di una stringa. Labirinto con definizione ricorsiva e mediante matrice labirinto. Mutua ricorsione. 

giovedì 17 maggio 2018

Lab del 16/05/2018: esercizi sugli stream e homework 3

Esercizi sugli stream: filter, map, IntStream, mapToObj, iterate, collect, Collectors.toList, Collectors.joining. Scrittura del JUnit test dell'homework 3.

martedì 15 maggio 2018

Lezione del 15/05/2018: ancora sugli stream

Differenza tra iterazione interna ed esterna. Metodi di Stream: map, limit, skip, collect. Collectors: counting, maxBy/minBy, summingInt, averagingInt, joining, toList, toSet. toCollection, mapping, summingInt, averagingInt. Operazioni intermedie: limit, skip, flatMap. L'operazione terminale reduce. Operazioni su IntStream, DoubleStream, LongStream e passaggio da uno stream all'altro. Ottenere uno stream infinito. L'operazione intermedia flatMap. Ottenere uno stream infinito e iterare su uno stream: il metodo Stream.iterate. Copiare gli stream. Importanza dell'ordine delle operazioni. Ottimizzazione dell'ordine di esecuzione. Stream sequenziali e paralleli.

giovedì 10 maggio 2018

Lezione dell'11/05/2018: stream e annotazioni

Breve introduzione alla reflection, concetto di classe Class e ottenimento dell'istanza di Class da istanze e da classi. Class.forName. Le annotazioni in Java. La classe Optional. Gli stream: definizione; caratteristiche; operazioni intermedie e terminali. Metodi principali dell'interfaccia java.util.stream.Stream. Comportamento "pigro" (lazy) degli stream. Operazioni senza stato e con stato. Stream ottimizzati per i tipi primitivi: IntStream, DoubleStream e LongStream. Come ottenere uno stream: da elenco di valori, da una Collection, da un array, da un file. Il pattern Builder, la sua importanza nel paradigma orientato agli oggetti e il suo uso negli stream mediante operazioni intermedie e terminali. Operazioni intermedie e terminali degli stream.


mercoledì 9 maggio 2018

Lab del 09/05/2018: esercizi sui generici; test dell'homework 3

Esercizi sui generici: classe Record; ListaLinkata generica; MultiMappa generica. Definizione della classe JUnit di test dell'homework 3.

lunedì 7 maggio 2018

Lezione del 08/05/2018 (R): i tipi generici

Introduzione ai tipi generici. Generici e collezioni: interfacce generiche prototipiche. Definire un metodo generico. Calcolare il massimo di una collezione di elementi di tipo generico. Sicurezza dei generici a tempo di compilazione: confronto con gli array. Jolly come tipi generici. Esempio: metodo generico di somma. Cancellazione del tipo (type erasure). Esempio: cancellazione del tipo nella classe Coppia e nel metodo getMassimo. Esercizio: cancellazione del tipo nella classe Pila.

venerdì 4 maggio 2018

Lezione del 04/05/2018: riferimenti a metodi; metodi di Comparator; interfacce funzionali standard; pila e coda.

Espressioni lambda per specificare il Comparator. Riferimenti a metodi: statici, d'istanza con riferimento, d'istanza con classe. Ordinamento di una collection in Java 8 vs. Java 7. Metodi di default e statici dell'interfaccia Comparator. Interfacce funzionali standard: Predicate, Function, Supplier, Consumer. Pila e coda in Java.


mercoledì 2 maggio 2018

Lab del 02/05/2018: Comparator con lambda, Comparator.comparing, MultiMappa con generici e metodi Java 8 di Map, singoletto

Espressioni lambda per specificare il Comparator e Comparator.comparing per mappare gli oggetti all'elemento di comparazione.MultiMappa con generici e metodi Java 8 di Map. Il design pattern del singoletto. Paperinik/Paperino e supereroi con il singoletto e le classi statiche annidate.