Cursus
Formation C++ Programmation Orientée Objet: les compléments
Objectifs
Tester la généricité et les templates en C++.
Utiliser expressions régulières pour manipuler chaînes de caractères.
Gérer les copies et "move" en C++.
Implémenter RAII et "Smart Pointers" en C++.
Exploiter typeinfo et la réflexion en C++.
Utiliser la STL pour gérer les conteneurs et algorithmes.
Appliquer la programmation fonctionnelle avec lambdas et binding.
Manipuler le système de fichiers avec la librairie filesystem.
Programmer en multi-tâches avec la librairie thread.
Expérimenter synchronisation et performances en programmation multi-tâches.
Pré-requis
Participants
Programme de formation
COMPLÉMENTS SUR LE CONCEPT DE GÉNÉRICITÉ EN C++
Définition de méthodes et de classes génériques
Template avec types par défaut
Utilisation du mot clé typedef dans le cadre de la généricité
Template à nombre variable de types
Spécialisation de template
Notions de "traits" et l'entête traits
MANIPULATION DE CHAÎNES DE CARACTÈRES VIA DES EXPRESSIONS RÉGULIÈRES
La librairie string
Qu'est qu’une expression régulière ?
Le langage d'expression régulière proposé par C++
Mise en correspondance, remplacement et extraction d'informations
Les expressions régulières gourmandes
Travaux pratiques
- Utilisation d'expressions régulières pour réaliser des mises en correspondance, des remplacements et des extractions d’informations
Compléments Boost pour la manipulation de chaînes de caractères
Travaux pratiques
- Utilisation des compléments offerts par Boost
GESTIONS DES COPIES EN C++
Opérateurs de copie et constructeur par copie
Correctement réaliser les copies
Interdire les copies
Opérateurs et constructeurs de "move"
Travaux pratiques
- Corrections de bugs relatifs à la copie d'objets et retrait des fonctionnalités de copie
RAII ET LES "SMART POINTERS"
Introduction à RAII
- Resource Acquisition Is Initialization
Mise en oeuvre d'une classe générique de "Smart Pointers"
Problématique des cycles de pointeur
Travaux pratiques
- Implémentation d'une classe de "Smart Pointers"
Les différentes classes de "Smart Pointers" proposées en C++ ISO
Travaux pratiques
- Utilisation des classes standards de "Smart Pointers"
LA LIBRAIRIE TYPEINFO ET LA RÉFLEXION EN C++
La librairie typeinfo
L'opérateur typeid
Transtypage dynamique
- opérateur dynamic_cast
Les autres opérateurs de transtypage
Travaux pratiques
- Mise en oeuvre d'un prototype de moteur de sérialisation
UTILISATION DE LA STL (STANDARD TEMPLATE LIBRARY)
Travaux pratiques
- Utilisation des conteneurs standards et des algorithmes associés
Présentation de l'architecture STL
- Les conteneurs, les itérateurs et les algorithmes
Travaux pratiques
- Utilisation de quelques conteneurs proposés par la STL
Les différents types d'itérateurs
Les différentes techniques de parcours de collections
- Itérateurs, for_each, instruction for each...
Concept de "functions objects"
Travaux pratiques
- Utilisation de "functions objects"
Les différents types de collections de la STL
Les conteneurs ajoutées par C++11
Etude de divers algorithmes proposés par la librairie standard
PROGRAMMATION FONCTIONNELLE EN C++ ET MOTEUR DE BINDING
Le concept de lambda
Les différents types de captures proposés
Travaux pratiques
- Application des lambda à la manipulation de conteneurs STL
Le bind C++
Travaux pratiques
- Utilisation du module std::bind
MANIPULATION DU SYSTÈME DE FICHIERS
La librairie filesystem introduite par C++ ISO 2017
Utilisation de path
Fonctions de convenances
Travaux pratiques
- Mise en oeuvre d'un programme permettant de lister le contenu d’un disque
Couplage avec le librairie de manipulation de flux
- istream et ostream
PROGRAMMATION MULTI-TÂCHES EN C++
Pourquoi programmer en multi-tâches ?
Travaux pratiques
- Développement d'un programme multitâches et synchronisation des accès concurrents
Qu'est-ce que thread et qu’est-ce qui le différencie d’un processus ?
La librairie thread
Connaître les spécificités multi-tâches du système d'exploitation utilisé
Les mécanismes de synchronisation des accès concurrents
RAII et la gestion des verrous
Problèmes de performances en cas de mauvaise stratégie de synchronisation
Opérations atomiques
Utilisation de local storage