Training course "Advanced C++ with Focus on Software Engineering"

Start
6th June 2017 07:00 AM
End
9th June 2017 02:30 PM
Location
Jülich Supercomputing Centre, Rotunda, building 16.4, room 301

Target audience:

Scientists who want to use C++ efficiently

Contents:

 

Prerequisites:

Course participants should have a solid base on C++ and at least one year of experience with the language is needed.


Participants are requested to bring their own notebook. The installed compiler should be at least C++ 11, or even better C++ 14 or C++ 17.

Language:

This course will be given in English.

Duration:

4 days

Date:

6-9 June 2017, 9:00-17:30

Venue:

Jülich Supercomputing Centre, Rotunda, building 16.4, room 301

Number of participants:

maximum 30 participants

Instructor:

Klaus Iglberger, Erlangen

Registration:

closed


This advanced C++ training is a course on object-oriented (OO) software design with the C++ programming language. The focus of the training are the essential OO and C++ software development principles, concepts, idioms, and best practices, which enable programmers to create professional, high-quality code. Additionally, the course gives insight into kernel development with C++. The course will not address special areas and applications of C++, such as for instance Template Meta Programming (TMP), or the quirks and curiosities of the C++ language. It rather teaches guidelines to develop mature, robust, maintainable, and efficient C++ code.

After this course, participants will:

  • have a detailed understanding of the essential OO design principles
  • have gained knowledge about fundamental C++ programming concepts and idioms
  • be able to properly design classes and class interfaces
  • know about the importance of exception safe programming
  • have gained insight into kernel development with C++
  • avoid the usual pitfalls in the context of inheritance
  • comprehend the advantages of non-intrusive design
  • understand the virtue of clean code

Agenda:

1st day schedule (9:00 - 17:30)

Essential Object-Oriented Design Principles

  • The core of object-oriented programming
  • The SOLID principles

Concepts and the STL

  • Overview of the STL
  • Proper use of the STL

2nd day schedule (9:00 - 17:30)

Class Design

  • Proper Handling of Member Data
  • Proper Interface Design
  • Compiler Generated Functions
  • Move Semantics
  • Proper Design of Polymorphic Interfaces
  • Const Correctness
  • Visibility vs. Accessibility

3rd day schedule (9:00 - 17:30)

Robust Code

  • Error Propagation
  • Exception Safety
  • RAII
  • Handling Legacy Code

Proper Use of Dynamic Polymorphism

  • Non-public Inheritance
  • Public Inheritance

Dependency Breaking Techniques

  • Breaking Include Dependencies
  • Classical Design Patterns Revisited

4th day schedule (9:00 - 16:30)

  • Non-Intrusive Design

Kernel development with C++

  • Choice of the proper data structures
  • Loop unrolling
  • Blocking
  • SIMD vectorization
Last Modified: 21.05.2022