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.