Un paradigme de programmation est une manière de concevoir et d’organiser un programme. Il correspond à une façon de penser la résolution d’un problème informatique.
Un même langage (comme Python) permet d’utiliser plusieurs paradigmes. Dans un même programme, on peut également mélanger différents paradigmes.
Le paradigme impératif décrit une suite d’instructions qui modifient l’état du programme.
On veut calculer la somme des entiers de 1 à 9.
total = 0
for i in range(1, 10):
total = total + i
print(total) # affiche 45
La variable total est modifiée à chaque itération :
c’est une approche typiquement impérative.
Le paradigme fonctionnel repose sur l’idée que l’on manipule des fonctions produisant un résultat sans modifier l’extérieur.
On écrit une fonction qui retourne la somme des entiers pairs jusqu’à n.
def somme_pairs(n):
total = 0
for i in range(n + 1):
if i % 2 == 0: # si i est pair
total = total + i
return total
# Appels de la fonction
print(somme_pairs(10)) # affiche 30
print(somme_pairs(4)) # affiche 6
Avantage : la fonction somme_pairs peut être appelée
à tout moment dans le programme avec des paramètres différents.
Elle ne dépend que de son argument et ne modifie aucune variable globale.
On regroupe maintenant les données et les comportements dans une classe.
class CalculateurPairs:
def __init__(self, n):
self.n = n
def est_pair(self, nombre):
return nombre % 2 == 0
def somme_pairs(self):
total = 0
for i in range(self.n + 1):
if self.est_pair(i):
total = total + i
return total
# Instanciation de la classe
calcul = CalculateurPairs(10)
# Appel de la méthode
print(calcul.somme_pairs()) # affiche 30
Explication :
n devient un attribut de l’objetest_pair et somme_pairs sont des méthodescalcul grâce à l’instanciationcalcul.somme_pairs()Ici, le calcul est encapsulé dans un objet. On pourrait créer plusieurs objets avec des valeurs différentes :
c1 = CalculateurPairs(10)
c2 = CalculateurPairs(20)
print(c1.somme_pairs()) # 30
print(c2.somme_pairs()) # 110
Dans un même programme, on peut combiner plusieurs paradigmes.
class Rectangle:
def __init__(self, largeur, hauteur):
self.largeur = largeur
self.hauteur = hauteur
def aire(rectangle):
return rectangle.largeur * rectangle.hauteur
# Instanciation (objet)
r = Rectangle(4, 5)
# Appel d'une fonction (fonctionnel)
print(aire(r)) # affiche 20
Ici :
Rectangle relève du paradigme objetaire relève du paradigme fonctionnelLe choix dépend :