venerdì 27 maggio 2016

Lezione 27/05/2016: design pattern (3) + conclusione 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. Esercizio multimappa generica con Supplier. Conclusione del corso!

mercoledì 25 maggio 2016

Lab 25/5/2016: esercizi su stream e sul pattern Strategy

Esercizi sugli stream (Titolo) e uso del metodo Stream.reduce nel contesto del pattern Strategy.


Lezione 24/5/2016: design pattern (2)

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ì 13 maggio 2016

Lezione 13/5/2016: reflection e rilascio del codice

Introduzione alla Reflection. La classe Class. Ottenere un oggetto di tipo Class: da istanze di tipi non primitivi, da tipi primitivi, da tipi non primitivi, per nome: il metodo Class.forName. Scoprire i campi, metodi e costruttori di una classe. Esempio di uso della Reflection: creare intelligenze artificiali a tempo di esecuzione. Richiamare un determinato metodo a tempo di esecuzione.

Rilascio del codice: i file jar. Creazione di un file jar da console e con Eclipse. Jar eseguibili: il manifesto. Esecuzione di un file jar.

mercoledì 11 maggio 2016

Lezione 10/05/2016: ancora sugli stream

IntStream, LongStream, DoubleStream. Passare da uno stream su tipi primitivi a uno stream su oggetti e viceversa. I Collector: joining, toList, toSet, toMap, toCollection, summingInt, averagingInt. Operazioni intermedie: limit, skip, flatMap. Creare un nuovo collector. 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.

venerdì 6 maggio 2016

Lezione 06/05/2016: gli stream!

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. Differenza tra iterazione interna ed esterna. Metodi di Stream: min/max, filter, forEach, count, sorted, map, distinct, reduce, collect, anyMatch, allMatch, noneMatch, findFirst, findAny, mapToInt. Collectors: counting, maxBy/minBy, summingInt, averagingInt, joining, toList, toSet, groupingBy, partitioningBy.

mercoledì 4 maggio 2016

Presentazione dei progetti: 04/05/2016

Abbiamo presentato i due progetti: My Neural Network (MyNN) e Crucy (cruciverba dinamico). Tutte le informazioni accessibili dal gruppo degli studenti!

Lab 04/05/2016: il pattern Builder; esercizio sui generici MultiMappa

Esercizi con il pattern Builder. Esercizio sui generici MultiMappa.


martedì 3 maggio 2016

Lezione 03/05/2016: input/output 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.

venerdì 29 aprile 2016

Lezione 29/04/2016: le 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ì 27 aprile 2016

Lab 27/04/2016: esercizi sulla ricorsione

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; generazione di tutte le combinazioni di caratteri; generazione delle permutazioni di una stringa. Labirinto con definizione ricorsiva e mediante matrice labirinto.

martedì 26 aprile 2016

Lezione 26/04/2016: generici (2), ricorsione (1)

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. La ricorsione. Pensare ricorsivamente. Esempio: il fattoriale. Funzionamento della ricorsione: record di attivazione e stack. Non prevedere un caso base: la ricorsione infinita.


venerdì 22 aprile 2016

Lezione 22/04/2016: le collection (2); riferimenti a metodi; interfacce funzionali standard; pila e coda; intro ai generici

Interfacce funzionali standard: Predicate, Function, Supplier, Consumer. Pila e coda in Java. Come scegliere la collection appropriata al proprio problema. Introduzione ai tipi generici.


martedì 19 aprile 2016

Lezione del 19/04/2016: 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. 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.

15/04/2016: prova d'esonero!

Com'è andata? Lo scopriremo presto!


venerdì 8 aprile 2016

Lezione 08/04/2016: lambda, esercizi

Sintassi delle espressioni lambda e differenze con le classi interne. Classi e metodi final. Esercizi: EssereVivente, ListaLinkata di interi modellando l'elemento come classe annidata.


mercoledì 6 aprile 2016

Lab 06/04/2016: TANTI esercizi

Esercizi su: interfacce, classi anonime e classi interne, interfacce funzionali, espressioni lambda.


martedì 5 aprile 2016

Lezione 05/04/2016: Interfacce, classi annidate/interne e classi anonime; interfacce funzionali.

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. Istruzione for "each". Classi interne: classi top-level, classi annidate e interne. Classi anonime. Interfacce funzionali. Cenni sulle espressioni lambda.


venerdì 1 aprile 2016

Lezione 1/4/2016: polimorfismo e classe 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. Enumerazioni "avanzate".


mercoledì 30 marzo 2016

Lab 30/03/2016: esercizi su ereditarietà, polimorfismo, interfacce e liste

Esercizi MOLTO IMPORTANTI su ereditarietà, polimorfismo, interfacce e liste: Espressioni matematiche e LibreriaComponibile.


mercoledì 23 marzo 2016

martedì 22 marzo 2016

Lezione 22/3/2016: esercizi sull'ereditarietà

La differenza tra is-a e has-a. Le liste in Java. Cenni su interfacce ed eccezioni. Esercizi: BarraDiEnergia; ListaDiInteri e ListaOrdinataDiInteri.


venerdì 18 marzo 2016

Lezione 18/03/2016: l'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ì 11 marzo 2016

Lezione 11/03/2016: 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.


mercoledì 9 marzo 2016

Lab 09/03/2016: esercizi su heap & stack; altri esercizi.

Esercizi: StringaCercabile e sua rappresentazione su heap & stack; StringheVerticali; RettangoloDiCaratteri; ArrayCopiabile.


Lezione 08/03/2016: riferimenti; heap & stack; package; importazione di classi; array.

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.
Array: dichiarazione, inizializzazione, accesso.

venerdì 4 marzo 2016

Lezione 04/03/2016: 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.

Lab 2/3/2016: esercizi su stringhe e modellazione di base

Esercizio: scrivere un metodo che determini se una stringa è palindroma. Esercizio: modellare la classe Data.


Lezione 1/3/2016: la classe java.lang.String

La classe String e i suoi metodi.


sabato 27 febbraio 2016

Lezione 26/02/2016: campi, metodi, costruttori, overloading, 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. La classe Menu

Lab 24/02/2016: introduzione al corso (2), tipi di dato primitivi, letterali, variabili, conversioni

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. Espressioni, operatori aritmetici, operatori di confronto. Un esercizio "collaborativo" per il calcolo di un'espressione in Java. I 3 tipi di conversione di tipo: conversione esplicita, cast esplicito e cast implicito.

Lezione 23/02/2016: introduzione al corso

E la prima lezione è andata!!! Non dimenticatevi di iscrivervi al gruppo di discussione.


giovedì 14 gennaio 2016

Benvenuti/e!

Il 2016 è arrivato! Se sei uno studente del nuovo corso di Metodologie di Programmazione (prof. Navigli), segui le istruzioni qui riportate per iscriverti: gruppo di discussione e materiale. Quest'anno il corso si terrà nelle aule 11-13 in via Scarpa, ma - come sempre - sarà entusiasmante!