Laboratorio di tecnologie dell'informazione

Novità

Orario e aule - Ricevimento - Annunci su lezioni

Inizio lezioni a.a. 2014-2015: 5 Marzo 2015. Termine lezioni: 18 Giugno 2015.

Vacanze: Le attività didattiche della Scuola di Ingegneria cesseranno per le Festività Pasquali. Le lezioni di Giovedì 2 Aprile e Mercoledì 8 Aprile 2015 non ci saranno.

Ricevimento: Giovedì dalle 17:00 alle 19:00 presso il MICC in Viale Morgagni 65 - fissare comunque l'appuntamento per email: marco.bertini@unifi.it

Assenze:

Date esame

E' necessario prenotarsi mediante il modulo web disponibile all'indirizzo: http://sol.unifi.it/prenot/prenot

Senza questa prenotazione NON è possibile sostenere l'esame, causa le nuove modalità di verbalizzazione elettronica. Le aule del CDM dove viene effettuato lo scritto sono stabilite circa tre giorni prima dello scritto, sulla base del numero di iscrizioni. Gli studenti devono controllare questo sito o il sistema di prenotazione. Il giorno successivo allo scritto viene fatto l'orale presso i locali del MICC in Viale Morgagni 65; gli studenti che intendono superare l'esame del corso con un elaborato devono presentarsi il pomeriggio del giorno dello scritto. Le modalità di superamento dell'esame sono riportate sotto.

Le date d'esame sono visibili sul sito ufficiale dell'Università http://sol.unifi.it/docprenot/docprenot:

Lucidi lezioni e materiale collegato

I collegamenti sono generalmente fatti a materiale scritto in inglese, a meno di diversa indicazione. I lucidi sono in formato PDF. I lucidi preceduti dalla scritta "OLD" sono quelli dell'A.A. precedente e devono ancora essere aggiornati - se ne sconsiglia la stampa.
Il programma fatto durante le lezioni è riportato nella pagina web: Registro lezioni 2014-2015 e sul sito di e-learning dell'Università.

Sito e-Learning Unifi con materiale del corso: http://e-l.unifi.it. Tutti gli studenti dell'A.A. 2014-2015 devono iscriversi.

Lucidi e materiale a.a. 2014 - 2015

Per motivi di tempo può non essere possibile vedere tutti gli aspetti del linguaggio C++ durante il corso. Consiglio la lettura completa di uno dei due libri di testo consigliati, o quantomeno dei seguenti tutorial:

È consigliata la lettura delle dispense e la visione dei video del corso "Object Oriented Software Design" della Scuola Superiore Sant'Anna 2012-2013.

Blog interessanti sul C++ e la programmazione in generale:

Lucidi e materiale anni precedenti:

Modalità di svolgimento dell'esame

L'esame si compone di una prova scritta e una orale.
La prova scritta consiste in alcuni elaborati di programmazione e nella discussione di contenuti del programma. La prova è organizzata "a batteria" in due parti di 60-70 minuti ciascuna: nella prima parte vengono date risposte a questioni di natura teorica, nella seconda vengono svolti esercizi di programmazione.
La prova scritta è svolta su carta, usando fogli in formato A4 (no fogli protocollo); si prega di scrivere su un solo lato del foglio. Successivamente i candidati ricevono la fotocopia del loro elaborato.
Per accedere alla prova orale, il candidato deve correggere il proprio elaborato, riportando le correzioni in maniera visibile sulla fotocopia. Il candidato deve anche realizzare il programma corretto e funzionante che corregge l'elaborato e lo completa facendone un programma autocontenuto; nel caso il candidato non riesca a fare questo è fortemente sconsigliata la partecipazione all'orale. Il candidato deve infine fornire una autovalutazione del proprio elaborato, in base al valore attribuito a ciascuna parte della prova, alla discussione della soluzione, all'esperienza acquisita nella correzione e realizzazione effettiva del programma.
La prova orale inizia con la discussione dell'elaborato, e prosegue con l'approfondimento di tutti i contenuti del programma.

Esempio di compito 1 (PDF); Esempio di compito 2 (PDF); Esempio di compito 3 (PDF); Esempio di compito 4 (PDF)

