Généricité
Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

En programmation, la généricité d'une fonction repose sur son indépendance vis-à-vis du type, et éventuellement du nombre, de ses arguments. C'est un concept important pour un langage de haut niveau car il permet d'augmenter le niveau d'abstraction ( En philosophie, l'abstraction désigne à la fois une opération qui consiste a isoler par la pensée une ou plusieurs qualités d'un objet concret pour en former une représentation intellectuelle, et le...) du langage. Plusieurs mécanismes visant à permettre l'écriture de fonctions génériques ont donc été mis en œuvre par les différents langages de programmation (La programmation dans le domaine informatique est l'ensemble des activités qui permettent l'écriture des programmes informatiques. C'est une étape importante de la conception de logiciel...).

Polymorphisme

Dans un langage à typage dynamique (Le mot dynamique est souvent employé désigner ou qualifier ce qui est relatif au mouvement. Il peut être employé comme :), on utilise le polymorphisme : les paramètres passés en arguments à la fonction doivent se conformer à une interface (Une interface est une zone, réelle ou virtuelle qui sépare deux éléments. L’interface désigne ainsi ce que chaque élément a besoin de connaître de l’autre pour pouvoir...) donnée (Dans les technologies de l'information (TI), une donnée est une description élémentaire, souvent codée, d'une chose, d'une transaction d'affaire, d'un événement, etc.) (un protocole définissant quelles méthodes sont supportées par cet argument). Ce mécanisme est supporté par tous les langages orientés objets, y compris ceux que l'on qualifie généralement comme étant à typage statique (Le mot statique peut désigner ou qualifier ce qui est relatif à l'absence de mouvement. Il peut être employé comme :) (Java, ou méthodes virtuelles du C++ par exemple). En effet, même si le langage apporte des outils pour vérifier la cohérence des interfaces à la compilation, la détermination du type réel de l'argument (c’est-à-dire la résolution de l'adresse (Les adresses forment une notion importante en communication, elles permettent à une entité de s'adresser à une autre parmi un ensemble d'entités. Pour qu'il n'y ait pas...) du code implémentant les méthodes de l'interface) est en réalité effectuée à l'exécution.

Programmation générique

Principe

Un avantage de la programmation générique consiste à abstraire un ensemble (En théorie des ensembles, un ensemble désigne intuitivement une collection d’objets (les éléments de l'ensemble), « une...) de concepts cohérents pour construire des algorithmes au dessus indépendamment de leur implémentation (Le mot implantation peut avoir plusieurs significations :). Ainsi la fonction de tri de la STL a besoin (Les besoins se situent au niveau de l'interaction entre l'individu et l'environnement. Il est souvent fait un classement des besoins humains en trois grandes...) en entrée d'itérateurs aléatoires sur une collection d'objets et d'une fonction de comparaison sur ces objets ; cela rend ainsi cette fonction utilisable dans de très nombreux contextes.

Ce mécanisme permet une programmation générique purement statique puisque l'ensemble des résolutions de types est fait au moment de la compilation.

Par exemple, si l'on veut créer une liste générique, une déclaration (ici en utilisant les templates de C++) serait : List, où T représente un type. À l'instantiation, on pourrait créer une List ou une List. La liste est ensuite traitée comme si le type correspondant avait été spécifié.

Langages d'implémentation

La programmation générique est supportée par certains langages à typage statique dans lesquels il est possible d'utiliser des types génériques ou " templates ".

La toute première implémentation fut en Ada 83, bien avant les templates de C++ qui ont popularisé la programmation générique, en permettant d'écrire du code sans considérer explicitement les types de données avec lesquels le code sera utilisé. Ceci est intensivement utilisé dans la Standard Template Library (La Standard Template Library aussi appelée STL est une bibliothèque C++, normalisée par l'ISO (document ISO/CEI 14882) et implémentée à l'aide des templates.) (STL).

D'autres langages de programmation comme Java depuis la version 1.5, Eiffel supportent la programmation générique. Objective Caml permet également une programmation générique assez subtile et très puissante grâce au système de modules paramétrés qu'il propose. VB.NET et C# commencent à le faire avec .NET 2.0.

Arguments optionnels

Certains langages offrent également la possibilité de rendre des arguments optionnels en leur définissant une valeur par défaut. Des langages comme Python ou Java (depuis la version 1.5) ou le D offrent par ailleurs la possibilité de définir des fonctions qui acceptent un nombre (La notion de nombre en linguistique est traitée à l’article « Nombre grammatical ».) arbitraire de paramètres. Le langage C propose également un mécanisme de fonction variadic destiné à l'implémentation des fonctions à nombre variables d'arguments.

Surcharge et multi-méthodes

Dans certains langages, il est possible d'utiliser la surcharge des opérateurs ou des fonctions. Cette technique consiste à donner le même nom à plusieurs fonctions sémantiquement équivalentes mais agissant sur des paramètres de type différent. Lorsqu'il rencontre ce nom de fonction, le compilateur choisit l'implémentation la plus adaptée en se basant sur le nombre et le type des arguments. Des langages comme CLOS étendent ce principe en choisissant parmi les fonctions homonymes non plus à la compilation mais à l'exécution. Ce mécanisme est appelé multi-méthode et est souvent présenté par ailleurs comme une extension du polymorphisme.

Autres techniques

Il est également possible de réaliser des fonctions génériques dans des langages non objets. C'est ainsi que l'outil (Un outil est un objet finalisé utilisé par un être vivant dans le but d'augmenter son efficacité naturelle dans l'action. Cette augmentation se traduit par la simplification des actions entreprises, par une plus grande rentabilisation de ces...) utilisé pour développer en C des fonctions génériques est le pointeur de fonction. Par exemple la fonction qsort de la bibliothèque standard accepte en argument un pointeur sur une fonction chargée de comparer les éléments à trier.

Page générée en 0.232 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique