Você está na página 1de 8

Bsico da programao

Programao pode ser definido como o ato de descrever umalgoritmo que resolva um
problema proposto de forma aplicvel. No a nica definio, no a melhor, mas muito boa,
no?
Um algoritmo uma sequncia de passos a ser executada para se chegar a um objeto, no caso, a
soluo de um problema proposto. Para que a descrio do algoritmo seja aplicvel, tem de ser
feita usando um protocolo lingustico que o executor reconhea. Este protocolo
chamado linguagem de programao.
Como utilizamos computadores para realizar a execuo do programa, a linguagem de
programao precisa ser reconhecida pelo computador que realizar aquela tarefa especfica.
Essencialmente computadores reconhecem apenas uma linguagem especfica, formada por
instrues relacionadas a microinstrues registradas no microprograma do processador. Esta
linguagem chamada linguagem ou cdigo de mquina e extremamenteincompreensvel.
=P
No entanto preciso que o programa esteja em linguagem de mquina para que o computador
possa execut-lo, o que um problema e tanto.
A forma usada para solucionar a questo relativamente simples: a criao de tradutores que
permitam que o programa seja escrito em linguagens mais inteligveis para ento ser traduzido
para a linguagem de mquina. H alguns tipos diferentes de traduo, como montagem,
compilao, interpretao e interpilao. Veremos mais a frente.
Nvel de abstrao
O uso de tradutores permite que a linguagem usada para a programao apresente um certo nvel
de abstrao da forma como a mquina funciona. Linguagens que se aproximam muito do
funcionamento da mquina so chamadas de baixo nvel, j linguagens que se afastam do
funcionamento so chamados de alto nvel.
Por exemplo, a linguagem Assembly possui uma instruo para cada instruo de mquina,
sendo assim uma linguagem de baixo nvel. Isso traz dois inconvenientes: preciso entender
como cada processador funciona para a criao do programa e o programa se torna pouco
portvel, sendo necessrio reescrev-lo para cada tipo de diferente de processador.
Por outro lado, traz uma grande vantagem: como no h uma traduo propriamente dita,
apenas uma converso de smbolos (tokens), a execuo do programa se torna extremamente
eficiente.
Isso ocorre porque toda traduo semntica gera verborragia, ou seja, excesso de comandos para
fazer coisas simples. Quanto maior a diferena entre a linguagem original e a de destino, maior
a probabilidade de verborragia, mas no necessariamente.
Quando definimos nvel de abstrao, entramos numa questo delicada, pois h um tremendo
mal entendido sobre o que seja uma linguagem de alto nvel.
Por exemplo: a linguagem C uma linguagem de alto nvel, pois abstrai do funcionamento da
mquina, se aproximando da linguagem matemtica. No entanto pessoas com dificuldade em
1
matemtica no entende isso.
Tipos de traduo
H muitas variaes de como a traduo de uma linguagem de mais alto nvel para a linguagem
de mquina feita.
A mais simples a montagem, que quando cada instruo da linguagem de mais alto nvel
traduzida diretamente para uma instruo da linguagem de mquina. O programa que faz esta
montagem chamado montador. Ex.: Assembly.
Um pouco mais complicada a compilao: a partir do programa em linguagem de mais alto
nvel gerado um programa de mais baixo nvel equivalente, que montado, gerando o cdigo
objeto (programa em cdigo de mquina). Ex.: C.
Na compilao h em geral mais de um programa trabalhando, basicamente o compilador, que
gera um objeto que faz chamadas a procedimentos que no possui, e o linkeditor, que liga ao
objeto outros objetos, chamados bibliotecas, que possuem os procedimentos necessrios,
gerando o objeto final ou cdigo de mquina.
Outra alternativa a interpretao. H um programa chamado interpretador que funciona
como se fosse uma mquina virtual, com suas prprias instrues, e o programa feito usando
tais instrues. Ex.: Tcl/Tk.
Por final, h variaes destas trs formas citadas.
Por exemplo, h linguagens cuja compilao no gera cdigo de mquina, mas um cdigo
intermedirio, chamado bytecode, que interpretado por um interpretador
chamadomquina virtual (pois mquina virtual um tipo de interpretador). Por
exemplo,Java trabalha assim.
Uma variao deste tipo de compilao a usada em Smalltalk, pois no gerado umbytecode,
mas a compilao altera o comportamento da mquina virtual.
Por ltimo existe a interpilao, que possui duas variaes: o interpilador recebe o cdigo e
gera um objeto em cdigo de mquina, mas somente em memria, e este objeto executado
diretamente da memria (ex.: Perl); ou o interpilador recebe o cdigo e gera umbytecode em
memria que executado por uma mquina virtual (como Python eLua).
Algumas linguagens podem trabalhar com tradues diferentes. Por exemplo, Perl pode ser
interpilado ou compilado. Python e Lua podem ser interpilados com mquina virtual, ou
compilados para bytecode (que ser tambm interpretado por uma mquina virtual).
Manipulao de dados
A principal parte da programao a manipulao de dados: armazenamento, leitura e alterao.
Para armazenamento e leitura usamos posies de memria e registradores do processador.
2
Em linguagens de mais baixo nvel, usamos os prprios endereos de memria e o nomes do
registrador, mas em linguagens de nvel mais alto, usamos variveis, que so apelidos para tais
endereos e nomes.
Tambm necessrio saber que quantidade de memria cada dado ocupa e como ele deve se
comporta. Isso chamado tipagem.
Transferncia de informaes
Muitas vezes necessrio que um determinado dado seja transferido de uma varivel para outra.
Esta transferncia camada passageme h dois tipos de passagem: passagem por valor e
passagem por referncia.
Passagem por valor
A passagem por valor ocorre quando cada varivel contm o dado em si. Assim quando passamos
um dado de uma varivel para outra o dado duplicado para a segunda varivel.
Ento a alterao do dado na varivel de destino no altera o dado na varivel de origem.
Passagem por referncia
A passagem por referncia ocorre quando a varivel no contm o dado em si, mas
umponteiro para a posio de memria onde o dado se encontra. Assim quando passamos uma
referncia de uma varivel para outra o dado no duplicado, apenas as duas
variveis apontampara a mesma posio de memria.
Ento a alterao do dado na varivel de destino altera consequentemente o dado na varivel de
origem, pois ambos so o mesmo dado.
Algumas linguagens, como C/C++, permitem o programador escolher usar valores ou ponteiros,
enquanto outras linguagens (na verdade a maioria delas) usam valor para alguns tipos
determinados e ponteiro (na verdade referncia, que um ponteiro implcito) para outros.
Tipagem
Tipagem a definio da quantidade de memria que um determinado dado ocupa e como esse
dado deve interagir com os demais.
H duas classificaes de tipagem, veremos a seguir.
Tipagem esttica tipagem dinmica
3
Esta uma definio discreta. H duas formas distintas de tratar os tipos de dados: ou o tipo est
associado ao dado, ou est associado varivel que o contm.
Quando o tipo est associado ao dado em si, chamamos de tipagem dinmica.
Quando o tipo est associado varivel, chamamos de tipagem esttica.
Dizemos dinmica ou esttica em relao varivel, ou seja, na tipagem dinmica uma mesma
varivel pode conter dados de tipos diferentes, dinamicamente, enquanto na tipagem esttica
uma varivel conter sempre dados do mesmo tipo.
Por outro lado na tipagem dinmica o dado sempre se comportar da mesma forma
independente da varivel qual foi associado e na tipagem esttica o dado se comportar de
formas diferentes de acordo com a varivel que o contm.
Enquanto falamos de valores, pode parecer que a tipagem esttica seja superior, mas quando
falamos de ponteiros/referncias, a tipagem dinmica passa a levar vantagem.
Isso ocorre porque queremos que um determinado dado se comporte sempre da mesma forma.
No entanto a tipagem dinmica mais difcil de ser trabalhada, pois exige ateno redobrada.
Em suma, ambos as tipagens possuem vantagens e desvantagens, cabendo ao programador (veja
bem: ao programador, no ao professor do programador, comunidade, ao livro ou qualquer
outro fator externo) decidir qual lhe satisfaz melhor.
Tipagem fraca tipagem forte
Ao contrrio da anterior, est uma definio contnua. H duas direes: tipagem fracaindica
menor quantidade de tipos e/ou menor distino entre os tipos e tipagem forteindica maior
quantidade de tipos e/ou maior distino entre os tipos.
Assim como a definio de nvel de abstrao, h linguagens de tipagem mais forte e outras de
tipagem mais fraca.
Por exemplo, C uma linguagem de tipagem fraca, pois, apesar de possuir quatro tipos
(i nt , char , f l oat e doubl e) e algumas variaes (l ong, unsi gned, st r uct , uni on), os tipos
se confundem, ou seja, a distino entre os tipos no perfeitamente clara.
Um exemplo de tipagem ainda mais fraca Perl, que alm de possuir apenas trs tipos (escalar,
vetor e hash), os tipos se confundem.
Vamos agora a linguagens de tipagem mais forte
C++ possui os mesmos tipos de C, mais as classes (que se comportam de forma semelhante a
tipos), e ainda faz uma boa distino entre os tipos.
Java possui alguns tipos, mais classes (como C++), e tem uma distino bem forte.
Python possui apenas dois tipos reais: tipo e objeto, no entanto tipo e objeto se comportam da
4
mesma forma e as classes (variantes de tipo e de objeto) se comportam como tipos. Resumindo,
Python possui uma tipagem tremendamente forte, pois na prtica possui mais de trinta tipos
perfeitamente distintos entre si.
Lua uma linguagem a meio caminho, pois possui sete tipos bem distintos entre si, mas a
converso facilitada.
Novamente no h uma escolha certa, forte ou fraco tudo depende de com que o
programador se identifica.
Observao sria
Alguns evangelizadores fazem desinformao proposital para convencer as pessoas de suas
crenas pessoais, divulgando inverdades.
Algumas inverdades clssicas so:
Tipagem dinmica ruim, esttica boa.
Tipagem fraca ruim, forte boa.
Tipagem fraca o mesmo que tipagem dinmica.
No existe essa de tipagem mais ou menos forte, tipagem fraca ou forte e pronto.
Compilao melhor que interpretao.
Interpretao por mquina virtual no interpretao, compilao.
Apenas Java usa mquina virtual.
C no portvel porque no usa mquina virtual.
Toda linguagem interpretada (o que exclui Java) scripting.
H outras clssicas, veremos mais a frente. O importante no acreditar.
Paradigmas de programao
Paradigma de programao a forma como o programador enxerga a soluo do problema. Tem
mais a haver com a estruturao.
Em outras palavras, paradigma a metodologia de soluo.
Inicialmente os programadores no se preocupavam com paradigma algum. Ento os programas
eram simples sequncias de procedimentos. Hoje em dia chamamos isso deprogramao
sequencial e exclui automaticamente todos os demais paradigmas.
Mais tarde foi desenvolvido o paradigma procedimental e a programao estruturada.
5
Programao estruturada
Programao estruturada baseada na estruturao do cdigo.
A idia que o programa seja divido em pequenos procedimentos estruturados, chamados
subrotinas ou funes. O programa desenvolvido a partir das funes mais abstratas e
terminando pelas mais especficas (desenvolvimento top-down).
Deu origem modularizao e programao procedimental.
Programao procedimental
Erroneamente chamada programao procedural (procedural procedimental em
ingls),programao procedimental a programao baseada em procedimentos.
O conceito usado normalmente em oposio a programao funcional e s vezes se confunde
com programao estruturada ou comprogramao imperativa.
Programao funcional
O foco deste paradigma est nas funes matemticas.
Um programa ento uma associao de funes matemticas.
Programao orientada a objetos
Na orientao a objetos o programa no se baseia em procedimentos, mas na relao entre
objetos.
Objetos so representaes de coisas que executam funes (chamadas mtodos). Estas
coisas so quase microuniversos independentes.
Da interao entre os objetos resulta a soluo do problema proposto.
Por exemplo, uma porta um objeto que, atravs de sua interao com o portal, a tranca e a
chave permite que determinadas pessoas entram e saiam enquanto outras no.
Importante: os evangelizadores da desinformao pregam que a orientao a objetos exclui
outros paradigmas e que seja o paradigma definitivo, no entanto no possvelusar orientao
a objetos sem programao estruturada, ou seja, o cdigo precisa estar estruturado para ser
orientado a objetos.
6
Alis a programao estruturada pr-requisito para a maioria dos demais paradigmas.
Programao orientada a eventos
A orientao a eventos pressupe a orientao a objetos, pois implica em criar objetos que reajam
a determinados eventos.
Geralmente criado loop principal que intercepta os eventos, repassando-os para os objetos
registrados. Algumas linguagens (ou mdulos) oferecem uma implementao pronta
do loop principal.
Outros paradigmas
Em tese pode haver tantos paradigmas quanto programadores, visto que paradigma a forma
como o programador v a soluo do programa.
Apenas alguns dos mais clssicos so:
Programao declarativa
Programao restritiva programao lgica
Orientao a aspecto
Programao genrica
Scripting
H ainda outro conceito, que a programao scripting, que consiste no desenvolvimento
de scripts.
Script um cdigo interpretado ou interpilado (muitas vezes por mquina virtual) que
consiste em agregar componentes pr-compilados.
Pela definio, a grande maioria das linguagens modernas so linguagens
de scripting(inclusive Java).
No entanto h pessoas que usam o termo scripting com sentido estritamente pejorativo, sem
entender exatamente o significado. Essas pessoas nunca aceitam que sua linguagem seja
7
chamava de linguagem de scripting. s vezes distorcem a descrio do conceito, s vezes
mentem sobre o funcionamento de sua linguagem e muitas vezes apenas negam
sistematicamente, sem qualquer argumento real.
Na prtica linguagem de scripting s um conceito arbitrio usado ou pejorativamente para
malfalar alguma linguagem ou para dizer que uma linguagem muito fcil de ser aprendida.
8