C++ – Návrhové vzory a idiomy (CPP3)
Programování, C, C++
Moderní C++ nabízí mnoho způsobů jak psát znovupoužítelné komponenty, které můžeme propojovat pomocí rozhraní. Na jedné implementuje objektově orientované programování s dědičností a polymorfismem. Na druhé straně zvládá spoustu věcí vyřešit v době kompilace.
Vedle klasických návrhových vzorů tak můžeme v C++ pozorovat celou řadu ustálených idiomů. Posledních několik verzí pak výrazně ulehčuje psaní kódu, který je srozumitelný a zároveň umožňuje efektivní využití hardware díky optimalizaci v době sestavování programu.
Kurz je aktualizovaný na standardy C++20, C++23 a C++26. Pokud jste nuceni používat starší verze C++, kurz tomu lze po dohodě přizpůsobit.
TOTO ŠKOLENÍ VÁM POMŮŽE:
- Projít společně známé návrhové vzory a vyzkoušet si vybrané z nich v C++
- Podívat se na specifické postupy, návrhové vzory a idiomy v jazyce C++
- Naučit se rozlišovat, kdy které ze vzorů dává smysl nasadit v praxi
- Umět si dávat pozor na nadužívání návrhových vzorů a overengineering
KDO BY SE MĚL KURZU ZÚČASTNIT?
- Vývojáři aktivně pracující na softwarových projektech a produktech
- Programátoři pracující na všech druzích software včetně embedded
- Zájemci o softwarový design a návrhové vzory jako stavební bloky
- Také všichni vývojáři, kteří se chystají na testování software
Privátní školení a termíny na míru
Specifičnost tohoto školení a nízký zájem jednotlivců neumožňuje pro tento kurz vypisovat veřejné termíny. Tento kurz nabízíme pouze jako uzavřené privátní školení. Obsah, délka a termíny kurzů budou vytvořeny podle vašich specifických potřeb.
Cenovou nabídku vám rádi připravíme na základě vašich požadavků a cílů zaslaných e-mailem nebo zadaných prostřednictvím poptávkového formuláře. Cena privátního školení vychází z náročnosti požadované obsahové náplně školení, časového rozsahu a celkového počtu přihlášených osob.
KDE A KDY KURZ PROBÍHÁ?
Kontaktujte nás
S námi
máte na výběr: Přijďte na
kurz osobně do naší učebny, nebo se ke kurzu
připojte online. Pokud preferujete online formu, uveďte prosím do poznámky v objednávce "Připojím se virtuálně".
Více informací k hybridní formě školení
naleznete zde.
Náplň kurzu:
Skrýt detaily
-
Srozumitelný a udržitelný kód psaný pro lidi
-
Využíváme známé postupy a návrhové vzory
-
Popisujeme software pomocí komponent a chování
-
Oddělujeme chování od detailů implementace
-
Objektově orientovaný návrh software
-
Program složený ze spolupracujících komponent
-
Komponenty mají přiřazené úkoly (responsibilities)
-
Lze přemýšlet o jednotlivých komponentách (reason)
-
Klasické objektově orientované programování
-
Komponenty reprezentujeme pomocí instancí tříd
-
Instance definuje stav a vztahy komponenty
-
Třída definuje chování a rozhraní komponenty
-
Dědičnost a náhrada metod předka
-
Úprava chování komponenty náhradou metod
-
Návrhový vzor šablona (template)
-
Statická implementace v moderním C++ (CRTP)
-
Opakovaná použitelnost jednou napsaného kódu
-
Sdílení obecného kódu pomocí dědičnosti
-
Kompozice objektů z hotových stavebních bloků
-
Generické datové typy a algoritmy
-
Oddělení rozhraní a konkrétní implementace
-
Abstraktní třídy jako definice rozhraní
-
Zaměnitelnost implementací za běhu (dynamický polymorfismus)
-
Návrhový vzor strategie (strategy)
-
Závislosti mezi komponentami v C++
-
Vlastnictví (RAII), odkazování a propůjčování
-
Ukazatele, reference a polymorfismus
-
Interakce mezi objekty, volání metod
-
Nástroje generického programování
-
Kompozice pomocí generických šablon
-
Návrhový vzor politika (policy)
-
Omezení variability na dobu kompilace
-
Principy dobrého softwarového designu
-
Nezávislost komponent a lokalizace změn v kódu (SRP)
-
Závislost na rozhraní, ne implementaci (DIP)
-
Uzavřenost kódu vůči potřebám změny při rozšiřování (OCP)
-
Výměna chování komponenty za běhu
-
Stavový stroj a návrhový vzor stav (state)
-
Moderní implementace pomocí
std::variant
-
Rozdíly od klasického stavového stroje (state machine)
-
Propojování rozhraní pomocí spojovacích prvků
-
Oddělení odlišných domén (bridge)
-
Překlenutí rozdílných rozhraní (adapter)
-
Zpřístupnění specializovaného rozhraní (facade)
-
Řetězení pomocí jednoho rozhraní
-
Přidání chování do hotového systému (decorator)
-
Řetězení možných handlerů (chain of responsibility)
-
Zajištění a řízení přístupu k objektům (proxy)
-
Lineární datové struktury a sekvence
-
Procházení datových struktur (iterátor)
-
Rozlišení spojového seznamu a řetězu
-
Zakončení bez nulového ukazatele (null object)
-
Kompozice složitějších objektů a komponent
-
Větvení podle konkrétního typu (visitor)
-
Stromová struktura objektů (composite)
-
Řešení v kombinaci
std::variant a std::visit
-
Vytváření různorodých typů objektů
-
Továrna na objekty všeho druhu (factory)
-
Abstraktní továrna na objekty (abstract factory)
-
Použití lambdy a
std::function pro registraci typů
-
Objekty o jedné jediné instanci
-
Vytvoření jediné instance v moderním C++ (singleton)
-
Správa globálních prostředků
-
Stavová komunikace s operačním systémem
-
Vícekrokové vytváření objektů
-
Stavitelský objekt jako mezikrok (builder)
-
Metody pro úpravu stavitele a finální build
-
Rozdělení stavitele do více fází
-
Signalizace a zpracování událostí
-
Centrální zodpovědná komponenta (mediator)
-
Registrace zájemců o události (observer)
-
Signály s šablonami a lambdami (signals & slots)
-
Generování, streamování a líné vyhodnocování
-
Zpracování sekvencí a pipelining (iterators, views)
-
Používání fronty zpráv (message queue)
-
Generování pomocí
std::generator
-
Reprezentace datových změn
-
Popis konkrétní úpravy (transaction, command)
-
Sekvence následných změn (journal)
-
Použití minijazyka či bajtkódu (interpreter)
-
Uložení a obnovení stavu
-
Vytváření snímků stavových dat (snapshot, memento)
-
Práce s historií získaných snímků (history, recovery)
-
Kombinace snapshotů a transakcí (incremental backup)
-
Optimalizace práce s daty
-
Datové struktury s instantními snapshoty (copy-on-write)
-
Sdílení víceméně neměnných parametrů (flyweight)
-
Klonování objektů a „rule of zero“ (clone, prototype)
-
Předpokládané znalosti:
-
Dobrá znalost programování v jazyce C++
-
Doporučený předchozí kurz:
-
C++ – Metaprogramování a výkonné aplikace (CPP5)
-
Doporučený následný kurz:
-
C++ – Vlákna, korutiny a asynchronní I/O (CPP4)
-
Časový rozvrh:
-
4 dny (9:00hod. - 17:00hod.)
Vybrané zákaznické reference
RETIA, a.s., Radek P.
C++ – Návrhové vzory a idiomy (
CPP3)
"Zkoumání problematiky návrhových vzorů s panem Šimerdou bylo velice přínosné, zodpověděl nám všechny naše dotazy a uváděl barvité příklady z praxe."
RETIA, a.s., Roman R.
C++ – Návrhové vzory a idiomy (
CPP3)
"Školení bylo velice dobře připravené. Lektor dokázal zodpovídat i dotazy nad rámec tématu. Nejvíce mě zaujala rozsáhlá znalost programovacích technik/přístupů pro různé programovací jazyky v rámci daného tématu."
Digiteq Automotive s.r.o., Jan M.
C++ – Návrhové vzory a idiomy (
CPP3)
"Vše naprosto perfektní. Srozumitelný výklad a praktické příklady, velmi cením využití Compiler Exploreru."
Digiteq Automotive s.r.o., Jakub B.
C++ – Návrhové vzory a idiomy (
CPP3)
"Lektor mel opravdu siroky prehled a dokazal uvadet priklady i z jinych programovacich jazyku. Prijemne zazemi. "
Digiteq Automotive s.r.o., Jiří P.
C++ – Návrhové vzory a idiomy (
CPP3)
"Naprostá spokojenost"
R-SYS, s.r.o., Michal V.
C++ – Návrhové vzory a idiomy (
CPP3)
"So školením som bol spokojný a v podstate naplnilo moje očakávania. Dozvedel som sa o pár nových a zaujímavých návrhových vzoroch, ktoré si viem predstaviť aj hneď implementovať. Taktiež som sa naučil aj niektoré C++ vlastnosti/konštrukcie, ktoré som nepoznal."
KBC Global Services Czech Branch, Václav H.
C++ – Návrhové vzory a idiomy (
CPP3)
"Oceňuji praktické příklady návrhových vzorů, hlavně také to že byly přizpůsobeny C++ a tomu, co ten jazyk umí.
To + příklady využití z praxe jsou pro mě největší přinos oproti jiným zdrojům."
Siemens, s.r.o., Lukáš S.
C++ – Návrhové vzory a idiomy (
CPP3)
"Velmi přínosné školení. Praktické ukázky různých návrhových vzorů, které jistě pomůžou při udržování našeho kódu do budoucna."
ERA a.s., Jakub Š.
C++ – Návrhové vzory a idiomy (
CPP3)
"Školitel je v dané problematice zjevně erudovaný. Je pohotový a flexibilní (reakce na dotazy atd).
Návrhové vzory probrány podrobně a dostatečně na konkrétních příkladech i přeneseny do kódu."
JABLOTRON CONTROLS s.r.o., Stanislav K.
C++ – Návrhové vzory a idiomy (
CPP3)
"Chválím dobré praktické ukázky kódu, osobní přístup, postřehy z praxe."
Digiteq Automotive s.r.o., Jan Č.
C++ – Návrhové vzory a idiomy (
CPP3)
"Zatím nejlepší školení na kterém jsem byl. Dávám vše za 1, byl jsem moc spokojen. Děkuji"