8. Créer - class

La programmation orientée objet met au centre de la programmation la notion d’objet. Des objets individuels sont créés à partir d’un modèle qu’on appelle classe.

Un objet est caractérisé par ses attributs (variables) et méthodes (fonctions). La programmation orientée objet attache les attributs et méthodes à l’objet même et permet de cette façon un code très structuré et facilement extensible. Nous allons voir que :

  • le mot-clé class permet de définir un modèle pour créer des objets,

  • l’expression point = Point() crée un nouvel objet à partir d’une classe,

  • un objet possède des attributs et des méthodes.

Question

En programmation orientée objet une classe est




8.1. Définir une classe

Le mot-clé class permet de définir une classe, ici la classe Point. C’est une convention en Python, que le nom de classe soit écrit avec une majuscule. Pour définir une classe, nous écrivons :

  1. le mot-clé class

  2. le nom de la class (avec une majuscule)

  3. des parenthèses optionnelles (classe parent)

  4. un deux-points :

  5. un bloc en indentation

Exercice 1

Créez une deuxième classe Rectangle et affichez son type.

8.2. Créer des objets

À partir d’une class, nous pouvons créer autant d’objets que nous voulons. L’expression Point() crée un objet de type Point. On dit aussi qu’on crée une instance de la classe Point.

Pour créer une instance, on utilise le nom de la classe suivi de parenthèses. Plus tard nous verrons qu’il peut y avoir des arguments entre ces parenthèses.

Une classe est comme un moule qui nous permet de créer des copies, à partir d’une définition de classe.

Exercice 2

Créez encore d’autres instances de la classe Point.

8.3. Définir des attributs

La notation dotée permet de définir des attributs à un objet. Par exemple le point peut avoir un attribut x et y. Il pourrait avoir une couleur, une épaisseur, etc.

La fonction dir() affiche les attributs d’un objet.

8.4. La méthode __init__()

Chaque classe possède une méthode spéciale __init__() que nous appelons constructeur. Cette méthode est appelée lors de la création de l’objet. Son premier paramètre est toujours self, qui représente l’objet lui-même. Cette fonction est utilisée pour initialiser les attributs avec les valeurs initiales.

8.5. La méthode __str__()

Toutes les classes possèdent aussi une méthode spéciale __str__() qui retourne une chaîne de caractères. Cette chaîne est un descripteur de l’objet. Il est utilisé quand on affiche l’objet avec la fonction print().

Souvent la représentation d’un objet sous forme de texte ressemble à son constructeur, et affiche le nom de la classe et quelques attributs essentiels.

8.6. Définir une méthode

Dans la définition de classe, nous pouvons définir des méthodes supplémentaires. Le premier paramètre de toute méthode est self, la variable qui représente l’objet lui-même.

8.7. Classe Dot

Essayons maintenant de créer une classe pour un objet graphique. Définissons la classe Dot avec les attributs:

  • position

  • diamètre

  • couleur

et les méthodes

  • __init__() du constructeur

  • __str__() du descripteur

  • draw() pour dessiner l’objet

8.8. Objet cliquable

Nous ajoutons maintenant une fonction de rappel pour basculer la couleur du disque entre rouge et vert quand on y clique avec la souris.

8.9. Dot cliquable

Dans l’exemple suivant nous avons deux points p0 et p1 qui

  • basculent d’état quand on y clique.

  • montrent leur état 0 ou 1,

  • changent de couleur entre gris et jaune.

Le troisième point p2 tient son état à partir de la relation logique p0 and p1.

8.10. Classe Rectangle

Par la suite nous allons voir comment nous pouvons transformer une programmation procédurale en programmation orientée objet. Prenons le cas d’un rectangle.

Dessinons un rectangle de taille (a, b) à la position (x, y).

Maintenant implémentons une class Rectangle. Nous allons ajouter plusieurs options :

  • angle d’inclinaison

  • couleur du trait

  • épaisseur du trait

  • couleur de remplissage

Nous utilisons None si il n’y a pas de remplissage ou pas de trait.

8.11. Classe Ellipse

Commençons de nouveau avec une fonction procédurale pour dessiner une ellipse.

Et maintenant la même chose en programmation orientée objet.

8.12. Classe Card

Les cartes de jeux sont représentées avec un rectangle arrondi et un des 4 symboles (coeur, pique, carreau, trèfle).

8.13. Exercices

Les exercices ci-dessous utilisent la classe Button. C’est une classe extrêmement important pour une interface graphique. Toute interface graphique, et encore plus les smartphones et tablettes utilisent des boutons pour interagir avec l’utilisateur.

Jeu avec boutons

Retournez au jeux de Go dans les exercices du chapitre Cliquer intégrez des boutons pour

  • recommencer une nouvelle partie

  • quitter le jeu

Calculatrice

Ci-dessous vous avez le début du code pour une calculatrice. La classe Button est utilisée également pour afficher le résultat. Dans l’objet display nous changeons donc la taille, la couleur et l’alignement.

Votre tâche est d’ajouter le code pour faire fonctionner la calculatrice. Pour vous donner une idée, le bouton 1 a été implémenté. Vous devez ajouter le code pour les 18 autres boutons.

Challenge : Transformer le code en calculatrice scientifique avec les fonctions trigonométriques et autres.