In alternativa è possibile stabilire degli elaborati relativi alla creazione di software. Il tema dell'elaborato deve essere concordato preventivamente. Una volta selezionato il tema verranno effettuati incontri per discutere e rivedere lo stato di avanzamento del progetto. Una volta completato l'elaborato questo verrà discusso il pomeriggio del giorno dello scritto dell'esame. Nel corso della discussione finale lo studente può essere interrogato sia su argomenti riguardante l'elaborato che su temi del corso ad esso collegati o relativi ai design pattern.

E' preferibile sviluppare un proprio progetto, in alternativa possibili idee di elaborato sono 1) un'applicazione per la gestione di agende come iCal, senza tutta la parte di gestione di calendari multipli e rete, usando WxWidgets (o QT) per la GUI. Un'altra opzione è gestire un task manager semplice (http://lifehacker.com/tag/todo-manager/ per ispirarsi) o un programma per prendere note (come Tomboy). Niente campi minati/gioco della scopa, altri giochi a piacere: OK.

Link utili

Il Model/View/Controller è un design pattern utile nella programmazione di sistemi dove c'è un'interfaccia grafica. A lezione si studia il design pattern Observer che è la parte principale di MVC.

MVC:

Game Loop pattern (usato nella visualizzazione dei videogame)

Observer pattern nei videogame

Come librerie per disegnare GUI grafiche si possono usare wxWidgets o QT (consigliata), oppure NCurses per interfacce testuali.

wxWidgets:

QT:

NCurses / PDCurses (per Windows): libreria per gestiure GUI e input/output su terminale.

SDL: semplice libreria multimediale cross-platform e open source adatta per i videogame

Ambienti di sviluppo/compilatori consigliati

Eclipse CDT (richiede l'installazione di Eclipse e di un compilatore come G++ o clang++) - multipiattaforma. Durante il corso verrà usata questa IDE. I software sviluppati durante il corso DEVONO essere forniti come progetti Eclipse.
Tutorial sulla configurazione di Eclipse+CDT su OSX, Linux e Windows (Video tutorial: installare Eclipse, MINGW e MSYS - per Windows). Eclipse ed i diagrammi UML: tutorial in inglese - tutorial in italiano.

Problemi comuni:

Tutorial sull'installazione di Eclipse/CDT e MSYS/MingW (Windows, mostra anche come installare WxWidgets). Wiki wxWidgets per l'uso di Eclipse + wxWidgets (EN); Tutorial sull'installazione di wxWidgets per Eclipse (Windows e Linux, EN); Tutorial sull'uso di wxWidgets (EN, molto semplice, adatto per principianti).

Plugin utili per Eclipse: Linuxtools, cppcheclipse

Altri ambienti di sviluppo che si possono usare sono:


Compilatori

Windows: GCC nella distribuzione MinGW

Linux: G++

OSX: In OSX si devono installare gli strumenti di programmazione a command line (necessari per usare CLion/Eclipse/Codelite/Code::Blocks), scaricando XCode dall APP store e quindi dando il comando xcode-select --install in una finestra del terminale (tutorial).

Editor per diagrammi UML:

Libri di testo

Copertina VicarioE. Vicario, "Fondamenti di programmazione - Linguaggio c, strutture dati e algoritmi elementari, c++", Società Editrice Esculapio, 2006 - estratto (PDF)

 

 

 

 

 

 

 

 

Libri consigliati

D.S. Malik, "Programmazione in C++", Apogeo

 

 

 

 

 

 

 

 

B. Eckel, “Thinking in C++”, disponibile gratuitamente (in versione HTML) su:
http://www.mindview.net/Books/DownloadSites e acquistabile su IBS.
Versione PDF (2.2 MB) del libro (creata dalla versione HTML fornita dall'autore)Copertina Eckel

 

 

 

 

 

 

 

H. Schildt, C++ A Beginner's guide (gratis su Freebooks - copia PDF)

A. B. Downey, How to Think Like a Computer Scientist - C++ version (gratis su web e PDF)

F. B. Brokken, C++ Annotations (gratis su web)

R.Sedgewick, “Algoritmi in C++”, Pearson EducationCopertina Sedgewick

 

 

 

 

 

 

 

 

 

E.Gamma, R.Helm, R.Johnson, J.M.Vlissides, “Design Patterns”, Pearson EducationCopertina Design Patterns

 

 

 

 

 

 

 

 

 

E.Freeman, K. Sierra, “Head First Design Patterns”, O'Reilly (sito web)Copertina Head FIrst Design Patterns