SW-Entwicklung und Implementierung

C++ ist nach wie vor eine der am meisten verbreiteten objektorientierten Programmiersprachen.
C++ wird sowohl in der Systemprogrammierung als auch in der Anwendungsprogrammierung eingesetzt. Die Möglichkeit, effiziente, maschinennahe Programmierung mit den mächtigen Sprachmitteln objektorientierter und generischer Programmierung zu kombinieren, macht C++ für viele Anwendungsbereiche interessant. Obwohl die Sprache schon in den 80-er Jahren entwickelt wurde, gibt es erst seit 1998 eine gültige ISO/IEC Norm für C++, die 2006 und 2011 auf den neuesten Stand gebracht wurde. 
Unsere Themenauswahl zu C++ Grundlagen richtet sich an Entwickler, die bisher keine oder nur geringe Erfahrung mit C++ sammeln konnten. Meist haben Entwickler bereits einen recht fundierten C-Hintergrund, bevor sie nach C++ wechseln, oder haben bereits mit Java oder C# Erfahrungen gesammelt Dem Übergang von C zu C++ und dem Vergleich zu C kann besondere Rechnung getragen werden.
Alle wichtigen Elemente des neuen Standards C++11/14 werden vorgestellt.

Themenauswahl

  • C++ im Überblick: Historie, Versionen
  • Objektorientierte Programmierung
  • Variablen, Zeiger, Referenzen
  • Einfache Objekte
  • Klassen
  • Operationen
  • Vererbung
  • Überladen von Operatoren
  • Struktur von Programmen
  • Namespaces
  • Dynamische Speicherverwaltung und Smart Pointers
  • Fehlerbehandlung (Exceptions)
  • Parametrisierte Klassen und Funktionen (Templates)
  • Die Standardbibliothek
  • Laufzeit- und Speicherverhalten von C++
  • Programmiertechniken für Embedded Systems

Diese Schulung behandelt gängige Sprachkonstrukte in C++ in größerer Tiefe und zeigt deren gegenseitige Abhängigkeiten, Gefahren und Möglichkeiten in der Praxis auf. Sauberer Klassenaufbau, sicheres und effektives Memory-Management und ein Überblick über die C++ Standardbibliothek helfen, schwer auffindbare Laufzeitfehler zu vermeiden. Diskussionen über den richtigen Umgang mit Templates, Run Time Type Information, Smart Pointern und Exception Handling führen zum Beherrschen von Programmiertechniken, die Effizienz und Stabilität der Software steigern.
Mit dieser Schulung vermitteln wir Ihnen Themen, die nach unserer Erfahrung schwer zugänglich sind und häufig nicht richtig verstanden werden.

Themenauswahl

  • Konstruktoren und Destruktoren
  • Spezielle Klassenfunktionen (Zuweisungsoperator, C++11 Move-Konstruktor etc.)
  • Virtuelle Elementfunktionen
  • Speicherverwaltung
  • Smart Pointer (shared_ptr, unique_ptr etc.)
  • Kapselung und Schnittstellen
  • Werte- und Referenzsemantik
  • Namespaces
  • Vererbung
  • ISO-Casts
  • Exception Handling
  • Exception Safety
  • Templates
  • Effizienz und Laufzeitverhalten
  • Einführung in die STL und Boost

Gerade in der Entwicklung von Embedded Systems nimmt C++ als Programmiersprache eine Schlüssel-stellung ein. Für viele Microcontroller stehen neben C-Compilern heute auch betriebsbewährte C++ Compiler zur Verfügung. Mit steigender Komplexität der Systeme lohnt sich der Umstieg auf C++.
Wir bieten hier eine Themenauswahl, die speziell auf die Bedürfnisse im Umfeld der Entwicklung von Embedded Systems in C++ ausgerichtet ist. Mit Beispielen und Übungen, die sich auf typische Anwendungsfälle aus dem Embedded Bereich beziehen, gehen wir auf die für dieses Umfeld typischen Fragestellungen ein.
In der Schulung behandeln wir C++03, ergänzt durch die wichtigsten Elemente aus C++11/14. Auf den Übergang von C zu C++, den Vergleich zu C und die Koexistenz von C- und C++ Quellen legen wir besonderen Fokus.

