UE : Programmation Orientée Objet (I4AEIL11) - Sujet de TD - INSA ...

La page est créée Anne Carpentier
 
CONTINUER À LIRE
UE : Programmation Orientée Objet (I4AEIL11)
Sujet de TD
Institut National des Sciences Appliquées de Toulouse
P.-E. Hladik, pehladik@insa-toulouse.fr
—
TD 1 : ma première classe
Version bêta (8 mars 2021)

        Message à caractère informatif : Configuration de Netbeans

    Afin de vous faciliter l’édition et la compilation du code, nous allons utiliser l’IDE (integrated
    development environment) Netbeans.
        Pour lancer
        Pour écrire du code en C/C++ et le compiler avec Netbeans 11, il faut activer un pluging
    sur votre compte.
        Suivez les étapes suivantes :
        — Aller dans le menu Tools > Plugins > Settings
        — Activer les options en cochant "Netbeans 8.2 plugins Portal"
        — Aller dans Available et rafraichir (Check for newest)
        — Choisir C/C++ et valider les étapes

1    Un premier projet en C++

        Objectif 1.1

       — faire un projet C++,
       — afficher un texte.

        (1.1) Travail à faire : Hello world

        1. Commencez par lancer Netbeans et créer un projet C/C++ de type C/C++ Ap-
           plication avec le nom que vous voulez (mais quelque chose de reconnaissable est
           souhaitable),
        2. attention lors de la création du projet cochez bien Create Main File et choisissez
           son type comme étant C++ 14,
        3. regardez le fichier main.cpp dans Sources Files,
        4. ajoutez du code pour afficher le message Bonjour le monde ! avec un saut de ligne
           et sans utiliser printf,
Programmation Orientée Objet & Temps réel (I4AEIL11)                                              2

        5. compilez, exécutez, observez,
        6. Supprimer la ligne using namespace std; du fichier main et refaite la même chose.

        (1.1) Comment faire : Les espaces de noms

    Attention toutes les bibliothèques standard font parties de l’espace de noms std. Pour
    pouvoir y faire référence vous devez :
       — soit en précédent l’appel à la function par std::, par exemple std::printf("toto"),
       — soit en ajoutant l’expression using namespace std; en début de fichier.

        (1.2) Comment faire : Affichez une chaîne de caractères

    Utilisez les ressources du C++ avec la gestion des flux standards. Pour cela vous aurez
    besoin des bibliothèques standards iostream (espace de noms std). La sortie est faite sur
    std::cout, on utilise l’opérateur
Programmation Orientée Objet & Temps réel (I4AEIL11)                                             3

      6. ajouter un destructeur dans lequel vous afficherez simplement un message RIP [prenom]
         [nom].,
      7. ajouter dans le main la déclaration d’une instance de personnage,
      8. compilez, exécutez, observez et expliquez ce qui se passe.

      (2.1) Comment faire : Déclaration d’une classe

  Une classe est décrite en C++ par :

  class MaClasse {
          ...
  };

      (2.1) Bonne pratique : string

  Le C++ offre une classe d’objet string (documentation) dans la bibliothèque standard pour
  gérer les chaînes de caractères. Avec cette classe il est possible par exemple de concaténer
  deux chaînes avec l’opérateur + ou de convertir une valeur en chaîne de caractère avec la
  méthode to_string, par exemple :
      int a = 1; cout
Programmation Orientée Objet & Temps réel (I4AEIL11)                                             4

              MaClasse (); // constructeur
    };

         (2.4) Comment faire : Implémenter une méthode

    L’implémentation d’une méthode se fait dans le fichier .cpp en incluant la déclaration de
    la classe et avec la syntaxe suivante :

    #include "MaClasse.h"

    MaClasse::toto (){
            ... // code de la méthode
    }

         (2.5) Comment faire : Déclarer un destructeur

    Toute classe a par défaut un destructeur, si on veut l’implémenter il faut déclarer une
    fonction dont le prototype est uniquement le nom de la classe précédé d’un , par exemple

    class MaClasse{
            ~MaClasse (); // destructeur
    };

         (2.3) Bonne pratique : remettre en forme son code

    Usez et abusez de la fonctionnalité Source->Format de Netbeans pour remettre en forme
    votre code.

3    Surcharge de constructeur

         Objectif 3.1

         — surcharger un constructeur,
         — utiliser new et delete.

         (3.1) Travail à faire : Surcharger le constructeur pour ajouter un nom

         1. Ajoutez un nouveau constructeur à la classe personnage qui prend comme para-
            mètres string prenom et string nom et int age avec comme valeur 20 par défaut
            pour ce dernier. Le constructeur doit allouer ces valeurs aux attributs lors de la
            construction.
         2. utiliser ce constructeur en déclarant une variable dans le main avec des nouvelles
            valeurs,
         3. compilez, exécutez, observez.
         4. remplacer l’instanciation de l’objet par un appel explicite à new

