# Programmation/Programmation générique

* Historique
* Abstraction

## Concepts de base

* Commentaires
* Instructions
* Variables
* Types
* Expressions
* Comparaisons
* Instructions de contrôle
* Entrées-sorties

## Concepts spécifiques

* Manipulation de chaînes
* Procédures et fonctions
* Gestion de mémoire
* Gestion des exceptions
* Paradigmes de programmation
* Programmation séquentielle
* Programmation concurrente
* Programmation impérative
* Programmation orientée objet
* Programmation générique
* Programmation orientée aspect
* Programmation fonctionnelle
* Programmation logique
* Programmation par contrat

## Logiciels

* Eclipse
* NetBeans
* PhpStorm
* PyCharm
* SciTE
* Visual Studio Code

## Annexes

* Structure et style
* Règles de programmation
* Langages
* Historique
* Abstraction

## Concepts de base

* Commentaires
* Instructions
* Variables
* Types
* Expressions
* Comparaisons
* Instructions de contrôle
* Entrées-sorties

## Concepts spécifiques

* Manipulation de chaînes
* Procédures et fonctions
* Gestion de mémoire
* Gestion des exceptions
* Paradigmes de programmation
* Programmation séquentielle
* Programmation concurrente
* Programmation impérative
* Programmation orientée objet
* Programmation générique
* Programmation orientée aspect
* Programmation fonctionnelle
* Programmation logique
* Programmation par contrat

## Logiciels

* Eclipse
* NetBeans
* PhpStorm
* PyCharm
* SciTE
* Visual Studio Code

## Annexes

* Structure et style
* Règles de programmation
* Langages
[ Modifier le sommaire ]
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

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
### Principe

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

À 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é.