Programmazione
M. A. Alberti
Corso di Laurea in Comunicazione digitale
Università degli Studi di Milano
A.A. 2009/10
Avvisi |
Generalità |
Programma |
Calendario |
Materiale didattico |
Esame e valutazioni |
Link utili |
Bibliografia | laboratorio
turno A,
turno B
- 7 aprile 10
causa il contemporaneo svolgersi di un importante Consiglio di Corso di Laurea straordinario,
giovedì 8 aprile non si potrà tenere la prevista sessione di esami orali,
che viene spostata a lunedì 12 aprile alle 14:30 nella sala riunioni del II piano.
- 20 marzo 10
per verbalizzare gli esami di gennaio è necessario presentarsi con il libretto durante una delle sessioni di esami orali di aprile.
È estremamente importante che TUTTI gli studenti che hanno superato l'esame nell'appello di gennaio effettuino la registrazione ORA.
- 20 febbraio 10
A seguito della segnalazione di uno studente, che ha messo in luce un errore nella correzione dello scritto del I appello, ho cambiato il file pdf con le risposte e aggiornato le valutazioni di alcuni vostri compiti.
Inizialmente avevo, infatti, esposto le soluzioni di una prima versione del I esercizio, in cui chiedevo di valutare l'espressione bicchiere.set_gr(bicchiere.gradazione+1)
poi diventata nel testo dell'appello bicchiere.set_gr(bicchiere.get_gr()+1)
. E' interessante vedere come queste due espressioni, molto simili, possano produrre risultati diversi a causa del meccanismo di valutazione di Java. Si ricordi che la variabile bicchiere
è dichiarata di classe BevandaAlcolica
ma che viene istanziata con un oggetto di classe Vino
e che la valutazione di un metodo e' dinamica e di un campo statica.
Quindi mentre bicchiere.gradazione
legge il valore del campo della struttura della superclasse, bicchiere.get_gr()
esegue il metodo della classe attuale, cioè Vino
, e perciò riporta il valore del campo gradazione
della classe attuale.
- 15 febbraio 10
Si avvisano gli studenti che rispondo solo a mail inviate dall'account ufficiale dell'Università. Inoltre non rispondo alle mail che richiedono le informazioni già contenute nella sezione
FAQ, che quindi si prega di leggere.
- 22 dicembre 09
A causa delle avverse condizione del tempo e a seguito di alcune vostre mail che mi avvisavano che sareste venuti al più in numero vicino a zero, la lezione di oggi è posticipata a gennaio 2010. Auguri e lavorate d'ingegno e mente!!
Il corso di Programmazione è di 9 crediti e si svolge nel 1 semestre.
È accompagnato dal Laboratorio di programmazione di
3 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) e i concetti di base dell'architettura di un calcolatore ed i principi del suo funzionamento.
In particolare verranno affrontati gli argomenti:
- i concetti della programmazione a oggetti: oggetti, classi, interfacce,
ereditarietà e polimorfismo
- il linguaggio Java
- il disegno e l'implementazione di programmi
Il programma del corso comprende i seguenti argomenti:
- Introduzione
- 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 martedì 6 ottobre 2009 e terminano venerdì 15 gennaio 2010.
Il corso di Programmazione si tiene secondo il seguente orario:
martedì |
mercoledì |
giovedì |
venerdì |
|
9:30 - 13:30 laboratorio aula 309, turno A aula 307, turno B |
|
9:30 - 12:30 corso aula V1 |
15:30 - 17:30 corso
aula V3 |
|
15:30 - 17:30 corso aula V3 |
|
Le aule V3 e V5 sono in Via Venezian nell'edificio detto Didatteca.
L'aula 309 nell'edificio di aule didattiche ingresso in Via Celoria, dietro alla Didatteca e l'aula Sigma è in Via Comelico dove ci sono i Dipartimenti di Informatica e Comunicazione, DICo, e di Scienze dell'informazione, DSI.
Durante l'anno verrà richiesto di svolgere
2 prove scritte e 1 esercitazione di Laboratorio,
secondo il seguente calendario:
- 1 compitino: 12 novembre 2009
- 1 prova di laboratorio: 25 novembre 2009, per i due turni in laboratorio.
- 2 compitino: 18 dicembre 2009, in aula V1 nelle ore di lezione.
modulo d'iscrizione Reiscriversi se avete avuto mesaggio d'errore.
- 2 prova di laboratorio: 20 gennaio 2010, per i due turni in laboratorio
- I appello d'esame: prova scritta 26 gennaio e prova di laboratorio 27 gennaio 2010.
- II appello d'esame: prova scritta 22 febbraio e prova di laboratorio 24 febbario 2010.
- III appello d'esame: prova scritta 8 giugno e prova di laboratorio 9 giugno 2010.
- IV appello d'esame: prova scritta 7 luglio e prova di laboratorio 9 luglio 2010.
- V appello d'esame: prova scritta 23 settembre e prova di laboratorio 22 settembre 2010.
- VI appello d'esame: prova scritta 26 gennaio e prova di laboratorio 27 gennaio 2011.
Le date dei compitini e delle prove di laboratorio durante il corso potranno essere modificate in funzione dell'andamento delle lezioni.
Per poter sostenere i compitini
occorre iscriversi con gli appositi moduli d'iscrizione resi disponibili
su questa pagina web di norma entro le ore 17 di due giorni precedenti alla data fissata. Chi non risulta iscritto non può sostenere la prova.
Per sostenere le prove in un qualunque appello, sia scritto sia prova di laboratorio, occorre iscriversi presso il SIFA, nei tempi previsti dal sistema.
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.
Argomenti trattati a lezione:
- 6 ottobre: introduzione al corso. Libri di testo. Calendario del corso. Date compitini e prove di laboratorio. Prove d'appello d'esame a gennaio e febbraio. Modalità d'esame.
pdf.
- 8 ottobre: concetto di algoritmo; analisi algoritmo di Euclide; concetto di complessità.
pdf.
- 9 ottobre: linguaggi di programmazione. Linguaggi macchiana. Algoritmo d'Euclide in linguaggio macchina per una macchina modello.
- 13 ottobre: sintassi e semantica dei linguaggi; grammatiche e albero di derivazione; tavole sintattiche; BNF.
pdf.
- 15 ottobre: evoluzione dei linguaggi; paradigmi di programmazione.
pdf.
- 16 ottobre: esempi in diversi linguaggi. Il paradigmo orientato agli oggetti. pdf.
- 20 ottobre: classi e oggetti. Stato e comportamento degli oggetti. Membri di classe: campi e metodi.
pdf.
- 22 ottobre: costruttori e riferimenti agli oggetti.
- 27 ottobre: definizione di classi. Costruttori e metodi. Uso della parola riservata
this
.
pdf.
- 29 ottobre: gestione della memoria stack e record di attivazione dei metodi
- 30 otobre: dichiarazione di metodi. Passaggio di valore ai parametri. Overloading di metodi. Prototipo e firma di metodi.
- 3 novembre: la classe
Frazione
.
pdf.
Uso della classe e discussione del codice. La classe String
.
pdf.
Sovrascrittura di metodi (toString()
).
- 5 novembre: metodi della classe
String
. Parametri espliciti e impliciti nelle chiamate di metodi. Strutture di controllo: istruzioni di selezione if
e if-else
.
pdf.
- 6 novembre: strutture di controllo: istruzioni
while
, do-while
e for
. Il metodo Math.random()
per generare numeri pseudo-casuali.
pdf.
- 10 novembre: strutture di controllo e istruzioni
break
e continue
.
- 12 novembre: I compitino.
- 13 novembre: correzione compitino.
- 17 novembre: schemi per l'acquisizione dell'input.
LeggiDecimali,
LeggiPariDispari,
LeggiNumeri con
DataSet.
- 19 novembre: la classe
StringTokenizer
.
LeggiDecimaliToken.
Metodi e campi statici.
- 20 novembre: tipi semplici interi e in virgola mobile. Tipo semplice
char
e tabella UNICODE.
pdf.
- 24 novembre: promozione e conversioni implicite tra tipi nelle espressioni e negli assegnamenti. Promozioni e riduzioni nelle chiamate dei metodi.
PromOverloading.
RidOverloading.
- 26 novembre: tipo semplice
boolean
. Operatori logici. Tabelle di verità. Legge di De Morgan. Operatore condizionale.
- 27 novembre: precedenze e associatività degli operatori. Decomposizione di metodi:
PigLatin con
PigLatinTranslator.
Uso della parola riservata
this
. Chiamata di costruttori da costruttori.
Fiori con
TestFiori.
La classe Random
, esempio:
Dado con
TestDado o
Test2Dadi.
- 1 dicembre: classi annidate.
pdf.
Ordine di inizializzazione dei campi.
OrdineInizializzazione e
InizializzazioneStatica.
- 3 dicembre: interfacce.
pdf.
Interfaccia Parlante, con le classi Cane e
Filosofo,
Parlare.
Tipi di dati strutturati: array.
- 4 dicembre: esempi array.
LetterCount,
InputInArraySemplice,
InputInArray.
Array bidimensionali.
- 10 dicembre: gerarchia di classi ed ereditarietà.
pdf.
Ordine delle chiamate ai costruttori.
Arte, classe base,
Disegno e
Schizzo, specializzazioni.
- 15 dicembre: sovrascrittura di metodi, oscuramento di campi in gerarchie.
Massima e
Consiglio con
Messaggi.
Disinfettante e
Detergente.
- 17 dicembre: Decomposizione dei metodi ed ereditarietà.
Figure, classe base;
Triangle,
Diamonds,
Box: specializzazioni.
- 18 dicembre: II compitino
- 7 gennaio 2010: correzione compito. Classi astratte.
pdf.
- 8 gennaio: classi astratte, un esempio.
Personale, classe base astratta;
Volontario,
Dipendente,
Impiegato,
Giornaliero: specializzazioni; con
Staff, classe per inizializzare l'archivio di dati e
Istituzione driver.
Ordine delle chiamate ai costruttori.
Giochi classe base,
Giochi_di_scacchiera estensione, con il driver
Scacchi.
Stack dei record di attivazione di metodi.
Ricorsione.
Fattoriale.
- 12 gennaio: esempi di ricorsione.
Potenza, nelle versioni ricorsiva, iterativa e ricorsiva efficiente,
Fibonacci, nelle versioni ricorsiva, iterativa e ricorsiva efficiente,
NumCifre,
Pal.
Accesso indiretto ai campi in una gerarchia di classi.
Cibo,
le estensioni Pizza e
Torta con il driver
Calorie.
Polimorfismo e upcasting.
Musica.
- 14 gennaio: strutture dati, stack.
pdf.
Valutazione di espressione in notazione postfissa mediante stack.
Postfissa.
Implementazione statica di stack mediante array.
Stack con l'eccezioni
OutOfBoundsStackException e
EmptyStackException.
- 15 gennaio: strutture dati dinamiche.
Stack.
Code.
Coda, con
CodaVuotaException e
ProvaCoda
per gestire una coda d'attesa.
Liste ordinate.
ListaOrdinata, con
ProvaListaOrdinata.
Eccezioni.
pdf.
Postfissa_2
Materiale illustrativo ed esercizi:
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
delle due differenti edizioni. I docenti si riservano di prendere
provvedimenti nel caso ciò accada.
Esiti dei compitini e esoneri
Appelli d'esame
- I appello 26 gennaio 2010.
Risposte e programmi:
BevandaAlcolica,
Fibonacci,
A.
Valutazioni scritto.
Calendario orali.
- II appello 22 febbraio 2010
Risposte e programmi:
Villaggio,
Intervallo,
Archivio.
Mistero.
Valutazioni scritto.
Calendario orali.
- III appello 8 giugno 2010.
Risposte e programmi:
Quadrati,
Sacchetti,
BreakContinue,
Ciclo,
Vettori,
TryCatch.
Valutazioni scritto.
Calendario orali.
- IV appello 7 luglio 2010.
Risposte e programmi:
SuperCls,
SottoCls,
Sacchetti,
While_DoWhile,
CicloFor,
NumeroCifre,
CicloStringhe.
Valutazioni scritto.
Calendario orali.
- V appello 23 settembre 2010.
Risposte e programmi:
Mezzi con
ParcoMezzi,
FunzRic,
Tabelline.
Valutazioni scritto.
Calendario orali.
- VI appello 26 gennaio 2011.
Risposte e programmi:
Padre,
A,
Parole.
Valutazioni scritto.
Calendario orali, 17 febbraio 2011.
Si ricorda che per sostenere l'esame nei prossimi appelli si dovrà far riferimento al docente del turno unico.
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.
segnala
accessi a queste pagine dal 22 ottobre 2009
ultima modifica: 8 febbraio 2011, Maria A. Alberti