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.

giovedì 27 aprile 2017

Lezione del 27/04/2017: la ricorsione in Java + presentazione esonero 3

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. Presentazione dell'esonero 3.

mercoledì 26 aprile 2017

Lab e lezione del 26/4/2017: le Collection (2/2) e introduzione ai generici

Espressioni lambda per specificare il Comparator. Riferimenti a metodi. 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. Come scegliere la collection appropriata al proprio problema. Introduzione ai tipi generici.


lunedì 24 aprile 2017

Lezione del 24/4/2017: le Collection (1/2)

Le Collection. Gerarchia delle interfacce di tipo Collection: Iterable, Collection, List, Set, SortedSet, Queue. Tre modi per iterare su una collezione. L'interfaccia Iterator. Esempio: il Jukebox. Collezioni fondamentali: ArrayList, LinkedList, HashSet, TreeSet, HashMap, LinkedHashMap, TreeMap. Metodi di ogni collezione. ListIterator e il metodo listIterator. Esempi di uso di HashSet e TreeSet. Funzionamento di un HashSet: il metodo hashCode. HashMap e TreeMap: l'interfaccia Map. L'interfaccia Comparable. Ordinamento con l'interfaccia Comparator. Insiemi e mappe con elementi (o chiavi) senza ordinamento, con ordinamento naturale e con ordinamento di inserimento. I metodi keySet, values e entrySet di Map. Espressioni lambda per specificare il Comparator.

Lezione del 20/4/2017: correzione dei compiti

Esercizi più problematici. Errori più frequenti. Problemi nello stile della scrittura del codice. Stile "non Java".

Prova d'esonero: 12/4/2017


giovedì 6 aprile 2017

Lezione del 6/4/2017: esercizi di preparazione all'esonero

Una soluzione di EssereVivente. Esercizi su Iterable/Iterator, Comparable/Comparator, classi interne e anonime, interfacce funzionali e lambda.


lunedì 3 aprile 2017

Lab del 5/4/2017: iterabilità, comparabilità, sorting, espressioni lambda

Laboratorio importante di preparazione all'esonero: un altro esempio di iterabilità (iterare sulle righe di una stringa); rendere una classe comparabile mediante l'estensione di Comparable<T>. Ordinare liste di oggetti comparabili con Collections.sort. Aggiungere la funzionalità di comparabilità dopo aver chiuso il codice di una classe: l'interfaccia funzionale Comparator<T>. Ordinamento mediante Comparator: Collections.sort(lista, comparator) e List.sort(comparator). Esempi di espressioni lambda. Utilizzare le espressioni lambda per implementare un comparator.


Lezione 03/04/2017: esercizi su classi interne e anonime ed iterabilità; espressioni lambda

Esercizi su classi interne: l'esempio dei potenziamenti di un'astronave; l'esempio della lista linkata di interi elemento come classe statica annidata. Iterabilità: iterare una lista linkata implementando l'interfaccia java.lang.Iterable e l'interfaccia java.util.Iterator mediante classe interna o classe anonima (sua definizione). Intefacce funzionali. Espressioni lambda.

 

giovedì 30 marzo 2017

Lezione 30/03/2017: lezione un po' speciale...

Ouverture a "sorpresa" con paste. Riassunto sulle interfacce, trasversalità delle interfacce, estensibilità mediante la parola chiave default e metodi statici nelle interfacce. Implementazione delle interfacce dalle enumerazioni e motivazione. Esempio delle espressioni matematiche con l'estensibilità dell'operatore binario. Introduzione a classi annidate e classi interne.


mercoledì 29 marzo 2017

Lezione del 29/3/2017: enumerazioni e metodi; metodi e classi final; le interfacce

Metodi e classi interne. Interfacce in Java: dichiarazione, implementazione. Esempio: Iterabile. Differenza tra interfacce e classi astratte. Ereditarietà multipla: il problema del diamante. Interfacce notevoli. Esercizio: MyString con Iterator e Iterable.

Lab del 29/03/17: esercizi e interfacce; il debugger

Esercizi: Filtro; Espressioni matematiche. Esercizio: HTML. Definizione di interfaccia. L'esempio dell'interfaccia Espressione vs. la classe astratta Espressione. Utilizzare il debugger.


lunedì 27 marzo 2017

Lezione 27/03/2017: polimorfismo e classe java.lang.Object

