Programmation/Programmation générique

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche


La généricité (ou programmation générique), consiste à définir des algorithmes identiques opérant sur des données de types différents. L'algorithme est implémenté comme une procédure, fonction ou méthode selon la terminologie adaptée au paradigme du langage de programmation employé.

Techniques[modifier | modifier le wikicode]

Différentes techniques permettent la programmation générique selon le paradigme du langage de programmation utilisé :

  • Templates (précurseurs des types et paramètres génériques) : Certains langages impératifs (Ada 83) permettent de manipuler un type qui n'est pas spécifié explicitement.
  • Paramètres génériques : Certains paramètres de l'algorithme ne sont pas spécifiés : constantes, types...
  • Types génériques : Supporté en général par les langages de programmation orientée objets (C++, Java, Eiffel...), le type générique n'est pas déterminé à l'avance, et permet d'appliquer le même algorithme à différents types.
  • Polymorphisme : Supporté par les langages de programmation orientée objets, le polymorphisme permet de manipuler les instances d'une classe mais également celles des classes dérivées.

Types et paramètres génériques[modifier | modifier le wikicode]

Principe[modifier | modifier le wikicode]

Dans la plupart des langages de programmation, les opérateurs d'expression (opérateurs arithmétiques, logiques, de comparaison...) supportent différents types numériques, entiers et à virgule flottante, sur différentes tailles fixes (16, 32, 64 bits...). Plutôt que de redéfinir le même algorithme (procédure, fonction ou méthode de classe) plusieurs fois pour chaque type numérique, l'algorithme n'est codé qu'une seule fois, en utilisant une syntaxe particulière indiquant qu'il s'agit d'un type générique non défini.

Cela peut s'appliquer aussi aux types non numériques, y compris des structures complexes (objet, chaîne de caractères, tableaux) quand l'algorithme n'utilise aucune particularité du type. C'est le cas par exemple des collections de données (liste, dictionnaire...) qui ne font que stocker les valeurs quel que soit leurs types qu'il s'agisse d'entiers, de chaînes de caractères...

Fonctionnement interne[modifier | modifier le wikicode]

À la compilation, certains langages (Java par exemple) remplacent le type générique par un type répondant aux contraintes associées.

D'autres langages ne compilent pas l'algorithme générique (ou partiellement) lors de sa déclaration. Il n'est compilé qu'à son utilisation, lorsque le type à utiliser est déterminé.