Laboratorio di tecnologie dell'informazione
Registro lezioni a.a. 2011-2012
8 Marzo 2012 - 2 ore:
Introduzione al corso
- Structured vs. OO approach
- 3 Key OO concepts: ADT, inheritance, polymorphism
- objects and classes
- il linguaggio C++: storia e paradigmi di programmazione
- "Hello world" example
Lucidi:
1-presentazione.pdf
2-introduction.pdf
9 Marzo 2012 - 3 ore:
Rivisitazione di "Hello world"
Differenze tra C e C++:
- namespace
- dichiarazione variabili locali
- parametri di default
- compilazione di "hello world" con Eclipse
- funzionamento del compilatore e linker
- linee guida di stile
Lucidi:
2b-hello world.pdf
2c-compiling-debugging hello world.pdf
2d-compiler_libraries.pdf
Esercizi:
programma suddiviso in più unità di compilazione
22 Marzo 2012 - 2 ore laboratorio:
Compilazione di Hello World
- uso base di Eclipse
- uso di include
- compilazione, interpretazione errori compilazione
- debug
23 Marzo 2012 - 3 ore:
Classi ed oggetti
- ADT
- Incapsulazione
- perché usare le classi
- Open-Closed Principle
- identificazione delle classi
- Single Responsibility Principle
- classi in C++
- definizione delle classi
- livelli di visibilità dei membri
- attributi
Lucidi:
3-classes and objects.pdf
29 Marzo 2012 - 2 ore laboratorio:
Esercizio su:
- dichiarazione classe
- uso classi, metodi e attributi
File:
simpleDandD.zip (contiene aggiornamenti fatti a lezione il giorno dopo)
30 Marzo 2012 - 3 ore
- metodo e passaggio parametri per riferimento
- overloading dei metodi
- creazione di oggetti
- costruttori e distruttori
- self reference (this)
Lucidi:
3-classes and objects.pdf
12 Aprile 2012 - 2 ore laboratorio:
- allocazione dinamica oggetti
- allocazione dinamica array oggetti
- operatore ==
File:
simpleDandD2.zip (contiene esempio esercizio e generatore mappe)
13 Aprile 2012 - 3 ore
Classi
- membri statici
- friends
Ereditarietà
- perché usare l'ereditarietà
- ereditarietà in C++
- livelli di accesso in ereditarietà
- ereditarietà e inclusione
- ereditarietà pubblica
- ereditarietà pubblica e privata: relazioni
- ereditarietà: costruttori e distruttori
- polimorfismo
- metodi virtuali
- distruttori virtuali
Lucidi:
3-classes and objects.pdf
4-inheritance.pdf
19 Aprile 2012 - 2 ore laboratorio:
- Creazione di gerarchie di classi
- Uso di puntatore a classe base
- Metodi virtuali
- Chiamata a metodo in classe base
File:
simpleDandD3.zip (contiene soluzione esercizi chiamata a costruttore classe base, implementazione Strategy per armi)
Compito:
- Implementare una classe che modelli un dado e sia usabile per creare dadi a più facce. Usare questa classe ogni volta che serve la generazione di un numero casuale nel gioco.
20 Aprile 2012 - 3 ore
- Name hiding
- RTTI
- dynamic_cast
- typeid
- Ereditarietà multipla
- Problema del diamante
- Ereditarietà virtuale
- Classi astratte
- distruttore puramente virtuale
- Esempio di metodi virtuali, classe astratta ed ereditarietà multipla e privata: il Class Adapter
Tecniche di ingegneria del software
- use case
- CRC
- diagrammi UML di classe
Lucidi:
4-inheritance.pdf
3b-classes and objects-software engineering methods.pdf
26 Aprile 2012 - 2 ore laboratorio:
Esercizio creazione classi astratte
Esercizio ereditarietà multipla e virtuale
File:
MultipleInheritance_Example.zip
3 Maggio 2012 - 2 ore laboratorio:
Deep copy/shallow copy
static_cast e dynamic_cast
Esercizio su classe con membri statici
Esercizio su costruttore per copia e operatore di assegnazione
Esercizio su refactoring (Extract method)
Esercizio su Covariant return type
File:
simpleDandD4.zip (risultati di tutti gli esercizi)
Lucidi:
4 Maggio 2012 - 3 ore
Template:
- funzioni e classi
Const-correctness
Cast
- const_cast
- static_cast
- dynamic_cast
- reinterpret_cast
Lucidi:
5-templates.pdf
4b-const and cast.pdf
10 Maggio 2012 - 2 ore laboratorio:
Esercitazione su classi e funzioni template
File:
TemplateFunzione.zip (Funzioni template)
Esercizio_Template (Classe Template)
11 Maggio 2012 - 3 ore:
STL
- introduzione ad STL
- concetti base di STL: container, iteratori ed algoritmi
- tipi di container
- iteratori
- algoritmi
- container sequenziali: vector, deque, list
- container associative: map, set, multimap, multisite
- function objects
- espressioni lambda
Lucidi:
6-stl.pdf
17 Maggio 2012 - 2 ore laboratorio:
- esercitazione su STL
- esercitazione su vector
- esercitazione su map
File:
TestSTLMap.zip
BaseVectorExample.zip
TestSTLVector.zip
SimpleDandD5.zip
18 Maggio - 3 ore
- eccezioni
- gestione risorse:
- RAII
- auto_ptr
- unique_ptr
- Boost mart pointers
Lucidi:
7-exceptions.pdf
8-resource management.pdf
24 Maggio 2012 - 2 ore: laboratorio
- esercitazione su eccezioni e string stream
File:
Compito:
Usare l'esempio dell'esercizio per estendere la classe di eccezioni da impiegare nel SimpleDandD, e fare in modo di lanciare eccezioni apporpriate nel caso si cerchi di far combattere un personaggio senza armi.
25 Maggio 2012 - 3 ore:
- Design patterns
- idiomi
- Adapter
- Class Adapter
- Object Adapter
31 Maggio 2012 - 2 ore: laboratorio
- Esercizi su Adapter:
- Class adapter
- Object adapter
File:
1 Giugno 2012 - 3 ore:
- Observer
- push e pull
- Linee guida scrittura codice
Lucidi:
10-design_pattern-observer.pdf
3c-coding style guidelines.pdf
7 Giugno 2012 - 2 ore laboratorio:
Esercitazione su Observer
File:
TestObserverPull2.zip (migliore di pull1)
TestObserverPush.zip (cosa accade se si deve modificare il subject concreto ?)
8 Giugno 2012 - 3 ore:
Design pattern e idiomi creazionali
- Simple Factory
- Factory Method
- Abstract Factory
- Singleton
Lucidi:
11-design_pattern-factory-singleton.pdf
File:
FINE CORSO