Pokročílé programování v C++
Kód | Zakončení | Kredity | Rozsah | Jazyk výuky |
---|---|---|---|---|
18PCP | Z,ZK | 4 | 2P+2C | česky |
- Garant předmětu:
- Přednášející:
- Miroslav Virius
- Cvičící:
- Miroslav Virius
- Předmět zajišťuje:
- katedra softwarového inženýrství
- Anotace:
-
Předmět se zabývá problematikou kopírování a stěhování instancí, virtuálního dědění, variadických šablon, šablonového metaprogramování, tvorby šablonových knihoven, nástroji pro práci s datovými typy v době překladu a pokročilou diagnostikou šablonových konstrukcí, využitím podprocesů (paralelizace výpočtu), práce s národním prostředím (lokalizace a internacionalizace programu), nástroji pro pokročilé matematické a technické výpočty a nástroji pro práci se souborovým systémem.
- Požadavky:
-
Znalost programovacího jazyka C++ v rozsahu předmětu Programování v C++1, 2.
- Osnova přednášek:
-
1. Stěhování instancí
2. Virtuální dědění
a. Syntaktická pravidla, význam
b. Struktura instance
c. Příklad
3. Šablonové metaprogramování
a. Výpočetní úplnost aparátu šablon
b. Zobrazení typu na typ, hodnoty na typ
c. Rozhodování, náhrada cyklu
d. Využití, příklady
4. Variadické šablony (šablony s proměnným počtem parametrů) I.
a. Syntaktická pravidla, balík parametrů
b. Pravidla rozvoje balíku
c. Příklady
5. Variadické šablony II.
a. Využití šablonového metaprogramování pro variadické šablony
b. Nástroje pro diagnostiku
c. Příklady
6. Práce s datovými typu v době překladu
a. Deklarace static_assert
b. Hlavičkový soubor type_traits
c. Nástroje pro prověření vlastností parametrů šablony
d. Nástroje pro transformaci datových typů v době překladu
e. Příklady
7. Knihovna kontejnerů a algoritmů
a. Posloupnosti
b. Asociativní kontejnery
c. Kontejnerům podobné třídy
d. Algoritmy pro zpracování kontejnerů
8. Přístup k souborovému systému, pokročilé nástroje pro vstup a výstup
a. Práce s cestou souboru
b. Manipulace se soubory
c. Rozšířené manipulátory a formátování výstupu
d. Příklady
8. Podprocesy (vlákna) I
a. Podproces a jeho stavy, třída std::thread
b. Základní operace s podprocesy
c. Synchronizace přístupu k datům
d. Příklady
9. Podoprocesy (vlákna) II
a. Model fungování paměti
b. Atomické typy
c. Asynchronní zpracování
d. Příklady
10. Práce se znakovými řetězci
a. Třída std::basic_string
b. Pohled na řetězec (třída std::basic_string_view)
c. Nástroje pro práci s regulárními výrazy
d. Regulární výrazy podle vybrané specifikace
e. Příklady
11. Lokalizace a internacionalizace
a. Třída std::locale
b. Nastavení národního prostředí
c. Práce se znaky, s datem, časem, abecední řazení
d. Příklady
12. Matematické výpočty
a. Třída std::valarray a její využití pro výpočty
b. Generátory pseudonáhodných čísel a jejich využití
c. Další nástroje
d. Příklady
13. Opakování a příklady
- Osnova cvičení:
-
1.Úvodní cvičení - organizační záležitosti, používané nástroje, opakování potřebných znalostí. Virtuální dědění.
2.Šablonové metaprogramování
a.Základní konstrukce.
b.Optimalizace vybraných algoritmů pomocí šablonového metaprogramování.
3.Variadické šablony (šablony s proměnným počtem parametrů) I.
a.Příklady použití rozvoje balíku parametrů
4.Variadické šablony II.
a.Využití šablonového metaprogramování pro variadické šablony
b.Implementace vybraných funkcí pomocí variadických šablon
c.Využití diagnostických nástrojů v šablonách
5.Práce s datovými typu v době překladu
a.Použití deklarace static_assert
b.Odvození společného typu, odvození základního typu, prověření, zda předaný typ splňuje požadavky, další operace s datovým typem předaným jako parametr šablony
6.Kontejnery a algoritmy
a.Zpracování posloupnosti pomocí algoritmů ze standardní knihovny
b.Příklady využití asociativních kontejnerů a jejich zpracování
7.Přístup k souborovému systému, pokročilé nástroje pro vstup a výstup
a.Implementace programu pro manipulaci se soubory
8.Podprocesy (vlákna) I
a.Podproces a jeho stavy, třída std::thread
b.Jednoduché programy využívající podprocesy, příklad sporu (race condition) a použití synchronizace přístupu k datům
9.Podoprocesy (vlákna) II
a.Příklady použití atomických typů a asynchronního zpracování
10.Práce se znakovými řetězci
a.Formátovací operace
b.Využití třídy std::basic_string_view
c.Práce s regulárnímu výrazy
11.Lokalizace a internacionalizace
a.Implementace filtru SORT (využití abecedního řazení, lokálně závislého formátování a dalších nástrojů)
12.Matematické výpočty
a.Implementace třídy reprezentující matici s možností práce s řádkami, sloupci a jinými ?řezy?
b.Použití pseudonáhodných čísel k jednoduchým simulacím
13.Prezentace zápočtových programů
- Cíle studia:
-
Studenti získají hluboké znalosti o pokročilých nástrojích v programovacím jazyce C++ a o doporučených technikách pro jejich využití. Jedná se o nástroje, které jsou součástí standardu programovacího jazyka C++, ale pokryty v základním kursu. Tyto nástroje jsou nezbytné pro vytváření pokročilých knihoven v tomto jazyce zaměřených na nejen na výkon, ale i na kvalitu návrhu a architektury.
- Studijní materiály:
-
1.1. Virius, Miroslav: Programovací jazyk C++, 2. díl. Praha: ČVUT 2016. ISBN 978-80-01-06050-6.
2.M. Virius: Programovací jazyk C++, 3. díl. Praha: ČVUT 2017. ISBN 978-80-01-06089-6.
Studijní pomůcky:
?Počítač s operačním systémem, klávesnicí a myší
?Vývojové prostředí obsahující překladač jazyka C++ vyhovující standardu ISO 14882:2011 s aktualizacemi označovanými C++14 nebo novější
- Poznámka:
- Rozvrh na zimní semestr 2023/2024:
- Rozvrh není připraven
- Rozvrh na letní semestr 2023/2024:
- Rozvrh není připraven
- Předmět je součástí následujících studijních plánů:
-
- Aplikace softwarového inženýrství (volitelný předmět)
- Aplikace informatiky v přírodních vědách (volitelný předmět)
- Matematické inženýrství (volitelný předmět)
- Kvantové technologie (volitelný předmět)