• 10 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 10/02/2022

Créez une classe

Au chapitre précédent, vous avez vu que la programmation orientée objet pouvait nous simplifier la vie en masquant, en quelque sorte, le code complexe. C'est un des avantages de la POO mais ce n'est pas le seul, comme vous allez le découvrir petit à petit : les objets sont aussi facilement réutilisables et modifiables.

À partir de maintenant, nous allons apprendre à créer des objets. En effet, on peut créer un objet de 100 façons différentes, et c'est à nous de choisir à chaque fois la meilleure, la plus adaptée. Ce n'est pas évident, il faut donc bien réfléchir avant de se lancer dans le code comme un forcené.

Allez, on prend une grande inspiration et on plonge ensemble dans l'océan de la POO !

Créez une classe

Commençons par la question que vous devez vous poser.

Je croyais qu'on allait apprendre à créer des objets, pourquoi tu nous parles de créer une classe maintenant ? Quel est le rapport ?

Eh bien justement, pour créer un objet, il faut d'abord créer une classe !

Je m'explique : pour construire une maison, vous avez besoin d'un plan d'architecte non ? Eh bien imaginez simplement que la classe c'est le plan, et que l'objet c'est la maison.

Créer une classe, c'est donc dessiner les plans de l'objet. Une fois que vous avez fait la classe (le plan), vous pouvez créer autant d'objets du même type que vous voulez.

Une fois la classe créée, on peut construire des objets

Créer une classe, oui mais laquelle ?

Avant tout, il va falloir choisir la classe sur laquelle nous allons travailler.

Reprenons l'exemple sur l'architecture : allons-nous créer un appartement, une villa avec piscine, un loft spacieux ? En clair, quel type d'objet voulons-nous être capables de créer ?

Les choix ne manquent pas. Je sais que, quand on débute, on a du mal à imaginer ce qui peut être considéré comme un objet. La réponse est : presque tout !

