Versione del 6-Dic-2007
FONDAMENTI DI INFORMATICA 1
Canale "89"

DIARIO DELLE LEZIONI
a.a. 2007 - 2008


I
settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
1-Ott-2007
I
Presentazione del corso di Fondamenti di Informatica 1.
Introduzione all'informatica.
Elaboratore, programmi, programmazione, algoritmo. Esempio: algoritmo per il calcolo dei numeri primi: il crivello di Eratostene.
2-Ott-2007
II
Architettura di un elaboratore: il modello di Von Neumann.
Unità di elaborazione centrale (Central Processing Unit, CPU): unità aritmetico-logica (Arithmetic and Logic Unit, ALU), clock, registri, il registro contatore di programma, ciclo accesso-codifica-esecuzione. La memoria primaria: memoria di sola lettura (Read Only Memory, ROM) e memoria ad accesso casuale (Random Access Memory, RAM). Memoria secondaria: cenni a dispositivi a tecnologia magnetica e ottica.  Il bus: linee dati, linee indirizzi, bus di controllo. I dispositivi di ingresso/uscita.
Introduzione alla programmazione.
Istruzioni macchina, linguaggio assembly e programma assemblatore. Linguaggi ad alto livello, programma compilatore.
3-Ott-2007
III
Introduzione al linguaggio Java.
Primo programma: la classe Hello.java. Scrittura del codice sorgente mediante editor di testi.  Compilazione ed esecuzione del programma. Analisi del programma.
4-Ott-2007
IV
Fasi della programmazione.
Compilazione: il bytecode; Java Virtual Machine (JVM) come processore virtuale. Errori sintatti e logici: esempi. Esecuzione: interprete java. Java Development Kit (JDK). Il processo di scrittura-compilazione-collaudo del codice. Java come linguaggio sia compilato sia interpretato. Linguaggi compilati e linguaggi interpretati: vantaggi e svantaggi; portabilità ed efficienza.
Regole lessicali e sintassi. Lessemi (token): parole chiave, identificatori, costanti, separatori, operatori.
Tipi  di dati fondamentali.
Una classe che elabora numeri: Coins1.java. I tipi fondamentali  int e double.

