Laboratorio di tecnologie dell'informazione
Novità
- 1 Marzo 2016: il corso non è più disponibile. Gli studenti che non hanno ancora sostenuto l'esame possono comunque iscriversi agli appelli che saranno mantenuti.
- 11 Giugno 2015: aggiornato registro lezioni e laboratorio.
- 5 Giugno 2015: abilitate iscrizioni esami di Luglio e Settembre 2015.
- 27 Maggio 2015: aggiornati lucidi su design pattern e gestione risorse. Aggiunti due esercizi su Web-CAT.
- 21 Maggio 2015: aggiornati lucidi su STL ed eccezioni.
- 18 Maggio 2015: aggiunti due esercizi su Web-CAT.
- 11 Maggio 2015: aggiunto esercizio su Web-CAT.
- 6 Maggio 2015: aggiornati registro lezioni a.a. 2014-2015; aggiunto esercizio su Web-CAT.
- 23 Aprile 2015: aggiornati lucidi su ereditarietà e registro lezioni a.a. 2014-2015; aggiornata assenza lezione 29 Aprile.
- 1 Aprile 2015: aggiornati link e registro lezioni a.a. 2014-2015; aggiunto esercizio su Web-CAT.
- 20 Marzo 2015: aggiunta informazioni su vacanze pasquali.
- 18 Marzo 2015: aggiornato soluzione esercizi in registro lezioni a.a. 2014-2015 con materiale lezione 18/3/2015.
- 5 Marzo 2015: aggiornati link e registro lezioni a.a. 2014-2015.
- 1 Marzo 2015: aggiornati lucidi per prime lezioni a.a. 2014-2015.
- 27 Febbraio 2015: aggiornati i lucidi per prima lezione a.a. 2014-2015.
- 23 Febbraio 2015: aggiornato orario corso e ricevimento per a.a. 2014-2015.
- 26 Novembre 2014: abilitate iscrizioni esami Dicembre 2014 (solo elaborati), Gennaio e Febbraio 2015.
- 3 Novembre 2014: aggiunti file "OSX Command line tools" per OSX 10.9 "Mavericks" e 10.10 "Yosemite" per Xcode 6.1 e versione precedente.
- 28 Luglio 2014: giovedì 31 Luglio sarà tenuto l'ultimo ricevimento prima della pausa estiva. I ricevimenti ricominceranno a partire da giovedì 28 Agosto. Lo scritto di giovedì 31 Luglio sarà in aula 008 CDM.
- 17 Giugno 2014: abilitate le iscrizioni agli appelli di esame di Settembre.
- 9 Giugno 2014: aggiornato registro lezione 2014 con materiale esercitazione 9/6/2014.
- 2 Giugno 2014: abilitate le iscrizioni agli appelli di esame di Giugno e Luglio.
- 26 Maggio 2014: aggiornati lucidi su design pattern Factory e esercitazioni su Observer.
Orario e aule - Ricevimento - Annunci su lezioni
Inizio lezioni a.a. 2014-2015: 5 Marzo 2015. Termine lezioni: 18 Giugno 2015.
- Mercoledì: 10.15-13.15 Aule 113+114.
- Il laboratorio è diviso su due turni: dalle 10:15 alle 11:45, dalle 11:45 alle 13:15. Gli studenti sono divisi in due gruppi (quelli con cognome che comincia da A ad F, quelli con cognome che comincia da G a Z). I gruppi si alternano sui due turni. Mercoledì 11 Marzo il 1° gruppo viene al 1° turno.
- Giovedì: 14.00 - 17.00 Aula 001.
- Sito web dell'orario.
- Registro lezioni 2014-2015: riporta l'argomento di ogni lezione, i riferimenti ai lucidi usati ed ai programmi delle esercitazioni.
- Registro esercitazioni web 2014-2015: riporta descrizione e materiale per le esercitazioni web da effettuare con il sistema Web-CAT.
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:
- mercoledì 29 Aprile non ci sarà lezione
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:
- 2016: 11 Gennaio (scritto: 15:00 - aula 118) + 12 Gennaio (Orale: 15:00, elaborati: a seguire). 25 Gennaio (scritto: 15:00) + 26 Gennaio (elaborati: 10:00, orale: 15:00, presso MICC). 17 Febbraio (scritto: 15:00 - aula 118) + 18 Febbraio (orale: 15:00, elaborati a seguire). 2 Marzo (scritto: 15:00) + 3 Marzo (orale: 15:00, elaborati a seguire).
- 2015: 8 Luglio (scritto: 9:30 - aula 008, elaborati 15:00) + 9 Luglio (orale: 9:30). 21 Luglio (scritto: 15:00 - aula 206) + 22 Luglio (elaborati: 18:00, orale: 15:00). 9 Settembre (scritto: 9:30, elaborati: 15:00) + 10 Settembre (orale: 9:30). 22 Settembre (scritto: 9:30, elaborati: 15:00) + 23 Settembre (orale: 9:30).
23 Febbraio (scritto: 9:30, elaborati: 15:00) + 24 Febbraio (orale: 9:30). 26 Gennaio (scritto: 9:30 - aula 120 CDM, elaborati: 15:00) + 27 Gennaio (orale: 9:30). 8 Gennaio (scritto: 9:30, elaborati: 15:00) + 9 Gennaio (orale: 9:30). - 2014: 22 Dicembre (solo elaborati: 9:30); 26 Giugno (scritto: 9:30, elaborati: 15:00) + 27 Giugno (orale: 9:30); 14 Luglio (scritto: 9:30 - aula 209 CDM, elaborati: 15:00) + 15 Luglio (orale: 9:30); 31 Luglio (scritto: 9:30, elaborati: 15:00) + 1 Agosto (orale: 9:30); 16 Settembre (scritto: 9:30 - aula 120 CDM, elaborati: 14:30) + 17 Settembre (orale: 9:30)
9 Gennaio (scritto) + 10 Gennaio (orale); 5 Febbraio (scritto - ore 9:00) + 6 Febbraio (orale - ore 9:30); 26 Febbraio (scritto - ore 15:00) presso CDM aula 121 + 27 Febbraio (orale - ore 15:00) presso MICC. - 2013: 27 Giugno (scritto) + 28 Giugno (orale); 15 Luglio (scritto) + 16 Luglio (orale); 29 Luglio (scritto) + 30 Luglio (orale); 5 Settembre (scritto) + 6 Settembre (orale); 16 Settembre (scritto) + 17 Settembre (orale).
- 6 Marzo: ore 9.30 presso MICC in Viale Morgagni 65 (scritto) - 7 Marzo 92013 ore 9.30 presso MICC in Viale Morgagni 65 (orale)
- Date posticipate: 14 Febbraio 2013: ore 9.30 presso MICC in Viale Morgagni 65 (scritto) - 15 Febbraio 92013 ore 9.30 presso MICC in Viale Morgagni 65 (orale)
- 8 Gennaio 2013: ore 9.30 presso MICC in Viale Morgagni 65 (scritto) - 9 Gennaio 92013 ore 9.30 presso MICC in Viale Morgagni 65 (orale)
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
- 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.8 MB)
Materiale aggiuntivo: breve storia del C++, Wikipedia: programmazione orientata agli oggetti (IT), C++; Il sito web di Bjarne Stroustroup; convenzioni e stili nella scrittura 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.7 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.9 MB); come eseguire i programmi creati con Eclipse da progetti importati(0.6 M)
Materiale aggiuntivo: Wikipedia: Open/Closed Principle e Single responsibility principle; Il principio aperto/chiuso (IT); Operator overloading (Wikipedia); Operator overloading (completo e conciso); Guidelines for Overloading the + Operator; Java operator overload (discussione). - Ereditarietà (0.7 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 <<. - Coding: guida di stile (1.0 MB); Testing techniques (1 MB); Classi e oggetti: metodi di software engineering (0.6 MB)
Materiale aggiuntivo: Wikipedia: use case; CRC; UML class diagram. Coding guidelines: C++ Programming Style Guidelines, Google C++ Style Guide, Joint Strike Fighter air vehicle C++ coding standards for the system development and demonstration program (PDF) - Il compilatore C++ e la creazione di librerie(9 MB);
Materiale aggiuntivo: Program Library HOWTO; Shared objects for the object disoriented!; Beginner's Guide to Linkers - Constancy e casting (0.15 MB)
Materiale aggiuntivo: Uso di const; C++ FAQ: la const correctness. Casting: Type Casting. - Templates (0.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.5 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.6 MB)
Materiale aggiuntivo: RAII (Wikipedia); Using auto_ptr Effectively; Using auto_ptr to Handle Memory; auto_ptr Explained (PDF); Smart pointers (Wikipedia); Smart pointers in Boost, TR1, and C++x0; What is a smart pointer and when should I use one?; What's RAII all about ?; Using C++11’s Smart Pointers (PDF) - 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); Il design pattern observer nei videogame. - 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.
È 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:
- C++ Home
- Sutter’s Mill
- c++ truths
- C++ Soup!
- Standard C++
- Learning C++
- Antonio Gulli's coding playground
- The C++ Source
- Reddit C++
Lucidi e materiale anni precedenti:
- registro lezioni a.a. 2013 - 2014
- registro lezioni a.a. 2012 - 2013
- registro lezioni a.a. 2011 - 2012
- registro lezioni a.a. 2010 - 2011
- registro lezioni a.a. 2009 - 2010
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:
- http://www.bernreuther.net/martin/publications/tutorials/wxWindows/wxIntro/wxIntro.pdf
- Completa spiegazione del design pattern MVC.
- MVC con QT: descrizione completa.
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.
- http://zetcode.com/tutorials/wxwidgetstutorial/
- in generale anche: http://www.wxwidgets.org/docs/tutorials.htm
- Using Eclipse with pre-built wxWidgets libraries
- Developing for wxWidgets using Eclipse and the CDT
- Tool per costruire graficamente scheletri di applicazioni wxWidgets:
- wxCrafter
- wxFormBuilder
- DialogBlocks
- Codelite (IDE + wxCrafter)
- Tutorial su uso di QT con Eclipse (italiano): tutorial_qt_eclipse (PDF) - codice (zip)
- tutorial aggiuntivi: My first QT GUI application
- QT Examples and tutorials
- http://thelins.se/learnqt/tutorial/
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
- Getting Started With SDL
- An introduction to Event-Driven Programming
- SDL Tutorial Series - Part 3 - Your First Application - SDL Tutorial Series - Part 4 - How to Load and Display Images - SDL Tutorial Series - Part 5 - Dealing with Time - SDL Tutorial Series - Part 7 - Simple Keyboard Input using SDL
- Simple DirectMedia Layer: Gaming Platform for C++, Java, and More - un videogame in 560 righe di codice
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:
- 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 Eclipse Helios 3.6.2)
- In OSX si devono installare gli strumenti di programmazione a command line: tutorial
- Da OSX Mavericks non è più disponibile il debugger GDB. Si deve installare usando Macports o Homebrew. In alternativa si consiglia l'uso di XCode al posto di Eclipse.
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:
- Clion è un ambiente i sviluppo integrato multipiattaforma con licenza gratuita per gli studenti.
- Codelite - multipiattaforma, support Clang++ e LLDB (ottimo per OSX), creazione visuale di interfacce grafiche con wxWidgets
- Code::Blocks (disponibile in distribuzione che contiene il compilatore) - multipiattaforma
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
E. 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)
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 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)