Você está na página 1de 4

4 Introduo aos paradigmas das linguagens de

programao

Da mesma forma que o hardware proposto para o computador sofreu diversas


mudanas ao longo dos anos, tambm a forma de programar sofreu alteraes, de
acordo com a viso de cada linguagem projetada, criando assim vrios paradigmas da
programao.
O termo paradigma significa modelo, isto , a definio de um padro a ser
seguido. Esse conceito, que nasceu em 1900 e relacionava-se inicialmente somente
linguagem e comunicao humana, passou mais tarde a ser adotado tambm na
Computao.
Um paradigma de programao, assim, determina forma como o programador
deve estruturar as instrues em uma dada linguagem a fim de gerar um programa capaz
de executar uma determinada tarefa.
Dois so os principais paradigmas da programao atualmente, a programao
imperativa e a programao declarativa, cada qual sendo subdividida em novos
paradigmas, como veremos a seguir.

4.1 Programao imperativa

No paradigma imperativo, h uma grande preocupao quanto ao detalhamento


do funcionamento do programa.
O programa visto como um conjunto de rotinas e subrotinas (da ser tambm
conhecida como procedural ou procedimental) e enfatizam-se as mudanas de estado do
programa (registrada por meio de suas variveis globais e locais).
Nesta forma de programao, h um foco maior em como um programa deve
executar uma tarefa, em vez de focar em o que o programa deve fazer.
Neste paradigma, podemos encontrar alguns dos subparadigmas mais
empregados atualmente: a programao estruturada, a programao orientada a objetos
e a programao concorrente.

4.1.1 Programao estruturada

Na programao estruturada, o programador deve descrever todo o seu programa


por meio de instrues, estruturas de dados e subrotinas e qualquer programa pode ser
reduzido a trs tipos de estruturas: sequncia, deciso e interao.
Algumas das linguagens de programao consideradas estruturadas so: Pascal,
C, COBOL e Fortran.
Vantagens: geralmente so linguagens mais fceis de aprender, uma vez que
envolve um menor nmero de conceitos distintos do que aqueles apresentados por
outros paradigmas, como a programao orientada a objetos; permitem a
modularizao, isto , a criao de mdulos independentes lgica e fisicamente,
facilitando assim o desenvolvimento e manuteno de sistemas; e so teis na resoluo
de problemas mais simples.
Desvantagens: apresentam maiores dificuldades na representao de solues
para certos problemas do mundo real, que geralmente so mais complexos; alm
disso, apresentam baixa manutenibilidade quando empregadas em problemas mais
complexos, geralmente problemas onde conceitos como herana e polimorfismo
poderiam ajudar a abstrair certas partes dos mesmos.

4.1.2 Programao orientada a objetos

Na programao orientada a objetos, compreende-se a necessidade de


compreender o problema por meio da relao existente entre as diversas entidades que
participam do mesmo, sendo assim, a soluo para o problema deve ser implementada
levando-se em considerao os objetos e suas interaes que sejam pertinentes ao
universo do problema.
Alguns exemplos de linguagens orientadas a objetos so C++, Object Pascal e
Java.
Vantagens: graas aos novos conceitos introduzidos por meio da orientao a
objetos, conseguiu-se uma melhor organizao do cdigo, geralmente separado em
classes e bibliotecas; outra vantagem um melhor reaproveitamento do cdigo, por
meio de conceitos como herana.
Desvantagem: a programao orientada a objetos apresenta um maior nmero
de conceitos e abstraes necessrias, quando comparada programao estruturada, o
que pode tornar seu aprendizado um pouco mais complexo.

4.1.3 Programao concorrente

Com o desenvolvimento da tecnologia, surgiu um novo conceito: o paralelismo,


isto , a possibilidade de executar-se mais de uma tarefa paralelamente, seja por meio de
vrios ncleos processadores, seja por meio de um s, executando-se assim um
paralelismo emulado.
A programao concorrente visa estudar e propor como melhor desenvolver
programas visando esse cenrio, onde processos executam simultaneamente e
concorrem por recursos, como a memria e o prprio processamento.
Vrias linguagens oferecem suporte programao concorrente, como Java, C#,
C++, C e Object Pascal. Como se pode perceber, uma mesma linguagem pode oferecer
suporte a mais de um subparadigma.
Vantagens: aumento do desempenho, na medida em que melhor se utiliza de
todos os recursos computacionais disponveis; possibilidade de melhor modelagem dos
programas, pois determinados problemas computacionais so concorrentes por natureza.
Desvantagens: programao mais complexa, com possveis erros decorrentes da
prpria concorrncia; difcil depurao devido ao aspecto no-determinstico que a
soluo pode tomar.

4.2 Programao declarativa

A programao declarativa trata-se de uma abordagem focada em descrever o


que o programa deve fazer e menos em como seus procedimentos devem funcionar.
Sendo assim, apresenta-se como um paradigma oposto ao paradigma imperativo, uma
vez que se preocupa com o que deve fazer, em vez de preocupar-se com como deve
ser feito.
Na programao declarativa, no h a ideia de estado do programa, como ocorre
na programao imperativa.
Dentro do paradigma declarativo, podemos identificar a programao funcional,
a programao lgica e a programao restritiva.

4.2.1 Programao funcional

A programao funcional busca descrever o programa em torno de funes.


O cdigo-fonte de um programa escrito em linguagem funcional pode ser
interpretado como um conjunto de funes que recebem zero ou mais argumentos como
entrada e retornam sempre um valor em sua sada. Cada funo, ento, deve realizar um
conjunto de operaes sobre os parmetros de entrada a fim de obter a sada.
Algumas linguagens que se utilizam dessa abordagem so APL, Lisp, ML,
Haskell, OCaml e F#.
Vantagem: h uma maior transparncia referencial, uma vez que todo o
programa composto por funes, tornando-se mais fcil efetuar uma inspeo do
cdigo.
Desvantagem: no oferece alocao explcita de memria ou declarao
explcita de variveis, necessrios para a resoluo de muitos problemas reais.

4.2.2 Programao lgica

Esta a abordagem da programao que faz forte uso da lgica matemtica para
a resoluo de problemas, geralmente por meio de valores ou objetos e relaes entre os
mesmos, formulando-se assim proposies e regras.
Duas linguagens de programao foram fundamentais para este paradigma,
criando-se a partir delas duas famlias de linguagens lgicas: Planner e Prolog.
Dentre as linguagens de programao derivadas de Planner, podemos destacar
QA-4, Popler, Conniver e QLisp.
J dentre as linguagens de programao derivadas de Prolog, podemos apontar
Mercury, Visual Prolog, Oz e Frill.
Vantagem: muito teis em problemas que possam ser resolvidos por meio de
deduo ou inferncia.
Desvantagem: pode haver exploso combinatorial da base de conhecimento
levando a grande desperdcio de recursos computacionais.

4.2.3 Programao restritiva

A programao restritiva nasceu da programao lgica (motivo pelo qual


muitos autores apontam-na como parte da programao lgica). Ela se utiliza de
restries na definio de relaes entre as variveis. Em ingls, denomina-se
Constraint Programming.
Seu uso pode ser interessante em problemas cuja soluo possa, de certa forma,
ser restrita a um nmero de valores. Tal tipo de problema conhecido como CSP
(Constraint Satisfaction Problem), no qual so dados:
Um conjunto finito de variveis;
Uma funo que mapeia cada varivel a um domnio finito;
Um conjunto finito de restries.

4.3 Linguagens de programao multiparadigma

Em meio a todos esses paradigmas, nasceram algumas linguagens com o desafio


de abranger paradigmas bem diferentes em sua constituio, so as linguagens de
programao multiparadigma.
Na verdade, muitas linguagens permitem mais de um subparadigma dentro de
um mesmo paradigma, por exemplo, a linguagem C++ permite tanto a programao
estruturada, quanto orientada a objetos e a programao concorrente. Entretanto, h
um nmero bem mais reduzido de linguagens que permitem paradigmas realmente
distintos, como a linguagem Oz.
A principal vantagem de tais linguagens que o programador pode utilizar o
paradigma que preferir em sua implementao. Entretanto, tem como desvantagem o
fato de que algoritmos que utilizem mais de um paradigma em sua implementao
podem ter sua compreensibilidade afetada.