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
    1. Využíváme známé postupy a návrhové vzory
    2. Popisujeme software pomocí komponent a chování
    3. Oddělujeme chování od detailů implementace
  • Objektově orientovaný návrh software
    1. Program složený ze spolupracujících komponent
    2. Komponenty mají přiřazené úkoly (responsibilities)
    3. Lze přemýšlet o jednotlivých komponentách (reason)
  • Klasické objektově orientované programování
    1. Komponenty reprezentujeme pomocí instancí tříd
    2. Instance definuje stav a vztahy komponenty
    3. Třída definuje chování a rozhraní komponenty
  • Dědičnost a náhrada metod předka
    1. Úprava chování komponenty náhradou metod
    2. Návrhový vzor šablona (template)
    3. Statická implementace v moderním C++ (CRTP)
  • Opakovaná použitelnost jednou napsaného kódu
    1. Sdílení obecného kódu pomocí dědičnosti
    2. Kompozice objektů z hotových stavebních bloků
    3. Generické datové typy a algoritmy
  • Oddělení rozhraní a konkrétní implementace
    1. Abstraktní třídy jako definice rozhraní
    2. Zaměnitelnost implementací za běhu (dynamický polymorfismus)
    3. Návrhový vzor strategie (strategy)
  • Závislosti mezi komponentami v C++
    1. Vlastnictví (RAII), odkazování a propůjčování
    2. Ukazatele, reference a polymorfismus
    3. Interakce mezi objekty, volání metod
  • Nástroje generického programování
    1. Kompozice pomocí generických šablon
    2. Návrhový vzor politika (policy)
    3. Omezení variability na dobu kompilace
  • Principy dobrého softwarového designu
    1. Nezávislost komponent a lokalizace změn v kódu (SRP)
    2. Závislost na rozhraní, ne implementaci (DIP)
    3. 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
    1. Stavový stroj a návrhový vzor stav (state)
    2. Moderní implementace pomocí std::variant
    3. Rozdíly od klasického stavového stroje (state machine)
  • Propojování rozhraní pomocí spojovacích prvků
    1. Oddělení odlišných domén (bridge)
    2. Překlenutí rozdílných rozhraní (adapter)
    3. Zpřístupnění specializovaného rozhraní (facade)
  • Řetězení pomocí jednoho rozhraní
    1. Přidání chování do hotového systému (decorator)
    2. Řetězení možných handlerů (chain of responsibility)
    3. Zajištění a řízení přístupu k objektům (proxy)
  • Lineární datové struktury a sekvence
    1. Procházení datových struktur (iterátor)
    2. Rozlišení spojového seznamu a řetězu
    3. Zakončení bez nulového ukazatele (null object)
  • Kompozice složitějších objektů a komponent
    1. Větvení podle konkrétního typu (visitor)
    2. Stromová struktura objektů (composite)
    3. Řešení v kombinaci std::variant a std::visit
  • Vytváření různorodých typů objektů
    1. Továrna na objekty všeho druhu (factory)
    2. Abstraktní továrna na objekty (abstract factory)
    3. Použití lambdy a std::function pro registraci typů
  • Objekty o jedné jediné instanci
    1. Vytvoření jediné instance v moderním C++ (singleton)
    2. Správa globálních prostředků
    3. Stavová komunikace s operačním systémem
  • Vícekrokové vytváření objektů
    1. Stavitelský objekt jako mezikrok (builder)
    2. Metody pro úpravu stavitele a finální build
    3. Rozdělení stavitele do více fází
  • Signalizace a zpracování událostí
    1. Centrální zodpovědná komponenta (mediator)
    2. Registrace zájemců o události (observer)
    3. Signály s šablonami a lambdami (signals & slots)
  • Generování, streamování a líné vyhodnocování
    1. Zpracování sekvencí a pipelining (iterators, views)
    2. Používání fronty zpráv (message queue)
    3. Generování pomocí std::generator
  • Reprezentace datových změn
    1. Popis konkrétní úpravy (transaction, command)
    2. Sekvence následných změn (journal)
    3. Použití minijazyka či bajtkódu (interpreter)
  • Uložení a obnovení stavu
    1. Vytváření snímků stavových dat (snapshot, memento)
    2. Práce s historií získaných snímků (history, recovery)
    3. Kombinace snapshotů a transakcí (incremental backup)
  • Optimalizace práce s daty
    1. Datové struktury s instantními snapshoty (copy-on-write)
    2. Sdílení víceméně neměnných parametrů (flyweight)
    3. 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"