Programação genérica é um
paradigma de programação no qual os
algoritmos são escritos em uma
gramática estendida de forma a adaptar-se através da especificação das partes variáveis que são definidas na instância do algoritmo. Especificamente, a gramática estendida eleva um elemento não variável ou uma construção implícita na gramática base para uma variável ou constante, permitindo a utilização do código genérico.
É diferente da forma normal de
programação na medida em que invoca de certa forma as facilidades de metaprogramação da linguagem. Como isso ocorre em uma extensão da linguagem, novas semânticas são introduzidas e a linguagem é enriquecida no processo. É relacionada com a metaprogramação, mas não envolve a geração de
código fonte, pelo menos visivelmente ao
programador. É diferente também da programação por
macros, já que esta refere-se somente a busca e substituição de termos, não fazendo parte da gramática da linguagem, implementada somente na fase de
pré-processamento do código.
Para efeitos práticos, o paradigma permite que um parâmetro assuma diferentes
tipos de dados desde que certas regras sejam mantidas, como sub-tipos e assinaturas. Por exemplo, para criar uma
lista usando programação genérica, uma possível declaração seria
List<T>
, no qual
T
é o tipo de dado. Para instanciar, poderia-se usar
List<Inteiro>
ou
List<Animal>
, já que o conceito de lista independe do tipo utilizado.