La Programmation Orientée Objet (POO)
Qu'est-ce qu'un objet ?
En programmation, on peut définir un objet de deux manières différentes. D'un point de vue plutôt technique d'une part, on peut dire qu'un objet est une structure de données définie par un certain nombre d'attributs et de méthodes. Ses attributs sont des propriétés associées à l'objet, tandis que ses méthodes sont des fonctions qui le concernent.
Par exemple, les listes sont des objets définies quelquepart dans le code de python. Elles sont associées à des méthodes, telles que append(), pop(), etc.
Pour définir une liste, on utilise un modèle appelé classe. La classe list ne représente pas une liste en particulier, mais définit ce qu'est une liste.
Lorsqu'on crée une liste, on dit qu'on crée une instance de la classe list.
#On définit dans un premier temps la classe list :
class list:
#Définition des attributs d'une liste
#Définition des méthodes d'une liste
def append(...):
...
def pop(...):
...
...
#Dans un deuxième temps, on crée une instance de l'objet list :
liste1 = list(1,2,3)
#Cette instance possède alors les attributs et les méthodes de l'objet list.
liste1.append(4)
liste1.pop()
L'autre façon de voir les objets en programmation, c'est de les envisager en tant que représentation d'un concept. Les objets permettent en effet de représenter, dans le code, un concept issu du réel.
Supposons par exemple que l'on veuille écrire un programme permettant de déplacer un personnage dans deux dimensions. Une des premières questions que le développeur va se poser est "comment représenter le personnage dans mon programme ?"
Une réponse possible : Créer un objet Personnage.
On peut alors lui associer des attributs : sa position, sous forme d'un tuple (x,y), sa vitesse, sous forme d'un tuple (vx, vy) ainsi que des méthodes : avancer, reculer, sauter, etc.
On crée ainsi un objet Personnage qui transpose l'équivalent d'un concept dans le langage de programmation, en ne gardant que les éléments qui nous paraissent utiles
pour le représenter, ce qui nous permet de le manipuler.
Vocabulaire
- Un objet est une façon d'organiser des données permettant de représenter facilement un sujet dans un langage de programmation. Le sujet est souvent un concept issu du monde réel, mais pas nécessairement.
- En python, un objet est défini par un modèle, appelé classe, qui recense l'ensemble des attributs et des méthodes qu'il va contenir :
- Les attributs d'un objet sont des variables qui lui sont liées.
- Les méthodes sont des fonctions qui lui sont liées
- Une fois la classe définie, on peut créer des exemplaires de l'objet, aussi appelés des instances
Définition d'une classe en python
On l'a vu dans l'exemple au dessus, on crée une classe en python en utilisant le mot clé class.
Ensuite, on définit à l'intérieur (dans un bloc indenté) l'ensemble des méthodes associées à la classe.
Constructeur
La première méthode à définir dans une classe est un peu particulière, il s'agit du constructeur de la classe.
C'est cette méthode qui est appelée au moment où python doit créer une nouvelle instance de la classe. Pour que python sache de quelle méthode il s'agit, elle a un nom fixe : __init__ (avec deux symboles souligné '_' de chaque côté)
Définissons par exemple la classe de notre personnage :
Explications
Vous êtes probablement un peu désorientés par l'apparition du mot self dans la plupart des lignes du code.
Il s'agit en fait d'un nom de variable comme un autre, envoyée par python au constructeur __init__, et cette variable contient l'instance de l'objet concernée par le code en train d'être écrit. Autrement dit, self représente l'objet en train d'être construit.
Par la même occasion, on se rend compte ici que les attributs x, y et position de l'objet sont définis dans le constructeur, en utilisant la même notation pointée que celle que l'on connaît déjà pour les méthodes.
On peut alors créer une instance de Personnage et accéder à ses attributs
On remarque que les valeurs x, y et position ne sont pas vraiment liées. C'est pour cette raison que nous allons créer des méthodes avancer et reculer qui permettent de modifier la valeur de x, tout en mettant à jour la valeur de position.
Remarque
On observe ici que l'on crée une méthode en définissant une fonction à l'intérieur de la classe. Le seul point particulier est que le premier argument de la méthode est toujours self.
En effet, lorsque la méthode est appelée à partir d'une instance (instance.methode()),
python récupère l'instance à l'origine de l'appel et la fournit à la méthode en premier argument.
Attributs d'instance vs Attributs de classe
Supposons que l'on veuille fixer une caractéristique commune à tous les personnages. Par exemple leur vitesse.
On pourrait définir un attribut vitesse et le fixer à l'initialisation de l'instance, comme ceci :
Mais supposons que l'on veuille modifier cette vitesse. Il faudrait alors parcourir tous les personnages et modifier leur vitesse, une par une.
Une autre solution consiste à associer un attribut de classe à la classe Personnage, et non à ses instances. Chaque instance aura alors accès à cet attribut partagé :
Attributs et méthodes de classe
Un attribut de classe est un attribut associé à la classe elle-même, pas à ses instances. Il est accessible à partir de la classe, ET à partir de ses instances. On les définit directement dans la classe, et sans le mot clé self.
Les méthodes de classe suivent le même principe et peuvent être appelées à partir de la classe, ou à partir de ses instances. On les définit comme les méthodes normales, mais sans le premier argument self.

