mercoledì 24 ottobre 2012

Appello straordinario di novembre

La consegna del progetto per il prossimo appello di novembre è fissata per il giorno 8 novembre entro le ore 11 del mattino. Il progetto va inviato all'indirizzo email progetto.naviglimetodologie@gmail.com e NON alla mail del docente.

L'orale a integrazione dello scritto e/o discussione progetto avrà luogo venerdì 9 novembre a partire dalle ore 8.30 nel (NUOVO!) studio del docente (Viale Regina Elena, 295, palazzina G, secondo piano, stanza 24). 

E' obbligatoria la prenotazione sulla pagina doodle, specificando se si deve consegnare il progetto e/o svolgere l'esame orale.

NOTA BENE: chi deve verbalizzare l'esame (solo fuori corso, ripetenti, part-time e lavoratori) deve ANCHE prenotarsi su infostud.


giovedì 7 giugno 2012

Lezione 7/6/12: Singleton e Decorator Pattern

Permettere una singola istanza per una classe: il Singleton Pattern. L'esempio di Paperino e della rete semantica. Il Decorator Pattern: aggiungere responsabilità a una classe senza che essa lo sappia. L'esempio della rappresentazione grafica delle automobili. Conclusione del corso!


Date importanti:
  • prossima consegna progetto: 11 settembre entro le ore 22
  • orale a integrazione dello scritto e/o discussione progetto: mercoledì 26 pomeriggio a partire dalle ore 14.30 nel (NUOVO!) studio del docente (Viale Regina Elena, 295, palazzina G, secondo piano, stanza 24).
  • NOTA BENE: chi deve verbalizzare l'esame, deve ANCHE prenotarsi su infostud.

mercoledì 6 giugno 2012

Laboratorio del 6/6/12: esercizi su generici, reflection e design pattern

Generici: soglia; insiemi di insiemi disgiunti.
Reflection: GestoreClasse. 
Design pattern: "Camminare" con lo Strategy Pattern. "Osservare" gli andamenti in borsa con l'Observer Pattern. Creare oggetti con il Factory Pattern.

martedì 5 giugno 2012

Lezione 5/6/12: asserzioni, design pattern (1/2)

Asserzioni: il costrutto assert e specifica delle informazioni aggiuntive per lo stack track.

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. Il Factory Pattern e il Simple Factory Pattern: la pizzeria e la pizzeria in franchising.


giovedì 31 maggio 2012

Lezione 31/5/12: reflection e rilascio

Ancora sui tipi generici: la parola chiave super. Overloading dei metodi generici. Tipi raw.

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.

IMPORTANTE: prenotazione all'appello dell'11 giugno. Clicca QUI.


mercoledì 30 maggio 2012

Lab del 30/5/12: esercizio sui generici; progetto

Esercizio sulle successioni con i generici. Discussione del progetto. Le note esplicative sono online sul sito google del corso!

domenica 27 maggio 2012

Lezione 24/5/12: GUI

Concetto di interfaccia grafica. Metafora dell'armadio IKEA. Gerarchia AWT/Swing. Componenti principali: Base, Widget, Layout, Graphics. JFrame, JPanel, JLabel, JButton, Component, Container, JComponent. Interazione con l'utente: eventi e sorgenti. Gli EventListener: MouseListener, KeyListener, ActionListener. JMenu, JDialog, JSplitPane, JScrollPane, JRadioButton, JCheckBox, JComboBox, JTextField, JTextArea. Layout. Disegno personalizzato.


Lab del 23/5/12: esercizi d'esonero, generici e progetto

Esercizi d'esonero sulla ricorsione: conta percorsi, MangiaDoppioniConsecutivi, somma minimale, sequenza k-esplosiva. Esercizi sull'I/O: biblioteca. Esercizi sulle collection: inversione di una mappa. Generici: implementazione della Pila generica. Delucidazioni sul progetto.


martedì 22 maggio 2012

Lezione 22/5/12: Tipi generici

Ancora sulle strutture dati: alberi, alberi binari, definizione in Java. Esercizio: ricerca in un albero binario.

Tipi generici. Definire e utilizzare una classe generica. Specificare più tipi generici. Estendere le classi generiche. Esercizio: la classe Pila. Generici e collezioni: interfacce generiche prototipiche. Definire un metodo 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.

  (cancellazione del tipo)

mercoledì 16 maggio 2012

Lab del 16/5/12: esercizi su ricorsione, collezioni e I/O

Esercizi sulla ricorsione: conteggio delle occorrenze di una lettera; verifica del contenimento di un intero in un array; calcolo del numero di occorrenze totali e in posizione pari di un carattere in una stringa; stampa della lista delle posizione delle occorrenze; verifica della presenza di caratteri ripetuti in una stringa.

Esercizi su I/O e collezioni: lettura e recupero di successioni; verifica se un carattere appare k volte in una stringa.



Lezione 15/5/12: ancora su strutture dati, pile e code

Ancora su strutture dati: interfacce fondamentali (Iterable, Collection, List, Set, OrderedSet, Queue), insiemi e mappe con elementi (o chiavi) senza ordinamento, con ordinamento naturale e con ordinamento di inserimento. La classe pila: Stack. L'interfaccia coda Queue e l'implementazione mediante LinkedList. Esercizi con pila e coda: parentesi annidate, inversione degli elementi di una coda, calcolatrice in notazione polacca inversa.

giovedì 10 maggio 2012

Lezione 10/5/12: collezioni in Java

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. Algoritmi sulle collezioni: la classe Collections. Algoritmi sugli array: la classe Arrays. Ordinamento "naturale" degli oggetti. L'interfaccia Comparable. Ordinamento con l'interfaccia Comparator.


Lab del 9/5/12: esercizi sulla ricorsione in Java

Esercizi: Teseo, il minotauro e il labirinto di Creta (e il filo di Arianna!) sia nella versione con labirinto rappresentato da una struttura ricorsiva di corridoi, sia nella sua rappresentazione matriciale (caricata da file). Gestione dell'I/O: DatabasePersone, valutazione in and e or di espressioni valutabili.


Lezione 8/5/12: ancora su ricorsione; input & output

Ancora su ricorsione: la successione di Fibonacci, efficienza e problematiche dell'implementazione ricorsiva. Esercizio: permutazioni di una stringa. Esercizio: Teseo, il minotauro e il labirinto di Creta (versione con struttura dati ricorsiva e con labirinto a matrice). Mutua ricorsione. Esempio: pari e dispari. Esercizio: SommaSottrai. Ricorsione di coda. Esercizio: and tra espressioni "valutabili" in una lista. Esercizio: la Torre di Hanoi.

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.


giovedì 3 maggio 2012

Lezione 3/5/12: 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.

Le specifiche del progetto sono online!!!

mercoledì 2 maggio 2012

Lab del 2/5/12: soluzioni secondo esonero e presentazione progetto

Visione dei compiti, soluzioni del secondo esonero e presentazione di una "bozza" del progetto (avventura testuale e/o grafica).


sabato 28 aprile 2012

giovedì 19 aprile 2012

Lezione 19/4/12: 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: SequenzaAGradini, FloppyDisk, Dizionario e Mappa, Catena di volontari.

IMPORTANTE: Registrazione obbligatoria per la prova intermedia di martedì 24 aprile (aula I NEC, ore 9.30). Clicca qui per registrarti.


Lab del 18/4/12: esercizi di preparazione alla prova intermedia

Esercizi: Successioni, Tassonomia di animali, Marvel vs. Disney, RaccoltaDifferenziata.



mercoledì 18 aprile 2012

Lezione 17/4/12: 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. Classi annidate statiche. Utilità delle classi interne. Esercizio: Disney vs. Marvel.

IMPORTANTE: Registrazione obbligatoria per la prova intermedia di martedì 24 aprile (aula I NEC, ore 9.30). Clicca qui per registrarti.


giovedì 12 aprile 2012

Lezione 12/4/12: polimorfismo, classe Object, liste

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. Enumerazioni e costruttori. Metodi e classi final, classi final della libreria standard. Le liste in Java: la classe ArrayList.


Lab dell'11/4/12: LibreriaComponibile ed EssereVivente

Abbiamo introdotto gli ArrayList e visto un esempio di modellazione a oggetti mediante liste, la LibreriaComponibile (con Scaffale e Libro). Un secondo esercizio visto in laboratorio è stato l'EssereVivente, classe astratta di una serie di esseri con funzioni vitali, eventuale possibiltà di risorgere (Fenice), di morire 7 volte (Gatto), ecc.


mercoledì 4 aprile 2012

Lab del 4/4/12: tris ed esercizi su ereditarietà

Le classi ScacchieraTris e Tris. Migliorie con la modellazione delle celle (classe Casella da enum a classe vera e propria) e dei giocatori (GiocatoreUmano, GiocatoreComputer). Esercizi sull'ereditarietà: espressioni matematiche (Espressione, Costante, Variabile, EspressioneComposta, ecc.) e gioco dell'oca (classi GiocoDellOca, Giocatore, Casella, CasellaVuota, CasellaPunti, CasellaSpostamento). Sbizzarritevi!