Polimorfismo: definizione, esempi e casistiche. Esempi: la classe Impiegato, ImpiegatoStipendiato e ImpiegatoACottimo. La parola chiave super per accedere a metodi e campi della superclasse. L'operatore instanceof. Downcasting e upcasting: differenze ed effetti sull'interfaccia pubblica. La classe universale Object e i suoi metodi principali: clone, equals, getClass, hashCode, toString. Sovrascrivere i metodi toString, equals e clone.


giovedì 23 marzo 2017

Lezione 23/03/2017: ancora su ereditarietà; la classe ArrayList; polimorfismo

La classe ArrayList: metodi. Il costrutto for each. Introduzione alle interfacce e alle eccezioni. Esercizio LibreriaComponibile. Introduzione al polimorfismo.
 
 

mercoledì 22 marzo 2017

lunedì 20 marzo 2017

giovedì 16 marzo 2017

Lezione 16/03/2017: ereditarietà

Una lezione molto molto importante sull'ereditarietà: abbiamo introdotto il concetto di ereditarietà, di classi e metodi astratti, parole chiave this e super nei costruttori. Funzionamento dei costruttori nella gerarchia di ereditarietà. Differenza tra overriding e overloading. Visibilità di campi e metodi: pubblica, privata, protetta e di package.


Prova del 15/03/2017

Ci siamo messi alla prova!

Lezione 13/03/2017: ancora sugli array, esercizi di preparazione

Ancora su array; esercizi su heap & stack ed esercizi di preparazione alla prova scritta.

giovedì 9 marzo 2017

Lezione del 09/03/2017: campi e metodi statici, enumerazioni, autoboxing e autounboxing

Vantaggi dei metodi e dell'incapsulamento. Metodi e campi statici: modalità di accesso dall'interno e dall'esterno della classe. Perché il main() è static? Importazione statica di campi e metodi.
Enumerazioni. Esempio: SemeCarta e ValoreCarta. Dichiarazione di una enumerazione. Costruttori, campi e metodi di un'enumerazione. I metodi values e valueOf. Enumerazioni e switch.
Autoboxing (vedi immagine sotto :-)), auto-unboxing. Classi wrapper e metodi e costanti delle classi wrapper. Confrontare valori di tipi primitivi vs. oggetti vs. valori di enumerazioni. Esercizi su heap & stack.


mercoledì 8 marzo 2017

Lab del 08/03/2017: esercizi su heap & stack; esercizi di base su array e stringhe; esercizi su classi e metodi

Esercizi dall'esonero dell'anno scorso; esercizi su heap & stack; esercizi su array e stringhe. Segmento e Punto; implementazione di Rettangolo con Punto; BarraDiEnergia.

lunedì 6 marzo 2017

Lezione del 06/03/2017: riferimenti; heap & stack; package; importazione di classi

Riferimenti e oggetti. Anatomia della memoria: stack e heap. Metodi statici. Lettura dell'input da console: la classe Scanner. Package. Package standard e package di default. La dichiarazione import e la parola chiave package.

giovedì 2 marzo 2017

Lezione del 02/03/2017: decisione (if, ?, switch); iterazione (while, for).

Strutture di controllo: if, else, il problema dell'else sospeso, else if, operatore di selezione ?, istruzione switch. Esercizi: estrazione del carattere centrale, saluto casuale. Introduzione ai costrutti iterativi: while, do..while, for. Le istruzioni break e continue. Eleganza del codice e coding horror.


Lab del 01/03/2017: esercizi ed esempi

L'esercizio Rettangolo. Implementazione di append in StringBuilder. L'iterazione di String.replace. Esercizio Counter + Tornello. Introduzione a if...else, for and while. import e package.

giovedì 23 febbraio 2017

Lezione 23/02/2017: campi, metodi, costruttori, accessibilità private e public

Lezione sui concetti fondamentali di programmazione orientata agli oggetti: classi vs. oggetti, campi e metodi (inclusi i costruttori) e politiche di accesso. Esercizi: La classe Contatore. 

mercoledì 22 febbraio 2017

Lab del 22/02/2017: Introduzione al corso (2), concetti fondamentali, main, tipi primitivi, letterali e variabili

Oggi abbiamo completato l'introduzione al corso, fornito una panoramica sugli argomenti principali del corso (oggetti, incapsulamento, ereditarietà, polimorfismo) e parlato di tipi di dato primitivi, variabili, identificatori e letterali.

giovedì 19 gennaio 2017

Si parte!

Benvenuto/a! Se sei uno studente del corso di Metodologie di Programmazione (prof. Navigli), segui le istruzioni qui riportate per iscriverti: gruppo di discussione e materiale. Come ogni anno, il corso sarà aggiornatissimo, coinvolgente ed entusiasmante! Vi dico solo una parola: chatbot!