venerdì 29 maggio 2020

giovedì 28 maggio 2020

Lab del 27/05/2020 (Google meet, 2 ore): moduli ed esercizi sul Builder

Creare moduli e codificarne le dipendenze: requires, exports, requires transitive. Esercizi sul pattern builder.

lunedì 25 maggio 2020

Lezione del 25/05/2020 (Google meet, 2 ore): moduli Java 9, pattern

I moduli Java 9. I primi design pattern: strategy pattern e pattern del singoletto.


Lezione del 22/05/2020 (Google meet, 3 ore): ancora sugli stream

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. IntStream.range e rangeClosed. Copiare gli stream. Importanza dell'ordine delle operazioni. Ottimizzazione dell'ordine di esecuzione. Stream sequenziali e paralleli.

Lezione del 20/05/2020 (Google meet, 1.5 ore): introduzione al pattern singoletto e al pattern builder

Revisione delle specifiche di VerbAtlas. Introduzione al singoletto e al builder.

lunedì 18 maggio 2020

Lezione del 18/05/2020 (Google meet, 2 ore): gli stream

Metodi di Stream: map, limit, skip, collect. Collectors: counting, maxBy/minBy, summingInt, averagingInt, joining, toList, toSet. toCollection, mapping, groupingBy, partioningBy. 

venerdì 15 maggio 2020

Lezione del 15/05/2020 (Google meet, 3 ore): eccezioni e intro agli stream

Generici e covarianza e controvarianza. 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.


martedì 12 maggio 2020

Lezione dell'11/05/2020 (Google meet, 2 ore): i generici

Tipi generici. Definire e utilizzare una classe generica. Specificare più tipi generici. Estendere le classi generiche. Esercizio: inverti lista generica. 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.

Lezione dell'08/05/2020 (Google meet, 1.5 ore): presentazione dei progetti

Presentazione dei due progetti: API di VerbAtlas e Traffic!

mercoledì 6 maggio 2020

Lezione del 29/04/2020 (Google meet, 1.5 ore): esercizi sulla ricorsione

Esercizi sulla ricorsione: generazione di stringhe binarie di lunghezza k; generazione di permutazioni di caratteri.

Lezione del 27/04/2020 (Google meet, 2 ore): 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. Ricerca binaria ricorsiva. Utilizzo di metodi di comodo mediante l'overloading. Utilizzo di metodi di comodo mediante l'overloading. Strutture dati ricorsive.

giovedì 23 aprile 2020

Lezione del 24/04/2020 (Google meet, 3 ore): riferimenti a metodi; ordinamento; metodi di Comparator; interfacce funzionali; introduzione ai generici

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. Introduzione ai tipi generici. Generici e collezioni: interfacce generiche prototipiche.

lunedì 20 aprile 2020

Lezione del 20/04/2020 (Google meet, 2 ore): mappe, ordinamento con comparabilità interna ed esterna, riferimenti a metodi

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. Espressioni lambda per specificare il Comparator. Riferimenti a metodi: statici, d'istanza con riferimento, d'istanza con classe.

venerdì 17 aprile 2020

Lezione del 17/04/2020 (Google meet, 3 ore e mezzo): classi annidate e interne, interfacce funzionali, espressioni lambda, collections


Classi annidate e interne. Operatore this nelle classi interne. Intefacce funzionali. Espressioni lambda. Le Collection. Gerarchia delle interfacce di tipo Collection: Iterable, Collection, List, Set, SortedSet, Queue. Tre modi per iterare su una collezione. L'interfaccia Iterator. Collezioni fondamentali: ArrayList, LinkedList, HashSet, TreeSet, HashMap, LinkedHashMap, TreeMap. Metodi di ogni collezione. ListIterator e il metodo listIterator


mercoledì 8 aprile 2020

lunedì 6 aprile 2020

Lezione del 06/04/2020 (Google meet, 2 ore): interfacce notevoli (Comparable, Comparator, Cloneable, Serializable); ordinamento tramite confronto interno (Comparable) ed esterno (Comparator)

Ereditarietà multipla. Il problema del diamante. Interfacce notevoli (Comparable, Comparator, Cloneable, Serializable); ordinamento tramite confronto interno (Comparable) ed esterno (Comparator). List.of. Liste immutabili vs. liste mutabili.


venerdì 3 aprile 2020

Lezione del 03/04/2020 (Google meet, 3 ore): interfacce, iterabilità standard e intro alle classi interne

Le interfacce in Java: metodi pubblici, metodi di default, statici e privati nelle interfacce. Iterabilità mediante le interfacce Iterable e Iterator. Esercizi: le successioni. Rendere iterabile un array di interi. Classi anonime e classi interne.

venerdì 27 marzo 2020

Lezione del 27/03/2020 (Google meet, 3 ore): polimorfismo e 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.


lunedì 23 marzo 2020

Lezione del 23/03/2020 (Google meet, 2 ore): 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.

venerdì 20 marzo 2020

Lezione del 20/03/2020 (Google meet, 3 ore): incapsulamento; static; enumerazioni; classi wrapper; auto-boxing e auto-unboxing

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.


lunedì 16 marzo 2020

Lezione del 16/03/2020 (Google meet, 8.30-10, 2 ore): gli array

Gli array. Definizione, inizializzazione, accesso agli elementi, lunghezza di un array. Matrici mediante array di array. Esercizio su heap & stack.

venerdì 13 marzo 2020

Lezione del 13/03/2020 (Google meet, 8.30-11.00, 3 ore): strutture di controllo condizionali e iterative

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.

lunedì 9 marzo 2020

Lezione del 09/03/2020 (Google meet, 8.30-11.30, 3 ore): String e suoi metodi; riferimenti & oggetti; heap & stack.

Politiche di accesso. Esercizi: la classe Contatore e la classe Menu. La classe String e i suoi metodi. Riferimenti e oggetti. Anatomia della memoria: stack e heap. Metodi statici.


martedì 3 marzo 2020

Lezione del 02/03/2020: classi, oggetti, campi, metodi e costruttori. L'operatore new.

Consapevolezza del tipo di dato. Conversione esplicita, cast esplicito, cast implicito.
Concetti fondamentali di programmazione orientata agli oggetti: classi vs. oggetti, campi e metodi (inclusi i costruttori). L'operatore new. Esercizi: la classe Contatore.

venerdì 28 febbraio 2020

Lezione del 28/02/2020: panoramica sul corso, tipi di dato, variabili, letterali

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. Introduzione a JShell. Operatori aritmetici e booleani, operatori di confronto, operatori di assegnazione. Il main di una classe.

giovedì 27 febbraio 2020

Lab del 26/02/2020: JDK, Eclipse, JShell (P)

Installazione di JDK ed Eclipse. Introduzione a JShell. Prima classe NoHelloWorld e compilazione ed esecuzione. HelloWorld.


lunedì 24 febbraio 2020

Lezione del 24/02/2020: introduzione al corso

E la prima lezione è andata!!! Abbiamo introdotto il corso, il docente e brevemente il linguaggio Java. Non dimenticatevi di iscrivervi al gruppo di discussione.



lunedì 20 gennaio 2020

Pronti, partenza, via!

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! Quest'anno ci divertiremo con tantissime iniziative!