Laboratorio di tecnologie dell'informazione
Registro lezioni a.a. 2013-2014
Registro esercitazioni a.a. 2013-2014
5 Marzo 2014 - 3 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:
Scrivere un programma con una funzione che saluta una persona il cui nome è passato com std::string. Dare un valore di default al nome. Il codice deve essere diviso in un file .cpp contenente la funzione main ed un .h+.cpp che contiene la funzione di saluto.
Possibile soluzione:
programma suddiviso in più unità di compilazione
10 Marzo 2014 - 3 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
- attributi
- metodo e passaggio parametri per riferimento
Lucidi:
3-classes and objects.pdf
Esercizi:
- Scrivere un programma che invoca una funzione sum che riceve 4 argomenti, somma i primi due argomenti (interi), rende tale somma attraverso il terzo argomento e rende un booleano attraverso il valore di ritorno nel caso la somma superi un valore di soglia passato attraverso il quarto argomento.
- Scrivere una classe di nome Person con tre attributi (privati):name e surname in grado di contenere stringhe e age di tipo intero. Creare metodi getter/setter per ogni attributo. Creare un metodo di nome createSalute che rende una stringa composta da "Hello " seguito da nome e cognome. Scrivere un programma che istanzi una variabile di tipo Person, imposti il valore del nome a "Bjarne", il cognome a "Stroustrup" e l'età a 63. Si invochi il metodo createSalute e si usi per stampare un saluto alla persona.
Soluzioni:
12 Marzo 2014 - 3 ore:
Classi ed oggetti
- attributi
- metodo e passaggio parametri per riferimento
- overloading dei metodi
- overloading di operatori
- creazione di oggetti
- costruttori
- distruttori
- self reference (this)
Lucidi:
Esercizi:
Si scriva una classe "Character" con 4 attributi:
hp - intero
x, y - interi
category - stringa
Si scrivano i costruttori:
senza argomenti, con inizializzazione a valori di default con uso di lista di inizializzazione (hp 10, coordinate 0,0 e category "knight")
con 4 argomenti, di cui il primo (hp) non ha valori di default, gli altri valori di default sono quelli del costruttore precedente.
Si scriva un metodo move(int x, int y) che modifica il valore degli attributi. Si consideri l'uso di "this", dato l'uso dello stesso nome per gli argomenti che per gli attributi.
Si scriva una funzione test(Character c) che muove il personaggio alle coordinate 3, 4.
Si invochi la funzione passando sia un oggetto di tipo Character allocato staticamente che con "test(4)". Modificare il codice della classe Character per evitare la conversione implicita che accade nella chiamata "test(4)".
Modificare il passaggio degli argomenti della funzione test per poter modificare la posizione del personaggio allocato in main.
Soluzione:
17 Marzo 2014 - 3 ore:
Classi ed oggetti
- membri statici
- friends
- SRP
Linee guida di stile per la programmazione
Lucidi:
3-classes and objects.pdf
3b-coding style guidelines.pdf
19 Marzo 2014 - 3 ore:
Sistemi di test e validazione del software
- Unit test
Funzionamento del compilatore e linker
- la compilazione e linking
- librerie statiche
- librerie dinamiche
Lucidi:
2d-compiler_libraries.pdf
3c-testing techniques.pdf
24 Marzo 2014 - laboratorio 3 ore:
- Creazione di classi
- Istanziazione di oggetti
- Invocazione di metodi
Esercizi:
completare il codice scritto in laboratorio (file .zip):
- implementando il metodo fight;
- aggiornando i punti ferita del nemico con cui si combatte, modificando il metodo setHP per fare in modo che stampi se i punti ferita sono diventati <0
- creando un file con funzione main che crei due personaggi, assegnadogli due armi e facendoli combattere.
Soluzione:
26 Marzo 2014 - 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
Lucidi:
31 Marzo 2014 - 3 ore laboratorio
- Creazione di gerarchie di classi
- Uso di puntatore a classe base
- Metodi virtuali
Esercizi:
2 Aprile 2014 - 3 ore:
Ereditarietà:
- distruttori virtuali
- Name hiding
- RTTI
- dynamic_cast
- typeid
Const-correctness
Lucidi:
7 Aprile 2014 - 3 ore laboratorio:
Ereditarietà:
- classi base astratte
- RTTI
- array di puntatori a classe base
- deep vs. shallow copy
Esercizi:
- implementare il metodo printMap in GameMap.cpp
- creare Tile, aggiungerle a mappa del gioco e clonare la mappa in una seconda mappa in game.cpp
- cambiare l'arma degli oggetti Knight nell'array di puntatori a classe base teamHero in game.cpp
Materiale:
9 Aprile 2014 - 3 ore:
Ereditarietà:
- Ereditarietà multipla
- Problema del diamante
- Ereditarietà virtuale
Tecniche di ingegneria del software
- use case
- CRC
- diagrammi UML di classe
Cast
- const_cast
- static_cast
- dynamic_cast
- reinterpret_cast
Lucidi:
4b-classes and objects-software engineering methods
14 Aprile 2014 - 3 ore laboratorio:
- design classi
- uso enum
- uso metodo clone virtuale e Covariant return type
- ereditarietà multipla
Materiale:
16 Aprile 2014 - 3 ore:
- Programmazione generica: motivazioni
- Template: funzioni e classi
Lucidi:
28 Aprile 2014 - 3 ore laboratorio:
- Esercitazione su classi template:
- Linked list template
Materiale: classe template per lista linkata e classe template per hash table (non fatta a lezione)
30 Aprile - 3 ore:
- introduzione ad STL e C++11
- concetti base di STL: container, iteratori ed algoritmi
- inizializzazione uniforme
- tipi di container
- iteratori
- algoritmi
- container sequenziali: vector, deque, list
- container associative: map, set, multimap, multiset
- function objects
- lambda expressions
Lucidi:
5 Maggio 2014 - 3 ore laboratorio:
- Esercitazione su STL
- vector
- multimap e functor
Materiale:
Esercizi:
- usare una list<> al posto di vector<> nell'esercizio STL_vector2
- modificare STL_map2 per poter cercare più elementi che abbiano la stessa data (leggere il manuale STL di find per capire come fare - in particolare guardare equal_range)
7 Maggio 2014 - 2 ore:
- Eccezioni
Materiale:
12 Maggio 2014 - 3 ore laboratorio
- esercizio su map e librerie standard C++
- esercitazione su eccezioni e string stream
Esercizio:
- estendere la classe SimpleException data nel materiale, es. aggiungendo un nuovo attributo e fare in modo che la funzione test in main.cpp la lanci nel caso l'argomento sia pari. Gestire appropriatemente blocco catch e dichiarazione di eccezioni lanciate dalla funzione.
Materiale:
14 Maggio 2014 - 2 ore:
- gestione risorse
- RAII
- Design patterns
- idiomi
- Class Adapter
- Object Adapter
Materiale:
19 Maggio 2014 - 2 ore laboratorio
- Esercitazione su RAII
- Esercitazione su class adapter
21 Maggio 2014 - 3 ore:
- gestione risorse:
- shared_ptr
- unique_ptr
- Observer
- push e pull
Lucidi:
8-resource management
10-design_patterns-observer
26 Maggio 2014 - 3 ore laboratorio:
- Esercizi su observer
- push e pull
Esercizio: estendere le classi Observer (astratte e concrete) fornite nel materiale per fare in modo di potersi attaccare e scollegare dall'observer a piacimento (e.g. implementare due metodi: void attach() e void detach()).
Materiale:
28 Maggio 2014 - 3 ore:
- Design pattern e idiomi creazionali
- Simple Factory
- Factory Method
- Abstract Factory
- Singleton
Lucidi:
11-design_pattern-factory-singleton
4 Giugno 2014 - 3 ore:
Ripasso del programma da ADT a eccezioni
9 Giugno 2014 - 2 ore: laboratorio
- Esercizi su pattern creazionali:
- Factory Method
- Abstract Factory
Esercizio: estendere il Factory Method del programma D&D per creare vari tipi di armi per Knight. Aggiungere metodo per creare mostri.
Estendere le classi dell'esercizio su Abstract Factory per aggiungere argomenti a finestra e bottoni.
Materiale: