Programmazione
Registro lezioni a.a. 2015-2016
Registro esercitazioni a.a. 2015-2016
3 Marzo 2016 - 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 - CLion.pdf
- 2c-compiling-debugging hello world - Eclipse.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:
9 Marzo 2016 - 4 ore laboratorio:
Introduzione a CLion
- creazione di progetti C++ e file header e sorgenti
Creazione di programma suddiviso in più unità di compilazione
Uso di argomenti di funzione con valori di default
File:
10 Marzo 2016 - 3 ore:
Classi ed oggetti
- ADT
- Incapsulamento
- perché usare le classi
- Open-Closed Principle
- identificazione delle classi
- classi in C++
- definizione delle classi
- livelli di visibilità dei membri
- attributi
- metodi
- metodo e passaggio parametri per riferimento
- overloading dei metodi
Lucidi:
16 Marzo 2016 - 4 ore laboratorio:
- Dichiarazione e definizione di classi
- Istanziazione di oggetti
- Invocazione di metodi
- Generazione di getter/setter
- Uso del debugger
File:
Esercizi:
- Gestire il caso in cui gli hitPoints di un Game Character diventino negativi. Fare in modo che il valore minimo sia 0.
- Fare in modo che il danno di un'arma sia raddoppiato nel caso l'attributo magic sia vero.
17 Marzo 2016 - 3 ore:
- Classi ed oggetti
- overloading di operatori
- creazione di oggetti
- costruttori
- distruttori
- self reference (this)
- membri statici
- SRP
Lucidi:
23 Marzo 3016 - 4 ore laboratorio:
- creazione di classi
- costruttori non di default e con lista di inizializzazione
- composizione tra classi
- allocazione dinamica oggetti
- passaggio argomenti per riferimento
- Costruttori explicit
- metodi e attributi statici
File
31 Marzo 2016 - 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:
6 Aprile 3016 - 4 ore laboratorio:
- Creazione di gerarchie di classi
- Uso di puntatore a classe base
- Metodi virtuali
File
7 Aprile 2016 - 3 ore:
Ereditarietà
- distruttori virtuali
- Name hiding
- classi base astratte
Linee guida di stile per la programmazione
Lucidi:
13 Aprile 3016 - 4 ore laboratorio:
- Classi astratte
- Array di puntatori, riferimenti e polimorfismo
- Metodi puramente virtuali
File
14 Aprile 2016 - 3 ore:
Ereditarietà
- RTTI
- dynamic_cast
- typeid
- Ereditarietà multipla
- Problema del diamante
- Ereditarietà virtuale
Const-correctness
Cast
Lucidi:
20 Aprile 2016 - 4 ore laboratorio:
- RTTI
- Ereditarietà multipla
- Ereditarietà virtuale e problema del diamante
- Covariant return type
Lucidi:
21 Aprile 2016 - 3 ore:
Programmazione generica:
- Motivazioni
- Template: funzioni e classi
-
- specializzazione
Lucidi:
27 Aprile 2016 - 4 ore laboratorio:
Funzione template
Classe template
Uso di metodi const
28 Aprile 2016 - 3 ore:
STL
- 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:
4 Maggio 2016 - 4 ore laboratorio:
- Vector STL
- Algoritmi STL
- auto
- range for
5 Maggio 2016 - 3 ore:
Eccezioni
- gestione eccezioni
- classi eccezione
- eccezioni e distruttori
- buone pratiche
Tecniche di ingegneria del software
- use case
- CRC
- diagrammi UML di classe
Lucidi:
11 Maggio 2016 4 ore laboratorio:
Multimap STL
- functor
- operator
12 Maggio 2016 - 3 ore:
- gestione risorse
-
- RAII
- smart pointers
-
- unique_ptr
- shared_ptr
- weak_ptr
- Design patterns
- idiomi
- Class Adapter
- Object Adapter
Lucidi:
18 Maggio 2016 - 4 ore laboratorio:
- Esercitazione class adapter
19 Maggio 2016 - 3 ore lezione:
- Observer
- push e pull
- C++11
- move semantics e &&
Lucidi:
25 Maggio 2016 - 4 ore laboratorio:
- Observer pull
26 Maggio 2016 - 3 ore lezione:
- Design pattern e idiomi creazionali
- Simple Factory
- Factory Method
- Abstract Factory
- Singleton
11-design_pattern-factory-singleton
30 Maggio 2016 - 2 ore laboratorio
Esercizi su pattern creazionali:
- Factory Method
- Abstract Factory
Uso di enum
31 Maggio 2016 - 2 ore laboratorio
esercitazione su eccezioni e string stream
- classi di eccezione derivate da classi di eccezione della libreria standard del C++
- uso delle eccezioni