Programmazione 2 (Matematica)
Indice
- Avvisi
- Programma del corso
- Libri di testo consigliati
- Materiale didattico aggiuntivo
- Materiale usato durante i laboratori
- Progetti d'esame
- Iscrizioni agli appelli
- Modalità d'esame
- Ricevimento studenti
Avvisi
- Orali di febbraio. Gli studenti che hanno inviato il progetto sono convocati per gli orali nell'aula Delta (via Celoria 18 [dip. di Informatica], I piano) alle ore 9:30 del giorno 26/02. Ogni gruppo è pregato di portare con sé una stampa dei sorgenti del progetto e dei PDF allegati.
- Testo appello di febbraio. Ecco il testo per il progetto di febbraio.
- Esame di febbraio. Ecco le tempistiche con cui si svolgerà l'esame di
febbraio:
- entro il 12/2 dovete compilare il form individuale
- il giorno 13/2 verrà pubblicato su questa pagina il testo del progetto
- entro il giorno 20/2, ogni gruppo dovrà consegnare il progetto inviando una e-mail al docente con oggetto Progetto Programmazione II febbraio
- il giorno 27/2 si svolgeranno gli orali.
- Esiti dell'esame di gennaio e modalità esame di febbraio. Nei prossimi giorni pubblicherò gli esiti dell'esame di gennaio inviando direttamente agli studenti i voti proposti tramite il sistema di verbalizzazione (gli studenti potranno accettare o rifiutare il voto). Contestualmente renderò note le modalità di partecipazione all'appello di febbraio.
- Esame del 30/1. Gli studenti iscritti all'appello di gennaio sono convocati in Aula 2 alle ore 9:30.
Appelli
Importante: per partecipare a qualunque appello gli studenti devono iscriversi presso il SIFA.Gli appelli di Gennaio e Febbraio 2019 si svolgeranno con le seguenti modalità e nelle seguenti date:
- Gennaio: Si svolgerà una prova di laboratorio individuale, in una data che verrà fissata in seguito (nella seconda metà di gennaio). Gli studenti con valutazione positiva potranno verbalizzare direttamente il voto proposto.
- Febbraio: Verso la fine di gennaio verrà pubblicato il tema per l'appello di Febbraio. Si tratta di un progetto da svolgersi in gruppi di al massimo tre persone, e la cui consegna sarà indicativamente verso metà febbraio. I gruppi che avranno ricevuto una valutazione sufficiente saranno convocati per un orale individuale.
A parte gli esami di Gennaio e Febbraio 2019, tutti gli altri appelli vengono di fatto svolti su appuntamento. Gli studenti interessati sono pregati di contattare il docente circa tre settimane prima della data prevista per l'appello.
- Appello di gennaio 2018: 30/01
- Appello di febbraio 2018: 26/02
- Appello di aprile 2018: su appuntamento
- Appello di giugno 2018: su appuntamento
- Appello di luglio 2018: su appuntamento
- Appello di settembre 2018: su appuntamento
Orario del corso
Le lezioni si terranno in Aula 2 (via Saldini) con il seguente orario settimanale:
- lunedì, ore 10:30-12:30;
- mercoledì, ore 10:30-13:30 (ultima ora usata solo come recupero).
Programma di massima del corso di Programmazione (A.A. 2018/2019)
Il corso è costituito da una parte di teoria e una di laboratorio. Gli argomenti trattati nella parte di teoria saranno i seguenti (i numeri indicati fra parentesi quadre si riferiscono ai corrispondenti capitoli nel libro adottato per il corso, Dai fondamenti agli oggetti).
- Introduzione al corso, scopo e finalità
- Cos'è l'informatica [1.1]
- Dagli algoritmi ai programmi [1.2]
- Linguaggi di programmazione (macchina, assembly, alto livello)
- Classificazione dei linguaggi di alto livello
- imperativi
- funzionali
- logici
- a oggetti
- Ciclo di vita del software
- Crisi del software
- Programmazione strutturata [1.9]
- Concetti di variabile, tipo, assegnamento [1.10]
- Selezione (decidere se n è pari o dispari) [1.11]
- Iterazione (somma primi n numeri; cosa succede se n=0?; calcolo somma di seq.; calcolo media; calcolo media pari/dispari; calcolo MCD) [1.11]
- Altri esempi (x*y mediante somme iterate, x/y mediante sottrazioni iterate) [1.11]
- Introduzione alla programmazione a oggetti [1.12]
- Aspetti sintattici [1.13]
- BNF e carte sintattiche [1.13]
- Cenni della grammatica di Java [1.14]
- Primi esempi di programmi in Java [1.15]
- Invocazioni di metodi [2.1.1]
- Invocazione di costruttori [2.1.1]
- Classi per I/O [2.1.1, 2.1.2]
- Esempi [2.1.2]
- Prototipi, segnature, overloading [2.2]
- Classe String: costruttori e oggetti [2.3]
- Tipi di variabili: primitivi, riferimenti [2.4]
- Esempi (la classe Frazione) [3.1]
- Uso della classe Frazione [3.1]
- Principi di buona programmazione: commenti, indentazione, cenno a javadoc ([7.8])
- if [3.2]
- Il tipo boolean e operatori logici [3.3, 3.4]
- Cicli: while, do, for [3.5, 3.6]
- Esempi (fra cui: palindrome) [3.5, 3.6]
- Istruzioni break e continue [3.7]
- Cicli infiniti
- Espressioni: tipo, valore [4.1]
- Effetti collaterali [4.1]
- Lazy evaluation [4.1]
- Tipi numerici interi e operatori [4.3, 4.2]
- Tipi numerici floating point e operatori [4.4, 4.2]
- Conversioni di tipo e cast [4.5]
- Operatore +; il metodo toString [4.5]
- Tipo char; relazione con i tipi interi [4.6]
- Regole di precedenza
- Costanti
- Istruzione switch [4.8]
- Metodi statici [4.9]
- Classi involucro [4.10]
- Boxing e unboxing [4.10]
- Tipi enumerativi (cenni) e loro uso negli switch [4.7]
- Array con esempi [5.1]
- Cicli foreach per array [5.2]
- Cenni ad array a più dimensioni [5.6]
- Parametri del main [5.3]
- Esempi
- Sequenza e uso delle classi generiche [5.7]
- Classe Rettangolo [6.1]
- Classe Quadrato [6.3]
- Relazioni fra Quadrato e Rettangolo [6.4]
- Ereditarietà
- Rappresentazione UML
- Overriding
- Uso dei riferimenti
- Polimorfismo
- instanceof
- Esempio FigureAreaMax
- Classe Cerchio
- Introduzione alle classi astratte [6.5]
- Riepilogo: gerarchia delle classi, gerarchia dei tipi [6.6]
- Classe Object [6.6]
- Uso dei tipi riferimento (promozioni, cast) [6.7]
- Dynamic binding [6.8]
- Un esempio [6.9]
- Cenni ai package
- Gestione di file [6.10]
- Esempi [6.11]
- Interfacce [6.12]
- Interfacce e tipi [6.12]
- Implementazione di classi: la classe Frazione [7.1, 7.2]
- La classe Orario [7.4]
- Metodi e campi statici [7.5]
- Modificatore final (per gli attributi)
- Riepilogo sui membri delle classi [7.6]
- Garbage collection [7.6]
- Implementazione di un'interfaccia [7.7]
- Ereditarietà (la classe Quadrato) [8.1]
- Costruttori e ereditarietà [8.2]
- Estensioni di classi astratte
- Adombramento di variabili: uso di this
- Uso di super [8.3]
- Overloading di metodi e costruttori [8.4, 8.5]
- Modificatori di accesso [7.10, 8.13]
- Modificatore final per i metodi e le classi
- Il metodo equals [8.7]
- Esempi di classi e ereditarietà [8.9, 8.10, 8.11]
- Invocazione di costruttori e metodi [8.2]
- Passaggio di parametri [10.1]
- Per valore
- Cenni ad altri metodi
- Passaggio per riferimento
- Varargs
- Organizzazione della memoria [10.2]
- Stack e record di attivazione [10.2]
- Metodi ricorsivi [10.3]
- Notazione postfissa
- Introduzione alle eccezioni [11.1]
- Eccezioni [11.2]
- Notazione postfissa con eccezioni [11.4]
- Sollevare eccezioni [11.6]
- Eccezioni controllate e non controllate [11.8]
Le lezioni di laboratorio consisteranno in esercitazioni guidate sulle tematiche trattate nel corso; nelle prime lezioni, inoltre, verranno discussi i seguenti argomenti:
- Accesso a Linux
- Breve discussione sull'uso dell'ambiente
- Workspaces e movimenti
- Creazione di terminali
- Finestre: massimizzazione, minimizzazione, chiusura, iconizzazione
- Finestre: spostamento
- Filesystem e sua struttura
- Il comando ls; opzioni al comando ls
- Il comando man
- Il comando pwd
- Il comando cd
- Creare una directory
- Creare un file: uso di ne
- Mostrare un file: il comando cat
- Il comando grep
- Redirezionare i flussi
- Piping
- Esempi
- Tipi di traduttori: compliatori, interpreti
- Java e la JVM
- Scrittura di un programma Java
- Creare una directory dove mettere l'esempio
- Creare, dentro la directory, una gerarchia per il pacchetto
- Editing di due classi dentro la gerarchia
- Compilazione: javac
- Effetto: le classi bytecode
- Esecuzione: java
- Uso di Eclipse
- Crazione di un nuovo progetto Java (Esercitazioni)
- Cosa succede nel filesystem?
- Creazione di un nuovo package (it.unimi.dsi.sei)
- Cosa succede nel filesystem?
- Creazione di una classe (copiando il testo di una esistente)
- Cosa succede nel filesystem?
- Commenti
- Controllo sintattico on-line
- Salvare
- Cosa succede nel filesystem?
- Creazione di un'altra classe
- Commenti
- Completamento automatico metodi
- Compilazione ed esecuzione: dentro Eclipse
- Compilazione ed esecuzione: fuori da Eclipse
- Prova a modificare il programma
Libri consigliati
Il testo consigliato per il corso è:
G. Pighizzini, M. Ferrari: Dai fondamenti agli oggetti. Corso di programmazione JAVA, Addison-Wesley, Pearson Education Italia.
Materiale didattico aggiuntivo
È disponibile il file .jar e la documentazione delle classi distribuite con il libro di testo consigliato. Sono forniti:
- il file .jar delle classi del pacchetto prog
- la documentazione delle API del pacchetto prog.
Infine, è disponibile un esempio di testo dell'esame di gennaio.
Materiale didattico usato durante i laboratori
- Laboratorio del 3/10/2018:
- L'infinito di Giacomo Leopardi
- La Divina Commedia di Dante Alighieri
- Voti di Paolo Boldi
- Amici
- Laboratorio del 10/10/2018:
- Programma Saluti.java
- Programma Quarantaquattro.java
- Programma QuarantaquattroBis.java
- Programma Narciso.java e relativa libreria sf.jar
- Per i più curiosi, il sorgente della libreria
- Laboratorio del 24/10
- Laboratorio del 31/10
- Laboratorio del 07/11
- Laboratorio del 14/11
- Laboratorio del 21/11
- Laboratorio del 05/12
- Laboratorio del 12/12
- Laboratorio del 19/12
- Laboratorio del 09/01
- Laboratorio del 21/01
Modalità d'esame
Appello di gennaio 2019. Per il solo appello di gennaio 2019, e limitatamente ai soli studenti che abbiano seguito il corso in questo anno accademico, si terrà una prova in laboratorio, da svolgersi individualmente; chi supererà la prova con valutazione sufficiente potrà verbalizzare il voto conseguito senza presentare alcun progetto e senza sostenere l'orale. Tutti gli altri dovranno presentarsi negli appelli successivi e sostenere l'esame secondo le modalità usuali sotto indicate.
L'esame di Programmazione consiste nello svolgimento di un progetto (che può essere sviluppato individualmente oppure in gruppi di al massimo tre persone) e in un orale.
I temi dei progetti verranno proposti dal docente. Ogni gruppo che intenda sostenere l'esame deve, prima di iniziare a sviluppare il progetto, contattare il docente; è possibile in questa sede proporre di svolgere il progetto su un tema diverso, ma in tal caso il docente dovrà valutare se il tema proposto sia pertinente.
Modifica alle modalità d'esame
Queste modalità d'esame possono essere soggette a revisioni nel corso dell'anno. Ogni modifica verrà comunicata per tempo agli studenti, e comunque prima del primo appello disponibile.
Ricevimento studenti
Il docente riceve nel suo studio di via Celoria 18 (quinto piano) su appuntamento. Un appuntamento può essere fissato a lezione, oppure inviando una mail al docente e attendendo una risposta di conferma.