Themenauswahl

  • C++ im Überblick: Historie, Versionen
  • Objektorientierte Programmierung
  • Variablen, Zeiger, Referenzen
  • Einfache Objekte
  • Klassen und Vererbung
  • Überladen von Operatoren
  • Namespaces und Aufbau von Programmen
  • Dynamische Speicherverwaltung und Smart Pointers im Embedded Systems
  • Fehlerbehandlung (Exceptions)
  • Parametrisierte Klassen und Funktionen (Templates)
  • Die Standardbibliothek
  • Kombination von C- und C++ Code und -Bibliotheken
  • Laufzeit- und Speicherverhalten von C++
  • Programmiertechniken für Embedded Systems

Performanter Code hat in vielen Anwendungen höchste Priorität. Tatsächlich hält C++ viele Elemente bereit, um genau das zu erreichen, ohne faule Kompromisse bzgl. „sauberer“ Objektorientierung machen zu müssen. In einigen Teams werden jedoch genau diese Elemente nicht oder ungeschickt verwendet und damit das Potential mit C++ performante Anwendungen zu erstellen nicht ausgeschöpft. Performance-Tuning kann auf vielen Ebenen der SW-Entwicklung angesetzt werden. Dabei spielt der Einsatz geeigneter Bibliotheken, der professionellen Anwendung moderner Bausteine fürs Multi-Threading u.v.m. eine Rolle.
Wie geht man als Entwickler mit Kenntnissen des C++ Sprachkerns und der Standardbibliothek an die sprachkernnahen Implementierungsaspekte eines Embedded Systems heran? In Embedded Systems spielen z.B. effizientes (oft echtzeitfähiges), deterministisches Management des Hauptspeichers eine große Rolle. Statemachines und Multi-Threading sind in den meisten Systemen heute kaum wegzudenken.
In der individuell zugeschnittenen Schulung zeigen wir, wie Sie die für ihre Systeme zentralen Implementierungsaspekte mit modernen, robusten C++ Elementen abdecken ohne Effizienzeinbußen befürchten zu müssen. Selbstverständlich nehmen wir auch Bezug auf die in Frage kommenden Elemente des neuen C++11/14 Standards. Außerdem werden Regeln vorgestellt, wie man objektorientierte Entwürfe explizit in die Implementierung überführt. Je nach Ausrichtung werden in dieser Schulung vor allem sprachkernnahe Aspekte rund ums C++ Objektmodell besprochen oder zusätzlich weitere Aspekte, die von diversen Bibliotheken unterstützt werden.
Diese komprimierte Schulung richtet sich an Entwickler, die hauptsächlich im Embedded Systems Umfeld arbeiten.
Bitte beachten Sie auch die Schulung Effiziente C++ Entwicklung: Performante und robuste Anwendungen.

Themenauswahl

  • Best Practices zur Unterscheidung: Run-Time-Stack- oder Heap-Objekte einsetzen
  • Effiziente Übergabe von Objekten als Parameter und Rückgabe
  • Temporäre Objekte und Return-Value-Optimierung
  • Der C++11 Move Constructor und sein Einsatz zur Performanzsteigerung
  • Effizientes Management dynamisch allozierter Objekte mit deterministischem Speicher- und Laufzeitverhalten
  • Beziehungen zwischen Objekten und wie bildet man sie optimal in C++ ab
  • Smart Pointer und deren Speicher- und Laufzeitverhalten
  • Welche Smart Pointer eignen sich in Embedded Systems
  • Object Pooling
  • Performante Container-Klassen der STL und Boost und deren Laufzeitverhalten
  • Allocators
  • Überblick: Moderne C++ Building Blocks für die Multi-Threading-Programmierung
  • Coroutinen vs. Multi-Threading
  • Lock-free Algorithmen und Container
  • Performance-Tuning in Multi-Threaded-Anwendungen
  • Leichtgewichtige Komponentenmodelle
  • Implementierung von State Machines mit Boost und anderen bekannten Bibliotheken
  • Eventing: Callbacks und Ereignissysteme

Die C++ Standardbibliothek ist seit der Standardisierung Bestandteil der Programmiersprache C++. Sie bietet weitreichende Lösungen für Standardproblemstellungen in der C++ Programmierung. Trotz der vielfältigen Einsatzmöglichkeiten der C++ Standardbibliothek scheuen immer noch viele C++ Programmierer deren konsequenten Einsatz.
Unser Schulungsangebot kann dazu beitragen, die Berührungsängste mit der Standardbibliothek abzubauen. Wir zeigen den richtigen Umgang mit den verschiedenen Teilen der Standardbibliothek und erläutern Vor- und Nachteile verschiedener Konstrukte.

Wir führen Schulungen mit allen bekannten Implementierungen der Standardbibliothek durch. Selbstverständlich gehen wir auch auf die Neuerungen ein, die durch den 2006 erschienen Technical Report 1 (TR1) und den neuen Standard C++11/14 in die Standardbibliothek einfließen. Unserer Erfahrung nach lohnt es sich darüber hinaus, die Teile der Boost-Bibliothek und deren Beziehung zur Standard-Bibliothek anzureißen.

Themenauswahl

  • Grundkonzepte der STL
  • Die Container der STL
  • Robuste Speicherverwaltung mit Containern
  • Smart Pointers
  • Iteratoren im Detail
  • Algorithmen
  • Funktionsobjekte und Binder
  • Ein und Ausgabe mit Streams
  • Strings
  • Lokalisierung
  • Bitsets und Valarrays
  • Tipps und Tricks
  • Die Neuerungen durch den Technical Report 1 und C++11/14

Multi-Threading-Anwendungen eröffnen Möglichkeiten, die bei Single-Threaded-Anwendungen nicht zur Verfügung stehen. Die effektive Ausnutzung von Multi-Core-Architekturen ist eines der aktuell häufig diskutierten Beispiele. Allerdings sind die Anwendung von Design Patterns für nebenläufige Anwendungen, die Auswahl passender Bibliotheken und der professionelle Umgang mit Synchronisationsmitteln u.ä. im Entwickleralltag nicht einfach, oft wird die Komplexität der Aufgaben unterschätzt.
Möchte man Multi-Threading-Technologien mit modernen Prinzipien der SW-Architektur verbinden, kommen weitere anspruchsvolle Fragestellungen hinzu. Das sehr herausfordernde und komplexe Thema soll durch die Diskussion robuster und bewährter Building Blocks, insbesondere bekannter Library-Elemente und Design Patterns praxisgerecht vereinfacht werden.
Diese Schulung vermittelt zunächst das nötige Basiswissen rund um die Themen Thread-Erzeugung und einfache Synchronisationsmittel und geht dann auf die spezifischen Schwierigkeiten bei der Multi-Threading-Programmierung ein. Anschließend werden praxistaugliche Lösungsansätze erarbeitet, in denen höhere Mechanismen, wie das Active Object Pattern bevorzugt werden.
Das Training wird durch viele Demonstrationen mit lauffähigem Code unterstützt, dabei kommen die Libraries Boost, Qt und POCO zum Einsatz.
Teilnehmervorausetzungen: Gute C++ Kenntnisse und Praxiserfahrung. Grundkenntnisse im Themenfeld Multi-Threading sind wünschenswert. Bitte beachten Sie auch die Schulung Effiziente C++ Entwicklung: Elemente für hochperformante Embedded Systeme Teil 2 – Multi-Threading und Multi-Processing.

Themenauswahl

  • Die Begriffe Nebenläufigkeit, Parallelität, Multi-Processing, Multi-Threading
  • Quasi-Parallelität und echte Parallelität, Multi-Core-Plattformen
  • Vorteile von Multi-Threaded-Anwendungen
  • Herausforderungen bei der Konstruktion von Multi-Threaded-Anwendungen
  • Wichtige Grundlagen und Begriffe
  • Überblick über gängige Mechanismen im Multi-Threading-Umfeld
  • Überblick und Gegenüberstellung: Bekannte Bibliotheken für die Multi-Threading-Programmierung im C++ Umfeld, insbesondere Boost, Qt und POCO
  • Multi-Threading und der neue Standard C++11/14
  • Einfache Synchronisations-Primitive, z.B. Mutex und Condition Variable
  • Immutable Objects
  • Monitor Object Pattern
  • Strategized Locking Pattern
  • Asynchroner Funktionsaufruf
  • Einfache, zustandsorientierte aktive Objekte
  • Prinzip der synchronisierten Produzenten/Konsumenten
  • Synchronisierte Container
  • Einfache Thread Pools und Message Scheduler
  • Shut down und Cancellation
  • Verschiedene Ausprägungen von Task Schedulern
  • Event-Handling im Multi-Threading-Umfeld
  • Asynchronous Completion Notification
  • Future Pattern
  • Active Object Pattern
  • Generierung von Elementen für das Active Object Pattern mit C++ Bordmitteln
  • Überblick: Weitere Synchronisationsmittel
  • Berücksichtigung von Multi-Threading in der Architekturarbeit
  • Welche Building Blocks sind in welchen Szenarien sinnvoll: Ausbildung, neues Team, Architekturarbeit
  • Ausblick: Spezielle Techniken und Bibliotheken für die effektive Nutzung von Multi-Core-Architekturen

Page 1 of 3

Contact now!

Telephone: +497247-954550
info@maurer-treutner.de