mercoledì 2 giugno 2021

Lezione del 28/05/2021: altri design pattern + chisura del corso!

I pattern Command/Callback, Decorator. Esercizi sui pattern. Riassunto dei design pattern. Consigli per il futuro. Conclusione del corso!

Lezione del 25/05/2021 (3 ore): i primi design pattern

 I primi design pattern: strategy, factory, observer, builder e singoletto.

venerdì 21 maggio 2021

Lezione del 21/05/2021 (2.5 ore): introduzione a input/output; reflection; moduli in Java.

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. La reflection, la classe Class, istanziare e ispezionare una classe a tempo di esecuzione. 

I moduli in Java. Moduli senza nome. Moduli automatici.


 

giovedì 20 maggio 2021

venerdì 14 maggio 2021

Lezione del 14/05/2021 (1 ora): ancora sui generici (2/2)

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.

Lab del 12/05/2021 (3 ore): esercizi sugli stream

 Esercizi sugli stream

Lezione dell'11/05/2021 (3 ore): introduzione ai generici (1/2)

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.


lunedì 10 maggio 2021

Lezione del 07/05/2021 (2 ore): ancora sugli stream

Collectors: counting, maxBy/minBy, summingInt, averagingInt, joining, toList, toSet. toCollection, mapping, groupingBy, partioningBy. Operazioni su IntStream, DoubleStream, LongStream e passaggio da uno stream all'altro.

giovedì 6 maggio 2021

Lab del 05/05/2021 (1 ora + esercizi e domande): esercizi sugli stream

Esercizi sugli stream.


Lezione del 04/05/2021 (2 ore): eccezioni e stream

Ancora sulle eccezioni.

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.



venerdì 30 aprile 2021

Lezione del 30/04/2021 (2 ore): ancora sulle strutture dati; introduzione alle eccezioni

Ancora sulle strutture dati. 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.

Lab del 28/04/2021 (2 ore + domande ed esercizi): esercizi sulla ricorsione; svolgimento dell'homework 1

Esercizi sulla ricorsione; svolgimento dell'homework 1.

 

 

martedì 27 aprile 2021

Lezione del 27/04/2021 (3 ore): la ricorsione in Java

 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 ricorsive. Esempio: visualizzare il contenuto di una cartella in forma gerarchica. Esercizio: cercare file in una cartella, somma ricorsiva di numeri. La successione di Fibonacci, efficienza e problematiche dell'implementazione ricorsiva. Esercizio: permutazioni di una stringa.

venerdì 23 aprile 2021

Lezione del 23/04/2021 (2 ore): riferimenti a metodi, interfaccia Comparator e suoi metodi

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.

martedì 20 aprile 2021

Lezione del 20/04/2021 (3 ore): le collection

 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.


 

sabato 17 aprile 2021

Lezione del 16/04/2021 (2 ore): interfacce funzionali, funzioni lambda

Classi annidate e interne. Operatore this nelle classi interne. Intefacce funzionali. Funzioni lambda. Collezioni fondamentali: ArrayList, LinkedList, HashSet, TreeSet, LinkedHashSet.

Lezione del 13/04/2021 (3 ore): interfacce, il problema del diamante, comparabilità, classi interne

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

Lezione del 09/04/2021 (2.5 ore): esercizi sull'iterabilità

 Esercizi sull'iterabilità.

mercoledì 24 marzo 2021

Lab del 24/03/2021 (1 ora + domande): esercizi

 Esercizi sull'ereditarietà: Animali, ListaOrdinataDiInteri, ContoBancario.  


 



Lezione del 23/03/2021 (3 ore, 8-11): polimorfismo

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



venerdì 19 marzo 2021

Lezione del 19/03/2021 (2 ore, 8-10): 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.

martedì 16 marzo 2021

Lezione del 16/03/2021 (8-11, 3 ore): enumerazioni, tipo wrapper, autoboxing e autounboxing, esercizi

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.


sabato 13 marzo 2021

Lezione del 12/03/2021 (2 ore, 8-10): array, incapsulamento, static

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

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.

martedì 9 marzo 2021

Lezione del 09/03/2021 (2.5 ore, 8-10.15): classe String, riferimenti a oggetti, anatomia della memoria, costrutti di decisione e di iterazione

La classe String. 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. 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. Esercizi: calcolare le potenze di 2 fino a 2^N.

sabato 6 marzo 2021

Lezione del 05/03/2021 (8-10, 2 ore): politiche di accesso; incapsulamento; String e suoi metodi

Politiche di accesso. Esercizi: la classe Contatore e la classe Menu. La classe String e i suoi metodi.

Lab del 03/03/2021 (1.5 ore + lab): PhraseOMatic, Rettangolo, esercizi su classi e oggetti

PhaseOMatic, Rettangolo, esercizi su classi e oggetti.

Lezione del 02/03/2020 (8-11, 3 ore): classi, oggetti, campi, metodi e costruttori.

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.

Lezione del 26/02/2021 (8-10, 2 ore): 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.

Lab del 24/02/2021 (1.5 ore + lab): JDK, Eclipse, JShell

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


Lezione del 23/02/2021 (8-11, 3 ore): 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ì 15 febbraio 2021

Pronti, partenza, via!

Benvenuto/a! Se sei uno studente del corso di Metodologie di Programmazione (prof. Navigli, canale M-Z), segui le istruzioni qui riportate per iscriverti: gruppo di discussione e materiale. Come ogni anno, il corso sarà aggiornatissimo, coinvolgente ed entusiasmante! Anche quest'anno ci divertiremo con tantissime iniziative!