1 Visão geral de paradigmas de programação

Neste capítulo trataremos de alguns conceitos importantes sobre programação, incluindo os principais paradigmas de programação.

1.1 Breve histórico das linguagens de programação

A origem da Programação Orientada a Objetos, ou POO, data de meados da década de 1960, embora sua divulgação ao público tenha começado de forma efetiva apenas no início da década de 1990.

Por volta de 1960, havia uma grande preocupação com a qualidade no desenvolvimento de programas, o reaproveitamento de código escrito e o tempo de desenvolvimento dos sistemas, que começava a ser demorado. Dessa necessidade desenvolveu-se a técnica de programação estruturada, a qual se torna a base fundamental para o surgimento da técnica de programação orientada a objetos.

O cenário para a área de software não era nada animador, pois a indústria de hardware estava muitos anos à frente. O modo de concepção dos programas era muito rústico, pois um programa tinha de ser escrito para um computador específico. Não existia um programa que fosse executado em qualquer computador ou plataforma. Essa concepção só apareceu muito tempo depois.

A era da computação comercial inicia-se em 1950, quando os computadores deixaram de ser ferramentas de uso militar (como ocorreu na década de 1940). A única linguagem utilizada era a de máquina, formada por códigos binários. Como o tempo, surgiu a linguagem Assembly, mais fácil do que a de máquina. Apesar de mais fácil, é uma linguagem intimamente vinculada aos recursos de máquina, o que a torna de difícil compreensão.

Um programa escrito em linguagem Assembly para um computador X não pode rodar em um computador Y. O mesmo programa necessita ser novamente escrito, segundo as regras do computador Y, o que, além de trabalhoso, é extremamente dispendioso. Com as linguagens de máquina e Assembly surge a primeira geração de linguagens de programação, que são de baixo nível.

Por volta de 1954 até 1968, surgem as primeiras linguagens de programação de alto nível (maior proximidade com a forma escrita humana, em inglês). A primeira a ser lançada foi FORTRAN, depois vieram o COBOL, ALGOL e BASIC, para citar as mais conhecidas, já que existem mais de 2.500 linguagens de programação catalogadas. Essas linguagens passaram a definir a segunda geração.

Além destas linguagens serem mais próximas da escrita humana, possibilitaram maior portabilidade, pois já era possível escrever um programa para um computador X e utilizá-lo (com algumas modificação) em um computador Y.

As linguagens de segunda geração, na sua maioria, são lineares, identificando seus comandos com linhas numeradas. Essa característica dificulta a adoção de técnicas estruturadas de codificação de programas e leva programadores inexperientes a cometerem verdadeiros absurdos de codificação.

Devido a este e outros detalhes técnicos, começa a se discutir uma maneira de tentar reaproveitar um código escrito e a necessidade de alterá-lo de forma mais rápida e ágil. Essa ideia inicial da programação estruturada acaba por nortear a programação orientada a objetos, que surge a partir de 1960 com a linguagem de programação SIMULA I, para o computador UNIVAC.

Em 1967, foi apresentada a linguagem SIMULA 67, que introduziu o conceito de classes, que é um dos principais pilares da POO. Durante a década de 1970, surge a linguagem de programação orientada a objetos SmallTalk, que incentivou e popularizou o uso da POO.

Surge então a concepção das primeiras linguagens de programação pertencentes à terceira geração, com uma estruturação de dados maior que as linguagens de segunda geração, mas que ainda não davam suporte à POO, que ainda estava no início.

Entre 1968 e 1972, aparecem as linguagens de programação PASCAL e C (que não eram orientadas a objetos, mas estruturadas). Depois vieram outras linguagens de programação, as quais já embutiam os conceitos de orientação a objetos: SMALLTALK, EIFFEL, ADA, CLOS, SELF, BETA, JAVA, OBJECT PASCAL (linguagem Pascal orientada a objetos), C++ (linguagem C orientada a objetos), dentre outras.

A programação orientada a objetos é uma filosofia de trabalho. Não é a ferramenta em si, mas a forma de pensar e de usar a lógica de programação para a solução de um problema do mundo real através do computador. Desta forma, é necessário ao desenvolvedor mudar a forma de pensar em um problema computacional. Os primeiros programadores pensavam de forma linear, depois aprenderam a pensar de forma estruturada. Na POO, é preciso utilizar a estrutura de dados de um programa baseada na estrutura do mundo real.

1.2 Paradigmas de Programação

Um paradigma de programação é um modelo, padrão ou estilo de programação suportado por linguagens que agrupam certas características comuns.

Um paradigma reflete na forma como o programador lida com um determinado problema. Não existe um paradigma melhor ou pior do que outro. Cada é mais adequado a determinado tipo de problema.