Programmation Objet en Langage C++ - Inria

La page est créée Gérard Weber
 
CONTINUER À LIRE
Programmation Objet
       en
   Langage C++
Organisation
•   3 séances de Cours Magistral
     •   Romain Pacanowski @ institutoptique.fr

•   13 séances de TP sur machines
     •   Bertrand Simon @ institutoptique.fr

•   7 séances sur un projet de programmation
     •   Séances non encadrées
     •   En binôme
     •   Sujets assignés aux binôme aléatoirement

                                                    2
Page du Cours et des TP

    http://manao.inria.fr/perso/~pac/cpp.php
•   Notes de Cours
•   Sujets des TP
•   Sujets des Projets
•   Bibliographie

                                               3
Évaluation
•   Travaux Pratiques
      •   Remise de code en fin de
            •   Séance 5
            •   Séance 13
•   Examen Final
      •   Décembre 2017 13h30 (à confirmer)
      •   Soutenance orale sur le projet
            •   10 minutes
            •   Passage par binôme
            •   Evaluation individuelle
•   Copier/Coller de code

                                              4
Rappel sur le plagiat
                  Copier-coller de code == Plagiat
    Dans tout établissement d’enseignement supérieur:
• Conséquences:
       •   Zéro à l’examen
       •   Absence de rattrapage
       •   Validation de l’année déterminée par le jury final
    En entreprise:
       •   Poursuite judiciaire
       •   Sanction: blâme jusqu’au licenciement pour faute
•   Discussions et échanges sont encouragés

                                                                5
Travail Personnel
•   Programmer == Pratiquer (Beaucoup !)
      •   Début: activité chronophage (C’est normal !)
•   Minimal:
      •   Faire les exercices de TP en séance
                Ne pas être passif !
      •   Refaire les exemples des slides du cours
•   Conseillé:
      •   Lire d’autres cours C++
      •   Suivre des tutoriaux:
     https://openclassrooms.com/courses/programmez-avec-le-langage-c

                                                                       6
L’activité de Programmer
•   Ecrire avec convention de codage
     http://manao.inria.fr/perso/~pac/teaching/cpp/conventions-codage.pdf

•   Compiler
      •   Compilateur
•   Corriger (e.g., erreur de syntaxe)
•   Executer
•   Corriger (e.g., segfault)
      •   Débogueur
•   Tester
      •   Automatique (e.g., Catch)

                                                                            7
Déroulement des Cours
•   Cours 1
     •   Tour d'horizon rapide du C++
     •   Éléments de programmation impérative en C++
     •   De la Structure C à la Classe C++

•   Cours 2

•   Cours 3

                                                       8
Historique C, C++, Java et C#, Python
C+                           1979
                                       1983
                                          1985             1989        1998     2003     2011
+                              Travaux         1st          2nd        ISO      ISO      ISO
                                  pré        Releas        Releas       C+       C+     C++11
                                 C++           e             e         +98      +03
                              Stroustrup
                                @Bell
                                 Labs
      Simula                                    GCC           Python    Java      C#

      1967                                   1987            1994       1995     2002
                     Noyau
                      Unix
                       C       K&R                         C89
      Travaux pré.
        Ritchie &             C-Book
       Thomson                                                                 C99       C11
C     @Bell Labs
                                       Travaux de l'ANSI

    1963             1973    1978   1983               1989/90                 1999      2011
Standardisations/Normes du C++
•   C++98
     •   1998 : ISO/IEC 14882:1998
•   C++03
     •   2003 : ISO/IEC 14882:2003
•   C++TR1
     •   2007 : ISO/IEC TR 19768:2007
•   C++11 (avant C++0x)
     •   2011 : ISO/IEC 14882:2011
•   C++14
•   C++17
                                        10
Design du C++
l   Syntaxe épurée du C
        → Conserver le savoir-faire != compatibilité du code
l   Améliorer la productivité du programmeur
    −   Simplifier le langage à la place du compilateur
l   Portabilité et Efficacité similaire au C
    −   « Zero-overhead » principle
l   Liberté : responsabiliser le programmeur
    −   e.g., gestion de la mémoire
Design du C++

l   Limitations historique du C
    −   Assembleur de haut niveau != langage de prog. impératif

    −   L'absence
         l   de typage des macros
         l   de passage par adresse (par opposition à copie)

    −   La rarification des noms d'identificateurs
Caractéristiques générales du C++
•   Langage compilé
•   Syntaxe ala C
      •    Transition facilitée des développeurs
•   Typage statique (à la compilation)
•   C++
      •   6= N’est pas une extension objet du C
      •    Un programme C ne compile pas forcément en C
            ++
      •    Même en appliquant la norme ISO.

                                                          13
Caractéristiques générales du C++

•   « Grande Comptabilité » avec le C
      •   Conversion des librairies C pour utilisation depuis
           C++

•   Multiplateformes en appliquant la norme ISO
      •   Window, Mac OS , Linux, *BSD (e.g., FreeBSD)

•   Gestion des erreurs avec des exceptions

                                                                14
Caractéristiques générales du C++

•   Paradigmes de programmation :
     •   Impérative
     •   Programmation par objet
     •   Générique (templates)
     •    Meta-templates....

                → Langage « hybride »

                                        15