II
settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
8-Ott-2006
V
Commenti: su una riga //, su più righe /*  */. Definizione di variabili di tipo int e double. Inizializzazione.
Tipi  di dati fondamentali.
Variabili: assegnazione; classe Coins2.java. Costanti: lo specificatore final; convenzione per i nomi delle costanti; classe Convert3.java.
Rappresentazione dell'Informazione: i numeri.
Numeri naturali: notazione posizionale in base 10 e 2. Codifica dei numeri naturali in base binaria. Conversione dei numeri naturali da base decimale a  binaria e viceversa. Algoritmi di onversione delle parti intera e frazionaria dei numeri razionali.
9-Ott-2006
VI
Rappresentazione dell'Informazione
Numeri interi: rappresentazione  in bit di segno e modulo e in complemento a due. .
Somma algebrica fra numeri interi in complemento a due. Errore di trabocco (overflow). Condizioni di trabocco. Inverso rispetto alla somma di un numero intero in complemento a due.
Numeri razionali e reali: rappresentazione in virgola mobile secondo standard IEEE754 singola e doppia precisione. Distanza fra due numeri rappresentabili successivi in singola precisione.
10-Ott-2006
VII
Rappresentazione dell'Informazione
Codifica dei testi: rappresentazione dei caratteri secondo gli standard Unicode (http://www.unicode.org/) e ASCII. Il sottoinsieme Basic Latin del codice Unicode.Codifica delle immagini: cenni ai formati gif, jpeg, mpeg.
Tipi di dati fondamentali
I tipi di dati fondamentali: byte, short, int, long, float, double e relativi intervalli di rappresentazione. Cenni alle classi involucro Byte, Short, Integer, Long, Float e Double del pacchetto java.lang della libreria standard.
Coversione fra tipi di dati fondamentali.
Conversioni automatiche e forzate (cast): la classe Coins5.java. Operatori aritmetici: +, -, *, /, %. Divisione intera e in virgola mobile. L'eccezione java.lang.ArithmeticException. Le costanti della libreria standard Double.NaN, Double.POSITIVE_INFINITY e Double_NEGATIVE_INFINITY.
Conversini con arrotondamento: il metodo Math.round(). Errori di arrotondamento. Cenno ai metodi della classe java.lang.Math.

11-Ott-2006
VIII
Usare i tipi di dati fondamentali
Errori di arrotondamento. Variabili non inizializzate: es. Coins4.java. Operatori +=, -=, *=, /=, %=. L'operatore unario di incremento ++.
Invocare un metodo statico
Sintassi per l'invocazione di um metodo statico: es. Math.round(). La firma di un metodo: specificatore di accesso, tipo di dati restituito, parametri espliciti. Lo specificatore di accesso public. Il tipo di dati restituito void.
Sintassi per l'invocazione di um metodo di esemplare: es. System.out.println(). La classe java.lang.Math: metodi statici round(), pow(), sqrt(), ecc.
Iniziare a lavorare con oggetti
La classe java.lang.String.
Definizione e inizializzazione di variabili riferimento a oggetti di classe String. Indice all'interno di una stringa. Assegnazione a variabili di tipo String. La stringa vuota "". Operatore di concatenazione fra stringhe. Metodi della classe String: length(), substring(), toUpperCase(), toLowerCase(). L'eccezione java.lang.StringIndexOutOfBoundsException.
Stringhe
Esempio di semplice classe che elabora stringhe: la classe MakeLogin.java. Sequenze di escape: '\"', '\\', '\n', sequenze di escape per codici Unicode qualsiasi, es.  '\u00E'. Il tipo di dati fondamentale charLa classe TestUnicode.java per verificare se il proprio sistema operativo gestisce correttamente i codici non appartenenti all'insieme Basic Latin.
12-Ott-2006
IX
anticipo della lezione del 15-Ott-2006
Classi, oggetti e metodi
Classi, oggetti, metodi. Invocazione dei metodi di esemplare. Sovraccarico del nome dei metodi. Costruire oggetti: l'operatore new. Costruttori. Variabili riferimento. Esempi usando la classe Triangolo.java (Triangolo.class, interfaccia pubblica) che rappresenta un triangolo nel piano. Differenza fra variabili dei tipi fondamentali e variabili riferimento. Metodi di esemplare di acceso e modificatori.
Leggere dati in ingresso.
Leggere dati in ingresso e inviare dati in uscita: i metodi statici showInputDialog() e showMessageDialog() del la classe javax.swing.JOptionPane. Esempio: la classe Echo.java.Standard Input: l'oggetto  System.in di tipo java.io.InputStream. La classe java.util.Scanner: costruttore Scanner(InputStream), metodi nextInt(), nextDouble(), next(), nextLine(), close(). Esempi: le classi MakeLogin2.java, MakeLogin3.java e MakeLogin4.java.

III
settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
22-Ott-2007
X
Classi, oggetti e metodi.
Programmare le classi: variabili di esemplare, costruttori, metodi. Incapsulamento: specificatori di accesso public e private.  Esempio: progetto e codifica della classe BankAccount. L'enunciato return. Parametri dei metodi.  Il parametro implicito this. Uso del parametro implicito. Il riferimento costante null. Una classe con più costruttori. Il costruttore predefinito.
Commentare l'interfaccia pubblica.
L'applicazione javadoc. Commenti riconosciuti da javadoc. Esempio di uso di javadoc.

23-Ott-2007
XI
Iterazioni.
Iterazioni. Ciclo while. Enunciati semplici, composti, blocchi di enunciati.  Operatori relazionali in java: >, >=, <, >=, ==, !=. Espressioni booleane. Il tipo di dati fondamentali boolean. Variabili booleane. Costanti booleane true, false. Operatori booleani in java: !, &&, e ||. Precedenze degli operatori booleani. Tabelle di verità degli operatori booleani &&, ||, !. Leggi di De Morgan.
Decisioni.
Enunciato if. Clausola else. Alternative multiple.
24-Ott-2007
XII
Confronti.
Errori comuni con gli operatori relazionali. Stile di programmazione: rientri e tabulazioni. Confronti fra numeri in virgola mobile. Confronti fra stringhe: i metodi equals(...), equalsIgnoreCase(...), compareTo(...) della classe java.lang.String. Concetto di ordinamento lessicografico.
Decisioni e Iterazioni.
Diramazioni annidate. Else sospeso. Cicli for e do.
25-Ott-2007
XIII
Complementi di sintassi Java
Operatore di selezione. Enunciato switch.
Confronti.

Verificare la fine di un intervallo.
Decisioni e Iterazioni.
Valori sentinella e ciclo e mezzo: uso di variabile booleana di controllo; uso dell'enunciato break; enunciati con effetti collaterali. Enunciato continue.
Esercitazione su Iterazioni e Decisioni
Stampare i multipli di p nell'intervallo [min, max] con p, min, max numeri interi: le classi MultipleLister.java, NewLineMultipleLister.java, InColumnMultipleLister.java.
Esercitazione su realizzazione di classi
Il punto nel piano: la classe MyPoint2D.java e la sua classe di prova MainMyPoint2D.java.

IV
settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
29-Ott-2007
XIV
Confronti.
Confrontare oggetti.
Errori Comuni.
Un punto e virgola di troppo.
Programmare classi.
Introduzione alla programmazione della classe MyComplex del laboratorio 4 con la seguente interfaccia pubblica MyComplex.html. Invocare un costruttore da un altro costruttore: il costruttre this(...). Scegliere il nome dei parametri.. Mettere in ombre le variabili di esemplare: uso del parametro implicito this per risolvere le ambiguità. Usare le variabili di esemplare. La somma come metodo di esemplare e come metodo statico. Metodi che restituiscono riferimenti a oggetti e che ricevono riferimenti a oggetti come parametri espliciti : esempio il metodo MyComplex add(MyComplex z). Il metodo toString() e la descrizione testuale. Metodi predicativi. Usare metodi privati. Meccanismo di passaggio dei parametri: parametri formali ed effettivi. Passaggio dei parametri per valore.
Correzione del questionario di autovalutazione del lab. 4.
30-Ott-2007
XV
Scomposizione di stringhe.
Uso della classe Scanner. L'eccezione java.util.NoSuchElementException e i metodi predicativi della classe: hasNextInt(), hasNextDouble(), hasNextLong(), hasNext(), hasNextLine(). Uso dei metodi predicativi nella lettura da standard input. Esempio: contare le parole di un testo inserito da standard input: la classe WordCounter.java. Cenni alla classe java.util.StringTokenizer.
Redirezione di standard input e output in Windows e Linux.
Array.
Definizione di array e di variabili riferimento ad array. Usare gli array. Dimensione e uso degli indici. La variabile pubblica length. L'eccezione java.lang.ArrayIndexOutOfBoundsException. Esempio di uso degli array: la classe SelectValue.java.
31-Ott-2007
XVI
Array.
Inizializzazione degli elementi di un array. Inizializzazione per enumerazione degli elementi. Copiare un array. Array come parametro esplicito di un metodo: esempio. Array come valore di ritorno di un metodo: esempio. Ciclo for generalizzato. Array riempiti solo in parte. Ridimensionamento dinamico di array. Esempi: classi SelectValue2.java, SelectValue3.java, SelectValue4.java. Garbage collector in JVM. Allocazione della memoria in Java: java Stack e Heap. Algoritmi degli array: ricerca di un elemento (ricerca lineare);  ricerca del minimo o massimo ; eliminare un elemento; inserire un nuovo elemento.
1-Nov-2007
Festività


V
settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
5-Nov-2007
XVII
Gestione delle precondizioni nei metodi.
Lanciare eccezioni: parola chiave throw. Asserzioni: parola chiave assert; abilitare il calcolo delle asserzioni.
Variabili statiche
Variabili statiche: loro definizione, inizializzazione ed uso.
Ambito di visibilità delle variabili.
Ambito di visibilità delle variabili locali: errore per visibilità sovrapposta. Ambito di visibilità delle variabili di esemplare: specificatori di accesso private, public, protected e specificatore di accesso di defaul. Visibilità sovrapposta delle variabili locali e di esemplare: possibili errori logici. Ambito di visibilità dei parametri formali dei metodi. Visibilità sovrapposta delle variabili parametro e delle variabili di esemplare: uso del parametro implicito this per risolvere la visibilità sovrapposta. Mettere in ombra le variabili di esemplare tramite variabili locali omonime.
6-Nov-2007
XVIII
Correzione del questionario di autovalutazione svolto nel laboratorio 5.
Ciclo di vita delle variabili
Ciclo di vita delle variabili locali, parametri formali, statiche e di esemplare.
Progettazione di classi.
Scegliere le classi e i loro i metodi pubblici. Esempio di programma costituito da più classi interagenti: le classi MyPoint2D.java, MyTriangle2D.java, ElaboratoreTriangoli.java. Relazione di dipendenza fra le classi. Notazione UML (Unified Modeling Language) per i diagrammi di classi. Accoppiamento fra le classi. Ridurre l'accoppiamento per migliorare la manutenibilita' del codice.
7-Nov-2007
XIX
Introduzione all'uso dell'ambiente di sviluppo integrato bluej.
Scrittura, compilazione ed esecuzione del codice nell'ambiente bluej.
Pacchetti.

Organizzare le classi in pacchetti. Inserire una classe in un pacchetto: parola chiave package.
Parametri da riga di comando.
Passare parametri al metodo main() da riga di comando.
Progettazione di classi.
Esercitazione sugli array riempiti solo in parte: la classe TextContainer.java.
8-Nov-2007
XX
Progettazione di classi.
Una classe di prova per la classe TextContainer: la classe TextContainerTester.java.
Esercitazione sugli array riempiti solo in parte. Soluzione OOP: le classi Student.java e ExaminationOOP.java. Soluzione con array paralleli: la classe eseguibile Examination.java. Motivi per preferire la soluzione OOP.
Array bidimensionali.
Definire un array bidimensionale. Accedere a un elemento e assegnare un elemento. Dimensioni di un array bidimensionale.

VI
settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
12-Nov-2007
XXI
Ricorsione.
Definizione di metodo ricorsivo. Esempio: il fattoriale di n: realizzazione iterativa e ricorsiva. Ricorsione come algoritmo. Algoritmi ricorsivi e iterativi. Caso base e semplificazione dell'invocazione ricorsiva. Ricorsione infinita: java.lang.StackOverflowError. Ricorsione in coda, ricorsione multipla. Esempio di ricorsione multipla non efficiente: il calcolo della successione di Fibonacci. Esempi di algoritmi ricorsivi: invertire ricorsivamente l'ordine dei caratteri di una stringa (RecursiveStringReverser.java), risolvere il gioco della torre di Hanoi (HanoiSolver.java) e generare tutte le permutazioni dei caratteri di una stringa (PermutationGenerator.java).
13-Nov-2007
XXII
Ordinamento.
Algoritmo di ordinamento per selezione. Codifica in Java. Misura del tempo di esecuzione: il metodo System.currentTimeMillis(). Analisi teorica dlle prestazioni: complessita' temporale e andamento asintotico. Notazioni O-grande, Omega-grande. Theta-grande. Andamento asintotico dell'algoritmo di ordinamento per selezione: O(n2).
Ricerca.
Algoritmo di ricerca lineare. Codifica in Java. Analisi teorica delle prestazioni. Andamento asintotico della complessita' temporale media: O(n).
Algoritmo di ricerca binaria su array ordinati. Codifica in Java mediante metodo ricorsivo. Analisi teorica delle prestazioni. Andamento asintotico della complessita' temporale media: O(log n). Codifica in Java mediante metodo iterativo. Ricerca lineare con sentinella.
14-Nov-2007
XXIII
Ordinamento.
Algoritmo di ordinamento per fusione. Codifica in Java. Analisi teorica delle prestazioni. Andamento asintotico della complessita' temporale: O(n log n).
Algoritmo di ordinamento per inserimento.
Codifica in Java. Analisi teorica delle prestazioni. Andamento asintotico della complessita' temporalenel caso migliore: O(n), nel caso medio e peggiore O(n2). Confronto fra algoritmi di ordinamento.
Ordinamento di array quasi ordinati.
15-Nov-2007
XXIV
Numeri Casuali.
Uso del metodo java.lang.Math.random() per generare numeri pseudo-casuali interi e frazionari.
Uso della classe java.util.Random: i metodi nextInt() e nextInt(int n).
Esempi di programmazione: le classi AverageDice.java e AverageDice2.java.
Estrarre
da una stringa token delimitati da caratteri diversi dai caratteri Whitespaces.
Usare la classe Scanner per estrarre token da una stringa usando delimitatori definiti dall'utente. Il metodo useDelimiter() della classe java.util.Scanner. Cenni alle Espressioni Canoniche. Esempi.
Analisi del laboratorio 6
Correzione del questionario per auto-valutazione.
Spiegazione della classe MyStringTokenizer.java.

VII
settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
19-Nov-2007
XXV
Ereditarietà.
Paradigma Ereditarietà. La clausola extends. Esempio la classe SavingsAccount.java. Ereditare metodi e variabili di esemplare. La classe universale java.lang.Object. Definizione di Superclasse e Sottoclasse. Rappresentazione UML dei diagrammi di ereditarieta'. Ereditare metodi. Sovrascrivere metodi: invocare i metodi della superclasse: riferimento implicito super. Il metodo di esemplare toString() della classe Object: descrizione testuale standard. Sovrascrivere il metodo toString() della classe Object. Costruttori della sottoclasse. Invocazione dei costruttori della superclasse: super(...). Visibilita' nella sottoclasse delle variabili di esemplare della superclasse.  Conversione fra riferimenti.
20-Nov-2007
XXVI
Ereditarietà.
Metodi "magici": il metodo toString(). Conversioni forzate fra riferimenti. java.lang.ClassCastException. Polimorfismo: selezione anticipata e posticipata. Operatore instanceof.
Ordinamento e ricerca di oggetti.
Realizzare una proprietà astratta: le interfacce. Definire un'interfaccia: la parola chiave interface. Comparazione fra oggetti. Gli oggetti comparabili. L'interfaccia java.lang.Comparable. Realizzare l'interfaccia Comparable: la clausola implements. Relazione d'ordine totale: proprietà riflessiva, simmetrica e transitiva. Valori di ritorno dal metodo compareTo(). Esempio: la classe BankAccount2.java. Il tipo di dati Comparable. Riscrittura degli algoritmi di ordinamento e di ricerca per oggetti comparabili: la classe ArrayAlgorithms2.java. Interfaccia Comparable parametrica java.lang.Comparable<T>. Esempio: la classe BankAccount3.java. La classe java.util.Arrays.
21-Nov-2007
XXVII
Errori Comuni.
Mettere in ombra le variabili ereditate.
Ereditarietà.
Il metodo equals() della classe universale Object. Sovrascrivere il metodo equals(). Oggetti comparabili distinti. Classi non estendibili e metodi non sovrascrivibili: la parola chiave final. Metodi astratti.
Ordinamento.
Esempio di classi che realizzano l'interfaccia java.lang.Comparable e l'interfaccia parametrica java.lang.Comparable<T>: Studente.java e StudentePar.java. Criteri multipli di ordinamento: esempio la classe StudenteEsteso.java. Esempio di contenitore ordinato: la classe ArchivioOrdinato.java.
Correzione del questionario di auto-valutazione del laboratorio 7.
22-Nov-2007
XXVIII
Eccezioni.
Lanciare eccezioni in Java. Gestire eccezioni in Java: costrutto try / catch. Diversi tipi di eccezioni: le classi java.lang.Throwable, java.lang.Error e java.lang.Exception. Diagramma UML semplificato delle sottoclasi di java.lang.Throwable. Eccezioni controllate e a gestione facoltatica. La classe java.lang.RuntimeException. Errore comune: "mettera a tacere"  le eccezioni controllate. Demandare la gestione delle eccezioni controllate al metodo chiamante: clausola throws. Codificare nuove eccezioni: esempio l'eccezione a gestione facoltativa InsufficientBalanceException.java.
File e Flussi.
File di testo e file binari. Lettura di file di testo. Aprire un file di testo in lettura. La classe java.io.FileReader: costruttore FileReader(String filename) e metodi int read() e void close(). Le eccezioni controllate java.io.FileNotFoundException e java.io.IOException. La classe java.util.Scanner: costruttore Scanner(InputStream source). Aprire un file di testo in scrittura.la classe java.io.FileWriter: costruttori FileWriter(String filename) e FileWriter(String filename, boolean append), metodi write(int) e close(). La classe java.io.PrintWriter: costruttori PrintWriter(String filename) e PrintWriter(Writer out), metodi print() e println(). Esempi: copiare un file di testo una riga alla volta: classe Copia1.java; copiare a caratteri un file di testo: la classe Copia2.java. in un altro file. Lettura e scrittura di file binari. Le classi java.io.FileInputStream e java.io.FileOutputStream. Esempio: copiare un file binario: la classe Copia3.java. Fine riga e End Of File (EOF).

VIII
settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
26-Nov-2007
XIX
Lista Concatenata.
La struttura dati Lista Concatenata. Nodi di una lista concatenata. La classe ListNode.java: codifica della classe.
Struttura dati Lista Concatenata: interfaccia pubblica  LinkedList.html e codifica dei metodi. Analisi della complessita' temporale dei metodi.  L'interfaccia Container.java e le classi LinkedList.java ed EmptyLinkedListException.java.
Valutazione della didattica.
27-Nov-2007
XXX
Lista Concatenata.
Cenni alle classi interne e realizzazione dei nodi della lista come classe interna.
Lista Doppiamente Concatenata.
Struttura dei nodi della lista. Complessità temporale dei metodi.
Strutture Dati e Tipi di Dati Astratti.
Definizione di struttura dati: realizzazione in Java tramite classi. Le classi LinkedList e java.util.Vector come esempi di strutture dati. Definizione di Tipo di Dati Astratto (ADT): realizzazione in Java tramite interfacce.
ADT Pila.
Modalità di accesso LIFO (Last In First Out). Interfaccia Stack.java ed eccezione EmptyStackException.java. Realizzazione con array a lunghezza fissa: le classi FullStackException.java e FixedArrayStack.java. Realizzazione con array a ridimensionamento dinamico: la classe GrowingArrayStack.java. Uso dello specificatore di accesso protected. Prestazioni temporali dei metodi delle realizzazioni con array. Analisi ammortizzata per la prestazione del metodo push() della realizzazione con array a ridimensionamento dinamico. Esempio di uso di riferimenti di tipo interfaccia: la classe  StackReverser.java.
28-Nov-2007
XXXI
ADT Pila.
Realizzazione con lista concatenata: la classe LinkedListStack.java. Prestazioni temporali dei metodi.
Java Stack.
Uso di stack nella JVM. Frame dei metodi sospesi. Esempio di invocazioni di metodi e di operazioni di push e pop di frame nel Java stack. Analisi del meccanismo di memorizzazione delle variabili locali, dei parametri dei metodi e dell'indirizzo di ritorno. Analisi del meccanismo di passaggio dei parametri per valore. Esempi: le classi  PassingByValueFundamentalTypesTester.java e PassingByValueObjectReferencesTester.java.
ADT Coda.
Modalità di accesso FIFO (Firs In First Out). Interfaccia Queue.java ed eccezione EmptyQueueException.java. Realizzazione con array a lunghezza fissa: le classi FullQueueException.java e SlowFixedArrayQueue.java. Realizzazione con array a due indici: la classe FixedArrayQueue.java. Realizzazione con array a ridimensionamento dinamico: la classe GrowingArrayQueue.java. Realizzazione con array circolare fisso e ridimensionabile: le classi FixedCircularArrayQueue.java e GrowingCircularArrayQueue.java. Prestazioni temporali dei metodi delle realizzazioni con array. Realizzazione con lista concatenata: la classe LinkedListQueue.java. Prestazioni della realizzazione con lista concatenata. Estrarre dati da una struttura dati generica. Prevenire l'eccezione ClasscastException.
Correzione del questionario di auto-valutazione del laboratorio 8.
29-Nov-2007
XXXII
Strutture Dati e tipi fondamentali del linguaggio.
Classi involucro di java.lang: Boolean, Byte, Character, Short, Integer, Long, Float, Double. Costruttori e metodi di accesso int intValue() e double doubleValue(). Cenni all'auto-boxing.
Iteratore in una lista concatenata.
Concetto di posizione nella lista concatenata. L'interfaccia ListIterator.java. Codificare l'iteratore nella lista concatenata: la classe interna LinkedListIterator.java. Rendere disponibile l'iteratore all'esterno della classe LinkedList: il metodo ListIterator getIterator(). La classe LinkedListWithIterator.java. Piu' iteratori contemporanei nella stessa lista.
Esempi di algoritmi che usano l'iteratore nella lista concatenata.
Conteggio degli elementi di una lista concatenata: uso dei metodi hasNext() e next(). Copia di una lista concatenata in un'altra lista concatenata: uso del metodo add().
ADT Lista.
Liste posizionali: l'interfaccia List.java. Liste con rango: rango di un elemento. Vettore come lista con rango. La classe java.util.Vector.
Esercitazione
Analisi dele classi RecursivePrimeNumberLister.java e RecursiveFactorsComputer.java del laboratorio 7.
Analisi dele classi SortedContainer.java e SortableContainer.java del laboratorio 8.

 IX
settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
3-Dic-2007
XXXIII
ADT Dizionario.
Dizionario come contenitore di coppie <chiave, valore>, con chiave comparabile. Definizione in Java tramite l'interfaccia Dictionary.java. Analisi della realizzazione con array non ordinato riempito parzialmente: complessita' temporale dei metodi. Analisi della realizzazione con array ordinato riempito parzialmente: complessita' temporale dei metodi. Tabelle come dizionari con chiave intera: l'interfaccia Table.java. Realizzazione di una tabella con un array. Uso della memoria: fattore di riempimento. Funzione di hash. Tabella hash. Risoluzione delle collisioni: tabella hash con bucket. Complessita' temporale dei metodi della tabella hash con bucket. Condizioni per prestazioni ottime.
Tabella hash con chiave generica: l'interfaccia HashTable.java. Funzione di hash per stringhe. Il metodo int hashCode() della classe Object. Sovrascrivere il metodo hashCode().
Esercitazione.
Controllo di parentesi in una stringa con e senza annidamento: le classi CheckWithoutNestingTester.java e CheckWithNestingTester.java.
4-Dic-2007
XXXIV
Esercitazione
Programmazione del compito d'esame del 10-1-2007. Soluzione con lista concatenata.
Esercitazione.
Calcolo della frequenza delle parole di un testo tramite dizionario.
Realizzazione con array non ordinato:  le classi Coppia.java  e DconArrayNonOrdinato.java.
Realizzazione con array ordinato: le classi Coppia.java  e DconArrayOrdinato.java.
5-Dic-2007
XXXV
Esercitazione.
Calcolo della frequenza delle parole di un testo tramite dizionario. Realizzazione con hash table: la classe DconTabellaHash.java.
Realizzazione di una classe di prova: la classe MainD.java.
Flusso di errore standard
La variabile statica Syste.err. Redirezione del flusso di errore standard. Redirezione in modalità "append" dei flussi di output ed errore standard.
Cenni alla programmazione generica (generics).
Usare classi generiche. Scrivereclassi generiche. Esempio: Pila generica, l'interfaccia GenericsStack.java e la sua realizzazione generica nella classe GenericsArrayStack.java. Classe di prova GenericsArrayStackTester.java.
Esercitazione.
Realizzare un insieme. ADT Set:  l'interfaccia Set.java. Realizzazione con array riempito parzialmente: ArraySet.java. Operazioni unione, intersezione e differenza di insiemi: complessita' temporale O(n2). Una classe di prova: ArraySetTester.java.
Realizzazione di un insieme ordinato di oggetti comparabili: l'interfaccia SortedSet.java. Realizzazione con array ordinato riempito parzialmente: la classe ArraySortedSet.java. Operazioni unione, intersezione e differenza di insiemi: complessita' temporale O(n log n). Una classe di prova: ArraySortedSetTester.java.
6-Dic-2007
XXXVI
Esercitazione.
Programmazione del compito d'esame del 17-12-2002. Programmare un semplice traduttore tramite un dizionario. Soluzione con hashtable.
Paradigmi di programmazione  e riepilogo del linguaggio di programmazione Java.
Ultime informazioni sull'esame.