Laboratorio di tecnologie dell'informazione
Novità
- 31 Agosto 2011: aggiunte informazioni su appello di Settembre
- 11 Luglio 2011: aggiunte informazioni su appello di Settembre
- 6 Luglio 2011: aggiunta informazione su aula compito scritto del 13 Luglio
- 19 Giugno 2011: aggiunti link a 2 libri su C++ gratis
- 6 Giugno 2011, aggiornati lucidi e registro lezione
- 25 Maggio 2011, aggiornati lucidi e registro lezione, aggiunte date appelli Giugno e Luglio 2011
- 16 Maggio 2011: aggiornati lucidi lezione
- 9 Maggio 2011: aggiornati lucidi lezione
- 2 Maggio 2011: aggiornati lucidi lezione
- 11 Aprile 2001: aggiornati lucidi lezione e 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 date d'esame sono visibili sul sito ufficiale dell'Università http://sol.unifi.it/docprenot/docprenot:
- 6 Settembre 2011: ore 9:30 CDM (aula 201) (scritto) - 7 Settembre 2011: ore 9:30 MICC in Viale Morgagni 65 (orale)
- 13 Luglio 2011: ore 9.30 CDM (aula 009) (scritto) - 14 Luglio 2011: ore 9:30 MICC in Viale Morgagni 65 (orale)
- 27 Giugno 2011: ore 9.30 CDM (aula da confermare) (scritto) - 28 Giugno 2011: ore 9:30 MICC in Viale Morgagni 65 (orale)
- 22 Febbraio 2011: ore 9.30 MICC in Viale Morgagni 65(scritto) - 23 Febbraio 2011: ore 15:30 MICC in Viale Morgagni 65 (orale)
- 8 Febbraio 2011: ore 9.30 MICC in Viale Morgagni 65 (scritto) - 9 Febbraio 2011: ore 15:30 MICC in Viale Morgagni 65 (orale)
- 24 Gennaio 2011: ore 9.30 MICC in Viale Morgagni 65 (scritto) - 25 Gennaio 2011: ore 15:30 MICC in Viale Morgagni 65 (orale)
- 13 Settembre 2010: ore 09.30 Aula 103 CDM (scritto) - 14 Settembre: ore 15.00 presso MICC (orale)
- 22 Luglio 2010: ore 09.30 Aula 009 CDM (scritto) - 23 Luglio: ore 09.30 presso MICC (orale)
- 28 Giugno 2010: ore 09.30 presso Aula 218 CDM (scritto) - 29 Giugno: ore 09.30 presso MICC (orale)
- AGGIORNATA: 14 Giugno 2010: ore 09.30 aule 008 CDM (scritto) - 15 Giugno: ore 09.30 presso MICC (orale)
- 18 Febbraio 2010: ore 09.30 presso MICC (scritto) - 19 Febbraio 2010, ore 9.30 presso MICC (orale)
Orario e aule - Ricevimento - Annunci su lezioni
Inizio lezioni a.a. 2010-2011: 7 Marzo 2011.
- Lunedì: 14.00-17.00 Aula 004
- Martedì: 08.15 - 10.15 Aule 113+114
- Sito web dell'orario
Vacanze: Non ci sarà lezione il martedì dopo Pasqua (27 Aprile)
Ricevimento: su appuntamento, da fissare per email: bertini@dsi.unifi.it
Assenze: il 18 e 19 Aprile non ci sarà lezione causa partecipazione a conferenza
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.
Registro lezioni a.a. 2010-2011
- Presentazione del corso (1 MB)
Materiale aggiuntivo: Object-Oriented Programming in C++ (OpenCourseWare dell'University of Southern Queensland); Introduction to Object-Oriented Programming Using C++.
- Introduzione al corso e al paradigma OO (0.2 MB)
Materiale aggiuntivo: breve storia del C++, Wikipedia: programmazione orientata agli oggetti (IT), C++; Il sito web di Bjarne Stroustroup; convenzioni e stili nella scritura di codice C++; Consigli sul design Object Oriented; Why C++ is not just an Object-Oriented Programming Language (paper di Bjarne Stroustrup, PDF); C++ Internals (come implementare le funzioni del C++ in C) - Analisi del programma "Hello world" (0.1 MB); Compilazione e primo debug di "Hello world" con Eclipse (0.4 MB)
Materiale aggiuntivo: uso di include guard; Wikipedia: header file (IT) header file (EN, più completo); schemi d'uso di file header in C++. - Classi e oggetti (0.8 MB)
Materiale aggiuntivo: Wikipedia: Open/Closed Principle e Single responsibility principle; Il principio aperto/chiuso (IT); Operator overloading (Wikipedia); Operator overloading (completo e conciso); Overloading Operator + the Right Way; Java operator overload (discussione). - Coding: guida di stile (0.2 MB); Classi e oggetti: metodi di software engineering (0.2 MB)
Materiale aggiuntivo: Wikipedia: use case; CRC; UML class diagram. Coding guidelines: C++ Programming Style Guidelines (EN), Google C++ Style Guide (EN), Joint Strike Fighter air vehicle C++ coding standards for the system development and demonstration program (PDF, EN)
- Ereditarietà (0.4 MB)
Materiale aggiuntivo : C++ in action: inheritance; C++ in action: polymorphism; C++ inheritance; Wikipedia: ereditarietà (IT); C++ FAQ: inheritance, multiple inheritance e virtual inheritance.
Copy constructor, operatore = sovraccaricato e shallow copy; copia di oggetti (Wikipedia); overloading di <<. - Constancy e casting (0.6 MB)
Materiale aggiuntivo: Uso di const; C++ FAQ: la const correctness. Casting: Type Casting. - Templates (4.3 MB)
Materiale aggiuntivo: discussione in cui si mostra perché le definizioni delle funzioni template devono stare insieme alle loro dichiarazioni (in particolare leggere l'ultimo intervento); Why we can't afford export (PDF); Why can't I separate the definition of my templates class from it's declaration and put it inside a .cpp file?. Trip Report: March 2010 ISO C++ Standards Meeting: Removed Export Template - STL - Standard Template Library - (0.3 MB)
Materiale aggiuntivo: Standard Template Library Programmer's Guide; STL containers; STL algorithms; The C++ Standard Library - A Tutorial and Reference: sito web del libro, con decine di esempi; A Tour of the Standard Library (PDF); Critica degli iteratori. Lambda expressions in C++. - Eccezioni (0.6 MB)
Materiale aggiuntivo: C++ Exception Safety: Issues and Best Practices; Critica delle eccezioni - Resource management (0.2 MB)
Materiale aggiuntivo: RAII (Wikipedia); Using auto_ptr Effectively; Using auto_ptr to Handle Memory; auto_ptr Explained (PDF); Smart pointers in Boost, TR1, and C++x0; What's RAII all about ? - Design patterns + idioms + Adapter (0.2 MB)
Materiale aggiuntivo: Portland Pattern Repository; Adapter pattern sul Portland Pattern Repository; Adapter Design Pattern: tutorial, video ed esempi; C++ Idioms; More C++ Idioms - Design patterns: Observer (0.3 MB)
Materiale aggiuntivo: Observer pattern su Wikipedia; Observer pattern sul Portland Pattern Repository; Observer Design Pattern: tutorial, video ed esempi. Model-View-Controller (Wikipedia); Model View Controller tutorial - Design pattern: Factory Method, Abstract Factory e Singleton (0.5 MB)
Materiale aggiuntivo: Factory Method pattern sul Portland Pattern Repository; Abstract Factory pattern sul Portland Pattern Repository; Factory Method pattern: tutorial, video ed esempi; Abstract Factory pattern: tutorial, video ed esempi; Singleton pattern sul Portland Pattern Repository.
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:
- IO Stream: Input/output via <iostream> and <cstdio>; Learn About Input and Output; Input/Output with files; serializzazione.
- Namespace: Namespaces.
Blog interessanti sul C++ e la programmazione in generale:
- C++ Home
- Sutter’s Mill
- c++ truths
- C++ Soup!
- Learning C++
- Antonio Gulli's coding playground
- The C++ Source
- Reddit C++
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 45-60 minuti ciascuna: nella prima parte vengono date risposte a questioni di natura teorica, nella seconda viene svolto un esercizio di programmazione.
La prova scritta è svolta su carta, usando fogli in formato A4 (no fogli protocollo). Al termine, viene presentata e discussa la soluzione. 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. 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 open source. Il tema dell'elaborato deve essere concordato preventivamente.
Ambienti di sviluppo/compilatori consigliati
Eclipse CDT (richiede l'installazione di Eclipse e di un compilatore come GCC) - multipiattaforma. Durante il corso verrà usata questa IDE. I software sviluppati durante il corso DEVONO essere forniti come progetti Eclipse.
- Tutorial per l'installazione di Eclipse/CDT su Windows, OSX e Linux (molto completo); Tutorial sulla configurazione di Eclipse+CDT su OSX, Linux e Windows.
Problemi comuni:
- Con Windows 7 (o versioni a 64bit) non riesco a stampare su schermo quando eseguo il programmi dentro Eclipse... Soluzione: Possibile soluzione ai problemi di stampa in console con Eclipse+CDT sotto Windows oppure installare Eclipse in versione a 32bit
- Con OSX non riesco a fare il debug di un programma... Soluzione: impostare il debug nella modalità Standard anziché GDB/DSF (accade con l'ultima versione di Eclipse Helios 3.6.2)
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). Semplice spiegazione del design pattern MVC.
Plugin utili per Eclipse: Linuxtools, cppcheclipse
Code::Blocks (disponibile in distribuzione che contiene il compilatore) - multipiattaforma
Compilatore per Windows: GCC nella distribuzione MinGW
Compilatore per Linux e OSX: GCC
Libri di testo
E. Vicario, "Fondamenti di programmazione - Linguaggio c, strutture dati e algoritmi elementari, c++", Società Editrice Esculapio, 2006 - estratto (PDF)
Libri consigliati
L.J. Aguilar, “Fondamenti di programmazione in C++”, McGraw-Hill

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)
H. Schildt, C++ A Beginner's guide (gratis su Microsoft MSDN)
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 Education
E.Gamma, R.Helm, R.Johnson, J.M.Vlissides, “Design Patterns”, Pearson Education
E.Freeman, K. Sierra, “Head First Design Patterns”, O'Reilly (sito web)
