Fondamenti di architettura e programmazione
M. A. Alberti
Corso di Laurea in Comunicazione digitale
Università degli Studi di Milano
A.A. 2008/09
Avvisi |
Generalità |
Programma |
Calendario |
Materiale didattico |
Esame e valutazioni |
Link utili |
Bibliografia |
Laboratorio
14 luglio 2009: prova di laboratorio IV appello
-
La prova di laboratorio del IV appello di luglio è fissata in precedenza per il giorno 3 luglio viene rinviata al 14 luglio dalle 9:30 - 13:30 aula Sigma in Via Comelico 39.
22 giugno 2009 scritto IV appello
-
La prova scritta dell'appello di luglio è posticipata al giorno 2 luglio ore 14:30 in aula Alfa in Via Comelico 39. Le iscrizioni al SIFA rimangono quelle vecchie ovviamente, ma la data di chiusura è posticipata al 25 giugno.
22 giugno 2009: orali III appello
- Gli esami orali della sessione di giugno iniziano il giorno 25 giugno alle ore 12:30 e non il 24 alle ore 14:30 sempre in sala riunioni al II piano. Oltre ai nominativi già esposti sul calendario ci saranno altri studenti a cui occorre ancora valutare la prova di laboratorio.
18 maggio 2009: scritto III appello
-
III appello di esame: sessione di giugno. La prova scritta si tiene il giorno 4 giugno nell'aula Alfa di Via Comelico 39, alle ore 15:30. La prova di Laboratorio si tiene il giorno 11 giugno 2009.
Presentarsi alla prova di laboratorio con la classe Morse funzionante come richiesto nell'esercizio 7 del compito scritto del 4 giugno 2009 (testo). In particolare si richiede che tale classe faccia uso delle librerie standard di IO per la gestione di file. Si richiede inoltre che il ciclo di lettura sia eseguito in una istruzione try-catch
per controllare l'esistenza del file di input ed altri errori di IO. Il codice della classe dovrebbe quindi usare le classi:
java.io.BufferedReader;
java.io.File;
java.io.FileReader;
java.io.FileNotFoundException;
java.io.IOException;
Il corso di Fondamenti di architettura e 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) 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
- l'architettura di un calcolatore
- la codifica binaria dell'informazione
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
- Architettura di Von Neumann: architettura della CPU
- Un esempio di CPU ed il relativo linguaggio macchina
- Elementi di algebra booleana, cenni ai circuiti logici
- Rappresentazione dell'informazione: gli interi e i caratteri
- 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 mercoledì 1 ottobre 2008 e terminano venerdì 16 gennaio 2009.
Il corso di Fondamenti di architettura e programmazione si tiene secondo il seguente orario:
|
lunedì |
martedì |
mercoledì |
giovedì |
venerdì |
corso aula |
|
2:30 - 5:30 V3 |
3:30 - 6:30 V3 |
|
2:30 - 4:30 V3 |
>
laboratorio aula turno |
10:30 - 12:30 V5 A & B |
8:30 - 12:30 Sigma B |
|
9:30 - 13:30 309 A |
|
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 2008, in aula V3 nelle ore di lezione.
- 1 prova di laboratorio: 25 e 27 novembre 2008, per i due turni in laboratorio nei rispettivi orari.
- 2 compitino: 17 dicembre 2008, in aula V3 nelle ore di lezione.
- 2 prova di laboratorio: 13 e 15 gennaio 2009
Le date 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.
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:
- 1 ottobre: introduzione al corso.
pdf.
- 3 ottobre: concetto di algoritmo; analisi algoritmo di Euclide; concetto di complessità.
pdf.
- 7 ottobre: sintassi e semantica dei linguaggi; grammatiche; tavole sintattiche; BNF.
pdf.
- 8 ottobre: evoluzione dei linguaggi; paradigmi di programmazione.
pdf.
- 10 ottobre: classi e oggetti; stato e comportamento degli oggetti; campi e metodi.
pdf.
- 14 ottobre: costruttori e riferimenti agli oggetti.
pdf.
- 15 ottobre: memoria stack e heap; pila dei record di attivazione dei metodi.
- 21 ottobre: classi e oggetti; incapsulamento dei dati.
pdf.
Classe
String
.
pdf.
- 22 ottobre: definizione dei metodi; passaggio di valore ai parametri; prototipo e firma dei metodi; tipi di dati interi.
Dado e Frazione.
Parametri espliciti e impliciti nella chiamata dei metodi.
pdf.
- 24 ottobre: tipi di dati numerici in virgola mobile, caratteri, booleani.
Overflow,
Precisione.
pdf.
- 28 ottobre: tabelle di verità, legge di De Morgan.
Operatori, precedenze e associatività di operatori.
html.
- 29 ottobre: numeri pseudo-casuali. Istruzioni di selezione.
pdf.
- 31 ottobre: istruzione
switch
.
ContaGiorni.
Istruzioni di ripetizione.
pdf.
- 4 novembre: istruzione di ripetizione
while
.
Istruzione di ripetizione do-while
.
Palindrome,
PalindromeTester.
Numeri pseudo-causali.
Dado con
TestDado.
RandomNumbers.
- 5 novembre: schemi per cicli di acquisizione dell'input.
LeggiDecimali,
LeggiPariDispari,
LeggiNumeri con
DataSet.
- 7 novembre: istruzioni
break-continue
.
BreakContinue.
Classe StringTokenizer
.
LeggiDecimaliToken,
PigLatin con
PigLatinTranslator.
- 11 novembre: passaggio di valori a parametri.
TestParametriSemplici,
TestParametri con
PassaggioParametri e
Num.
- 12 novembre: I compitino.
- 18 novembre: correzione del compitino.
- 19 novembre: costruttori e chiamate di costruttori. Parola riservata
this
.
Fiori e
TestFiori.
Tipi di dato strutturati: array.
BasicArray.
- 21 novembre: membri statici di classe. Memoria statica.
MyClass e
CountIntances.
- 25 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: interfaccia
Comparable
. Esempi:
Rettangoli e
TestRettangoli.
- 28 novembre: algoritmo di ordinamento per selezione.
Ordina.
Uso in SortPhoneList con
Contact.
- 2 dicembre: gerarchia di classi ed ereditarietà.
pdf.
Chiamata ai costruttori della superclasse.
Libro_2 classe base,
Dizionario_2 sottoclasse,
TestDizionario_2 driver.
- 3 dicembre: sovrascrittura di metodi nelle gerarchie.
Massima e
Consiglio con
Messaggi.
Disinfettante e
Detergente.
Ordine delle chiamate ai costruttori.
Arte, classe base,
Disegno e
Schizzo, specializzazioni.
- 5 dicembre: ereditarietà multipla.
Studente, la sottoclasse
StudenteDott e il driver
Accademia.
- 9 dicembre: analisi algoritmi di ordinamento per selezione e per inserzione.
Decomposizione dei metodi ed ereditarietà.
Figure, classe base;
Triangle,
Diamonds,
Box: specializzazioni.
Classi astratte.
pdf.
- 10 dicembre: classi astratte. Polimorfismo ed ereditarietà:
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
.
Accesso indiretto ai campi della super-classe:
Cibo,
le estensioni Pizza e
Torta con il driver
Calorie.
Composizione di classi vs gerarchia:
Tavola.
Polimorfismo e upcasting:
Musica.
Gerarchie di classi.
- 16 dicembre: ricorsione. Gestione stack dei record di attivazione dei metodi.
Fattoriale,
Potenza,
NumCifre,
Pal17 dicembre: II compitino.
- 7 gennaio: correzione compitino.
- 9 gennaio: strutture dati. Implementazione statica di stack.
Stack con l'eccezioni
OutOfBoundsStackException e
EmptyStackException.
- 13 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.
Esempio con eccezioni: valutazione di espressioni aritmetiche
in notazione postfissa.
Postfissa_2 con l'eccezione
PostfissaException.
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
- Valutazioni del I compitino del 12/11/08
- Valutazioni del II compitino del 17/12/08
- Studenti che possono presentarsi al I appello d'esame.
- Studenti ammessi alla prova orale o al progetto.
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.
segnala
accessi a queste pagine dal 1 ottobre 2008
ultima modifica: 26 novembre 2009, Maria A. Alberti