Programmation générique et abstraction

Chloé.G
3 min readJan 28, 2019

--

Rien qu’en lisant le titre, vous avez peut-être déjà pris peur. Pas de panique ! Prenez votre courage à deux mains, cela n’est pas si compliqué. Contrairement à ce que l’on pourrait imaginer, le principe de la programmation générique et de l’abstraction n’a rien de si abstrait ! De plus, si vous prenez la peine de vous y intéresser, la programmation générique vous ouvrira de nombreuses portes pour simplifier vos algorithmes. Commençons avec un peu d’histoire.

La programmation générique est un terme qui se définit précisément en 1988 avec “Generic Programming” écrit par D.Musser et A. Stepanov et qui va se développer largement par la suite. En effet, la programmation générique va d’abord être implémentée en Ada puis dans de nombreux autres langages comme le C++ avec les Templates. Cependant, avant 1988 le terme programmation générique bien que déjà utilisé, est orienté principalement sur les langages de programmation plutôt que sur les algorithmes. “Generic Programming” va donc apporter une représentation concise d’abstraction d’algorithmes.

Abstraction ? Mais qu’est-ce que l’abstraction ?

L’abstraction est un concept très ancien qui a été utilisé même dans la Grèce Antique et qui existe dans plusieurs domaines. En art, par exemple, Alain affirme dans Les Arts et les dieux en 1961 :

“C’est une simplification, en présence de l’objet concret infiniment complexe et perpétuellement changeant, simplification qui nous est imposée, soit par les nécessités de l’action, soit par les exigences de l’entendement, et qui consiste à considérer un élément de l’objet comme isolé, alors que rien n’est isolable, […].” *

L’abstraction serait donc le fait de simplifier un objet pour mieux le comprendre et l’utiliser. Et cette définition n’est pas si éloignée du processus que l’on utilise dans la programmation générique, je vous l’assure. Vous allez très vite voir où je veux en venir.

Comme nous l’avons abordé la programmation générique concerne l’abstraction et le codage d’algorithmes.

Mais enfin, me direz-vous, qu’est-ce que la programmation générique ?

Maintenant que vous avez une idée plus claire de ce qu’est l’abstraction, je peux vous répondre ! La programmation générique n’est pas un ensemble de règles strictes de codage mais est plutôt une façon d’envisager la codage. En effet, la programmation générique est le fait de rendre les langages de programmation plus flexible sans compromettre leur efficacité. Concrètement, la programmation générique s’appuie sur l’idée d’abstraction par exemple de structures des données pour pouvoir réaliser des tâches différentes et plus générales. Un algorithme qui peut être appliqué sur un tableau ou une liste chaînée par exemple, fait abstraction de la structure de données utilisée. On peut ainsi classifier différentes abstractions dont les plus utilisées : abstraction de données et structures de données, et abstraction d’algorithmes.

L’abstraction de données implique comme nous l’avons vu la réduction d’un ensemble de données spécifique en une représentation simplifiée. On réalise donc un processus de réduction où on retire des caractéristiques dans le but de ne garder qu’un ensemble de propriétés essentielles. L’abstraction d’algorithmes, cette fois-ci, est le fait de créer une famille de données qui ont en commun un ensemble d’algorithmes dont elles peuvent être paramètre. Ce sont donc les deux faces de la programmation générique. Voici un petit exemple des Templates en C++ dont je vous parlais :

Vous voilà maintenant rassurés, la programmation générique n’est plus une idée si abstraite pour vous. Et même plus, vous êtes maintenant capables de comprendre le processus qui se cache derrière certaines fonctions de vos langages de programmation préférés. Chaque langage utilise ses propres mécanismes pour utiliser la généricité, Templates en C++, le type class en Haskell ou encore à travers le polymorphisme cependant tous partent bien de la même idée : l’abstraction !

Bibliographie, Références :

-Generic Programming, D.Musser et A. Stepanov, 1988

-“Generic Programming” par Sean Parent, conférence d’Octobre 2018 à Sydney , https://www.reddit.com/r/cpp/comments/9qva64/pacific_2018_sean_parent_generic_programming/

- Datatype-Generic Programming, Jeremy Gibbons

-From Mathematics to Generic Programming, A.Stepanov, D.Rosé, 2014

- * Définitions,[Les Arts et les dieux], Alain, Paris, Gallimard, 1961

--

--