Logo ČVUT
ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE
STUDIJNÍ PLÁNY
2019/2020

Pokročílé programování v C++

Přihlášení do KOSu pro zápis předmětu Zobrazit rozvrh
Kód Zakončení Kredity Rozsah Jazyk výuky
18PCP Z,ZK 4 2+2 česky
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 2019/2020:
Rozvrh není připraven
Rozvrh na letní semestr 2019/2020:
Rozvrh není připraven
Předmět je součástí následujících studijních plánů:
Platnost dat k 23. 9. 2019
Aktualizace výše uvedených informací naleznete na adrese http://bilakniha.cvut.cz/cs/predmet5251206.html