Laboratorio di tecnologie dell'informazione
Registro lezioni a.a. 2012-2013
11 Marzo 2013 - 4 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
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:
1-presentazione.pdf
2-introduction.pdf
2b-hello world.pdf
2c-compiling-debugging hello world.pdf
Esercizi:
programma suddiviso in più unità di compilazione
14 Marzo 2013 - 2 ore:
Classi ed oggetti
- ADT
- Incapsulazione
- perché usare le classi
- Open-Closed Principle
- identificazione delle classi
- classi in C++
- definizione delle classi
- livelli di visibilità dei membri
Lucidi:
3-classes and objects.pdf
18 Marzo 2013 - 4 ore laboratorio:
Esercitazione su disegno e scrittura classe
Istanziazione oggetti
Invocazione metodi
Passaggio argomenti per riferimento
Esercizi:
programma+classe
2 Marzo 2013 - 2 ore:
Classi ed oggetti
- attributi
- metodo e passaggio parametri per riferimento
- overloading dei metodi
- overloading degli operatori
- creazione di oggetti
- costruttori
Lucidi:
3-classes and objects.pdf
25 Marzo 2013 - 4 ore laboratorio:
Esercitazione su costruttore e classi:
- costruttore
- passaggio parametri default
- composizione classi
- allocazione dinamica oggetti
Esercizio per casa: creazione classe Dado e overloading costruttore
Esercizi (risolti):
4 Aprile 2013 - 2 ore
Classi
- distruttori
- self reference (this)
- membri statici
- friends
- SRP
Lucidi:
3-classes and objects.pdf
Esercizi:
programma (uso membri statici e funzione friend)
8 Aprile 2013 - 3 ore
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:
Esercizi:
- Nel seguente programma è mostrata l'implementazione dell'operatore == per la classe Weapon. Fornire un'implementazione per la classe Character.
Nota: anche l'arma del personaggio deve essere considerata nella comparazione. - Trasformare la classe Dice in modo tale che il metodo di lancio del dado sia statico e che l'inizializzazione del generatore di numeri casuali venga effettuata sul primo lancio e, a seguire, ogni tre lanci.
- Creare due classi: Knight e Monster, che estendono Character.
- Rendere il metodo fight della classe base virtuale.
- Monster deve avere due attributi: treasure e fear (interi), Knight aggiunge l'attributo level (intero).
- Nell'override del metodo virtuale fight nella classe Knight, se l'oggetto ha attributo level maggiore di una soglia far effettuare un secondo attacco.
- Nell'override del metodo virtuale fight nella classe Monster, se l'oggetto ha attributo fear maggiore di una soglia far aumentare il danno effettuato in caso di attacco effettuato con successo.
15 Aprile 2013 - 4 ore laboratorio:
Esercizi su creazione sottoclassi e polimorfismo
- Creazione di gerarchie di classi
- Uso di puntatore a classe base
- Metodi virtuali
- allocazione dinamica array oggetti
- Uso di metodi virtuali e polimorfismo
Esercizi:
programma (con soluzioni a esercizi precedenti)
18 Aprile 2013 - 2 ore
Ereditarietà:
- Classi astratte
- distruttore puramente virtuale
- Name hiding
- RTTI
- dynamic_cast
- typeid
- Ereditarietà multipla
- Problema del diamante
- Ereditarietà virtuale
- esempio di metodi virtuali, classe astratta ed ereditarietà multipla e privata: il Class Adapter
Lucidi:
Esercizi:
- Riprendere il codice dell'ultimo laboratorio e:
- trasfromare la classe Character in classe astratta
- creare una classe Mage derivata da Character e creare un metodo specifico doMagic()
- inserire un oggetto di tipo Mage nell'array di nemici e scorrendo sull'array far invocare il metodo doMagic() quando è possibile (usare dynamic_cast)
- La soluzione sarà disponibile da lunedì prossimo.
22 Aprile 2013 - 4 ore
Tecniche di ingegneria del software
- use case
- CRC
- diagrammi UML di classe
Const-correctness
Cast
- const_cast
- static_cast
- dynamic_cast
- reinterpret_cast
Funzionamento del compilatore e linker
- la compilazione e linking
- librerie statiche
- librerie dinamiche
4b-classes and objects-software engineering methods
4c-const and cast
2d-compiler_libraries
29 Aprile 2013 - 3 ore laboratorio:
- Deep copy/shallow copy
- Esercizio su costruttore per copia e operatore di assegnazione
- Esercizio su refactoring (Extract method)
- Esercizio creazione classi astratte
Esercizi:
da aggiungere...
2 Maggio 2013 - 2 ore
- Template: funzioni e classi
6 Maggio 2013 - 2:30 ore laboratorio:
Esercitazione su classi e funzioni template
Esercizi:
- funzione e classe
- Modificare la classe Monster per poterla usare nella funzione template maxTemplate. Un Monster è più grande dell'altro se il prodotto di HP per armor è maggiore.
9 Maggio 2013 - 2 ore
- 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, multiset
- function objects
Lucidi:
6-stl
13 Maggio 2012 - 3.5 ore laboratorio:
- esercitazione su STL
- esercitazione su vector/list
- esercitazione su multimap
Esercizi
Esercitazione a casa:
- Riscrivere l'esercizio di creazione agenda in modo tale che gli elementi del promemoria siano ricercabili all'interno di una multimap sulla base della data. Suggerimenti: creare una classe Data per gestire la scadenza del promemoria, creare alternativamente un functor di comparazione o aggiungere un operatore < alla classe Data.
- Possibile soluzione dell'esercizio (con entrambi i metodi)
16 Maggio 2013 - 2 ore
- eccezioni
- linee guida di stile per la programmazione
Lucidi:
7-exceptions
3b-coding style guidelines
20 Maggio 2012 - 3 ore
- gestione risorse:
- RAII
- shared_ptr
- weak_ptr
- unique_ptr
- Boost smart pointers
- Design patterns
- idiomi
- Class Adapter
- Object Adapter
Lucidi:
8-resource management
9-design_patterns-adapter
27 Maggio 2013 - 3 ore: laboratorio
- esercitazione su eccezioni e string stream
- Esercitazione su class adapter
Esercizi
- Eccezioni (differenze rispetto a quanto fatto in laboratorio: è stata aggiunta una gerarchia di eccezioni, le eccezioni non sono collegate ad una classe Data).
- Class Adapter
- D & D game con uso di adapter
Esercizi per casa:
- Riscrivere l'adapter come Object Adapter. La soluzione verrà resa disponibile nel fine settimana.
30 Maggio 2013 - 2 ore
- Observer
- push e pull
3 Giugno 2013 - 3 ore laboratorio:
- Esercizi su observer
Esercizi:
6 Giugno 2013 - 2 ore:
- Design pattern e idiomi creazionali
- Simple Factory
- Factory Method
- Abstract Factory
- Singleton
11-design_pattern-factory-singleton
10 Giugno 2013 - 3 ore: laboratorio
- Esercizi su pattern creazioni
Esercizi:
CONCLUSIONE DEL CORSO