Vous allez voir, vous allez petit à petit avoir le "feeling" qu'il faut avec la POO. Puisque vous débutez, c'est moi qui vais choisir (vous n'avez pas trop le choix, de toute façon !). Pour notre exemple, nous allons créer une classe Personnage qui va représenter un personnage de jeu de rôle (RPG).

Bon, on la crée cette classe ?

C'est parti !

Voici le code minimal pour créer une classe :

class Personnage
{
    
}; // N'oubliez pas le point-virgule à la fin !

Comme vous le voyez :

  1. On utilise le mot-clé class  .

  2. Suivi du nom de la classe que l'on veut créer. Ici, c'est Personnage  .

Ajoutez des méthodes et des attributs

Bon, c'est bien beau mais notre classe Personnage est plutôt... vide.

Que va-t-on mettre dans la classe ?

Vous le savez déjà, voyons :

  • des attributs (c'est le nom que l'on donne aux variables contenues dans des classes) ;

  • des méthodes (c'est le nom que l'on donne aux fonctions contenues dans des classes).

Le but du jeu, maintenant, c'est justement d'arriver à faire la liste de tout ce qu'on veut mettre dans notre Personnage  .

De quels attributs et de quelles méthodes a-t-il besoin ?

C'est justement l'étape de réflexion, la plus importante.

Par quoi commencer : les attributs ou les méthodes ?

Il n'y a pas d'ordre, en fait, mais je trouve un peu plus logique de commencer par voir les attributs puis les méthodes.

Définissez les attributs

C'est ce qui va caractériser votre classe, ici le personnage. Ce sont des variables, elles peuvent donc évoluer au fil du temps.

OK, mais qu'est-ce qui caractérise un personnage de jeu de rôle ?

Allons, un petit effort ! Par exemple :

  • Tout personnage a un niveau de vie. Hop, cela fait un premier attribut : vie ! On dira que ce sera un int et qu'il sera compris entre 0 et 100 (0 = mort, 100 = toute la vie).

  • Dans un jeu de rôle, il y a le niveau de magie, aussi appelé mana. Là encore, on va dire que c'est un int compris entre 0 et 100. Si le personnage a 0 de mana, il ne peut plus lancer de sort magique et doit attendre que son mana se recharge tout seul au fil du temps (ou boire une potion de mana !).

  • On pourrait rajouter aussi le nom de l'arme que porte le joueur : nomArme. On va utiliser pour cela une  string  .

  • Enfin, il me semble indispensable d'ajouter un attribut degatsArme, un int qui indiquerait cette fois le degré de dégâts que porte notre arme à chaque coup.

On peut donc déjà commencer à compléter la classe avec ces premiers attributs :

class Personnage
{
    int m_vie;
    int m_mana;
    string m_nomArme;
    int m_degatsArme;
};

Deux ou trois petites choses à savoir sur ce code :

  1. Ce n'est pas une obligation, mais une grande partie des programmeurs (dont moi) ont l'habitude de faire commencer tous les noms des attributs de classe par "m_" ; c'est pour indiquer que c'est une variable membre, c'est-à-dire un attribut. Cela permet de bien différencier les attributs des variables classiques (contenues dans des fonctions, par exemple).

  2. Il est impossible d'initialiser les attributs ici. Cela doit être fait via ce qu'on appelle un constructeur, comme on le verra un peu plus loin.

  3. Comme on utilise un objet string  , il faut bien penser à rajouter un #include <string>  dans votre fichier.

Implémentez les méthodes

Les méthodes, elles, sont grosso modo les actions que le personnage peut effectuer ou qu'on peut lui faire faire.

Voici quelques actions réalisables avec notre personnage :

  • recevoirDegats  : le personnage prend un certain nombre de dégâts et donc perd de la vie.

  • attaquer  : le personnage attaque un autre personnage avec son arme. Il inflige autant de dégâts que son arme le lui permet (c'est-à-dire degatsArme  ).

  • boirePotionDeVie  : le personnage boit une potion de vie et regagne un certain nombre de points de vie.

  • changerArme  : le personnage récupère une nouvelle arme plus puissante. On change le nom de l'arme et les dégâts qui vont avec.

  • estVivant  : renvoie true si le personnage est toujours vivant (il possède plus que 0 point de vie), sinon renvoie false  .

C'est un bon début, je trouve.

On va rajouter cela dans la classe avant les attributs (en POO, on préfère présenter les méthodes avant les attributs, bien que cela ne soit pas obligatoire) :

class Personnage
{
    // Méthodes
    void recevoirDegats(int nbDegats)
    {

    }

    void attaquer(Personnage &cible)
    {

    }

    void boirePotionDeVie(int quantitePotion)
    {

    }

    void changerArme(string nomNouvelleArme, int degatsNouvelleArme)
    {

    }

    bool estVivant()
    {

    }

    // Attributs
    int m_vie;
    int m_mana;
    string m_nomArme;
    int m_degatsArme;    
};

Ceci dit, vous devriez déjà avoir une petite idée de ce que vous allez mettre dans ces méthodes :

  • recevoirDegats retranche le nombre de dégâts (indiqués en paramètre par nbDegats  ) à la vie du personnage ;

  • attaquer prend en paramètre... un autre personnage, plus exactement une référence vers le personnage cible que l'on doit attaquer, et elle appellera la méthode recevoirDegats de la cible pour lui infliger des dégâts.

Pour info, cette classe ne comporte pas toutes les méthodes que l'on pourrait y créer : par exemple, on n'utilise pas de magie ici. Le personnage attaque seulement avec une arme (une épée, par exemple) et n'emploie donc pas de sort. Je laisse exprès quelques fonctions manquantes pour vous inciter à compléter la classe avec vos idées.

En résumé

  • Il est nécessaire de créer une classe pour pouvoir ensuite créer des objets.

  • La classe est le plan de construction de l'objet.

  • Une classe est constituée d'attributs et de méthodes (variables et fonctions).

Vous savez maintenant créer une classe. Nous allons maintenant nous intéresser au concept le plus fondamental de la POO : la gestion des droits d'accès et l'encapsulation.

Exemple de certificat de réussite
Exemple de certificat de réussite