Paradigmes de programmation

Numérique et Sciences Informatiques

donnees

Paradigmes de programmation :

Un paradigme est une manière de programmer un ordinateur basé sur un ensemble de principes ou une théorie.

paradigme

La création du premier programme informatique par Ada Lovelace sur la machine de Babbage en 1842 a permis de formaliser les ingrédients des algorithmes tels que nous les connaissons: affectations, boucles, conditions. Cependant, maintenant que l'informatique est présente dans très nombreux domaines, il s'est avéré nécessaire d'adapter la programmation aux problèmes à traiter. Ces approches appelées paradigmes de programmation fournissent au développeur une vue différente de la façon dont s'éxecute le programme.

paradigme

Chaque nouveau paradigme augmente le niveau d’interactvitié.

Les trois grands types de programmation

Il existe trois grands types de programmation au programme de terminale:

  • La programmation impérative: le paradigme originel est le plus courant.
  • La programmation orientée objet(POO) consistant en la définition et l’assemblage de briques logicielles appelées objets.
  • La programmation fonctionnelle est un paradigme de programmation de type déclaratif qui considère que tous les éléments peuvent être compris comme des fonctions et le code peut être exécuté par des appels successifs de fonctions.

La programmation impérative :

La programmation impérative est le paradigme de programmation le plus ancien. Il consiste à résoudre un problème en listant une série d'instructions (assignations, boucles, conditions, opérations) qui modifient l'état d'un programme jusqu'à obtenir la solution. On donne une recette de cuisine qui est suivie ligne à ligne par l'interpréteur.

x = 2
y = 2 * x
if y == 4:
	print("y vaut 4")
else:
	print("y ne vaut pas 4")

Avantages de la programmation impérative :

  • Bien lisible
  • Comparativement facile à apprendre car le code se lit étape par étape
  • Modèle de pensée aisément compréhensible pour les débutants (étapes de résolution)
  • Permet de tenir compte des caractéristiques de cas d’application spéciaux

Inconvénients de la programmation impérative:

  • Le code devient très rapidement volumineux et perd en clarté (multiplication des variables)
  • Mise à jour plus difficiles

La programmation fonctionnelle

Dans un programme fonctionnel, tous les éléments peuvent être compris comme des fonctions et le code peut être exécuté par des appels successifs de fonctions. En programmation fonctionnelle, l'opération d'affectation est interdite, ce qui permet de s'affranchir des effets de bord.

bord = [1]

def effet(x):
  bord[0] = bord[0] + x
  return bord[0]

print(bord)
print(effet(2))  	# effet() est une fonction  qui modifie le contenu d'une variable (bord) utilisée par d'autres morceaux.
print(effet(2))  	# Une même fonction appelée à différents moments avec les mêmes paramètres peut renvoyer différents résultats.
print(effet(2))		# Effet de bord = Danger absolu !!!

La programmation fonctionnelle offre un haut degré d’abstraction parce qu’elle s’appuie sur le principe mathématique de la fonction.
Elle utilise une syntaxe raccourcie pour la définition de fonctions anonymes, les fonctions lambdas.

lambda param1, ... , paramN: valeur_retournée

La programmation fonctionnelle fait appel à trois grandes opérations sur les itérateurs:

  • L'opération map(fonction, itérable) applique la fonction à tous les éléments de l'itérable et retourne un nouvel itérable.
    list(map(f, it)) <===> [f(x) for x in it]
  • L'opération filter(fonction, itérable) renvoie un itérable qui ne contient que les éléments de l'itérable d'entrée pour lesquels la fonction évalue à True.
    list(filter(f,it)) <===> [x for x in it if f(x)]
  • L'opération reduce(fonction, itérable, init) renvoie le résultat de la récurrence Xn=fonction(Xn−1,In) où I0=init et In=itérable[n-1].

Avantages de la programmation fonctionnelle :

  • Code facilement vérifiable : même les fonctions sans état peuvent être vérifiées
  • Code plus précis et concis

Inconvénients de la programmation fonctionelle:

  • Les données (p. ex. variables) ne sont pas modifiables
  • La programmation récursive peut entraîner de graves erreurs

La Programmation Orientée Objet

La POO consiste en la définition et l’interaction de briques logicielles appelées objets ; un objet représente un concept, une idée ou toute entité du monde physique. L’objet possède en interne une structure et un comportement, et il sait interagir avec ses pairs.

La POO consiste en la création et l’utilisation d’objets, qui se composent d’attributs et de méthodes liés à des classes.

  • Les attributs renvoient aux variables contenues dans l’objet : ce sont les données. On y accède avec la syntaxe objet.attribut.
  • Les méthodes sont les éléments qui permettent d’interagir avec les attributs. Les méthodes sont des fonctions internes à une classe.On y accède avec la syntaxe objet.methode().
  • La classe est la structure de données définissant une catégorie générique d'objets. La classe est le modèle sur lequel est crée l'objet.
  • L'objet est une instance d’une classe, c’est-à-dire qu’il hérite des attributs et des méthodes génériques de sa classe. Il est un représentants de sa classe

Avantages de la programmation orientée objet :

  • un code structuré et regroupé
  • réutilisation du code
  • modification d'une classe rapidement et simplement

Inconvénients de la programmation orientée objet:

  • Les objets ont souvent besoin d' une documentation complète (trop abstrait pour un autre programmeur)
  • Trop complexe pour des opérations basiques

Quel paradigme choisir?

Certains langages forcent à utiliser un paradigme de programmation (ex: Smalltalk: POO, Haskell: fonctionnelle) mais la plupart des langages modernes comme Python (ou Javascript) sont multiparadigmes et laissent le choix au programmeur du paradigme à utiliser en fonction du problème posé.

  • Un bon programme a presque toujours besoin de plusieurs paradigmes
  • Chaque paradigme est bon pour certains problèmes
  • Un bon langage doit donc soutenir plusieurs paradigmes !!! (sujet à débat ; l’exception confirmant la règle )

Oui mais nous on choisit quoi ?

Pour simplifier :

  • Une suite d'instruction simple => Programmation impérative
  • Un gros problème avec plein de mathématique => Programmation fonctionnelle
  • Des objets différents mais des points communs (attributs) => Programmation Orientée Objet

Savoir faire

  • Savoir distinguer sur des exemples les paradigmes impératif, fonctionnel et objet.
  • Savoir choisir le paradigme de programmation selon le champ d’application d’un programme

Fiche de cours