Paolo Boldi

Programmazione (Informatica musicale)

Indice

  1. Avvisi
  2. Orario
  3. Appelli
  4. Compitini
  5. Programma del corso
    1. Libri di testo consigliati
    2. Contenuti del corso
  6. Modalità d'esame
  7. FAQ
  8. Ricevimento studenti
  9. Link utili

Avvisi

Orario

Le lezioni si svolgeranno con il seguente orario:

Appelli

Il seguente elenco contiene le date presunte degli appelli. Le date saranno da ritenersi provvisorie, e verranno confermate con l'approssimarsi degli appelli stessi. Si noti che presso il SIFA saranno aperte iscrizioni distinte per ciascuna delle due parti di cui l'appello è composto, e gli studenti che intendono partecipare all'appello devono iscriversi a tutte e due.

 LaboratorioOraleEsiti
Gennaio 2016 11/1 14/1 Esiti
Febbraio 2016 8/2 11/2 Esiti
Giugno 2016 7/6 15/6 Esiti
Luglio 2016 12/7 19/7 Esiti
Settembre 2016 14/9 16/9 Esiti

Compitini

Le date dei compitini sono per il momento da ritenersi presunte.

I Compitino (17/11/2015) Esercizi di preparazione Testo e soluzioni Esiti
II Compitino (17/12/2015) Esercizi di preparazione Testo e soluzioni Esiti
Tabella riassuntiva dell'esito dei compitini

Programma di massima del corso di Programmazione

Il corso di Programmazione è un corso di 12 crediti finalizzato all'insegnamento della programmazione. Trattandosi di un corso di base, non richiede alcuna conoscenza specifica pregressa; obiettivo del corso ` formare gli studenti alla programmazione in senso tradizionale, mediante l'uso di un linguaggio a oggetti; il linguaggio insegnato nel corso sarà Java.

Il corso si compone di due moduli, svolti in parallelo: questa pagina descrive solo il modulo di Programmazione (teoria), mentre il Laboratorio di programmazione, tenuto da Massimo Santini, ha una sua propria pagina web.

Libri di testo consigliati

Il testo consigliato per il corso è:

G. Pighizzini, M. Ferrari: Dai fondamenti agli oggetti. Corso di programmazione JAVA, Addison-Wesley, Pearson Education Italia.

Per la prima parte si farà riferimento a

Contenuti del corso

  1. Introduzione al corso; Architettura del calcolatore; Che cos'è l'informatica; Linguaggi di programmazione (macchina, assembly, alto livello); Il calcolatore come macchina programmabile [PF1.1-1.4]
  2. La macchina di von Neumann; Informazione (bit, byte,...); Caricamento in RAM del programma, fetch-decode-execute; Architettura della CPU: ALU e CU; Un esempio di CPU con relativo linguaggio assembly [PF1.5]
  3. Elementi di algebra booleana; Principali operatori logici; Tabelle di verità, equivalenza logica [Dispense]
  4. Rappresentazione dell'informazione; Notazione posizionale; Rappresentazione degli interi negativi; Range di rappresentazione, overflow; Cenni alla rappresentazione dei reali: virgola fissa e mobile (standard IEEE 754); I caratteri (ASCII e Unicode) [Dispense]
  5. Ciclo di vita del software; Strumenti per la programmazione; La JVM [PF1.8]
  6. Programmazione strutturata; Concetti di variabile, tipo, assegnamento; Selezione; Iterazione; Introduzione alla programmazione a oggetti [PF1.9-1.12]
  7. Aspetti lessicali e sintattici; Primi esempi di programmi in Java [PFA1.13-1.15]
  8. I/O (System.out e Scanner; ConsoleInputManager/ConsoleOutputManager)
  9. Invocazioni di metodi; Invocazione di costruttori; Prototipi, segnature, overloading [PF2.1-2.2]
  10. Tipi di variabili: primitivi, riferimenti; Esempi (la classe Frazione) [PF2.3-2.4]
  11. Principi di buona programmazione: commenti, indentazione, cenno a javadoc [PF7.8]
  12. if; Il tipo boolean e operatori logici [PF3.1-3.4]
  13. Cicli: while, do, for [PF3.5-3.6]
  14. Istruzioni break e continue; Cicli infiniti [PF3.7]
  15. Espressioni: tipo, valore; Effetti collaterali; Lazy evaluation [PF4.1-4.2]
  16. Classe String: costruttori e oggetti [PF2.3]
  17. Tipi numerici interi e operatori; Tipi numerici floating point e operatori; Conversioni di tipo e cast; Tipo char; Relazione con i tipi interi; Costanti [PF4.3-4.6]
  18. Istruzione switch; Metodi statici [PF4.8-4.9]
  19. Classi involucro; Boxing e unboxing automatico; Importazioni di metodi statici [PF4.10]
  20. Array con esempi; Parametri del main [PF5.1-5.6]
  21. Classe Rettangolo; Classe Quadrato; Ereditarietà; Rappresentazione UML; Overriding; Polimorfismo; instanceof [PF6.1-6.5]
  22. Esempio FigureAreaMax; Esempio Cerchio; Introduzione alle classi astratte [PF6.6]
  23. Riepilogo: gerarchia delle classi, gerarchia dei tipi; Classe Object; Uso dei tipi riferimento (promozioni, cast); Dynamic binding; Interfacce [PF6.7,6.14,6.12]
  24. Package; Gestione di file; Interfacce [PF7.9,13.1-13.2,13.4]
  25. Implementazione di classi: la classe Frazione [PF7.1-7.3]
  26. La classe Orario; Metodi e campi statici; Modificatore final (per gli attributi); Garbage collection; Implementazione di un'interfaccia [PF7.4-7.7]
  27. Ereditarietà (la classe Quadrato); Costruttori e ereditarietà [PF8.1-8.2]
  28. Estensioni di classi astratte; Uso di super; Overloading di metodi e costruttori [PF8.3-8.4]
  29. Modificatori di accesso; Modificatore final per i metodi e le classi; I metodi equals e hashCode [PF7.10,8.14,8.7]
  30. Invocazione di costruttori e metodi; Passaggio di parametri; Organizzazione della memoria; Stack e record di attivazione; Metodi ricorsivi [PF10.1-10.3]
  31. Introduzione alle eccezioni; Eccezioni; Eccezioni controllate e non controllate [PF11.1-11.3,11.6-11.9]
  32. Cenni all'uso dei generici e degli enum [PF6.15-6.18,4.7]

