Modern C++ Design Patterns [2023 class archive (-)]

This class has been cancelled

Course Description

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

Course participants should have a solid base knowledge of C++ and at least one to two years of experience with the language. Some experience with inheritance hierarchies and templates is expected. Additionally, the course is interesting for you, if one or more of the following statements apply to you:

  • You are not aware of the impact of dependencies on code quality
  • You don’t know the SOLID principles or don’t consider them for your work
  • You believe object-oriented programming is about inheritance relationships
  • You consider moving functionality into classes the preferred design choice
  • You want to reevaluate classic design patterns
  • You want to get an impression of modern C++ design patterns
  • You wonder about type erasure and expression templates or their value

Course Topics

Dynamic Polymorphism

  • The Perils of Inheritance
  • Value Semantics vs. Reference Semantics
  • Good Public Inheritance
  • Bad Public Inheritance

Classic Design Patterns Revisited

  • Visitor
  • Strategy
  • Command
  • State
  • Observer
  • Bridge
  • Prototype
  • Adapter
  • External Polymorphism
  • Type Erasure
  • Factory Method
  • Decorator
  • Iterator
  • Facade
  • Proxy
  • Singleton
  • Template Method

Modern Design Patterns

  • Type Erasure
  • CRTP
  • Expression Templates
  • Policy-Based Design

Register Here

Course Instructor

Klaus Iglberger

Klaus Iglberger is a freelance C++ trainer and consultant. He has finished his PhD in Computer Science in 2010 and since then is focused on large-scale C++ software design. He shares his expertise in popular advanced C++ courses around the world (mainly in Germany, but also in the rest of the EU and the US). Additionally, he is the author of C++ Software Design, the initiator and lead designer of the Blaze C++ math library, one of the organizers of the Munich C++ user group, and the (co-)organizer of the Back-to-Basics and Software Design tracks at CppCon.