CPP - C/C++

Appartient à l'UE Développement III

Personnes enseignantes

Description générale du cours

Apprentissage des langages C et C++

Ces deux langages sont enseignés à des étudiants censés posséder de bonnes bases en Java. La norme C étudiée est C11. La norme C++ est C++20.

L’unité d’enseignement est divisée en deux chapitres. Le premier est théorique, le second est pratique et consiste en la réalisation de travaux dirigés (TD) dans des laboratoires de programmation.

Matières de base utilisées

  • ALG2 ;
  • ANA2 ;
  • DEV2.

Corequis

Néant.

Objectifs

Apprentissage des langages C / C++ et en particulier de leurs spécificités par rapport à Java.

Apprentissage de bonnes pratiques de programmation en C et en C++.

Acquis d’apprentissage

  • Lire un code source C++20 et :

    • prévoir le fonctionnement du programme résultant ;
    • détecter les erreurs de compilation ;
    • détecter les erreurs d’édition des liens ;
    • détecter les erreurs à l’exécution.
  • Écrire du code C++20 en utilisant ou implémentant judicieusement :

    • les mots-clés du C++20 ;
    • les opérateurs et méthodes de bonne gestion des ressources (constructeurs, destructeur, opérateur d’assignation et de déplacement, pointeurs intelligents) ;
    • les conteneurs standards ;
    • les ranges ;
    • les algorithmes standards ;
    • les classes d’exception ;
    • le modèle de conception Observer ;
    • les techniques liées à l’héritage (surcharge, sur-définition, polymorphisme) ;
    • les modèles de fonctions et de classes (manipulations de base) ;
    • les expressions lambda.
  • Lire un code source C11 et :

    • prévoir le fonctionnement du programme résultant ;
    • détecter les erreurs de compilation ;
    • détecter les erreurs d’édition des liens ;
    • détecter les erreurs à l’exécution.
  • Écrire du code C11 en utilisant judicieusement :

    • les mots-clés du C11 ;
    • les tableaux statiques et les chaînes de caractères ;
    • les pointeurs ;
    • l’allocation dynamique de mémoire.
  • À ces acquis d’apprentissage généraux de l’unité d’enseignement, viennent s’ajouter ceux-ci spécifiques à son chapitre pratique :

    • utiliser avantageusement l’environnement de développement intégré choisi pour les laboratoires (Qt Creator) ;
    • documenter son code à l’aide de Doxygen ;
    • lire et tirer profit du contenu en français ou en anglais de sites de références tels cppreference.com ou cplusplus.com ;
    • écrire du code C++20 mettant en œuvre les notions étudiées au cours théorique ;
    • utiliser la bibliothèque standard C++20 ;
    • écrire du code C11 mettant en œuvre les notions étudiées au cours théorique ;
    • utiliser la bibliothèque standard C11 ;
    • utiliser des bibliothèques non standard de fonctions, fournies par les enseignants.

Ce qui est réellement acquis de ces apprentissages idéaux étant bien entendu mesurable à l’examen.

Plan du cours

Chapitre théorique

Le langage C++ (+-30 heures)

  • Historique ;
  • C++, un meilleur C : commentaire, emplacement des déclarations de variables, prototype de fonction, nullptr, void et const, référence de lvalue, référence de rvalue, fonction inline, new et delete, cin et cout, etc. ;
  • C++ : un langage orienté objet : classe, attribut, méthode, static, constructeur et destructeur, copie et déplacement, héritage, polymorphisme, sur-définition et surcharge de méthode, classe abstraite, amitié, etc. ;
  • C++ : une multitude d’apports autres que les objets : argument par défaut, surcharge de fonction et d’opérateur, gestion des exceptions, espace de nom, transtypage, programmation générique, expressions lambda, inférence de type, etc. ;
  • La bibliothèque standard : STL (conteneurs ; itérateur ; algorithmes; ranges), flux, string, etc.

Langage C (+-18 heures)

  • Historique.
  • Chaîne de production d’un programme C.
  • Fonction, prototype, fichier en-tête, directive au pré-processeur ;
  • Similitude avec Java des opérateurs et structures de contrôle ;
  • Types primitifs, énumération, structure et union ;
  • Pointeurs, tableaux, chaînes de caractères ;
  • Classes d’allocation des variables ;
  • Gestion dynamique de la mémoire ;
  • Fonctions de la bibliothèque standard.

Chapitre pratique

Une succession de TD, à raison d’un par semaine, sont prodigués, en synchronisme avec les matières abordées dans le chapitre théorique de l’unité d’enseignement.

Modalités d’évaluation

En première comme en seconde session, la note est composée à 50% d’une note de théorie, et 50% d’une note de pratique.

En première session,

  • la note de théorie est composée de deux interrogations théoriques écrites et d’un examen de théorie,
  • l’examen théorique est oral pour les étudiants en développement d’application, et écrit pour les étudiants en réseaux et industrielle,
  • les interrogations de théorie comptent respectivement pour 10% et 20% de la note de théorie si leur résultat est supérieur à celui de l’examen,
  • la note de pratique est composée d’une interrogation machine comptant pour 30%, et d’un examen machine comptant pour 70%.

En seconde session,

  • la note de théorie est composée d’un examen oral pour les étudiants en développement d’application, et écrit pour les étudiants en réseaux et industrielle,
  • la note de pratique est composée d’un unique examen machine.

Bibliographie

  • Peter Prinz et Tony Crawford, C in a Nutshell, 2nd Edition, O’Reilly Media (2015)
  • Marc Gregoire, Professional C++, 5th Edition, Wiley-Blackwell (2021)