sabato 27 maggio 2017

Lezione del 25/5/2017: Decorator e Command; reflection; chiusura del corso

Il Decorator Pattern: aggiungere responsabilità a una classe senza che essa lo sappia. L'esempio della rappresentazione grafica delle automobili. Il pattern Callback. La reflection. Conclusione del corso!

mercoledì 24 maggio 2017

Lab del 25/05/2017: esercizi su pattern, ricorsione, generici

Esercizi su design pattern: Singleton, Builder e Strategy. Esercizio sulla ricorsione (percorri). Uso dei generici nel Builder e nello Strategy.



lunedì 22 maggio 2017

Lezione del 22/05/2017: Observer, (Simple) Factory, Builder, Singleton

L'Observer Pattern: un'applicazione di monitoraggio del tempo. La metafora dell'abbonamento. java.util.Observable e java.util.Observer. 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.

venerdì 19 maggio 2017

Lezione del 18/5/2017: presentazione dei progetti

Presentazione dei progetti: analisi di tweet su larga scala (TweetPro) e chatbot "intelligente" (Curiosone(TM))!


mercoledì 17 maggio 2017

Lab del 17/05/2017: esercizi su stream e ricorsione

Esercizi sulla classe Titolo utilizzando map, flatMap, filter, limit, forEach, Collectors.toList, toSet, toMap, groupingBy, mapping, joining, counting, Arrays.stream e List.stream. Interfacce funzionali: Function, Predicate, Consumer, Supplier, BiFunction, BinaryOperator, BiConsumer. MultiMappa generica, utilizzo di Supplier per creare collection. Esercizi sulla ricorsione: ricerca ricorsiva all'interno di una stringa, generazione di tutte le stringhe binarie di lunghezza k.


lunedì 15 maggio 2017

Lezione del 15/5/2017: ancora sugli stream e design pattern (1)

L'operazione intermedia flatMap. Ottenere uno stream infinito. Copiare gli stream. Importanza dell'ordine delle operazioni. Ottimizzazione dell'ordine di esecuzione. Stream sequenziali e paralleli. Le mappe in Java 8. Che cos'è un design pattern. Lo Strategy Pattern: il simulatore di anatre.

venerdì 12 maggio 2017

Lezione dell'11/05/2017: ancora sugli stream e I/O

Ancora sugli stream: I Collector: joining, toList, toSet, toMap, 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.
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 e il serialVersionUID. La parola chiave transient.

mercoledì 10 maggio 2017

Lezione/Lab del 10/5/2017: ancora sugli stream, esercizi

Differenza tra iterazione interna ed esterna. Metodi di Stream: min/max, filter, forEach, count, sorted, map, collect. Collectors: counting, maxBy/minBy, summingInt, averagingInt, joining, toList, toSet, Esercizi sugli stream (mattina). MultiMappa generica (pomeriggio).


lunedì 8 maggio 2017

Lezione dell'8/5/2017: generici (2/2); introduzione agli stream

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.

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.


domenica 7 maggio 2017

Lezione del 4/5/2017: eccezioni

Esercizio sulla ricorsione applicata all'elenco dei file in una cartella. La mutua ricorsione. Eccezioni. Casi tipici nella programmazione Java. Eccezioni notevoli. Perché non restituire un valore d'errore. Vantaggi e svantaggi delle eccezioni. Cosa gestire e cosa non gestire con le eccezioni. Il blocco try-catch-finally. La politica catch-or-declare: gestire o ignorare le eccezioni. Creare eccezioni personalizzate. Le parole chiave throw e throws. La classe Throwable. La gerarchia delle eccezioni in Java. Le classi Exception e Error. Eccezioni checked e unchecked. Esercizi (da svolgere a casa): SequenzaAGradini, FloppyDisk, Dizionario e Mappa, Catena di volontari.

mercoledì 3 maggio 2017

Lab del 3/5/2017: ricorsione (2), Optional

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. Introduzione a Optional.