Programmazione
M. A. Alberti
Corso di Laurea in Informatica
Università degli Studi di Milano
A.A. 2006/07
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 corso di 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:
- la pianificazione per la risoluzione di problemi (problem solving)
- il disegno e l'implementazione di programmi
- i concetti della programmazione a oggetti: oggetti, classi, interfacce,
ereditarietà e polimorfismo
- il linguaggio Java
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ì 2 ottobre 2006 e terminano venerdì 19 gennaio 2007.
Il corso di Programmazione si tiene il lunedì e il venerdì nell'aula V3 della Didatteca di Via Venezian 15, dalle 13:30 alle 16:30.
Orari e aule.
Il Laboratorio di programmazione si tiene il mercoledì dalle 13:30 alle 14:30 in aula 200 di Via Celoria 20 e dalle 14:30 alle 17:30 nel laboratorio attrezzato con PC in aula 309 di Via Celoria 20.
Durante l'anno nel corso di Programmazione verrà richiesto di svolgere
3 prove scritte, l'ultima è anche la prova scritta dell'appello di gennaio; nel corso di Laboratorio di programmazione 2 esercitazioni e un progetto finale,
secondo il seguente calendario:
- 1 compitino: 10 novembre 2006.
- 1 esercitazione: 22 novembre 2006.
- 2 esercitazione: 20 dicembre 2006
- 2 compitino: 22 dicembre 2006.
- pre-appello: 29 gennaio 2007. Iscriversi con il SIFA, entro il 22 gennaio 2007.
- 3 esercitazione/progetto: pubblicazione il 29 gennaio e consegna il 5 febbraio 2007
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 entro
le ore 19 di due giorni precedenti alla data
fissata. Chi non risulta iscritto non può sostenere la prova.
Per poter sostenere la terza prova scritta che è anche la prova scritta dell'appello di gennaio, occorre iscriversi presso il SIFA.
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.
Il testo del progetto finale verrà reso noto il giorno 29 gennaio 2007 tramite la pagina web del
Laboratorio di programmazione, turno II.
Anche la consegna dei progetti avverrà tramite web, e i risultati saranno resi
noti allo stesso indirizzo.
I lucidi discussi a lezione:
- 2 ottobre: introduzione al corso.
pdf.
Evoluzione del calcolatore.
pdf.
- 4 ottobre: concetto di algoritmo, analisi dell'algoritmo di Euclide, il concetto di complessità.
pdf.
- 6 ottobre: evoluzione dei linguaggi, esempi di linguaggi diversi.
pdf.
html.
- 9 ottobre: sintassi e semantica. Grammatiche, BNF e tavole sintattiche.
pdf. Introduzione a Java e paradigma a oggetti.
pdf.
- 13 ottobre, 16 ottobre: classi e oggetti. Membri di classe. Creazione di un oggetto. Costruttori.
pdf
- 20 ottobre: Definizione di metodi. Metodi con parametri. La classe
String
.
pdf.
- 23 ottobre: prototipi e firme di metodi. Definizione della classe
Frazione.
Parametri espliciti e impliciti nella chiamata dei metodi.
pdf.
- 27 ottobre: tipi di dati. Interi, virgola mobile.
Overflow,
Precisione.
Caratteri.
- 30 ottobre: tipi di dati. Booleani, tabella di verità, legge di De Morgan
pdf.
- 3 novembre: operatori, precedenze e associatività di operatori.
html.
Istruzione di selezione.
pdf.
- 6 novembre: istruzione di selezione
switch
.
ContaGiorni.
Numeri pseudo-casuali.
Dado con
TestDado.
RandomNumbers.
- 10 novembre: I compitino
- 13 novembre: correzione I compitino. Istruzioni di ripetizione
while
, for
.
Palindrome,
PalindromeTester.
- 17 novembre: istruzione di ripetizione
do-while
.
pdf.
Es:
ReverseNumber,
TestPrimo,
LeggiDecimali,
LeggiInteri,
LeggiNumeri,
LeggiPariDispari con
DataSet.
SommaFrazioni con
Frazione.
- 20 novembre: istruzioni
break
, continue
.
BreakContinue.
La classe StringTokenizer
.
LeggiDecimaliToken,
PigLatin con
PigLatinTranslator.
Riepilogo classi.
pdf.
Passaggio di valori a parametri.
TestParametriSemplici,
TestParametri con
PassaggioParametri e
Num.
- 24 novembre: tipi di dati strutturati, array.
- 27 novembre: tipi di dati generici.
- 1 dicembre: ordine di chiamata dei costruttori, parola riservata
this
, classi annidate.
pdf.
Fiori con
TestFiori.
- 4 dicembre: ordine di inizializzazione dei campi.
OrdineInizializzazione,
InizializzazioneStatica.
Interfacce.
pdf.
Interfaccia Parlante, con le classi Cane e
Filosofo,
Parlare.
Tipi di dati enumerativi.
pdf.
GiorniLavorativi con
TestGiorniLavorativi.
- 11 dicembre: gerarchia di classi ed ereditarietà.
pdf.
Sovrascrittura di metodi.
Massima e
Consiglio con
Messaggi.
Disinfettante e
Detergente
- 15 dicembre: gerarchia di classi e costruttori.
pdf.
Arte,
Disegno,
Schizzo.
Libro_2,
Dizionario_2,
TestDizionario_2.
- 18 dicembre: polimorfismo e ereditarietà.
Personale,
Dipendente,
Volontario,
Impiegato,
Giornaliero,
Staff e il driver
Istituzione.
- 8 gennaio: accesso ai campi della superclasse.
la superclasse Cibo,
l'estensione Pizza e il driver
Calorie.
Composizione di classi vs ereditarietà.
Tavola.
Organizzazione della memoria: lo stack delle chiamate dei metodi (cap. 10 del testo).
Doppio
- 12 gennaio: tipi enumerativi,
pdf,
tipi generici, metodi generici, interfacce
- 15 gennaio: ricorsione.
Fattoriale,
Potenza,
NumCifre,
Pal.
- 18 gennaio: strutture dati, stack.
pdf.
Implementazione statica di stack:
con array.
Implementazione dinamica di stack:
con lista.
Strutture dati dinamiche: liste.
Coda,
CodaVuotaException e
ProvaCoda.
- 22 gennaio: eccezioni.
pdf.
Divisione;
CreatingExceptions,
CreatingExceptions_2 con
EccezioneFuoriIntervallo;
ExceptionScope e
Propagation.
Strutture dati dinamiche: liste ordinate.
ListaOrdinata,
ProvaListaOrdinata.
Materiale illustrativo ed esercizi:
- Evoluzione del calcolatore e fondamenti della programmazione (html)
- Tabella precedenze operatori (html)
- Definire classi (html)
- I compitino 10 novembre 2006,
risposte e soluzioni:
Automobile con
TestAutomobile,
Numeri_random,
EsprBooleana,
TestStringhe,
TestOpIncrDecr,
TestCiclo.
- II compitino 22 dicembre 2006,
risposte e soluzioni:
Test1,
ArrayStringhe,
Parole,
Essere,
Mammiferi,
Canidi,
Ominidi,
TestRovescia.
- I appello 29 gennaio 2007,
risposte e soluzioni:
Fibonacci.
- II appello 19 febbraio 2007,
risposte e soluzioni.
- III appello 14 giugno 2007,
risposte e soluzioni.
- IV appello 11 luglio 2007,
risposte e soluzioni.
- V appello 19 settembre 2007
risposte e soluzioni.
- VI appello gennaio 2008,
risposte e soluzioni.
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
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 21 settembre 2006
ultima modifica: 24 settembre 2007, Maria A. Alberti