No livro a Estrutura das Revoluções Científicas de Thomas Kuhn, ele apresenta a concepção de que “um paradigma, é aquilo que os membros de uma comunidade partilham e, inversamente, uma comunidade científica consiste em homens que partilham um paradigma”, e define “o estudo dos paradigmas como o que prepara basicamente o estudante para ser membro da comunidade científica na qual atuará mais tarde”.
Paradigma é um tipo de palavra na qual muitas pessoas já ouviram falar. Porém, se lhes for solicitado que a expliquem, a maioria não conseguirá de uma forma clara e objetiva.
Para explicar de uma forma simples e eficaz, vou citar um exemplo de como nasce um paradigma
Um grupo de cientistas colocou cinco macacos numa jaula, em cujo centro colocaram uma escada e sobre ela um cacho de bananas. Quando um macaco subia a escada para apanhar as bananas, os cientistas lançavam um jato de água fria (gelada mesmo) nos que estavam no chão. Depois de certo tempo, quando um macaco ia subir a escada, os outros enchiam-no de pancadas, batiam sem cessar.
Passado mais algum tempo, nenhum macaco tentava subir mais a escada, apesar de ser tentadora a visão da sua fruta predileta que vislumbra com abundância tão próxima de seus olhos. Então, os mesmos cientistas substituíram um dos cinco macacos. A primeira coisa que o pobre macaco fez foi subir a escada para colher as belíssimas bananas, sendo retirado de lá imediatamente pelos outros sob forte chuva de pancadas, surrando-o sem dó nem piedade.
Depois de algumas surras, o novo integrante assimilou a ideia do grupo e não tentou mais subir a escada, apesar de continuar lambendo o beiço cá debaixo.
Um segundo macaco foi substituído, e o mesmo aconteceu, tendo o primeiro macaco substituído participado com alegria e entusiasmo do corretivo que o grupo impôs ao segundo integrante substituído, o pobre novato.
Um terceiro macaco foi trocado, e repetiu-se o fato. E assim fizeram com o quarto, e , finalmente com o quinto e último dos veteranos sendo substituído todo o grupo.
Os cientistas ficaram, então, com um grupo de cinco macacos que, mesmo nunca tendo tomado um banho frio, continuavam batendo naquele que tentasse chegar às bananas.
Se fosse possível perguntar a algum deles porque batiam em quem tentasse subir a escada, com certeza a resposta seria: “Não sei, as coisas sempre foram assim por aqui.”
Já imaginaram o quão isso é comum entre nossa sociedade? Você faz algo, mas não sabe ao certo o motivo.
Deixando de lado essa parte filosófica, vamos para a sua aplicação em programação.
História
Muitos acreditam que as linguagens de programação surgiram de forma linear, ou seja, a primeira geração o homem se adaptava à máquina e depois de várias gerações onde uma derivava de outra, elas capacitaram a máquina a realizar as necessidades humanas.
Na verdade, muitas tiveram diferentes trajetórias baseadas em diversos paradigmas que afirmavam resolver alguns problemas.
Todos sabem que inicialmente os computadores eram programados em códigos binários e isso devia dar uma dor de cabeça infernal sem contar que é bastante suscetível a erros. Programas em códigos de máquina é um paradigma de baixíssimo nível.
Sendo assim, para facilitar a nossa vida foram criadas as linguagens de montagem. Elas substituíam as funções do código de máquina por mnemônicos e endereços de memórias por identificadores. Porém, mesmo assim essa ainda é um paradigma de baixo nível.
ex: Assembly lui $s0, 0x1000 lw $v0, 0x8000($s0)
Paradigma imperativo
“Primeiro faça isso e depois faça aquilo.”
Após a segunda geração, houve um grande avanço com a chegada das linguagens procedurais. São as primeiras em que podemos dizer serem de alto nível pois usam um vocabulário relativo para solucionar problemas. Também é conhecido como paradigma imperativo, pois é uma sequência de comandos que o computador executará, passo-a-passo, modificando dados e variáveis a fim de chegar ao resultado esperado. Onde a eficácia e a eficiência de cada solução é subjetiva e altamente dependente da experiência, habilidade e criatividade do programador.
Ex: COBOL, FORTRAN, C, PASCAL …
Paradigma funcional
“Subdividir o problema em outras funções e resolver cada uma separadamente, pois os resultados encontrados serão utilizados posteriormente.”
Cada bloco recebe no topo uma entrada de dados e retorna, na base, os dados de saída. A solução geral é dividida em várias funções (daí o nome funcional) que, no final, se associam para mostrar o resultado na tela.
Ex: APL, LISP, HASKELL, F# …
Paradigma Restritivo
Se refere ao uso de restrições na construção de relações entre variáveis. De forma geral, as restrições são implementadas como uma extensão de uma linguagem já existente. Estas, operam sobre domínios específicos, sendo os mais usuais os seguintes:
- booleanos
- números inteiros e racionais
- lineares
- finitos
- mistos (vários dos anteriores)
Paradigma de Orientação a Objetos
“Um conjunto de classes faz a interação entre objetos (instâncias) e, com a troca de mensagens entre eles, forma-se o software como um todo.”
Sem dúvidas esse é o paradigma mais usado na atualidade e onde há inúmeras linguagens que dão suporte a ele. Tem bases conceituais e origem no campo de estudo da cognição, que influenciou a área de inteligência artificial e da linguística, no campo da abstração de conceitos do mundo real.
Resumindo, praticamente tudo é objeto, cada qual com estrutura e comportamento próprio. Esses objetos são classificados em classes e se comunicam entre si. Cada uma dessas representa um determinado fenômeno e seus objetos são organizados hierarquicamente. O conjunto de classes faz a interação entre objetos e a troca de mensagens entre eles forma o software como um todo.
Junto com ele, veio o conceito de:
- Classes / sub-classes
- Objetos
- Atributos
- Métodos
- Herança
- Encapsulamento
- Polimorfismo
- Interface
- etc..
Enfim, existem diversos outros paradigmas e diversas linguagens que usam um ou vários paradigmas. A compreensão de alguns deles pode te ajudar a solucionar problemas de uma forma bem clara.
Entretanto, deixo como sugestão questionar o por que não subir na escada para pegar as bananas.
5 Comentários
Post muito bom, parabéns! Pode indicar algum livro interessante com esses e outros conceitos sobre o assunto?
Um abraço.
Opa Felipe !
Existe varios links e livros que podem te auxiliar nisso. Na internet vc pode encontra varios sites sobre isso. Ate sites academicos pois essa eh uma cadeira comum nos cursos de computaçao. Mas sugiro o livro:
LINGUAGENS DE PROGRAMAÇÃO – PRINCÍPIOS E PARADIGMAS – 2ª EDIÇÃO
ROBERT NOONAN, ALLEN TUCKER
Boa sorte.
Excelente este post, realmente precisamos nos abster dessa macacada bola murcha que tem medo de paradigmas.
E artigos como este vem a acrescentar mais a nossa personalidade de programador, nos auxiliando a sair um pouco da bolha.
Abraço cara, sucesso, Parabéns.
Excelente post.
A forma que você explica, exemplifica, é ótimo
Parabéns. E bora virar um professor(se vc ainda não é, claro- se já é, sorte dos seus alunos 😉
Muito bom exemplo gostei.
Consegui ter um entendimento sobre paradigma de programação.
Podemos realizar um trabalho de diversas formas, mas é claro que com a ferramenta adequada fazemos menos esforços.