Go to the Datasim Education BV homepage Datasim Education BV Datasim Education BV Datasim Education BV Datasim Education BV Datasim Education BV
Information request

Follow datasim on Twitter

Share this page


Course Category: 

Architectural and Detailed Design in C++ and Boost  - (code CPP-ADD)

The goal of this hands-on two-day course is to create generic and flexible software systems by designing and implementing them as loosely-coupled components with each component having well-defined responsibilities and external interfaces to and from other components. We determine how to design these components based on the system's functional and non-functional requirements. Having done that, we determine which Boost (and to an extent STL) C++ libraries best realise these requirements.

The input to this course is the system context diagram and requirements for the system to be designed. In other words, all the analysis has been done before we design the systems in this course and we can thus starting designing (and even creating C++ prototypes) immediately.

The course consists of a number of stages. Project risk is reduced as we progress through the various stages. The percentage theory/practice for this course is approximately 70/30.

Subjects Covered and Benefits

  •  A precise, defined methodology to design flexible systems in C++.
  • Focused course on design using C++ and Boost.
  • Multi-paradigm: procedural, object-oriented, generic and functional models.
  • "Design patterns revisited" and new improvements.

Course contents

System Context and Responsibilities

We provide and explain the context diagram to the designers. Some consideration is given to the major data flow in the system as well and the corresponding functional and non-functional requirements. The advantage is that we can agree on what the system is supposed to do and start directly on design. We also discuss a number of ready-made diagrams and solutions that we use as representative examples in the course and in examples.

Context Diagram

  • Key and satellite systems
  • System responsibilities
  • Inter-system interaction (client-server relationships)
  • Initial top-level component diagram
  • Functional and non-functional system requirements

Some Examples

  • Process Control
  • Registration and tracking
  • MIS
  • Manufacturing
  • Relationships with design patterns

Services and Data Transfer

In this stage we discover and identify what the responsibility is of each system and the high-level data that it provides to, and requires from other systems. This is a high-level black box specification which will be designed and elaborated in later sections.

What is a Service?

  • Discovering services from system actors and their viewpoints
  • Service types and categories
  • The relationship between services and system

Documenting Services

  • Choosing a standard template
  • Preconditions and postconditions
  • Describing a service: its capability and data flow
  • Dependencies on other services

Interface Discovery

In this section we discuss what interfaces are, how to discover them from services and how to design them in detail so that they can be implemented in C++ and in Boost. We are able to describe interfaces in a language-independent manner. This provides much flexibility as we can postpone how we implement interfaces. For example, we can choose between implementing interfaces using C functions, C++ member functions or Boost/std function.


  • What is an interface?
  • Using services to find interfaces
  • Documenting interfaces
  • Interfaces, reusability and standardisation

Requires-Provides Interfaces and Component Contracts

  • Policy-based design (requires and provides interfaces)
  • Higher-order functions, lambda functions
  • Signals and callback mechanisms; implicit invocation
  • The Delegate mechanism

More Attention Points

  • Active/passive readers and writers of data
  • Data: push and pull
  • Singlethreading/multithreading
  • Synchronous and asynchronous communication

Detailed Design Patterns in Boost

In this section we examine the components and interfaces that we have just discovered and we map them to classes that we can directly implement in C++. The final choice on how to implement these components depends on a number of functional and nonfunctional requirements. We give guidelines on choosing the most appropriate Boost libraries that satisfy these requirements. We then have the option of using Gamma patterns, Boost patterns or implement patterns using Boost.

What are the Design Requirements?

  • ISO 9126
  • Functionality and Interoperability
  • Portability and device independence
  • Efficiency and performance
  • Reliability and fault tolerance
  • Maintainability and stability of code base
  • Which Boost libraries help with ISO 9126?

Critical Design Patterns

  • Bridge and Strategy
  • Visitor
  • Proxy, Fašade
  • Builder

Implementing Components in C++ and Boost C++ Libraries

  • Higher-order functions
  • Signals and callbacks
  • Lambda functions
  • Combining the object-oriented and generic programming models
  • Functional programming
  • Data types (variant, Tuple)

Participants should have a good working knowledge of C++ and have a good knowledge of C++ templates and Boost (especially libraries relating to higher-order functions). Experience with design patterns in industrial projects is an added advantage although not required.

Who should attend?
This course is for software developers who wish to learn how to design flexible applications in C++ using a combination of design patterns and Boost C++ libraries.

Duration, price, date, locations
Course duration 2 days
Price Euro 990.-- ex. VAT
Euro 1197.90 inc. 21% VAT
Date and location Dates available on request

It is also possible to organize this course at your company premises (the in-company option). If you have any question, please contact our Datasim office.

Share this page

Contact and Profile
Registration form
Course Dates