Modern C++ Design Patterns
Design patterns have proven themselves invaluable over several decades and thus knowledge about them is essential to design robust, decoupled systems. Modern C++, however, has profoundly changed the way we use C++, how we think about design and implement solutions. This also affects how we implement design patterns.
This training class explores modern C++ design and the modern forms of classic design patterns. It provides guidelines, idioms and best practices for sustainable and maintainable design, which enables programmers to create professional, high-quality code. Amongst others it will answer the following questions:
- How does good C++ design with a minimum of dependencies look like?
- What are the most important rules for robust, maintainable, and sustainable design?
- What are the most common pitfalls in C++ software design?
- Why does classical C++ design based on inheritance hierarchies fail so often?
- How are the classic design patterns implemented in modern C++?
- What are alternatives to the classic design patterns?
After this course, participants will ...
... have a detailed understanding of the essential design principles;
... understand the benefits of separation of concerns;
... be able to design code with minimum dependencies;
... have an impression of the modern alternatives of classic design patterns;
... have gained knowledge about modern design techniques;
... understand how std::function, std::any, and ranges work;
... favor composition over inheritance;
... avoid the usual pitfalls in the context of inheritance;
... know about the importance of value semantics;
... comprehend the advantages of non-intrusive design.
Prerequisites
Participants are required to have at least two to three years of C++ experience. The course expects that all participants are familiar with the syntax of the language and have used inheritance and templates before.
Computer Setup
For the hands-on programming tasks, you are expected to use your own machine. Any operating system (Windows, Linux, MacOS, ...), any IDE/editor (MS Visual Studio, CLion, vi, emacs, ...) and any compiler capable of at least C++14 (GCC, Clang, MSVC, ...) can be used
Klaus Iglberger is a freelance C++ trainer and consultant. He shares his expertise in popular C++ courses — from beginner to advanced — all around the world. He is the author of “C++ Software Design” [1], one of the organizers of the Munich C++ user group [2], and the (co-)organizer of the Back-to-Basics [3] and Software Design [4] tracks at CppCon.
[1] https://learning.oreilly.com/library/view/c-software-design/9781098113155/
[2] https://www.meetup.com/MUCplusplus/
[3] https://cppcon.org/b2b/
[4] https://cppcon.org/softwaredesign/