Découvrez les classes
Imaginez que vous n'ayez que quelques heures pour épater votre amie, qui vient vous retrouver après un long voyage. Pour rendre cet instant unique, vous avez tout préparé : vous comptez lui concocter un gâteau au chocolat dont elle se souviendra longtemps.
Ce gâteau se base sur une recette dont vous avez le secret. Vous la sortez donc du placard, et suivez méticuleusement les instructions... jusqu'à arriver au résultat ! Miam.
Ce principe de recette se retrouve en programmation orientée objet. Vous êtes le chef de votre code, et concoctez vos plats (que l'on appellera des objets) avec vos recettes (que l'on appellera des classes).
Et si nous parlons de « préparation » d'un plat en cuisine, nous parlerons plutôt d'instanciation de classe en programmation orientée objet (POO). 😊
Vous constatez que tous les gâteaux préparés avec la même recette sont similaires ? Il en est de même avec les objets partageant une même classe. Ils font partie de la même structure.
Mais qu’y a-t-il dans une classe, en réalité ?
Une classe contient un état et un comportement.
L’état fait référence à des données ou des variables. Une classe Cake
(Gâteau), par exemple, peut avoir une variable flavor
(saveur).
Le comportement d’une classe désigne simplement une série de choses que cette classe peut faire. Ce comportement est contenu dans les méthodes, qui sont identiques conceptuellement aux fonctions. Toujours pour reprendre notre exemple du gâteau, nous pourrions définir un comportement spécifique aux anniversaires (ajouter des bougies).
Prenons cet exemple. Ici, nous avons une recette pour Cake
qui spécifie qu’un gâteau a une saveur et la capacité d’être découpé en parts.
Notez en particulier que la recette elle-même a un « vide » pour la saveur du gâteau. C’est parce que la recette en elle-même n’est pas un élément réel existant dans le monde. Lorsque nous créons (ou instancions) un gâteau à partir de cette recette, le gâteau réel a une saveur.
La recette pour Cake
possède aussi la méthode cut_in_parts()
(« couper en parts »), ce qui signifie que tous les gâteaux créés à partir de cette recette la possèdent également (c’est-à-dire qu’ils ont tous le comportement« couper en parts »).
Alors, quelle est la différence entre une méthode et une fonction ?
Tout simplement, une méthode fait partie d’une classe, alors qu’une fonction est indépendante des classes. Les méthodes peuvent prendre des paramètres, modifier l’état interne de l’objet, appeler d’autres méthodes ou fonctions, et retourner des valeurs.
Étant donné qu’une méthode fait partie d’une classe, elle fait aussi partie d’un objet créé à partir de cette classe. La seule différence entre une fonction et une méthode, c’est que les méthodes font partie d’une classe/d’un objet.
Découvrez les objets
Si la classe sert de modèle, de recette pour créer nos objets, les objets sont des créations qui prennent vie dans votre code.
Les objets peuvent être stockés dans une variable, et le type de cette variable référence la classe. De la même façon que le type du chiffre « 5 » est un entier (int), et le type du mot « bonjour » est une chaîne de caractères (str), le type d’un objet gâteau est Cake
.
Vous pouvez modifier l’état d’un objet, ou appeler des méthodes dessus.
On peut instancier plusieurs objets de la même classe, et ces objets sont indépendants. Le fait de créer un plat chez vous ne le crée pas chez votre voisin.
Je peux déjà créer des variables et des fonctions, pourquoi créer des classes et des objets ?
La programmation orientée objet (POO) est une façon différente de penser la programmation, par rapport à la programmation procédurale que vous avez connue précédemment. Elle permet de structurer son code autrement, tout en ajoutant une couche d’abstraction supplémentaire : en définissant un monde d’objets proche de notre monde à nous.
Techniquement, il s’agit de manipuler des sortes de conteneurs (les classes), qui stockent à la fois des valeurs brutes (appelées « propriétés ») et des fonctions (appelées « méthodes »).
Dans le cas suivant, « Client » constitue la classe. Un Client peut avoir un nom, un numéro de téléphone et un compte en banque – soit un état – et vous voudrez peut-être pouvoir facturer ou rembourser ce client – soit un comportement.
Client |
État (Variables) name phone_number bank_account |
Comportement (Méthodes) bill_customer(cost) refund_customer(amount) |
Il est logique de lier ainsi les informations d’un client aux opérations que nous voulons leur appliquer. Suivez-moi dans le screencast ci-dessous pour en savoir plus sur les objets en Python :
À vous de jouer : identifiez les classes
Maintenant que nous avons une maîtrise basique des concepts, il est temps d’essayer de la mettre en pratique nous-mêmes. Munissez-vous d’une feuille de papier ou ouvrez un éditeur de texte.
Vous trouverez ci-dessous quelques lignes décrivant un contexte :
Pour chaque situation, identifiez une classe et créez un diagramme simple, en vous aidant du diagramme Client ci-dessus.
Ensuite, identifiez toutes les variables nécessaires en fonction de la description, suivies de toutes les méthodes. N’ajoutez que les attributs qui sont mentionnés dans la description.
C’est parti !
J’ai une boîte à outils. Cette boîte à outils peut contenir des outils, et je peux ajouter ou enlever des outils à la boîte à outils.
Je possède aussi des marteaux. Les marteaux peuvent être de couleurs différentes, et peuvent être utilisés pour planter et pour retirer des clous. Je peux également changer la couleur d’un marteau en le peignant.
Enfin, je possède aussi des tournevis. Ils ont une taille (mesurée en millimètres) et peuvent être utilisés pour serrer ou desserrer une vis.
Une fois que vous avez créé vos diagrammes, gardez-les ! Nous allons les utiliser au chapitre suivant, lorsque nous commencerons à écrire du code Python.
En résumé
Les classes sont des modèles pour les objets.
Les classes allient état (les données ou variables) et comportement (les méthodes) s’appliquant à ces données.
Un objet peut être créé et utilisé dans un programme.
Maintenant que vous connaissez les concepts de base, il est temps d’écrire du code orienté objet en Python.