Lezione 3/4/2012: 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. Overloading e overriding: significato, contratto e differenze. Modificatori di visibilità: public, private, protected e default.


giovedì 29 marzo 2012

Lezione 29/3/12: ancora su array; auto(un)boxing; classi wrapper; enumerazioni

Copia di array. Array bidimensionali. Autoboxing (vedi immagine sotto :-)), auto-unboxing. Classi wrapper e metodi e costanti delle classi wrapper. Enumerazioni: dichiarazione, metodi statici values e valueOf. Un assaggio di ereditarietà

Esempio di autoboxing (scherzo, lo sapete cos'è invece, vero??)

NEW: I risultati della prima prova d'esonero sono online!!!

Lab del 28/3/12: svolgimento della prova d'esonero

Esercizi: StringaMangiona, TriangoloRettangolo, EstrazioneDelLotto.

Lezione 27/3/12: prova d'esonero!

Prima prova d'esonero!


giovedì 22 marzo 2012

Lezione 22/3/12: uscita e continuazione del ciclo; array; esercizi

Uscita da un ciclo (break) e continuazione del ciclo (continue). Array: dichiarazione, creazione, accesso. Esercizi sulla modellazione a oggetti: ConversioneDiBase, CorniceAvanzata, RettangoloDiCaratteri, Istogramma, MazzoDiCarte.



Lab del 21/3/12: esercizi di classi, oggetti e iterazione

Abbiamo svolto in laboratorio l'esercizio RegistratoreDiCassa e Punto (vedi diapositive della seconda settimana) e numerosi esercizi sulle istruzioni di selezione e iterazione di Java (vedi diapositive della terza settimana).


martedì 20 marzo 2012

Lezione 20/3/12: metodi statici, Scanner, package, costrutti decisionali

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.


giovedì 15 marzo 2012

Lezione 15/3/12: ancora sugli oggetti, classe String, allocazione su heap e stack

La classe String. La stringa "magica". Esercizio: registratore di cassa. Tipi di dati primitivi vs. oggetti. Inizializzazioni implicite dei campi. Riferimenti e oggetti. Anatomia della memoria: stack e heap. Esercizio: punti e segmenti.


Lab del 14/3/12: Eclipse e tombola

In questa seconda giornata di laboratorio è stato introdotto Eclipse, l'Integrated Development Environment (IDE) che useremo nel corso. Inoltre è stato presentato un esempio completo basato sullo scenario della tombola.


Materiale: introduzione a Eclipse.

martedì 13 marzo 2012

Lezione 13/3/12: Classi, oggetti, campi e metodi

Una 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 e la classe Menu.

P.S. Il progetto sarà un'avventura testuale/grafica!


giovedì 8 marzo 2012

Lezione 8/3/12: rassegna di concetti noti e "anteprima" sul corso

Oggi abbiamo visto un'anteprima sui concetti fondamentali che verranno introdotti durante il corso. Quindi siamo andati in dettaglio su HelloWorld.java, la compilazione e interpretazione in java, sui tipi di dati primitivi e le loro caratteristiche, discutendo anche la classe speciale String, le variabili (dichiarazioni ed assegnazioni), le espressioni, la precedenza degli operatori aritmetici.

A chi non ha superato l'esperimento di crowdsourcing consiglio un ripasso *accurato* dei fondamenti della programmazione procedurale.
Per gli altri: che tipo di drago sei nella programmazione?



Lab del 7/3/12: HelloWorld.java

Primo incontro di laboratorio. Il Prof. Parisi Presicce ha illustrato l'esempio HelloWorld in java (anche rispetto all'equivalente C), fornendo anche una panoramica su molte delle caratteristiche di Java.

Qui sotto: riconoscete il linguaggio? E il valore restituito?

martedì 6 marzo 2012

Lezione 6/3/12: 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" dell'introduzione alla programmazione a oggetti (ma anche dell'informatico che viaggia in "quinta"). Domani laboratorio! A brevissimo le diapositive online!

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).


venerdì 17 febbraio 2012

Benvenuti!

Questo è il blog e sito del corso di Metodologie di Programmazione (canale 2, M-Z) del Corso di Laurea in Informatica @ Sapienza Università di Roma tenuto dal Prof. Roberto Navigli.

IMPORTANTE: Tutti gli studenti sono pregati di iscriversi al Gruppo Google del corso.