Programmazione
M. A. Alberti
Corso di Laurea in Informatica
Università degli Studi di Milano
A.A. 2007/08
Generalità |
Programma |
Calendario |
Materiale didattico |
Esame e valutazioni |
Link utili |
Bibliografia |
Laboratorio
Il corso di Programmazione è di 12 crediti e si svolge nel 1 semestre.
È accompagnato dal Laboratorio di programmazione, di
6 crediti. L'esame dei due corsi è unico con un unico voto finale.
Il corso ha l'obiettivo di introdurre la programmazione secondo il paradigma
orientato agli oggetti (object-oriented).
In particolare verranno affrontati gli argomenti:
- i concetti della programmazione a oggetti: oggetti, classi, interfacce,
ereditarietà e polimorfismo
- il linguaggio Java
- la pianificazione per la risoluzione di problemi (problem solving)
- il disegno e l'implementazione di programmi
Il programma del corso comprende i seguenti argomenti:
- Introduzione
- Evoluzione del computer
- Evoluzione dei linguaggi di programmazione
- Algoritmi e analisi degli algoritmi
- Linguaggi ad alto livello e linguaggi macchina
- Sintassi e semantica dei linguaggi
- Compilatori e interpreti
- Tipi di errore
- Programmazione ad oggetti con Java
- Elementi base del linguaggio
- Classi, metodi ed oggetti
- Strutture di controllo
- Ricorsione
- Ereditarietà
- Introduzione alle strutture dati
- Liste, code, pile
- Alberi binari
- Alberi di ricerca
Le lezioni si svolgeranno secondo il
calendario generale del corso;
iniziano lunedì 1 ottobre 2007 e terminano venerdì 18 gennaio 2008. Una lezione di recupero è possibile lunedì 21 gennaio 2008.
Il corso di Programmazione si tiene di lunedì e mercoledì nell'aula V3 della Didatteca di Via Venezian 15, dalle 13:30 alle 16:30.
Il Laboratorio di Programmazione si tiene di venerdì dalle 12:30 alle 15:30 in aula 309 e dalle 15:30 alle 16:30 in aula 403 di Via Celoria 20.
Durante l'anno nel corso di Programmazione verrà richiesto di svolgere
2 prove scritte e 1 esercitazione di Laboratorio,
secondo il seguente calendario:
- 1 compitino: 5 novembre 2007.
- 1 esercitazione: 30 novembre 2007. Rinviata causa sciopero dei mezzi di trasporto al 14 dicembre 2007.
- 2 compitino: 17 dicembre 2007.
In aula V3 nelle ore di lezione.
Per poter sostenere i compitini e gli esercizi di Laboratorio in aula
occorre iscriversi con gli appositi moduli d'iscrizione resi disponibili
su questa pagina web o su quella corrispondente del Laboratorio di norma entro
le ore 19 di due giorni precedenti alla data
fissata. Chi non risulta iscritto non può sostenere la prova.
I risultati dei compitini e delle prove scritte d'esame, come ogni altra informazione circa
eventuali spostamenti di date, saranno resi noti su questa pagina web.
I lucidi discussi a lezione:
- 1 ottobre: introduzione al corso.
pdf.
Evoluzione del calcolatore.
pdf.
- 3 ottobre:
Concetto di algoritmo, analisi dell'algoritmo di Euclide, il concetto di complessità.
pdf.
- 8 ottobre:
Sintassi e semantica. Grammatiche, BNF e tavole sintattiche.
pdf.
Evoluzione dei linguaggi, esempi di linguaggi diversi.
pdf.
html.
- 10 ottobre:
Introduzione a Java e paradigma a oggetti.
pdf.
Classi e oggetti. Membri di classe. Creazione di un oggetto. Costruttori.
pdf
- 15 ottobre: Classi e oggetti. Memoria stack e heap.
- 17 ottobre: Definizione di metodi. Metodi con parametri. La classe
String
.
pdf.
- 19 ottobre: Prototipi e firme di metodi. Definizione della classe
Dado e Frazione.
Parametri espliciti e impliciti nella chiamata dei metodi.
pdf.
- 22 ottobre: Tipi di dati. Interi, virgola mobile.
Overflow,
Precisione.
Caratteri.
Booleani, tabella di verità, legge di De Morgan
pdf.
- 24 ottobre: Operatori, precedenze e associatività di operatori.
html.
Istruzione di selezione.
pdf.
- 29 ottobre: Istruzione di selezione
switch
.
ContaGiorni.
Numeri pseudo-casuali.
Dado con
TestDado.
RandomNumbers.
- 31 ottobre: Istruzioni di ripetizione
while
, for
.
Palindrome,
PalindromeTester.
Istruzione di ripetizione do-while
.
pdf.
Es:
ReverseNumber,
TestPrimo,
SommaFrazioni con
Frazione.
- 5 novembre: I compitino
- 7 novembre: riepilogo classi. pdf.
Chiamate di metodi e controllo del flusso: stack dei record di attivazione di metodi. Passaggio di valori a parametri.
TestParametriSemplici,
TestParametri con
PassaggioParametri e
Num.
- 12 novembre: schemi per cicli di acquisizione dell'input.
LeggiDecimali,
LeggiPariDispari,
LeggiNumeri con
DataSet.
Istruzioni
break
, continue
.
BreakContinue.
La classe StringTokenizer
.
LeggiDecimaliToken,
PigLatin con
PigLatinTranslator.
- 14 novembre: overloading di metodi e promozione; segnatura e prototipo.
PromOverloading e
RidOverloading.
Tipi di dati strutturati: array.
BasicArray.
- 19 novembre: cicli e array. Uso della parola riservata
this
. Chiamata di costruttori da costruttori.
Fiori con
TestFiori.
- 21 novembre: classi annidate.
pdf.
Ordine di inizializzazione dei campi.
OrdineInizializzazione e
InizializzazioneStatica.
Interfacce.
pdf.
Interfaccia Parlante, con le classi Cane e
Filosofo,
Parlare.
- 26 novembre: tipi enumerativi.
pdf.
GiorniLavorativi con
TestGiorniLavorativi.
Gerarchia di classe.
Libro classe base,
Dizionario sottoclasse,
TestDizionario driver.
- 28 novembre: gerarchie di classi ed ereditarietà
pdf.
Libro_2 classe base,
Dizionario_2 sottoclasse,
TestDizionario_2 driver.
Sovrascrittura di metodi.
Massima e
Consiglio con
Messaggi.
Disinfettante e
Detergente
- 3 dicembre: gerarchia di classe e chiamate ai costruttori. Ordine delle chiamate ai costruttori.
Arte, classe base,
Disegno e
Schizzo, specializzazioni.
- 5 dicembre: decomposizione di metodi e ereditarietà.
Figure, classe base;
Triangle,
Diamonds,
Box: specializzazioni.
Classi astratte.
pdf.
Personale, classe base astratta;
Volontario,
Dipendente,
Impiegato,
Giornaliero: specializzazioni; con
Staff, classe per inizializzare l'archivio di dati e
Istituzione driver per testare la class
Staff
e avviare la procedura di pagamento.,
- 10 dicembre: lezione sospesa.
- 12 dicembre: esempi di programmi diversi con enfasi sulla gerarchia delle classi.
Ordine delle chiamate ai costruttori.
Giochi classe base,
Giochi_di_scacchiera estensione, con il driver
Scacchi.
Accesso indiretto ai campi.
Cibo,
le estensioni Pizza e
Torta con il driver
Calorie.
Composizione di classi vs ereditarietà.
Tavola.
Polimorfismo e upcasting.
Musica.
- 17 dicembre: II compitino.
- 19 dicembre: correzione del compitino.
- 7 gennaio: tipi di dati generici
- 9 gennaio: strutture dati, stack.
pdf.
Valutazione di espressione in notazione postfissa mediante stack.
Postfissa.java.
Stack dei record di attivazione di metodi.
- 14 gennaio: implementazione statica di stack mediante array.
Stack con l'eccezioni
OutOfBoundsStackException e
EmptyStackException.
Ricorsione.
Fattoriale,
Potenza,
NumCifre,
Pal.
- 16 gennaio: implementazione dinamica di stack.
Stack con le stesse
eccezioni del caso statico. Code e loro implementazione dinamica.
Coda con l'eccezione
CodaVuotaException.
Gestione di una lista d'attesa:
ProvaCoda.
- 21 gennaio: strutture dati dinamiche, liste ordinate.
ListaOrdinata con
ProvaListaOrdinata.
Eccezioni.
pdf.
Divisione;
ExceptionScope e
Propagation;
Postfissa_e con l'eccezione
PostfissaException;
un'eccezione controllata:
EccezioneFuoriIntervallo in
CreatingExceptions o anche
CreatingExceptions_2.
Materiale illustrativo ed esercizi:
- Evoluzione del calcolatore e fondamenti della programmazione (html)
- Tabella precedenze operatori (html)
- Definire classi (html)
- I compitino 5 novembre 2007,
risposte e soluzioni:
Banco,
Numeri_random,
TestOpIncrDecr,
TestStringhe.
- II compitino 17 dicembre 2007,
risposte e soluzioni:
Test1,
CosaSuccede e
CosaSuccedeCorretto,
Test3,
SommaParziale,
Test5,
ArrayArray,
Rettangolo,
Quadrato.
Software ed esempi
Per eseguire gli esempi discussi a lezione occorre dotarsi del pacchetto
software
per la gestione dell'input/output associato al libro di testo. Il il pacchetto fornisce un'astrazione
che nasconde i dettagli tecnici della gestione dell'input/output di Java
facilitando i primi programmi.
I metodi per la gestione dell'input/output forniti dal libro
sono contenuti nel pacchetto prog.io
e documentati alla pagina.
Molti esempi accessibili da questa pagina usano per lo stesso motivo i metodi del pacchetto cs1
che era associato al libro di testo adottato negli scorsi anni,
documentato e distribuito della pagina la classe Keyboard
.
Il modo più semplice per aggiungere al vostro ambiente java le librerie del pacchetto prog.io
è quello di:
- scaricare il file
corsoAlberti.jar
- salvarlo nella directory specificata dal cammino
\jdk\jre\lib\ext\
che inizia nella directory dove avete il Java Development Kit.
Questa cartella è una di quelle in cui il compilatore e
l'interprete Java, durante la traduzione ed esecuzione dei programmi, cercano
le classi delle librerie importate.
- per usare la libreria occorre aggiungere nei vostri programmi
l'istruzione:
import prog.io.*
Trovate diversi esempi sviluppati in classe.
L'esame consiste in una prova scritta, in una prova orale e in un progetto.
È assolutamente vietato partecipare agli appelli di programmazione
di due turni differenti. I docenti si riservano di prendere
provvedimenti nel caso ciò accada.
Esiti dei compitini e esoneri
Appelli d'esame
- I appello 25 gennaio 2008,
risposte e programmi:
Vecchia,
FunzRic,
IteratorDemo,
ListaOrdinata con
ProvaListaOrdinata.
Valutazioni scritto,
- II appello 22 febbraio 2008.
risposte e programmi:
Padre con la classe
Figlio,
Test2,
Test4,
While e
DoWhile,
Parole,
Prova_lista_2,
Prova_lista,
Valutazioni scritto.
Calendario orali.
- III appello
risposte e programmi:
Squadra con la classe
Cannottaggio,
Cicli,
Numeri_random,
Test4,
Sequenze.
Valutazioni scritto.
Calendario orali.
- IV appello 11 luglio 2008,
risposte e soluzioni.
Valutazioni scritto.
Calendario orali.
- V appello 23 settembre 2008,
risposte e programmi:
Tombola,
BreakContinue,
Ricorsione,
Test,
CicloWhile,
Tokenizzatore,
Valutazioni scritto.
Calendario orali.
- VI appello x gennaio 2009,
risposte e soluzioni.
Valutazioni scritto.
Calendario orali.
Si ricorda che per sostenere l'esame in uno degli appelli è
necessario
iscriversi presso i terminali SIFA,
nei tempi e nei modi stabiliti.
FAQ sull'esame
- Domanda 1.
- Si può fare lo scritto in un appello e il progetto in uno diverso?
- Risposta 1.
- Se si supera la prova scritta in un appello si può decidere di preparare il
progetto nell'appello successivo. Se l'esito del progetto fosse negativo,
all'appello successivo va ridato anche lo scritto.
La stessa regola è applicata anche al progetto: la prova positiva vale anche
per l'appello successivo.
- Domanda 2.
- Quando si deve sostenere l'esame orale?
- Risposta 2.
- L'esame orale può essere sostenuto solo quando le due prove,
scritto e progetto, sono positive, non prima.
WebCounter
segnala
accessi a queste pagine dal 1 ottobre 2007
ultima modifica: 23 settembre 2008, Maria A. Alberti