Programmer efficacement en C++
Description
La force singulière du langage C++ est de permettre la production de codes compilés proches du code machine optimal tout en offrant différentes approches de programmation de haut-niveau comme le typage fort, la programmation objet, la programmation fonctionnelle et la méta-programmation (génération automatique de code à la compilation). Pour cette raison, C++ est devenu le langage incontournable pour développer des algorithmes optimisés. Son seul inconvénient tient à sa richesse qui n'a cessé de croître dans ses versions les plus récentes (C++11/14/17/20) et qui rend le langage difficile à appréhender dans sa totalité sans formation adéquate.
Ce cours est destiné aux étudiants, y compris débutants, désireux de maîtriser les différents aspects de la programmation en C++ pour pouvoir écrire du code qui concilie performance et élégance. Le cours adopte une approche bottom-up en partant des mécanismes d'exécution de programmes élémentaires pour aller progressivement vers les fonctionnalités les plus avancées du langage.
L'objectif est de transmettre aux étudiants un réel savoir-faire de la programmation, d'une part en illustrant les notions à travers des exemples d'utilisation pertinents, d'autre part en consacrant une part importante du volume horaire aux travaux de laboratoire.
Période(s) du cours
Prérequis
Syllabus
- Gestion mémoire et cycle de vie des variables mémoire (1h30)
- Structure et smart pointers (1h30)
- Types (1h30)
- Programmation fonctionnelle : lambda fonctions, types appelables, exceptions (1h30)
- Classe et héritage (1h30)
- Mécanisme de base des templates (1h30)
- Programmation générique à base de templates (1h30)
- Programmation générique versus programmation orientée objet (1h30)
- Bibliothèque standard : contenu et concepts (1h30)
- Programmation système : threads et mécanismes de synchronisation (1h30)
- TP sur la manipulation mémoire (3h)
- TP sur la programmation objet et l'héritage (3h)
- TP sur la programmation fonctionnelle (3h)
- TP sur la programmation générique (3h + 1h30)
- TP sur la bibliothèque standard (1h30)
- TP sur la programmation système (3h)
Composition du cours
- Cours basé sur des exemples de code
- Partie importante (50%) consacrée aux travaux pratiques de programmation
Ressources
- Deux enseignants : Hervé Frezza-Buet et Frédéric Pennerath
- Pas de TD mais uniquement des travaux pratiques sur machine
- Un poste de travail par élève
- Un ou deux groupes de TP d'au maximum 15 étudiants chacun.
- Les TP seront réalisés dans l'environnement Linux et reposeront exclusivement sur des logiciels libres (g++, CMAKE, etc).
Résultats de l'apprentissage couverts par le cours
- Savoir écrire un programme en C++ utilisant différents paradigmes de programmation comme la programmation objet, la programmation fonctionnelle et la programmation générique.
- Connaître certains aspects du langage C++ qui ont une influence déterminante sur les performances des programmes lors de leur exécution.
- Connaître les fonctionnalités offertes par les spécifications les plus récentes du langage C++ (C++11, C++14, C++17 et C++20).
- Savoir utiliser un environnement de compilation et de débogage C++
Support de cours, bibliographie
- Site web réalisé par les professeurs
- Effective Modern C++, Scott Meyers, 2014
- Professional C++, Marc Gredoire, 2014
- A Tour of C++, Bjarne Stroustrup, 2013