Training course "Advanced C++ with Focus on Software Engineering"
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