Jazyk C – Návrhové vzory a objektově orientovaný návrh (C3)

Programování, C, C++

Jazyk C je často vnímán jako nízkoúrovňový nástroj pro psaní výkonného kódu. Ve skutečnosti ale umožňuje vytvářet velmi dobře strukturované, modulární a dlouhodobě udržovatelné softwarové systémy.

Pomocí hlavičkových souborů, neprůhledných datových typů, funkčních rozhraní a schopností linkeru lze v C vytvářet komponenty, které spolu komunikují přes jasně definovaná rozhraní. Tím lze realizovat stejné architektonické vzory jako v objektově orientovaných jazycích – často s menší režií a větší kontrolou.

Kurz ukazuje, jak v čistém C navrhovat software pomocí návrhových vzorů, idiomů a architektonických principů používaných v reálných systémech.

TOTO ŠKOLENÍ VÁM POMŮŽE:

  • Naučit se postavit si objektový datový model pomocí struktur ukazatelů na funkce
  • Projít společně známé návrhové vzory a vyzkoušet si vybrané z nich 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 pracující v jazyce C na reálných produktech
  • Programátoři embedded a low-level systémů
  • Autoři knihoven, middleware a ovladačů
  • Vývojáři, kteří chtějí psát testovatelný a modulární C kód

Privátní školení a termíny na míru

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. Specifičnost tohoto školení a nízký zájem jednotlivců neumožňuje pro tento kurz vypisovat veřejné termíny.

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)
  • Zavedení objektově orientovaného programování
    1. Virtuální metody formou ukazatelů na funkce
    2. Abstraktní rozhraní pomocí operations struktur
    3. Objektově orientovaná architektura
  • Odlišnosti od objektově orientovaných jazyků
    1. Velké množství boiler plate kódu
    2. Přetypování bez řádné typové kontroly
    3. Imitace dědičnosti pomocí výchozích funkcí
  • Alternativy k implementaci OOP
    1. Ukazatele na funkce přímo mezi daty
    2. Architektura ve stylu Rustu a fat pointery
    3. Statický polymorfismus pomocí linkování
  • Závislosti mezi komponentami
    1. Ukazatele a vlastnictví
    2. Zodpovědnost za zrušení objektu
    3. Odstraňování memory leaků
  • 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. Implementace pomocí switch a enum
    3. Rozdíly od čisté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 union a switch
  • 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í pointeru na funkci pro registraci typů
  • Objekty o jedné jediné instanci
    1. Vytvoření jediné instance při prvním použití (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 pointery na funkce (signals & slots)
  • Generování, streamování a líné vyhodnocování
    1. Zpracování sekvencí a pipelining (iterators)
    2. Používání fronty zpráv (message queue)
    3. Generování stavového stroje bez callbacků
  • 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:
Jazyk C – Praktické programování pro pokročilé (C2)
Časový rozvrh:
4 dny (9:00hod. - 17:00hod.)

Vybrané zákaznické reference

Schneider Electric CZ, s.r.o., Jaromír B.
Jazyk C – Návrhové vzory a objektově orientovaný návrh ( C3)
" Zajímavý kurz, sám jsem byl překvapený co neznám "