INSA Toulouse – 8 mars 2021
Programmation Orientée Objet & Temps réel (I4AEIL11)                                             5

      5. compilez, exécutez, observez.
      6. utiliser delete en fin de programme,
      7. compilez, exécutez, observez.

      (3.1) Comment faire : valeur par défaut

  En C++ il est possible de mettre des valeurs par défaut aux arguments d’une fonction dans
  sa déclaration (pas son implémentation), par exemple int f(int a, int b = 10, float
  c = 2.0); permet d’écrire f(0) qui est équivalent à f(0, 10, 2.0) ou f(0, 8) qui est
  équivalent à f(0, 8, 2.0). Attention il n’est pas possible de laisser de "trou", par exemple
  f(0,3.0) n’est pas correct car le second argument doit être un entier.

      (3.2) Comment faire : surcharger un constructeur

  Il est possible de surcharger un constructeur (mais aussi de manière plus générale une
  fonction) en déclarant ce constructeur avec des paramètres différents (le compilateur s’en
  sort tout seul lors de l’appel), par exemple

  class MaClasse{
  public:
          MaClasse ();
          MaClasse (string a);
          void toto (int a);
          void toto (int a, double b);
  };

      (3.3) Comment faire : utiliser un constructeur avec des paramètres

  Pour appeler un constructeur avec des paramètres, il suffit de passer ces paramètres lors de
  l’instanciation, par exemple :

           MaClasse toto (10);
           MaClasse * toto = new MaClasse (10);

      (3.4) Comment faire : Construction et desctruction avec new et delete

  La création d’un objet avec new se fait par un appel MaClasse *toto = new MaClasse ();
  et sa destruction par delete toto;.

INSA Toulouse – 8 mars 2021
Programmation Orientée Objet & Temps réel (I4AEIL11)                                           6

4    Enumerations

        Objectif 4.1

       — déclarer une énumération.

        (4.1) Travail à faire : La première classe

                                                       ersonnage.h qui prend pour valeur
       1. créer une énumération genre dans le fichier p
          masculin ou feminin ,
       2. Ajoutez à la classe personnage un nouvelle attribut _genre de type genre,
       3. modifiez les constructeur pour prendre en compte ce nouvel attribut,
       4. mettez à jour le message du constructeur pour gérer l’accord de né en fonction du
          genre (et on ne fait pas d’écriture inclusive).

        (4.1) Comment faire : énumération

    Une énumération est une classe particulière qui prend une liste de valeur, elle se dé-
    clare en C++ par : enum NomEnum {liste de valeurs}, par exemple enum Toto {valeur1,
    valeur2} déclare l’énumération Toto avec les valeurs valeur1 et valeur2. On peut ensuite
    déclare une variable du type de l’énumération qui ne pourra prendre qu’une valeur parmi
    celles déclarées, par exemple :
        Toto var = valeur1.

5    Implémenter une méthode

        Objectif 5.1

       — déclarer une méthode,
       — implémenter un méthode.

        (5.1) Travail à faire : Ajout d’une méthode

       1. ajouter une méthode public string identite() qui retourne la chaîne de caractère
          Salut, je m’appelle [prénom] [nom] et j’ai [age courant].
       2. utiliser la méthode identite depuis le main.

6    Les accesseurs et mutateurs

        Objectif 6.1

INSA Toulouse – 8 mars 2021
Programmation Orientée Objet & Temps réel (I4AEIL11)                                           7

     — créer des accesseurs efficaces,
     — créer des mutateurs.

      (6.1) Travail à faire : Ajout d’acesseurs et de mutateurs

      1. ajoutez une méthode int age_courant () qui retourne l’age courant d’un objet de
         type personnage,
      2. ajoutez une méthode set_age_courant(int age) qui permet de mettre à jour la
         valeur de age_courant,
      3. utilisez ces méthodes depuis le main.

      (6.1) Bonne pratique : accesseur

  Un accesseur retourne des valeurs des attributs, il est donc préférable de préciser que la
  méthode ne modifie pas les données par l’utilisation de const, par exemple :

  class MaClasse{
  private:
           int _att1;
  public:
           int att1 () const ;
  };

  int MaClasse::att1 () const {
          return _att1;
  }

      (6.2) Bonne pratique : création automatique

  Vous en avez marre d’écrire du code, demandez à Netbeans de la faire à votre place...
  Pour les accesseurs et mutateurs, vous pouvez aller dans Source->Insert Code, choisir
  ensuite getter and setter puis cocher les attributs pour lesquels vous voulez générer les
  méthodes.

INSA Toulouse – 8 mars 2021
Vous pouvez aussi lire