Modalità d'esame

  1. Compitini: durante il corso si terranno due compitini (a novembre e a gennaio), cui possono partecipare tutti gli studenti; il compitino costituisce un esonero parziale dalla prova di laboratorio di gennaio e febbraio: gli studenti che vogliano sostenere l'esame a gennaio o febbraio e che abbiano ottenuto la sufficienza in entrambi i compitini svolgeranno una prova di laboratorio ridotta;
  2. Appelli di gennaio e febbraio 2016: gli appelli di gennaio e febbraio sono costituiti da:
    • una prova di programmazione individuale, ridotta per gli studenti che abbiano conseguito la sufficienza nei compitini; la prova si considera superata se gli studenti ottengono un punteggio almeno pari al 50% (se non hanno la sufficienza nei compitini) o al 25% (se hanno la sufficienza nei compitini);
    • un orale, obbligatorio per tutti, che determina il voto finale.
  3. Appelli successivi: gli appelli successivi a quello di febbraio sono costituiti da:
    • una prova individuale di programmazione;
    • un orale seguito da verbalizzazione.
    Sono ammessi all'orale solo gli studenti che abbiano conseguito una valutazione sufficiente nella prova di programmazione. Le varie parti da cui l'esame è composto vanno necessariamente sostenute nello stesso appello, e in particolare chi pur avendone la possibilità decide di non presentarsi alle verbalizzazioni dovrà sostenere nuovamente l'esame.
  4. Salto di appello: chi risulta gravemente insufficiente negli appelli di gennaio o giugno non potrà sostenere gli appelli di febbraio e luglio, rispettivamente.
  5. Iscrizione agli appelli: gli studenti che vogliano sostenere l'esame a un dato appello devono iscriversi al SIFA (tramite il @SIFA on-line, o recandosi presso gli appositi chioschi). Questo vale per tutti gli appelli, compresi quelli di gennaio e febbraio, anche per gli studenti che abbiano sostenuto con successo il compitino.

FAQ

A partire dall'anno accademico 2014/2015, il corso di programmazione usa il linguaggio Java. Tuttavia gli studenti degli anni accademici precedenti possono continuare a sostenere l'esame in C: durante la prova di laboratorio, tutti gli esercizi saranno svolti a scelta in C o Java. L'orale riguarderà lo stesso linguaggio.

Ricevimento studenti

Il docente riceve nel suo studio di Via Comelico, 39/41 (II piano), su appuntamento. Un appuntamento può essere fissato a lezione, oppure inviando una e-mail al docente e attendendo una risposta di conferma.