|
Università
di Padova
|
Diploma in Ingegneria Informatica
Corso di Fondamenti di Informatica 2
2 Moduli
|
A.A. 2001/2002
Versione 1.17 18/01/2002
Programma-schema del corso
Qui di seguito trovate gli argomenti che verranno trattati in ciascun
incontro, nella prima parte (1h30'), denominata per semplicità 'lezione',
con il docente ufficiale in teleconferenza,
nella seconda (1h45'), denominata per semplicità 'laboratorio', con il
docente locale, nonché il programma dell'attività di studio
personale, denominata 'studio', che è relativa al materiale
trattato nella lezione immediatamente precedente.
La seconda parte di ciascun incontro comprenderà
anche la risposta, da parte del docente locale, ai quesiti e alle richieste di
chiarimento posti dagli studenti in relazione al materiale della lezione appena
terminata. Durante il laboratorio il docente locale interverrà, se necessario, con
integrazioni sulla teoria, risposte a domande varie, e condurrà
l'attività pratica. A tale scopo, per ciascun incontro
il docente locale sceglierà dalla voce Laboratorio gli esercizi
da sviluppare al calcolatore, proponendo e risolvendo eventualmente altri esercizi
relativi alla materia da analizzare, in base alle esigenze della classe.
Gli esercizi suggeriti nel programma sono quelli
che appaiono più utili al consolidamento della
teoria e come base per le realizzazioni pratiche: lo studente quindi
si sforzerà a casa, PRIMA dell'incontro, di affrontarne
il maggior numero possibile, in base
al tempo a disposizione, assieme alla realizzazione in Java del pseudocodice
ricavato dagli esercizi e problemi proposti.
È CALDAMENTE suggerito allo studente di anticipare
l'attività pratica a casa: a questo fine
si suggerisce di installare nel proprio PC una versione aggiornata
del JDK e della sua documentazione in linea (vedi software di supporto).
Alla fine dello studio della settimana
lo studente potrà verificare se ha raggiunto
gli obiettivi principali, svolgendo successivamente
gli esercizi di verifica suggeriti (di alcuni viene fornita la soluzione).
Alla fine di questa pagina si trova un riassunto delle pagine da studiare
dal libro base di teoria [Good].
I temi qui elencati, sia per
quanto riguarda le lezioni che i laboratori, vanno intesi
come traccia di massima per mantenere un ritmo adeguato: durante lo svolgimento
del corso potranno essere attuate dal docente e/o dai docenti locali tutte
le correzioni che si rivelassero necessarie per il buon andamento del corso
stesso.
Suddivisione temporale
N.B. Si ricorda che i giorni previsti per gli incontri sono
il lunedì e il giovedì e che la lezione si svolge (di norma)
dalle 14.30 alle 16.00.
Per ogni lezione sono forniti:
- Le slide in forma navigabile (Slide nav)
- La versione zipped della forma navigabile (Slide nav zip)
- Tre diapositive per pagina in formato PDF (<numero lezione>_3)
- Sei diapositive per pagina in formato PDF (<numero lezione>_6)
Per la visualizzazione e stampa dal formato PDF è necessaria l'installazione di:
Acrobat Reader.
Torna alla pagina principale
Calendario del corso (2 moduli)
Lezioni in teleconferenza e incontri con il docente locale (tot. n. 27):
1, 4, 8, 11, 15, 18, 22, 25, 29 ottobre 2001;
5, 8, 12, 15 novembre 2001;
3, 6, 10, 13, 17, 20 dicembre 2001;
7, 10, 14, 17, 21, 24, 28, 31 gennaio 2002
Le prove intermedie si terranno presso i centri locali
nelle date 26 novembre 2001 e 28 gennaio 2002.
Settimana 1 (dal 01/10/01)
Lunedì 01/10/01 Incontro 1
Lezione a RO:
- Presentazione del corso
- Modalità d'esame
- Ciclo di vita del software
- Incapsulamento ed astrazione dei dati
- Programmazione per tipi di dati astratti, vantaggi
- I tipi predefiniti
- Decomposizione algoritmica e decomposizione object-oriented
- I tipi definiti dall'utente, il costrutto class
- UML (Uniform Modeling Language),
convenzioni di scrittura del sorgente
- Un esempio con la classe Point
- Ripasso della sintassi di Java: controllo del flusso, operatori particolari
Laboratorio:
- Esplorazione degli strumenti di sviluppo: editor realj,
compilatore javac,
interpreti java e appletviewer
- Ciclo di produzione e collaudo di un'applicazione
- Prova di qualche semplice esempio (primi esempi tratti da [Arn],
FI2.Examples.Point)
- Uso del tool javadoc
- Visita del sito del corso: http://linda.dei.unipd.it/fi2/
Studio:
- Analisi degli argomenti del primo seminario
- Uso delle convenzioni per i commenti nei programmi
- Contenuto del JDK ([Hor] Cap. 2)
- Iniziare il ripasso della sintassi di java ([Good] Cap. 1, [Hor] Cap. 3)
Giovedì 04/10/01 Incontro 2
Lezione a FL:
I metodi: prototipo/contratto
Sovraccaricamento (overloading) dei metodi e dei costruttori
Controllo della visibilità dei membri, i membri statici
La classe String, l'operatore '+'
Il costrutto array, array multidimensionali
Il metodo main come metodo di collaudo
Il metodo toString
Laboratorio:
- Analisi e collaudo dell'esempio FI2.Examples.Point
- Semplici esempi di classi con membri sia privati che pubblici
e ripasso di Java (dichiarazioni, costrutti di controllo del flusso,
espressioni complesse, ecc.)
- Generazione del javadoc degli esempi sviluppati
Studio:
- Classi e oggetti: campi, controllo d'accesso (public, private),
costruttori, metodi, overloading, membri statici ([Good] Parr. 1.1-1.4, [Hor] Cap. 4 fino a pag. 141,
anche [Arn] 2.1-2.9 )
- Metodi main e toString ([Good] Par. 1.2, [Hor] Cap. 4 pag. 155,
Cap. 5 pag. 219, anche [Arn] 2.1-2.9)
- La classe FI2.Examples.Point e l'esempio di [Good] Par. 1.7
- Esercizi: [Arn] 1.4, 1.5, 1.6, 1.9, 1.11, 2.1-2.4, 2.6, 2.8, 2.10,
2.12-2.15
[Good] R1.1..1.3, R1.5..1.6, R1.8..1.9, R1.13..1.14, C1.2..1.3, C1.5..1.7, P1.1
Torna all'indice temporale
Settimana 2 (dal 08/10/01)
Lunedì 08/10/01 Incontro 3
Lezione a TV:
- Programmazione object-oriented: i concetti di ereditarietà
e poliformismo, casting
- Costruttori di classi derivate
- L'attributo protected
- Mascheramento di membri attraverso ridefinizione, l'attributo final,
il metodo finalize
- Riferimento ai membri ereditati, la parola chiave super
- La classe Object, il metodo equals
- La ridefinizione del metodo toString
- Le classi wrapper
- L'esempio Pixel
- Introduzione alle classi interne
Studio:
- Classi estese, ridefinizione di membri, super, final,
Object, clonazione di classi, eccezioni ([Good] Parr. 2.1-2.3, [Hor] Parr. 5.1-5.2
5.2, 5.5, anche [Arn] 1.10, 1.12, 2.3, 3.1-3.6, 3.8-3.10)
- Classi e metodi astratti ([Good] Par. 2.4, [Hor] Par. 5.1, anche [Arn] 3.7)
- Classi interne ([Hor] Par. 6.2,
vedi anche argomento supplementare)
- Interfacce ([Good] Par. 2.4, [Hor] Par. 6.1, anche [Arn] 1.11, 4.1)
- Ereditarietà multipla e realizzazione di interfacce ([Arn] 4.2-4.6)
- Analisi degli esempi FI2.Examples.Pixel e FI2.Examples.Rect
- Esercizi: [Arn] 3.5, 3.8, 3.9
[Good] R2.6, R2.8..2.10, C2.4, P2.1
Laboratorio:
- Collaudo della soluzione degli esercizi 1.5 e 1.6 di [Arn] sviluppata
a casa
- Collaudo di esempi di [Hor] cap. 4 (Calendar, Employee)
- Collaudo delle soluzioni di alcuni degli esercizi proposti
Giovedì 11/10/01 Incontro 4
Lezione a PD:
- Progetto di classi estese, le semantiche isA, hasA e
useA, l'esempio di Rect
- Classi astratte e interfacce
- L'interfaccia Iterator, l'iterazione su contenitori
- Ereditarietà multipla in Java
- Clonazione di oggetti
- Le eccezioni
- Associazioni in UML, loro traduzione in Java
Laboratorio:
- Analisi e collaudo dell'esempio FI2.Examples.PointE
- Sperimentazioni varie con classi estensibili
- Verifica, mediante semplici esempi con classi estese, anche tratti
da [Arn] e da [Hor] Capp. 5 e 6, delle regole di visibilità discendenti dall'attributo
protected, dal mascheramento e ridefinizione, dalla gerarchia
dei costruttori
- Collaudo con gli esempi FI2.Examples.Pixel e FI2.Examples.Rect
Studio:
- Completare lettura e/o ripasso di [Good] Capp. 1-2 e [Hor] Capp. 3-4 (oppure
[Arn] 5 e 6)
(INCLUDENDO le parti riferentesi ad ereditarietà tra classi)
- Ripasso della teoria sulle classi estese (vedi incontro A)
- Analisi dei concetti di polimorfismo, specializzazione e generalizzazione,
gerarchia delle classi estese, isA e hasA ([Good] Par. 2.2,
[Hor] Par. 5.1, anche [Arn] 3.9, 3.10)
- Gestione di stringhe ([Hor] Par. 3.7, anche [Arn] cap. 8)
- Analisi di alcune classi di utilità: BitSet ([Arn] 12.1)
Vector ([Arn] 12.4, vedi anche [Hor] Par. 5.2 pag. 230), Date e GregorianCalendar ([Hor]
Par. 4.2 pag. 127), Random, Observer/Observable
([Arn] 12.9), StringTokenizer ([Arn] 12.10-12.12, [Hor] Par. 12.4 pag. 768)
e delle classi wrapper ([Arn] Parr. 13.3-13.9 [Hor] Par. 5.2 pag. 237)
- Esercizi: [Arn] 3.6, 3.7, 3.8, 3.9, 3.12
Torna all'indice temporale
Settimana 3 (dal 15/10/01)
Lunedì 15/10/01 Incontro 5
Lezione a RO:
- Il package
- Gli stream, cenni sulla serializzazione
- Panoramica sulle principali differenze tra Java e C++
- Cenni alle novità di Java 1.2, 1.3, 1.4
Laboratorio:
- Analisi e collaudo di qualche insieme di classi estese tratto dalla
libreria sorgente, dal sorgente accluso con i testi
e/o qualche esempio in rete
- Ulteriore collaudo degli esercizi proposti
- Verifica del concetto di polimorfismo con semplici esempi di chiamata
a metodi di classi derivate attraverso riferimenti a superclassi
Studio:
- Continua analisi di alcune classi di utilità (vedi
settimana 2) e delle classi wrapper
- Il concetto di package, regole di visibilità ([Good] Par. 1.8,
[Hor] Par. 4.7, anche [Arn] cap. 8)
- Gestione dei file in Java: prima analisi degli stream ([Good] Par. 1.6,
[Hor] Parr. 12.1-12.2,
anche [Arn] cap. 11)
- Panoramica su C++ ([Hor] vedi note su C++ distribuite nei Capp. 2-6)
Giovedì 18/10/01 Incontro 6
Lezione a PD:
- Concetto di algoritmo
- Valutazione del tempo di esecuzione medio e di caso peggiore
- Ordine di crescita (funzioni TH (theta grande), O (o grande), OM (omega
grande))
- Ordinamenti parziali e totali
- Strutture elementari: vettore, vettore espandibile
- Ricerca lineare su vettore non ordinato
Laboratorio:
- Primi esempi di utilizzazione di package
- Primi esempi di utilizzazione di stream
- Analizzare e collaudare l'esempio FI2.Util.BinaryMat
Studio:
- Strutture di dati e algoritmi ([Good] 3.1)
- Tempo di esecuzione ([Good] 3.1)
- Pseudocodice e relazioni matematiche ([Good] 3.2, 3.3)
- Analisi degli algoritmi ([Good] 3.5, 3.6, 3.7, [Cor] 2.1)
- Le interfacce FI2.Set.InspectableContainer e FI2.Set.Container
- Il problema dell'ordinamento
- Esercizi: [Good] R3.1..3.3, R3.6..3.8, R3.20..3.24, C3.1, C3.7, C3.9, C3.14, C3.20
Torna all'indice temporale
Settimana 4 (dal 22/10/01)
Lunedì 22/10/01 Incontro 7
Lezione a PD:
- Ricerca binaria su vettore ordinato
- Strutture di dati: la collezione (contenitore), l'insieme
- Strutture ad accesso controllato: pila (stack) e coda (queue)
- Oggetti mutabili e non mutabili
- Un'interfaccia di stack
- Realizzazione mediante array
- Un'interfaccia per la coda
- Array in forma circolare, realizzazione di una coda
Laboratorio:
- Arricchimento degli esempi realizzati con funzioni di valutazione del
tempo di esecuzione (vedi anche [Arn] 3.10) in dipendenza del numero di
elementi
- Completamento dell'analisi complessiva di Java
- Analisi e collaudo dell'esempio FI2.Stream.FileMem (memoria virtuale)
- L'interfaccia FI2.Set.Set: analisi iniziale (vedi anche [Good]
10.2)
Studio:
- Ricerca binaria ([Good] 8.5.1)
- La struttura di dati stack ([Good] 4.1, [Cor] 11.1)
- L'interfaccia FI2.Linear.Stack
- La realizzazione con vettore FI2.Linear.ArrayStack
- La struttura dati queue ([Good] 4.2.1..4.2.2, [Cor] 11.1)
- Allocazione dinamica in java ([Good] 4.2.3)
- L'interfaccia FI2.Linear.Queue
- Realizzazione di queue con vettore circolare FI2.Linear.ArrayQueue
- Esercizi: R4.1, R4.2, R4.6..R4.7, C4.2, C4.6, C4.12, P4.4, P4.9
Giovedì 25/10/01 Incontro 8
Lezione a PD:
- La lista concatenata
- Concatenazione in Java e C++
- Realizzazione di stack e coda mediante lista concatenata
- La tecnica dell'adattatore
- La lista doppiamente concatenata
Laboratorio:
- Uso di vettori in java, la classe FI2.Set.ArraySet
- Sperimentazione con le classi analizzate per set, stack
e queue
Studio:
- { Realizzazione di un insieme generico in forma di classe Set
mediante la classe BitSet ([Arn] 12.1) e la classe Vector
([Arn] 12.4) }
- Lista concatenata ([Good] 4.3)
- Realizzazione di stack e di queue mediante lista concatenata
(semplice) (FI2.Linear.LinkedStack, FI2.Linear.LinkedQueue)
- Coda doppia (deque) ([Good] 4.4.1)
- Realizzazione di stack e queue con deque ([Good]
4.4.2)
- Realizzazione di deque mediante liste doppiamente collegate
([Good] 4.4.3)
- La tecnica dell'adattatore ([Good] 4.4.4)
- Esercizi: R5.2, R5.14, C5.1..C5.2, C5.5
Torna all'indice temporale
Settimana 5 (dal 29/10/01)
Lunedì 29/10/01 Incontro 9
Lezione a PD:
- Strutture di dati fondamentali: la sequenza
- Accesso mediante indice e realizzazioni
- Il concetto di posizionatore in un contenitore
Laboratorio:
- Collaudo degli esempi analizzati
- Realizzazione di deque mediante lista doppiamente collegata:
sviluppo di un progetto complessivo a partire dalle specifiche di interfaccia
e con suddivisione dei compiti, debugging e collaudo
Studio:
- Strutture di dati fondamentali: la sequenza indicizzata (ranked)
([Good] 5.1)
- L'interfaccia FI2.Linear.Vector
- Realizzazione mediante vettore espandibile FI2.Linear.ArrayVector
- Il posizionatore (interfaccia FI2.Set.Position) e le operazioni
node-based ([Good] 5.2.1, 5.2.2)
- Il contenitore con posizioni (interfaccia FI2.Set.PositionalContainer)
Torna all'indice temporale
Settimana 6 (dal 05/11/01)
Lunedì 05/11/01 Incontro 10
Lezione a PD:
- Sequenza con posizioni, realizzazioni
- L'esempio di bubble-sort
- Realizzazione con lista concatenata semplice
- La sequenza generalizzata
- Il concetto di iteratore, FI2.Object.Iterator,
Enumeration in Java, Iterator in Java 1.2
Laboratorio:
- Proseguimento del progetto comune su coda doppia concatenata
- Collaudo delle interfacce e classi analizzate
- Modifica della classe FI2.Linear.ArrayQueue in forma di classe-adattatore
per realizzare un queue basandosi su un oggetto di classe FI2.Linear.ArrayVector
gestito come sequenza circolare; relativo collaudo
Studio:
- La sequenza con posizionatori (interfaccia FI2.Linear.List)
([Good] 5.2.3)
- Il posizionatore per sequenze indicizzabili (classi FI2.Linear.ListPosition
e FI2.Linear.GenericPosition) (far riferimento a [Good] 5.3.3)
- La classe FI2.Linear.ArrayList
- Realizzazione di List mediante lista concatenata
doppia ([Good] 5.2.4)
- La classe FI2.Linear.SLList
- L'interfaccia FI2.Linear.Sequence ([Good] 5.3)
- La classe FI2.Linear.ArraySequence
- L'esempio di bubble-sort (FI2.Sorting.SeqBubbleSort)
([Good] 5.4)
- Iteratori ([Good] 5.5)
- Esercizi: R5.4, R5.6, R5.9, R5.11, R5.12, C5.10, C5.12, C5.14, C5.22, P5.2,
P5.5
Giovedì 08/11/01 Incontro 11
Lezione a PD:
- L'interfaccia grafica in Java
- Applicazioni e applet
- Il package AWT
- I contenitori e i componenti
- Il Layout
Laboratorio:
- Collaudo delle classi analizzate
- Si prosegue il progetto comune realizzando dapprima un PositionalSequence
e poi un Sequence mediante lista concatenata doppia
Studio:
- Introduzione ad AWT, applet e gestione eventi ([Hor] Par.
7.1)
- L'albero dei componenti di AWT ([Hor] Par. 7.4)
- Il layout ([Hor] Par. 9.2)
Torna all'indice temporale
Settimana 7 (dal 12/11/01)
Lunedì 12/11/01 Incontro 12
Lezione a PD:
- Gestione degli eventi e il modello a delegazione
- Gli ascoltatori
- Cenno ai thread e alla multiprogrammazione
Laboratorio:
- Prova di qualche semplice esempio con AWT tratto da [Hor]
- Analisi e collaudo degli esempi FI2.Gui.MenuFrame e
FI2.Gui.AppletDiag
- Provare la definizione degli ascoltatori mediante classi interne
- Analisi e collaudo degli esempi FI2.Gui.DialogFrame
- Analisi e collaudo degli esempi FI2.Gui.ThreePages, FI2.Gui.Ball
e FI2.Gui.GuiComps sia come applicazioni
che come applet
Studio:
- La gestione degli Eventi ([Hor] Capp. 8.1-8.4)
- Grafica e animazione ([Hor] Parr. 7.5-7.13)
- Introduzione ai thread
Giovedì 15/11/01 Incontro 13
Lezione a PD:
- Strutture di dati fondamentali: albero
- Terminologia, un'interfaccia per gli alberi
- Operazioni fondamentali sugli alberi, visite
- Simulazione d'esame ed esercizi
Laboratorio:
- Altre sperimentazioni con interfaccia grafica
- Gestione più sofisticata di eventi
- Analisi e collaudo di FI2.Arnold.PingPong,
FI2.Gui.Ball2 e FI2.Gui.AppletThreadDiag
sia come applicazioni che come applet
- Analisi e collaudo di FI2.Gui.AppletThUpdate
sia come applicazioni che come applet
Studio:
- L'albero come ADT (interfaccia FI2.Tree.InspectableTree) ([Good]
6.1)
- Algoritmi base su alberi (classe FI2.Tree.TreeBasicAlgo) ([Good]
6.2)
- Ripasso e preparazione per la prova intermedia
Torna all'indice temporale
Lunedì 26/11/01
Torna all'indice temporale
Settimana 8 (dal 03/12/01)
Lunedì 03/12/01 Incontro 14
Lezione a PD:
- Alberi binari, vincoli e proprietà
- Le primitive expandExternal e removeAboveExternal
- Albero astratto delle espressioni
- Visite di alberi binari, la tecnica template
Laboratorio:
- Qualche esercizio intoduttivo con gli alberi
- Esercizi con alberi, alberi binari, visite, ecc.
Studio:
- Alberi binari (interfaccia FI2.Tree.InspectableBinaryTree
e FI2.Tree.ExpandBinaryTree) ([Good] 6.3.1..6.3.3)
- Il metodo template (classe FI2.Tree.EulerTour)
([Good] 6.3.4)
- Esempio di utilizzazione con la classe FI2.Tree.EvaluateExpressionTour
- Esercizi: R6.1..R6.3, R6.6, R6.11..6.17, R6.23,
C6.1, C6.3..C6.4, C6.7..C6.12, C6.23..C6.24
Giovedì 06/12/01 Incontro 15
Lezione a PD:
- Realizzazione di un albero mediante sequenza
- Realizzazione di un albero binario in forma concatenata
- Realizzazione di alberi generici
Laboratorio:
- Collaudo delle classi analizzate
- Sperimentazione con alcune applicazioni di alberi binari utilizzando
le classi di FI2.Tree
- Suggerimenti per modificare l'applet che disegna gli alberi
generandoli casualmente in un'applicazione che disegna alberi forniti come
parametro d'ingresso
Studio:
- Realizzazione di albero binario con sequenza (classe FI2.Tree.SequenceBinaryTree)
([Good] 6.4.1)
- Realizzazione di albero binario concatenata (classe FI2.Tree.LinkedBinaryTree)
([Good] 6.4.2)
- Rappresentazione di alberi non binari ([Good] 6.4.3, 6.4.4)
- Rapida analisi dell'applet che disegna gli alberi
(applet FI2.Gui.InorderDrawApplet)
- Esercizi: R6.7..R6.8, R6.24, C6.14..C6.15, C6.17, (P6.8)
Torna all'indice temporale
Settimana 9 (dal 10/12/01)
Lunedì 10/12/01 Incontro 16
Lezione a PD:
- Coda a priorità (CdP), chiave per ordinamento
- Composizione, comparazione
- Ordinamento di una sequenza mediante CdP
- Realizzazione di CdP mediante sequenza ordinata e non
- Ordinamenti Selection e Insertion
Laboratorio:
- Completamento di prove e collaudi precedenti
- Collaudo delle classi analizzate
Studio:
- La coda a priorità come ADT (interfacce FI2.Set.InspectableKeyBasedContainer
e FI2.Linear.PriorityQueue)
([Good] 7.1.1..7.1.3)
- Compositore e comparatore (classi FI2.Set.Item e FI2.Util.Comparator)
([Good] 7.1.4)
- Realizzazione di coda a priorità con sequenza non ordinata e
ordinata (classe FI2.Linear.ArraySortedSequencePriorityQueue) ([Good]
7.2.1, 7.2.2)
- Ordinamenti selezione e inserzione ([Good] 7.2.3)
- Esercizi: R7.2..R7.3, R7.15, C7.1, C7.2
Giovedì 13/12/01 Incontro 17
Lezione a PD:
- Introduzione alla struttura di un heap
- Realizzazione di una Cdp mediante heap
- Ordinamento Heap
- Il riferimento (locator) di un oggetto in un contenitore
- Una Cdp con riferimenti
Laboratorio:
- Realizzazione di un'applicazione di coda a priorità (ad esempio
gestione di una coda di task in un sistema operativo con possibilità
di rimozione di un task per morte prematura e di modifica 'in corsa'
della priorità): definizione dei metodi
-
Studio:
- Coda a priorità mediante heap (classi FI2.Linear.HeapDistrib,
FI2.Linear.HeapPriorityQueue) ([Good] 7.3.1, 7.3.2)
- Ordinamento heap ([Good] 7.3.3)
- Costruzione bottom-up dello heap ([Good] 7.3.4)
- Realizzazioni di coda a priorità con heap (classi FI2.Linear.SeqHeapPriorityQueue
e FI2.Linear.LinkedHeapPriorityQueue)
- Il riferimento (locator) (interfaccia FI2.Set.Locator)
([Good] 7.4.0, 7.4.1)
- Una coda a priorità con riferimenti (interfaccia FI2.Linear.PriorityQueue2,
classi FI2.Set.Item2, FI2.Linear.Item2, FI2.Linear.ArraySortedSequencePriorityQueue2)
([Good] 7.4.2)
- Esercizi: R7.7, R7.12..R7.13, R7.17..R7.18, C7.4, C7.7..C7.8, C7.10, P7.1
Torna all'indice temporale
Settimana 10 (dal 17/12/01)
Lunedì 17/12/01 Incontro 18
Lezione a PD:
- Strutture di dati fondamentali: dizionario
- Il comparatore di eguaglianza
- Realizzazione di dizionario mediante sequenza ordinata e non
- Tabella hash
Laboratorio:
- Collaudo delle classi analizzate
- Realizzazione di un'applicazione di coda a priorità: realizzazione
della classe come adattatore generico (abstract)
- Confronto sui tempi di esecuzione di alcuni algoritmi di ordinamento
(vedi classe FI2.Sorting.ArraySort)
- Realizzazione di un'applicazione di coda a priorità: realizzazione
della classe come adattatore specifico mediante heap in forma concatenata
Studio:
- Il dizionario come ADT (interfacce FI2.Dictionary.Dictionary
e FI2.Dictionary.OrderedDictionary) ([Good] 8.0, 8.1)
- Realizzazione di un dizionario mediante sequenza (classi FI2.Dictionary.OrderedArraySeq
e FI2.Dictionary.UnOrderedSLList) ([Good] 8.2, 8.4, 8.5)
- Tabella hash (classe FI2.Dictionary.SeparateChainingHashTable) ([Good]
8.3)
- Cenni a dizionario con riferimenti ([Good] 8.7)
- Esercizi: R8.1..R8.4, R8.9, R812..R8.13, C8.4, C8.9..C8.10, P8.1..P8.2
Giovedì 20/12/01 Incontro 19
Lezione a PD:
- Albero binario di ricerca, bilanciamento
- Tecnica divide-et-impera
- Ordinamento merge
- Ordinamento quick
- Ordinamento stabile, ordinamenti bucket e radix
Laboratorio:
- Collaudo delle classi analizzate
- Realizzazioni di applicazioni di dizionari
- Approfondimenti sull'argomento dell'ordinamento
Studio:
- Realizzazione di un dizionario mediante albero binario di ricerca (classe
FI2.Dictionary.SimpleBinarySearchTree) ([Good] 9.0, 9.1)
- Ordinamento merge ([Good] 10.1.1, 10.1.2, 10.1.3)
- L'insieme come ADT e merging ([Good] 10.2)
- Completare analisi delle classi di FI2.Set.*
- Ordinamento quick ([Good] 10.3)
- Confronto tra algoritmi di ordinamento (classe FI2.Sorting.ArraySort)
- Ordinamento bucket e radix ([Good] 10.5)
- Esercizi: R9.1..R9.3, C9.1..C9.2, R10.2, R10.5, R10.13..R10.15,
C10.1, C10.2, C10.9, C10.14, C10.16, C10.21, P10.8
Torna all'indice temporale
Settimana 11 (dal 7/1/02)
Lunedì 7/1/02 Incontro 20
Lezione a PD:
- Introduzione al text-processing
- Gestione delle stringhe
- Pattern matching, l'algoritmo di Knuth-Morris-Pratt
- Espressioni regolari, DFA
Laboratorio:
- Collaudo delle classi analizzate
- Chiarimenti sui progetti assegnati
Studio:
- Gestione delle stringhe ([Good] 11.1, [Hor] Par. 3.7)
- Pattern matching (classe FI2.String.BruteForceMatch)
([Good] 11.2.0, 11.2.1)
- L'algoritmo KMP (classe FI2.String.KMPMatch) ([Good] 11.2.3)
- Espressioni regolari e DFA (classe FI2.Stream.ReduceSpace)
([Lex])
- Esercizi: R11.1..R11.2, R11.4, R11.7, C11.3, (P11.1)
Giovedì 10/1/02 Incontro 21
Lezione a TV:
- Cenni su analizzatori lessicali e sintattici e sui compilatori
- Il problema della compressione
- Il codice di Huffman
Laboratorio:
- Collaudo delle classi analizzate
- Chiarimenti sui progetti assegnati
Studio:
- Analizzatori lessicali e sintattici (classe FI2.String.Cl0Lex) ([Moro])
- Analisi della grammatica per espressioni (classe FI2.Tree.Calculator)
([Moro])
- Il codice di Huffman (classe FI2.Tree.Huffman) ([Good] 12.4.3)
- Esercizi: R11.12, P11.4
Torna all'indice temporale
Settimana 12 (dal 14/1/02)
Lunedì 14/1/02 Incontro 22
Lezione a FL:
- Argomenti di ripasso
- Risposta a domande
Laboratorio:
- Sperimentazioni con analisi lessicale e Huffman
- Collaudo delle classi analizzate
- Collaudo dei progetti
Studio:
- Ripasso
Giovedì 17/1/02 Incontro 23
Lezione a PD:
- L'algoritmo LZW
- Sicurezza, chiavi pubbliche e private, la firma digitale
- Cenni a problematiche di sicurezza nel commercio elettronico
Laboratorio:
- Collaudo delle classi analizzate
- Collaudo dei progetti
Studio:
- La compressione ([LZW])
- Sicurezza, chiavi pubbliche e private, la firma digitale ([Cri])
Torna all'indice temporale
Settimana 13 (dal 21/1/02)
Lunedì 21/1/02 Incontro 24
Lezione a PD:
- Introduzione ai grafi
- Rappresentazione dei grafi
- Visite DFS e BFS
- Grafi orientati, DAG, grafi di precedenza
- Ordinamento topologico
- Introduzione ai grafi pesati
Laboratorio:
- Collaudo delle classi analizzate
- Collaudo dei progetti
Studio:
- Il grafo come ADT (interfacce FI2.Graph.InspectableGraph,
FI2.Graph.Graph, FI2.Graph.Vertex e FI2.Graph.Edge)
([Good] 12.1, 12.2)
- Visite (classe FI2.Graph.DFS) ([Good] 12.3)
- Grafi orientati ([Good] 12.4.0, 12.4.1, 12.4.2)
- DAG ([Good] 12.4.3)
- Grafi pesati ([Good] 12.5)
- Esercizi: R12.1..R12.8, R12.11, C12.2..C12.5, C12.7, C12.12
Giovedì 24/10/01 Incontro 25
Lezione a TV:
- Simulazione di prova d'esame
Laboratorio:
- Collaudo dei progetti
Studio:
- Ripasso e preparazione alla seconda
prova intermedia
Torna all'indice temporale
Settimana 14 (dal 28/1/02)
Lunedì 28/1/02 Incontro 26
(presso i centri locali)
Giovedì 31/1/02 Incontro 27
Lezione a FL (??):
- Correzione della prova intermedia
- Risposta a domande
- Attivitą di tirocinio
- Argomenti e valutazioni conclusive
Laboratorio:
- Collaudo dei progetti
Torna all'indice temporale
Riassunto delle pagine da studiare da [Good]
- Capitolo 1 (Java Programming)
- Tutto
- Capitolo 2 (Object-Oriented Design)
- Tutto
- Capitolo 3 (Analysis Tools)
- 98..103 (3.2.2 compreso), 111..125
- Capitolo 4 (Stacks, Queues, and Deques)
- 136..173 (4.4.4 compreso)
- Capitolo 5 (Vectors, Lists, and Sequences)
- Tutto
- Capitolo 6 (Trees)
- Tutto
- Capitolo 7 (Priority Queues)
- Tutto (il par. 7.3.5 si può leggere)
- Capitolo 8 (Dictionaries)
- 334..361, 370(da 8.7)..372
- Capitolo 9 (Search Trees)
- 380..392
- Capitolo 10 (Sorting, Sets, and Selection)
- 448..486 (10.7.2 compreso)
- Capitolo 11 (Text Processing)
- 496..502 (11.2.1 compreso), 507(da 11.2.3)..511, 523..525
- Capitolo 12 (Graphs)
- 538..574 (12.4.1 compreso), 577(da 12.4.3)..581 (12.4.3 compreso), 584..585
Torna alla pagina principale