« Programmation/Programmation générique » : différence entre les versions

aucun résumé des modifications
Aucun résumé des modifications
 
 
La {{w|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é.
 
== PrincipeTechniques ==
 
Différentes techniques permettent la programmation générique selon le paradigme du langage de programmation utilisé :
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...).
* 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.
Plutôt que de redéfinir le même algorithme (procédure, fonction ou méthode selon la terminologie adaptée au paradigme du langage de programmation employé) 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.
* 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 ==
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...
 
=== UtilisationPrincipe ===
 
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 selon la terminologie adaptée au paradigme du langage de programmation employé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 ===
 
À la compilation, certains langages (Java par exemple) remplacent le type générique par un type répondant aux contraintes associées.