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!
Blog e sito Web del corso di Metodologie di Programmazione (Corso di Laurea in Informatica, canale M-Z)
sabato 27 maggio 2017
mercoledì 24 maggio 2017
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.
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
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.
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".
giovedì 6 aprile 2017
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.
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
mercoledì 22 marzo 2017
Lab del 22/3/2017: esercizi sull'ereditarietà
Esercizi (dalle diapositive): Animale. ContoBancario. DistributoreDiBevande.
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.
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.
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.
Enumerazioni. Esempio: SemeCarta e ValoreCarta. Dichiarazione di una enumerazione. Costruttori, campi e metodi di un'enumerazione. I metodi values e valueOf. Enumerazioni e switch.
mercoledì 8 marzo 2017
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.
lunedì 27 febbraio 2017
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.
martedì 21 febbraio 2017
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!
Iscriviti a:
Post (Atom)