venerdì 6 giugno 2014

Lezione 5/6/2014: Design pattern (2/2)

Il Simple Factory e il Factory Pattern. Il Decorator Pattern: aggiungere responsabilità a una classe senza che essa lo sappia. L'esempio della rappresentazione grafica delle automobili. Il Command Pattern e l'esempio della callback. Rivisitazione del pattern Iterator. Conclusione del corso!

Lab 4/6/2014: Esercizi sui design pattern

Esercizi: ArrayFlessibile con generici, Comparable e Comparator; esercizi sui pattern Observer, Singoletto e Strategy.


martedì 3 giugno 2014

Lezione 3/6/2014: Design pattern (1/2)

Che cos'è un design pattern. Lo Strategy Pattern: il simulatore di anatre. 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. Permettere una singola istanza per una classe: il Singleton Pattern. L'esempio di Paperino e della rete semantica.

giovedì 29 maggio 2014

Lezione 29/5/2014: La reflection

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.

Lab 28/5/2014: esercizi su generici, info su progetto

Esercizi sui generici: alberi generici; coda di priorità generica. Ulteriori informazioni sul progetto.


giovedì 22 maggio 2014

Lezione 22/5/2014: generici (2) ed esercizi sui generici

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. Esercizi (esonero dell'anno scorso): multiinsieme e multimappa generici.

Lab 21/5/2014: visione scritto e progetti

Visione degli scritti. Informazioni su Lucene per il progetto PensieroProfondo e illustrazione di possibili scopi per SaGa 2.0.


Lezione 20/5/2014: Prova scritta!

Vedi subject.


giovedì 15 maggio 2014

Lezione 15/5/2014: Tipi generici (1); esercizi su interfacce notevoli e collections

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.

Esercizi di preparazione: rendere iterabile (con Iterable) e confrontabile una pubblicazione per titolo (usando Comparable) e per numero di citazioni (usando Comparator). Comparator implementato come classe esterna, come classe annidata e come classe anonima. Importanza della corretta implementazione di Object.hashCode e equals per i Set, importanza del rendere comparabile una classe se si usano TreeSet e TreeMap.

mercoledì 14 maggio 2014

Lab 14/05/2014: Esercizi su ricorsione, I/O e Iterable/Comparable

Ancora sulla ricorsione: mutua ricorsione e ricorsione di coda. Esercizi a go-go! Cambio di base ricorsivo; sommaSottrai; Labirinto con esplorazione ricorsiva con filo di Arianna(TM). Rendere la classe Punto iterabile e la classe MyArray iterabile e comparabile. Lettura da file con Scanner e BufferedReader: Parametri, PropertyManager.


martedì 13 maggio 2014

Lezione 13/5/2014: 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.



giovedì 8 maggio 2014

Lezione 8/5/2014: I/O

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 File. Leggere e scrivere un file di testo formattato: le classi Formatter e Scanner. Serializzare e deserializzare un oggetto. L'interfaccia Serializable e il serialVersionUID. Esempio: il fumetto serializzabile.

Lab 7/5/2014: Esercizi sulle eccezioni

Gestire le eccezioni nel trasformare interi in stringhe in base k e viceversa. Eccezioni "inattese". Esercizi: SequenzaAGradini e FloppyDisk; Dizionario. UnsupportedOperationException in Iterator.remove.

Lezione 6/5/2014: Eccezioni

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.

giovedì 1 maggio 2014

Lab 30/4/2014: Esercizi su classi annidate e interne; interfacce Iterable, Iterator, Comparable, Comparator; mappe.

Esercizi su classi annidate e interne e Iterable: Lista linkata di interi (diverse versioni con classi esterne, classi interne, classi annidate statiche). Strutture dati: mappe. Esercizio sull'implementazione di una multimappa. Oggetti comparabili: le interfacce Comparable e Comparator.


martedì 29 aprile 2014

Lezione 29/4/2014: Classi annidate e interne; classi anonime; collezioni

Ancora su classi annidate e interne. 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. 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; la classe Arrays e la classe Collections.

venerdì 11 aprile 2014

Lezione 10/4/2014: interfacce e classi interne

Interfacce in Java: dichiarazione, implementazione. Esempio: Iterabile. Differenza tra interfacce e classi astratte. Ereditarietà multipla. Interfacce notevoli. Esercizio: Successione, Animali. Classi interne: classi top-level, classi annidate e interne.

mercoledì 9 aprile 2014

Lab 9/4/2014: esercizi su ereditarietà e polimorfismo

Esercizi: espressioni matematiche (Espressione, Costante, Variabile, EspressioneComposta, ecc.), Labirinto, EssereVivente.

P.S. L'appello straordinario di aprile si terrà lunedì 14 aprile ore 14, in aula G50, viale Regina Elena 295a, pal. G, terzo piano.



martedì 8 aprile 2014

Lezione 8/4/2014: Parola chiave final, intro a interfacce ed eccezioni

La parola chiave final per classi e metodi; ancora sulle enumerazioni. Introduzione a interfacce ed eccezioni.

P.S. Domani il lab inizia alle 12.45 con spiegazione dell'esonero 2!!!


venerdì 4 aprile 2014

Lezione 3/4/2014: 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. Sovrascrivere i metodi toString, equals e clone.

P.S. La lezione di martedì prossimo sarà dalle ore 13.30 alle ore 15, sempre in aula I NEC, causa svolgimento test di ammissione al mattino.

mercoledì 2 aprile 2014

Lab 2/4/2014: esercizi su ereditarietà

Esercizi: BarraDiEnergia e BarraDiEnergiaConPercentuale. Animali. Parola chiave super per la chiamata dei costruttori della superclasse.


martedì 1 aprile 2014

Lezione 1/4/2014: 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.
Abbiamo anche visto (con Federico Scozzafava) il framework a oggetti di un videogioco sparatutto spaziale su cui lavorerete per l'esonero.

martedì 25 marzo 2014

Lezione 25/3/2014: numero variabile di parametri, metodi e campi statici, enumerazioni, autoboxing e autounboxing

Numero variabile di parametri. Array bidimensionali. 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.


sabato 22 marzo 2014

Lezione 20/3/2014: esercizi su heap & stack; casi di coding horror

Esercizi su heap & stack. Casistiche di programmazione orripilante: codice illegibile, stampa a video, accessibilità errata dei campi, operatori, ridondanza nel codice o nell'uso di parentesi, uso del tipo appropriato; uso di variabili d'appoggio come campi; variabili locali a un corpo; oggetti senza dignità. Altri esercizi: conversione di base; stampa di istogrammi.

Pubblicato l'esercizio bonus #2!

martedì 18 marzo 2014

Lezione 18/3/2014: riferimenti e oggetti; stack & heap; campi e metodi statici; Scanner; controllo e decisione; 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. 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. Array: dichiarazione, inizializzazione, accesso.


giovedì 13 marzo 2014

Lezione 13/3/2014: campi, metodi, costruttori, overloading, accessibilità private e public, String

iniziato la 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. La classe String. Cenni sui riferimenti.

P.S. Le diapositive aggiornate, insieme agli esercizi d'esonero dell'anno scorso, sono su Google drive!



Lab 12/3/2014: java, javac, Eclipse, esercizi su consapevolezza di tipo e prime classi

Abbiamo parlato della compilazione e l'esecuzione in Java "old style", parlato di java, javac, JDK ed Eclipse (creazione di progetti, creazione di classi, run configuration) e discusso in dettaglio l'importanza della consapevolezza nell'uso dei tipi. Abbiamo parlato di conversioni di tipo, cast espliciti e impliciti. Esercizi: generatore casuale di numeri, Moltiplica, StampaNome, Variabili, Phrase-O-Matic.





martedì 11 marzo 2014

Lezione 11/3/2014: espressioni, classi e oggetti, campi e metodi

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. Concetti fondamentali di programmazione orientata agli oggetti: classi vs. oggetti, campi e metodi

Domani laboratorio! Vedremo parecchi esercizi su espressioni, classi, metodi e campi. Vedremo insieme l'ambiente di sviluppo integrato Eclipse.

venerdì 7 marzo 2014

Lezione 6/3/2014: panoramica e tipi di dato primitivi

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. Trovate le diapositive aggiornate sulla cartella google drive condivisa del corso (accessibile tramite il gruppo).



Lezione 5/3/2014: Introduzione al corso

Durante la prima lezione abbiamo parlato del docente, del corso e della sua impostazione. Molti di voi hanno apprezzato l'impronta "ispiratrice" di questa lezione introduttiva. Domani seconda parte dell'introduzione! Le diapositive sono online (accessibili una volta entrati nel gruppo)!

Non dimenticate che uno degli obiettivi di questo blog è permettere la comunicazione tra noi. Per favore, utilizzate i commenti per fornire un utile feedback (alcuni lo hanno fatto "dal vivo" subito dopo la lezione), ma soprattutto il gruppo google del corso.

lunedì 24 febbraio 2014

Prima lezione: mercoledì 5, ore 13 in laboratorio via Tiburtina!

Ragazzi, la prima lezione avrà luogo mercoledì 5 marzo alle ore 13 nel laboratorio di via Tiburtina, 205! Siateci tutti/e!

Se non l'avete ancora fatto, registratevi al corso!


giovedì 6 febbraio 2014

Siete pronti?

Siete pronti, ragazzi? Manca meno di un mese all'inizio del corso! Quest'anno ci saranno moltissime novità che vi terranno incollati allo schermo (a programmare, ovvio)!!!

Per saperne di più, iniziate registrandovi al corso, così da poter accedere al gruppo di discussione. La registrazione è aperta a tutti gli studenti di metodologie di programmazione.