Lors d’un entretien cette semaine, on m’a demandé « quelle est la différence entre la programmation fonctionnelle, orientée objet et procédurale » et pour être honnête, je ne savais pas vraiment comment répondre à cette question (et c’était la première fois que j’entendais parler de programmation procédurale…). Donc aujourd’hui, j’ai décidé de faire quelques recherches et de (tenter de) comprendre quelles sont les principales différences.
Débutons par quelques définitions :
» La programmation fonctionnelle (PF) est un paradigme de programmation – un style de construction de la structure et des éléments des programmes informatiques – qui traite le calcul comme l’évaluation de fonctions mathématiques et évite les données à état changeant et mutables. » – Wikipedia
» La programmation orientée objet (POO) est un paradigme de programmation basé sur le concept d' »objets », qui peuvent contenir des données, sous la forme de champs, souvent appelés attributs ; et du code, sous la forme de procédures, souvent appelées méthodes. » – Wikipedia
» La programmation procédurale est un paradigme de programmation, dérivé de la programmation structurée, basé sur le concept de l’appel de procédure. Les procédures, également appelées routines, sous-routines ou fonctions, contiennent simplement une série d’étapes de calcul à exécuter. » – Wikipedia
Ok, c’est donc une introduction mais entrons un peu plus dans les détails.
Premièrement, qu’est-ce qu’un paradigme de programmation ? C’est un style de programmation, une façon de penser la construction de logiciels. Un paradigme de programmation ne fait pas référence à un langage spécifique mais plutôt à une façon de programmer, une méthodologie. Certains langages permettent d’écrire facilement dans certains paradigmes mais pas dans d’autres. Pour plus de détails, voir l’article de Wikipédia.
Maintenant, plongeons dans les trois paradigmes de programmation qui nous intéressent aujourd’hui :
La programmation procédurale (PP), également appelée programmation en ligne adopte une approche descendante. Il s’agit d’écrire une liste d’instructions pour indiquer à l’ordinateur ce qu’il doit faire étape par étape. Elle s’appuie sur des procédures ou des routines.
La programmation orientée objet (POO) consiste à encapsuler les données et le comportement dans des objets. Une application OOP utilisera une collection d’objets qui sait comment effectuer certaines actions et comment interagir avec d’autres éléments de l’application. Par exemple, un objet peut être une personne. Cette personne aurait un nom (qui serait une propriété de l’objet), et saurait comment marcher (qui serait une méthode). Une méthode en POO peut être considérée comme une procédure en PP, mais ici elle appartient à un objet spécifique. Un autre aspect important de la POO sont les classes. Une classe peut être considérée comme le plan d’un objet.
La programmation fonctionnelle (PF) consiste à faire passer des données d’une fonction à une autre pour obtenir un résultat. En FP, les fonctions sont traitées comme des données, ce qui signifie que vous pouvez les utiliser comme paramètres, les retourner, construire des fonctions à partir d’autres fonctions, et construire des fonctions personnalisées. Les fonctions dans la PF doivent être des fonctions pures, elles doivent éviter le partage d’état, les effets secondaires et les données doivent être immuables. Une fonction pure est une fonction qui, pour un même type d’entrée, renvoie toujours la même sortie, sans dépendre d’un état local ou global. Un état partagé est un état qui est partagé entre plus d’une fonction ou plus d’une structure de données. Ainsi, avec l’état partagé, pour comprendre les effets d’une fonction, vous devez connaître tous les détails de chaque variable partagée. Cela ajoute beaucoup de complexité et permet moins de modularité.