Programação Genérica Para Leigos

28/11/2007 (Quarta-feira)

    Programação Genérica (ou Generic Programming, para quem gosta de termos em inglês – Mim Fala Portugês), apesar de não ser algo recente, vem se tornado bastante popular ultimamente, o que leva muita gente à perguntar: que raio é isso? Vamos tentar responder de forma bastante simples (e fácil de entender).

    A Programação Genérica, tambem chamada de Metaprogramação (Metaprogramming) é um paradigma (“modelo”) de programação no qual o tipo de dado é abstraído. Imagine, Por exemplo, que você crie uma classe que manipule uma lista de inteiros. Depois você precisa duma lista semelhante para números reais. Copiar e colar o código, fazendo as modificações necessárias? Não, melhor abstrair o tipo de dado, e usar a mesma classe. Como? Usando generics!

Ex. (C++):

template <typename T>
class ListaNumeros
{
...
};

ListaNumeros <int> listaInteiros;
ListaNumeros <double> listaReais;

    Em C++, o compilador geraria, à partir de uma única definição da classe ListaNumeros, uma classe para o tipo int e uma classe para o tipo double.

    Este paradigma de programação surgiu nos anos 70, em linguagens como Ada. Começou a tornar-se popular quando foi incorporado à linguagem C++, no início dos anos 90. Depois diversas outras linguagens adotaram a Programação Genérica, como Java, .Net (C#/VB .Net/Delphi .Net/etc) e outras.

    Abstrair o tipo de dado pode levar à uma grande economia de código, pois um mesmo código pode operar diversos tipos de dados, levando a um grande reaproveitamento de código, redução de complexidade, além de outros usos mais avançados, como novas possibilidades em hierarquias de classes, policy-based design (“comportamento genérico”) / polimorfismo estático, etc.

    Exemplos em algumas linguagens:

*C++:

//cria um vetor de string's
vector<string> vetor;
//adiciona uma string ao vetor
vetor.push_back("linha 1");
//adiciona uma string ao vetor
vetor.push_back("linha 2");

*Java:

//cria um vetor de string's
Vector<String> vetor = new Vector<String>();
//adiciona uma string ao vetor
vetor.add("linha 1");
//adiciona uma string ao vetor
vetor.add("linha 2");

*C#:

//cria um vetor de string's
List<string> vetor = new List<string>();
//adiciona uma string ao vetor
vetor.Add("linha 1");
//adiciona uma string ao vetor
vetor.Add("linha 2");


Você sabia que…
Os golfinhos dormem com um olho aberto?