Objectifs du Cours et des TP
•   Maîtrise des Concepts clés C++
      •   Référence
      •   Constness

•   Concepts fondamentaux de POO
      •   Classe, Objet, Héritage, Polymorphisme,
           Composition, Agrégation

•   Initiation et Utilisation
      •   Standard Templates Library (STL)

                                                    16
Démo 1 sur le C++ impératif

                              17
Premier exemple en C++
 1: #include 

 3: int main(int argc, char** argv )
     {
 4:       std::cout
Types de données en C++
•   Types primitifs (fondamentaux)
      •   Très proches du langage C
      •   Types signés et non-signés (unsigned)
      •   Compris intrinsèquement par le compilateur

•   Types abstrait/objet
      •   Classes créés par le programmeur
      •   Appris à la « volée » par le compilateur

                                                       19
Types primitifs
•   Norme C++
     •   Ne spécifie pas le nombre de bits
     •   Utilisation de → sizeof()
     •   Valeurs minimales et maximales que le type
            •   #include 
            •   #include 
            •   Exemple
                   •   std::numeric_limits::min()
•   4 types de base
     •   char, int, float, double

                                                           20
Types primitifs
•   4 types de base
     •   char, int, float, double
•   bool
     •   Valeurs : true or false
     •   Conversion du compilateur vers int
     •   → mauvais usage (historique)
•   Valeurs minimales et maximales du type
         #include 
         #include 

                                              21
Modificateurs de types primitifs
•   4 modificateurs
      •   long, short,unsigned, signed
•   Hiérarchie
      •   sur les entiers : short int, int, int, long int
      •   sur les flottants : float, double, long double
•   signed
      •   Implicite sur tous les types sauf char

                                                            22
Exercice sur les types primitifs
•   Afficher la taille de tous les types
      •   en utilisant l'opérateur sizeof
      •   avec et sans modificateurs
•   Afficher la borne inf et sup
      •   de chacun des types primitifs
      •   utilisez
            •   std::numeric_limits::min()
            •   std::numeric_limits::max()

                                                   23
Slides Complémentaires

        Partie
Programmation Impérative

                           24
Inclusion des fichiers en-tête (1/2)
     // Header type 
     #include              // Header lib STL (C++)
     #include < iostream >           // Ne marchera PAS
La syntaxe 
l Utiliser pour la librairie standard
l Abstraction du système de fichier (nom, répertoire) de l'OS

Le préprocesseur se charge :
l

 l De trouver quel fichier correspond au nom (iostream ici)

 l De remplacer la directive d'inclusion par le contenu du fichier

   trouvé (copy & paste)

Arbres de recherche                                                  73
Inclusion des fichiers en-tête (2/2)
  // Header type "…"
  #include "myvect.hpp"      // Depuis dir. courant
  #include "math/myvect.hpp"    // Chemin vers rep.
math
La syntaxe "..."

l   Le préprocesseur se charge :
    l   d'inclure le fichier spécifié à partir du répertoire courant d'appel
        du compilateur/pré-processeur
    l   De remplacer la directive d'inclusion par le contenu du fichier
        trouvé (copy & paste)

Arbres de recherche                                                            74
Pointeur

l   Modèle de mémoire                       Adresses   Mémoire
                                               ...        ...
    −   adresses continues et croissantes
                                            000012        ...
                                            000008       ….
l   Opérateur adresse                       000004     int b = 4
                                            000000     int a = 3
    −   identique en C et C++
    −   Syntaxe : &
Pointeur : un premier exemple
#include 
using namespace std;
int toto, tutu, titi, tata ;
void f( int x ) { cout
Pointeur : un premier exemple
#include 
using namespace std;
int toto, tutu, titi, tata ;
void f( int x ) { cout
Pointeur : opérateur de déférencement
1:    #include 
      using namespace std;
2:
      int toto, tutu, titi, tata ;
3:
      void f( int x ) { cout
Introduction aux références
•   Références n'existent qu'en C++
•   Forme plus sûre
      •   Passage par adresse à une fonction
      •   Nécessité pour les classes et les objets
•   Attention !
      •   Syntaxe identique à l'opérateur d'adressage (&)
•   Définition Formelle:
      •   Pointeur constant (sûreté) automatiquement
           déférencé (facilité d’utilisation, pas de -> )
•   Truc: Référence est à gauche du signe "="

                                                            31
Exemple d'utilisation de référence
    1: #include 
    2: using namespace std;
    3:
    4:
    5: void f( int & r ) {
    6: cout
Exemple d'utilisation de référence
    1: #include 
    2: using namespace std;
    3:
    4:
    5: void f( int & r ) {
                                           Passage par référence de r !!!
    6: cout
Exemple d'utilisation de référence
    1: #include 
    2: using namespace std;
    3:
    4:
    5: void f( int & r ) {
                                           Passage par référence de r !!!
    6: cout
Caractéristiques générales du C++

•   Paradigmes de programmation :
    −   Impérative
    −   Programmation par objet
    −   Générique (templates)
    −    Meta-templates....
→ Langage « hybride »
Vous pouvez aussi lire