top of page

PROGRAMMATION ORIENTÉE OBJET

La Programmation Orientée Objet (POO) est typique du langage Java. On peut cependant en faire avec Python ce qui peut être pratique pour certains projets. 

La POO est une approche en programmation qui consiste à créer un programme composé d'éléments indépendants (les objets) qui sont chacun responsables de leurs propres attributs et méthodes.

Les classes peuvent être comparées à des "moules" permettant de dupliquer un objet. Chaque classe a ses propres attributs et méthodes. 

Les attributs sont des caractéristiques d'un objet et les méthodes des actions réalisées par un objet.

En POO, tout commence avec une classe :

class Maclasse: # Le nom des classes commence toujours par une majuscule

Il y a ensuite la méthode de construction de la classe dans laquelle on définit les attributs de la classe. Cette méthode se définit avec le mot clé __init__ et a pour paramètres le mot clé self et le nom des différents attributs de la classe.

class Point: # Création d'une classe nommée Point

    def __init__(self, x, y): # Il y a toujours self dans les paramètres. self fait référence à la classe qu'on est en train de définir.

        self.x = x # On associe à chaque attribut de la classe (self.x) la valeur passée en paramètre (x)

        self.y = y # Même raisonnement pour y

 

On vient de créer la classe la plus simple, c'est-à-dire une classe sans véritable méthode permettant de faire des actions. On peut donc juste lui donner des valeurs et les modifier.

L’intérêt de la POO est qu'à partir d'une classe, on peut créer pleins d'instance de cette classe. On utilise souvent la comparaison avec les moules à gâteaux : avec un seul moule (une classe) on peut créer pleins de gâteaux (des instances de classe) avec des goûts différents (valeur des attributs).

Création de deux instances de la classe Point :

pt1 = Point(4,8) # Une instance de la classe Point où x=4 et y=8

pt2 = Point(2,12) # Une autre instance de la classe Point où x=2 et y=12

pt1.x = 20 # Modification de l'attribut x de l'instance pt1 de la classe Point. x vaut maintenant 20.

Ensuite, on peut définir de nouvelles méthodes pour pouvoir faire des actions sur les instances de classe. À savoir que les noms de méthode sont souvent des verbes à l'infinitif. 

Définition de deux méthodes :

def decaler_droit(self, decalage): # Il y a toujours self dans les paramètres.

    self.x += decalage 

def decaler_bas(self, decalage): # Il y a toujours self dans les paramètres.

    self.y -= decalage

Pour utiliser une méthode, on précise le nom de l'instance (correspondant au self dans la définition de la méthode) puis on indique le nom de la méthode avec les valeurs de paramètres nécessaires.

pt1.decaler_droit(2) # L'attribut x de l'instance pt1 vaut maintenant 22 (20+2)

pt1.decaler_bas(3) # L'attribut y de l'instance pt1 vaut maintenant 5 (8-3)

Pour que Python nous renvoie la valeur d'un attribut d'une instance, il faut lui indiquer le nom de l'instance et celui de l'attribut, le tout séparé par un point.

print(pt1.x) # Affiche la valeur de l'attribut x de l'instance pt1, c'est-à-dire 22

Enfin, en POO, il existe des méthodes spéciales (repérables avec les doubles underscores entourant le nom de la méthode). La méthode méthode __init__ est par exemple une méthode spéciale.

Les méthodes spéciales sont des méthodes que l'on utilise non pas avec nomInstance.nomMéthode mais en utilisant directement certains mots clés de Python. C'est le cas par exemple des opérateurs arithmétiques, des opérateurs de comparaison ou de la fonction print. 

Python arrive à faire le lien entre la méthode spéciale et le mot clé, c'est-à-dire que quand on utilise le mot clé, Python appelle la méthode spéciale.

Exemple de la méthode spéciale de print (nommé str sous Python) :

def __str__(self):  # Le seul paramètre est self car quand on utilisera print, on précisera seulement l'instance de la classe.

    return f'La valeur de x est {self.x} et celle de y est {self.y}' # Pour faire appel aux attributs, on utilise le même principe que précédemment c'est-à-dire nomInstance.nomAttribut. Dans la définition des méthodes, on fait référence à l'instance avec le mot clé self. 

print(pt1) # Affiche 'La valeur de x est 22 et celle de y est 5'

Exemple de la méthode spéciale de l'opérateur + souvent appelée surcharge de l'addition (nommé add sous Python) :

def __add__(self, autrePoint):  # Les deux paramètres sont self (instance depuis laquelle on appelle la méthode) et autrePoint

    somme = Point(self.x + autrePoint.x, self.y + autrePoint.y) # Création d'une instance qui est l'addition entre les attributs des deux instances self et autrePoint

    return somme

print(pt1+pt2) # Affiche 'La valeur de x est 24 et celle de y est 17'. Ici pt1 correspond à self et pt2 à autrePoint. On aurait pu remplacer pt1+pt1 par pt1.__add__(pt2).

 

Toutes les méthodes présentées dans cette fiche sont bien sûr à mettre dans la définition de la classe, de la même manière que la méthode de construction __init__.

Enfin, voici une liste non exhaustive des méthodes spéciales en Python :

Capture.PNG
bottom of page