Design Patterns in modernem C++: "Gang-of-Four" und moderne Idiome für robustes C++‑Design anwenden.
Hands‑on mit klassischen Erzeugungs‑, Struktur‑ und Verhaltensmustern.
C++11/14/17‑Features nutzen, um Implementierungen zu vereinfachen und zu modernisieren.
Praktische Erfahrung sammeln durch Labs mit Refactoring und Erweiterbarkeit.
Nutzen: Wartbarkeit, Lesbarkeit und Skalierbarkeit von C++‑Anwendungen verbessern.
Für wen: gedacht für Personen mit C++‑Kenntnissen, die besseres Design suchen.
Mit optionalem Teil zu modernen Alternativen und Anti‑Patterns.
Curriculum
Tag 1 — Grundlagen & Creational Patterns
- OOP-Recap, SOLID und wann Patterns helfen vs. schaden
- Modern C++ Toolbox: RAII and smart pointers (unique_ptr, shared_ptr, weak_ptr); Move semantics and perfect forwarding; Type erasure and pimpl; Templates: partial specialization, SFINAE, Concepts, policy-based design; constexpr, consteval and compile-time computation; Ranges and views (C++20); std::variant/visit, std::optional, std::any; Coroutines (high-level overview)
- UML-Essentials für Patterns (class, object, relationships)
- Factory Method — virtuelle Konstruktoren, Registries, unique_ptr-Returns
- Abstract Factory — Produktfamilien, Objektgraphen, Dependency Injection
- Builder — fluente APIs, Immutability, Invarianten aufbauen
- Prototype — klonen polymorpher Objekte; Copy/Move Semantics; deep vs. shallow copy
- Singleton — Testbarkeit, Threading, Alternativen (Object Lifetime, DI-Container)
Tag 2 — Structural Patterns
- Adapter — Object vs. Class Adapter; Ranges-stil Adapter; Type Erasure
- Facade — stabile API über Subsysteme; PIMPL zur Reduktion von Rebuilds
- Proxy — Remote/Virtual/Protection; Lazy Loading; Caching
- Decorator — Composition over Inheritance; Value- vs. Referenzsemantik
- Composite — Bäume; Iteratoren und Visitoren; Value Categories
- Flyweight — Intern-Pools; String Views; Arena Allocators
- Bridge — orthogonale Dimensionen; ABI-Stabilität; Policy-based Design
Tag 3 — Behavioral Patterns & Refactoring
- Strategy — statisch (Templates/Policies) vs. dynamisch (Type Erasure/Variant)
- Observer — Thread-Safety, lockfreie Queues; Signals/Slots vs. Callbacks
- Command — Undo/Redo, Makro-Commands; Function Objects und Lambdas
- State — Table-driven vs. State Pattern; Variant + visit; Übergangssicherheit
- Template Method — CRTP-Alternativen; Non-virtual Interface (NVI)
- Iterator — Custom Iteratoren, Ranges; Coroutines als Generatoren (Überblick)
- Mediator — Entkopplung komplexer Interaktionen; Event Bus
- Memento — Snapshot-Strategien; Serialisierungsoptionen
- Chain of Responsibility — Pipelines; Fehlerbehandlung mit expected/variant
- Interpreter — Embedded DSLs; Parser-Optionen
- Visitor — Acyclic Visitor; std::variant visitation & Pattern Matching
- Anti-Patterns & Smells — Shotgun Surgery, Train Wreck, God Object
- Refactoring-Lab — von Ad-hoc-Code zu klaren Patterns; Wirkung messen
Optionale Module
Optional — Concurrency & Async
- Active Object und Reactor (konzeptionell) mit std::jthread und Executors
- Coroutines für asynchrone Flüsse; Cancellation und Timeouts (High Level)
Kursablauf
- Part 1: 09:00–10:30
- Break: 10:30–10:45
- Part 2: 10:45–12:15
- Lunch break: 12:15–13:15
- Part 3: 13:15–15:15
- Break: 15:15–15:30
- Part 4: 15:30–17:30