Bienvenue dans notre cours ‘Programmation orientée objet en Python’. Ce cours traite les concepts fondamentaux de la POO. Aussi, on explique , puis implémente, les principes de la POO comme l’encapsulation, l’héritage, le polymorphisme et l’abstraction.

Alors, dans cette partie de cours, on va découvrir le polymorphisme en POO.

Polymorphisme en POO : Définition

Le mot polymorphisme vient du grec et signifie “qui peut prendre plusieurs formes”. Dans la programmation orienté objet, le polymorphisme est utilisé en relation avec les fonctions, les méthodes et les opérateurs. Des fonctions et des méthodes de mêmes noms peuvent avoir des comportements différents ou effectuer des opérations sur des données de types différents.

On va voir les différents types de polymorphisme qui sont : 

  1. La redéfinition des méthodes
  2. La surcharge des méthodes
  3. La surcharge des opérateurs

La redéfinition des méthodes

En Python, Polymorphisme nous permet de définir des méthodes dans la classe enfant portant le même nom que les méthodes de la classe mère. En héritage, la classe enfant hérite des méthodes de la classe mère. Toutefois, il est possible de modifier une méthode dans une classe enfant héritée de la classe mère. Ceci est particulièrement utile dans les cas où la méthode héritée de la classe mère ne convient pas tout à fait à la classe enfant. Dans ce cas, nous ré-implémentons la méthode dans la classe enfant. Ce processus de ré-implémentation d’une méthode dans la classe enfant s’appelle une méthode redéfinie 

Vous pouvez voir le concept de redéfinition (“overriding” en anglais) et son implémentation qu’on a déjà traité ici

Surcharge des méthodes

En programmation orientée objet, la surcharge, aussi appelée « overloading », consiste à déclarer, dans une même classe, deux méthodes de même nom mais avec des sémantiques différentes :

– Même nom de méthode,
– Paramètres différents (soit sur le nombre ou le/les type(s))

Autrement dit, le mécanisme de surcharge permet de créer une méthode de différentes manières. Et donc, l’utilisateur de cette méthode peut l’utiliser selon son besoin. 

Exemple : La fonction input , en python, peut etre utiliser avec ou sans paramètre : 

x= input("Donner un mot :")

y=input()

Le fait de pouvoir utiliser cette fonction avec différentes manières , montre que le développeur qu’il l’a créée a donné cette possibilité. On dit alors, que la fonction input est surchargée. 

Remarque : La plupart des méthodes et fonctions sont surchargées .

Surcharge des méthodes en python :

Si on veut implémenter la surcharge de méthodes en suivant sa définition. C’est à dire, on crée une méthode donnée plus qu’une fois avec des paramètres différents. Le problème qu’on va rencontré est que python va connaitre la dernière définition de la méthode. Alors que , les autres définitions seront écrasées!!

D’où, l’implémentation de la surcharge des méthodes en python doit s’effectuer différemment!!

Régle : 

En python, on définit une méthode une seule fois. Puis, on implémente le corps et les paramètres de la méthode pour pouvoir traiter toutes les possibilités. 

Exemple : 

class employe:
def __init__(self,s):
self.salaire=s
# Exemple de surcharge de méthode en python
def Calculsalaire(self, commission=None):
if commission is None: print(self.salaire)
else:
print( self.salaire+commission)
s1=employe(10000)
s1.Calculsalaire()# pas de commission

s2=employe(15000)

s2.CalculSalaire(1000)# s2 a une commission de 1000DH

Surcharge des opérateurs

La surcharge d’opérateurs vous permet de redéfinir la signification d’opérateur en fonction de votre classe. C’est la magie de la surcharge d’opérateurs que nous avons pu utiliser l’opérateur + pour ajouter deux objets numériques, ainsi que pour concaténer deux objets chaîne.

Cette fonctionnalité en Python, qui permet à un même opérateur d’avoir une signification différente en fonction du contexte, est appelée surcharge d’opérateur.
Alors que se passe-t-il lorsque nous les utilisons avec des objets d’une classe définie par l’utilisateur ?

Pour mieux comprendre, on doit connaitre : les méthodes magiques ( magic method – Dunder method – special method).

Les méthodes magiques :

En python , on a des méthodes magiques définies et peuvent etre utiliser d’une manière magique.

Syntaxe : Les noms des méthodes magiques commencent et finissent par __ (double underline : d’où me nom Dunder method).

 Exemples de méthodes magiques : 

__init__ , __str__, __lt__, __gt__, __add__, __mul__,….

L’appel (l’invocation) des méthodes magiques se fait de manière magique. Par exemple, le constructeur ( qui est la méthode magique __init__) est appelé automatiquement lors de la création d’un objet d’une classe en utilisant le nom de la classe et non pas __init__ : 

p1=Personne("Ahmadi","Aya",20) # on crée l'objet p1 de la classe Personne .Ici , on a appel automatique du constructeur

De la même manière, lorsqu’on effectue une opération arithmétique, on fait alors un appel automatique à la méthode magique correspondante.

Exemple :

x=15
y=10
z=x+y
# est équivalent à :
z=int.__add__(x,y) 

L’utilisation de l’opérateur + pour effectuer l’addition entre deux nombres est en effet, un appel de la méthode magique __add__.

Surcharge des opérateurs en python :

Nous avons vu que les opérateurs arithmétiques, et mêmes les opérateurs de comparaison, sont liés aux méthodes magiques prédéfinies.

Ainsi, même-ci dans notre classe , on ne peut pas effectuer telle ou telle opération arithmétique , parce qu’elle est non supportée au départ. On peut penser à surcharger la méthode magique correspondante dans notre classe pour rendre l’opération supportée.

Exemple : 

class employe:
def __init__(self,s):
self.salaire=s
# Exemple de surcharge de méthode en python
def Calculsalaire(self, commission=None):
if commission is None:
print(self.salaire)
else:
print( self.salaire+commission)
# surcharge des opérateurs
def __add__(self,e):
return self.salaire+e.salaire
def __lt__(self,e):
if self.salaire<e.salaire:
return True
else:
return False
s1=employe(10000)
s1.Calculsalaire()
s2=employe(5000)
print(s1+s2)# addition des salaires
if s1<s2:
print("s1 a le plus petit salaire")
else:
print("s2 a le plus petit salaire")

Donc, nous avons surchargé , dans notre classe Employe, l’opération d’addition et la comparaison de deux employés.

Vous pouvez suivre notre liste des vidéos sur la programmation orientée objet  sur notre chaine youtube 9raytifclick (Darija: arabe marocaine) : POO en Python

Aussi, si vous voulez commencer l’apprentissage d’un langage de programmation, voilà notre cours : Langage Python Niveau 1 qui sera très utile pour vous (il vous aide à pratiquer tous les éléments de base de la programmation ; vus dans notre cours d’algorithmique).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *