Você está na página 1de 9

O que programao

Tecnicamente, programao a atividade de criar solues Computacionais (normalmente algortmicas) para


problemas cotidianos. Geralmente, envolve a concepo de uma soluo e sua subsequente implementao atravs
de uma linguagem de programao. uma atividade chave na rea de computao, independente da sub-rea
especfica de atuao. Por esse motivo, os alunos do curso de Cincia da Computao, alm de serem introduzidos
sua prtica logo no incio do curso, ainda devem ser capazes de generalizar sua aplicao e os diferentes paradigmas
existentes, de modo a criar uma viso macro a respeito de sua prtica.
Motivos para estudar os conceitos de linguagens de programao
Uma vez que a atividade de programao no trivial, a maior parte dos alunos aprende a programar aplicativos
como uma atividade em si, abstraindo-se os aspectos conceitos de tal prtica. Tais aspectos so, ento,
apresentados posteriormente, em um ponto mais avanado do curso.
Nesse cenrio, comum que os alunos se perguntem o porqu de se estudar e relacionar os diversos paradigmas de
linguagens de programao. Tal questionamento, alm de vlido, pode proporcionar um maior entendimento aos
alunos e lev-los a um estado mais maduro no que compete programao.
A seguir, sero relacionados alguns dos motivos mais importantes, embora essa lista no esgote o assunto:
- Aumento da capacidade de expressar idias;
- Pensamento X Comunicao;
- Aumento de recursos de comunicao;
- Avaliao e Simulao de recursos de outras linguagens;
- Maior embasamento para a escolha de linguagens apropriadas;
- Evoluo das linguagens;
- Tipos de projetos X Paradigmas de programao;
- Capacidade aumentada para aprender novas linguagens;
- Evoluo das linguagens;
- Conhecimento dos fundamentos;
Entender melhor a importncia da implementao
Os porqus das linguagens; Como os computadores executam as linguagens; Aumento da capacidade de
projetar novas linguagens; Facilitar a vida aos usurios; Anlise crtica das linguagens; Avano global da
computao; Viso de mercado; Anlise crtica das linguagens
Domnios de programao
So diversas as reas de aplicao da computao. So essas reas que motivam a criao da maioria das linguagens
especficas. Seu entendimento , ento, muito importante. Vejamos algumas dessas reas:
- Aplicaes Cientficas; Aplicaes Comerciais; Inteligncia Artificial; Programao de Sistemas; Linguagens de
Scripting; Linguagens de propsitos especiais
Critrios de avaliao de linguagens de programao
Fatores de avaliao; Influncias sobre o projeto da linguagem; Categorias de linguagem; Custo/Benefcio no
projeto da linguagem; Mtodos de implementao; Ambiente de programao;
Fatores de avaliao
A avaliao de uma linguagem de programao serve, dentre outras coisas, para julgar sua aplicabilidade em um
determinado projeto. Por esse motivo, um bom programador deve ser capaz de avaliar criteriosamente e a base
para isso deve ser uma srie de fatores objetivos, o que permitir a comparao entre diversas linguagens.
A seguir, veremos alguns critrios importantes:
Legibilidade; Simplicidade global; Ortogonalidade; Instrues de controle; Tipos de dados e estruturas; Sintaxe;
Capacidade de escrita (writability); Simplicidade e ortogonalidade; Suporte para abstrao; Expressividade;
Confiabilidade
Verificao de tipos; Manipulao de excees; Apelidos; Legibilidade e capacidade de escrita; Custo;
Treinamento; Codificao; Compilao; Execuo;

Influncias sobre o projeto da linguagem


Vrios fatores podem influenciar o projeto de uma linguagem de programao. O conhecimento desses fatores
fundamental na hora de se projetar uma nova linguagem, ou mesmo de definir um domnio para sua aplicao.
Vejamos dois dos fatores importantes:
Arquitetura do computador; Metodologias de programao
Categorias de linguagem
Categorizar ou classificar as linguagens permite que vejamos as mesmas a partir de um certo grau de abstrao e
que generalizemos suas principais caractersticas. Normalmente, so quatro as categorias mais utilizadas:
Imperativas; Funcionais; Lgicas; Orientadas a objeto;
- Cada uma dessas categorias agrega um conjunto de caractersticas marcantes, e que facilitam muito a escolha de
uma linguagem ideal para determinada situao.
Custo/Benefcio da linguagem
A partir da avaliao de uma ou mais linguagens, o processo de deciso sobre qual delas escolher deve passar por
uma anlise de custo benefcio, de modo que tal escolha seja embasada em um critrio confivel e exequvel.
- O critrio na escolha permite, ainda, que uma anlise de fatores conflitantes seja feita e que haja uma escolha
consciente de quais desafios so preferveis a se enfrentar.
Alguns dos fatores conflitantes so:
- Confiabilidade X Custo de Execuo; Expressividade X Legibilidade; Flexibilidade X Segurana;
Mtodos de Implementao
Alm de toda a diversidade j vista at agora, a maneira como as linguagens so implementadas tambm varia. Isso
tambm deve ser levado em conta quando se avalia linguagens.
Alguns tipos de implementao so:
- Compilao; Interpretao pura; Sistemas hbridos
Ambientes de programao
Entende-se como ambiente de programao o conjunto de ferramentas disponveis para auxiliar o desenvolvedor na
tarefa de programar. Houve uma grande evoluo em relao a esse tipo de ferramenta no decorrer das ltimas
dcadas, tornando esse fator uma questo importante nas anlises para escolha de linguagem. O advento do
surgimento dos ambientes embasados em Software Livre veio trazer ainda mais opes s equipes de programao.
Hoje, vrias ferramentas livres so lderes de mercado. Critrios de avaliao de linguagens de programao:
- Legibilidade; Capacidade de Escrita; Confiabilidade; Consideraes finais;
A escolha da linguagem mais adequada para uso em um projeto exige, normalmente, a avaliao de suas
caractersticas e a comparao com as de outras linguagens. Para isso, necessrio que se eleja uma srie de
critrios que permitam no s medir a adequao da linguagem ao critrio, mas tambm servir de base de
comparao entre as linguagens analisadas.
- A definio de uma lista de critrios pode ser uma tarefa completa. Mas, nesta aula, sero apresentados trs dos
critrios mais comuns e seus fatores de avaliao.
- Critrios de Avaliao de Linguagens de Programao e as caractersticas que os afetam (Sebesta, pg. 22):

A facilidade para se ler e entender o contedo de um programa um dos critrios mais importantes para se julgar
uma linguagem de programao. Uma vez que o ciclo de vida de um programa prev uma fase longa de eventuais
manutenes, necessrio que futuros programadores entendam fcil e plenamente o que foi feito por seus
antecessores.
Algumas caractersticas so importantes na avaliao desses critrios e precisam sempre ser consideradas

Simplicidade Global
Essa uma caracterstica que afeta diretamente a facilidade de leitura. Linguagens com um maior nmero de
componentes bsicos so mais difceis de serem aprendidas do que uma com poucos componentes. Comumente,
programadores de linguagens que apresentam muitos recursos acabam por aprender apenas um subconjunto deles.
Quando programadores que aprenderam subconjuntos diferentes precisam ler cdigos escritos por um programador
que aprender outro subconjunto, certamente haver problemas de legibilidade. Por outro lado, linguagens simples
de mais, com pouqussimos componentes, tambm podem ser difceis de ler. Por exemplo, linguagens de montagem
(como o assembly) so extremamente sucintas. Nesse caso, a falta de componentes mais elaborados exige que se
escreva mais cdigo a partir do uso dos componentes simples, o que torna o programa maior e mais complexo.
importante que o grau de simplicidade da linguagem seja suficiente para que haja uma compreenso global de suas
funcionalidades, mas tambm importante que haja suporte aes de programao / lgicas mais comuns.
Ortogonalidade
definida pela existncia de um conjunto relativamente pequeno de construes primitivas que podem ser
combinadas em um nmero relativamente pequeno de maneiras de construir as estruturas de controle e de dados.
Ou seja, h um padro claro e conciso para a utilizao dos recursos da linguagem. A ortogonalidade est
estreitamente relacionada simplicidade: quanto mais ortogonal o projeto de uma linguagem, menos excees as
regras da linguagem exigiro. Menos excees significam um grau mais elevado de regularidade no projeto, o que
torna a linguagem mais fcil de ser aprendida, lida e entendida.
Estruturas de controle
Uma das motivaes da revoluo da programao estruturada da dcada de 70 foi uma reao m legibilidade
causada pelas limitadas instrues de controle existentes na poca. No haviam, ento, estruturas comuns como
laos for, while, do while ou repeat. Tudo isso era feito com um comando de salto chamado goto. O problema com
esse comando que ele promovia um salto brusco na leitura do cdigo, e tornava-o menos legvel. O leitor teria que
procurar o marcador que indicava o ponto para o qual havia sido feito o salto para algum ponto do cdigo, o que
interrompia o fluxo de leitura. Linguagens como Basic e FOTRAN existentes poca no possuam as estruturas de
controle de loop que existem hoje. Todo loop era produzido com um salto at um ponto anterior do fluxo de cdigo,
seguindo algum critrio de parada. 4 Desse modo, no era possvel simplesmente se ler o cdigo de cima para baixo
(o que mais fcil de entender). Ainda existem linguagens que disponibilizam esse comando e ele pode ser til em
diversa situaes. Ao avaliar uma linguagem, deve se verificar se essa a nica opo disponvel para loops e,
mesmo nesse caso, deve haver um uso consciente. A maioria das linguagens criadas aps a dcada de 60
disponibiliza outros mecanismos de loop.
Tipos de dados e estruturas
A facilidade provida por uma linguagem para que se crie e manipule tipos de dados e estruturas tem um impacto
significativo em sua legibilidade. Por exemplo, linguagens que no possuem o tipo de dado booleano e optam por se
valer de nmeros para representar valores verdadeiro e falso, podem gerar confuso quando da leitura do cdigo.
Alm disso, a possibilidade de criao de estruturas (records, structs, classes, dependendo da linguagem) pode exigir
a declarao de um nmero grande e no coeso de variveis para representar uma entidade do mundo real. Quanto
maior o apoio de uma linguagem representao de elementos do mundo real, mais fcil ser l-la.
Projeto da Sintaxe
A sintaxe, ou a forma dos elementos de uma linguagem, tm um efeito significativo para a legibilidade. necessrio
que se avalie o quo restritiva essa sintaxe para que se antecipe eventuais problemas de legibilidade.
Alguns exemplos de regras gramaticais que causam impacto legibilidade:
- Restrio ao tamanho de identificadores; Variveis de tamanho muito pequeno; Existncia de palavras
especiais; Uso do mesmo caracter para encerrar blocos diferentes, como a chave ( { } ) em C, C++ e Java;
Forma e significado;
A aparncia de uma instruo deve indicar sua finalidade e esta deve ser coerente. Exemplo contrrio, a expresso
static em C.
Capacidade de Escrita
A capacidade de escrita uma medida de quo fcil utilizar uma linguagem para escrever programa para um
determinado domnio de problemas. As caractersticas que afetam so um dos subconjuntos das caractersticas que

afetam a capacidade de escrita, j que para se escrever comum a necessidade de reler o que j foi escrito. O
domnio do problema um fator importante para a avaliao, j que seria injusto comparar uma linguagem que foi
criada para resolver um tipo de problema com outra que no o foi.
- Abordagem das principais influncias sobre o projeto de uma linguagem de programao; Arquitetura do
computador; Metodologias de programao;
Dentre os fatores que influenciam o projeto de uma linguagem de programao, dois fatores de grande importncia
so a arquitetura do computador que a executar e as metodologias de projeto do programa. Esses dois fatores
moldaram, historicamente, a evoluo das linguagens e servem de critrio tanto para a avaliao do projeto da
linguagem quanto para o estudo de sua adoo. Nos ltimos 45 anos a maior parte das linguagens mais populares foi
projetada em funo da arquitetura de computador prevalecente, chamada arquitetura von Neumann, em
homenagem a um de seus criadores, John von Neumann. Essas linguagens so chamadas de imperativas. Em um
computador com essa arquitetura, tanto os dados como os programas so armazenados na mesma memria. A
unidade central de processamento (UCP), que executa as instrues, separada da memria. Assim, as instrues
devem ser transmitidos da memria para a UCP e os resultados so devolvidos memria.

Por causa dessa arquitetura, o recurso principal das linguagens imperativas so as variveis, as quais modelam
clulas de memria, as instrues de atribuio e a forma iterativa de repetio. A iterao, o mtodo mais eficiente
dessa arquitetura, rpida porque as instrues so armazenadas em clulas de memria adjacentes. Outros
paradigmas no imperativos, como o paradigma funcional, se utilizam de recurso para a execuo de iteraes.
Alm disso, no necessitam do tipo de variveis utilizadas na programao imperativa. Porm, sua ampla utilizao
improvvel at que seja projetado um computador com arquitetura diferente. As mquinas de arquitetura paralela
surgidas nos ltimos 20 anos apresentam alguma melhora de desempenho na execuo de programas no
imperativos, mas ainda no tem sido suficientes para serem competitivas.
Metodologias de programao
O final da dcada de 60 e o incio da dcada de 70 trouxeram uma anlise intensa sobre o processo de
desenvolvimento de software e do projeto das linguagens de programao, em parte provocada pelo surgimento do
movimento de programao estruturada. Uma razo importante para esse fato foi a mudana no importante custo
de computao do hardware para o software, diminuindo os custos de hardware e aumentando os de software. Os
relativamente pequenos aumentos de produtividades dos programadores foram um dos fatores determinantes.
Alm disso, a computao passou a ser utilizada para resolver problemas crescentemente maiores e mais
complexos. Seu uso passou da resoluo de equaes matemticas para o controle de grandes empresas e
instalaes. As novas metodologias de desenvolvimento de software surgiram para mudar esse cenrio. As pesquisas
iniciadas n dcada de 70 foram chamadas de projeto top-down e refinamento passo a passo. Essas pesquisas
revelaram que os principais problemas nos projetos de linguagem da poca eram a no plenitude da verificao de
tipos e a insuficincia de instrues de controle. No final da dcada, essas descobertas comearam a influenciar os
projetos de linguagens, favorecendo a utilizao do paradigma de orientao a objetos. A abstrao de dados, que
foi a soluo encontrada, promoveu a criao de linguagens que dessem suporte a esse conceito. Implementaes
iniciais como a linguagem SIMULA-67, mostraram que o conceito realmente era promissor, mas apenas no incio da
dcada de 70, com a linguagem Smalltalk, mostrou seu valor. De l pra c, a quase totalidade das novas linguagens
segue esse paradigma. A consolidao do conceito de Projeto Orientado a Objetos, que se iniciou em meados da
dcada de 80, trouxe conceitos mais elaborados para a abstrao de dados, encapsulamento, herana e vinculao
dinmica de mtodos. 4 Essa metodologia ainda favorece a reutilizao de cdigo, a flexibilidade e a escalabilidade,

conferindo aumentos expressivos de produtividade aos programadores e garantindo a popularidade das linguagens
que a suportam. 4 A histria dessas linguagens tem como expoentes o Smalltalk, Ada, C ++ e Java e mostra o impacto
em outros paradigmas como o funcional (com CLOS) e o lgico (com Prolog ++). No sentido oposto, a Programao
Orientada a Processos ainda no foi abandonada. Ao contrrio, algumas pesquisas tem sido feitas nos ltimos anos,
principalmente na rea da programao concorrente. Porm, o cenrio mais comum que mesmo nessa rea as
solues orientadas a objetos sejam uma alternativa melhor. Linguagens como Ada e Java possuem capacidades de
concorrncia sem a necessidade de mudar de paradigma e apresentam uma nova possibilidade de expaso para a
Orientao a Objetos.
Mtodos de Implementao
Compilao; Interpretao Pura; Sistemas de Implementao Hbridos; Mtodos de Implementao;
- A execuo de programas em mquinas feita a partir de implementaes em linguagens de baixo nvel, que
possuem as operaes primitivas mais comumente necessrias. Porm, a codificao nessas linguagens (ainda que
possvel) custosa pois so normalmente menos amigveis ao programador. Para resolver esse problema, os
programadores usam linguagens de alto nvel, que posteriormente so traduzidas para uma linguagem de baixo nvel
antes da execuo do programa. A natureza desse processo de traduo tambm deve ser um fator a se analisar em
uma linguagem.
Compilao
Uma das formas de traduzir um programa para a execuo em uma mquina a compilao. Nesse mtodo, o
programa traduzido disponibilizado para execuo diretamente sobre o sistema operacional. Uma das vantagens
desse mtodo a possibilidade de uma execuo mais rpida e, por isso, o mtodo mais comum em linguagens de
produo como C e COBOL. A linguagem na qual o programa escrito (e da qual ser traduzido) chamada de
linguagem fonte. A linguagem para a qual ser traduzido chamada de Linguagem alvo.
Nos dias de hoje, a arquitetura comum de um compilador prev sua execuo em vrias etapas, facilitando sua
construo e flexibilidade. Suas etapas, de modo genrico, so:
- Anlise Lxica; Anlise Sinttica; Anlise Semntica; Gerao de cdigo intermedirio; Otimizao; Gerao de
cdigo alvo;
- O analisador lxico rene os caracteres do cdigo fonte em unidades lxicas que so elementos da linguagem com
significado prprio, tais como identificadores, operadores, smbolos de pontuao, etc.
- O analisador sinttico utiliza essas unidades lxicas e as utiliza para construir estruturas hierrquicas chamadas
rvores de anlise, as quais representam a estrutura sinttica do programa. Ainda que no sejam construdas de fato
(apenas conceitualmente) so essas rvores que permitem a obedincia do programa s regras gramaticais da
linguagem.
- O analisador semntico verifica se foram respeitados critrios de contedo, tais como tipos de dados de variveis
em atribuies ou operaes aritmticas.
- Aps passar pelas trs etapas de anlise, o cdigo fonte considerado bem construdo e est apto ao processo
de traduo.
- A gerao de cdigo intermedirio tem por objetivo a traduo para uma linguagem diferente da linguagem fonte,
de mais baixo nvel, mas ainda de mais alto nvel que a linguagem alvo. Sua finalidade facilitar o processo de
otimizao.
A otimizao serve para melhorar o programa em termos de tamanho e rapidez na hora da execuo. O objetivo
remover do cdigo instrues repetidas ou que no tem nenhum efeito prtico, como por exemplo, a atribuio e
valores a variveis que nunca sero lidas.
Pode ser uma parte opcional da compilao em alguns compiladores. Normalmente isso acontece nos casos em que
o tempo de compilao mais curto mais importante que o tempo de execuo mais curto.
A gerao de cdigo alvo traduz o cdigo otimizado em linguagem de mquina, tornando-a apta a execuo.
A maior parte da troca de informaes entre as etapas de anlise do cdigo feita por meio de uma tabela de
smbolos. Nessa tabela, so armazenadas as unidades lxicas encontradas, seus caracteres correspondentes no
cdigo fonte (lexemas) e, quando necessrio, seus tipos de dados. Essa estrutura permite um trabalho harmnico
entre os analisadores. Embora pronto para rodar na mquina, normalmente o programa executvel necessita de
apoio do Sistema Operacional para faz-lo, se utilizando de chamadas de sistema. Alm das chamadas de sistema, os

programas podem necessitar de outras outros programas j compilados e pr-existentes, como bibliotecas. O
processo de vincular o programa compilado a esses outros mdulos de programa (de sistema ou bibliotecas)
chamado de linkedio. A execuo de um programa em cdigo de mquina em um computador de arquitetura von
Neumann ocorre em um processo chamado ciclo buscar-executar. Tem esse nome porque cada instruo executvel
deve ser buscada na memria e trazida ao processador antes da sua execuo. A velocidade do computador (e
consequentemente da execuo do programa) dada pela velocidade da conexo entre processador e memria.
Essa conexo chamada de gargalo de von Neumann e o principal fator limitante da velocidade de funcionamento
de computadores com essa arquitetura. Esse gargalo foi uma das principais motivaes para a pesquisa e
desenvolvimento de computadores paralelos.
Interpretao Pura
A interpretao est na extremidade oposta em relao compilao no que diz respeito aos mtodos de
implementao. Nesse mtodo, um programa age como uma simulao de mquina, interpretando as instrues do
programa fonte e traduzindo-as em tempo de execuo para a mquina. Os interpretadores oferecem linguagem
em cdigo fonte uma mquina virtual, capaz de interpretar programas nessa linguagem, sem a necessidade de se
utilizar linguagens de baixo nvel. A principal vantagem desse mtodo facilitar as atividades de depurao, pois as
mensagens de erro so facilmente associadas a instrues em linguagem fonte. Sua principal desvantagem
significativa o tempo de execuo, que pode variar de 10 a 100 vezes mais lento, por causa do overhead que
gerado pela traduo em tempo de execuo. Outra desvantagem que ela normalmente exige mais espao pois
durante toda a execuo do programa h a necessidade de se manter informaes de apoio, como a tabela de
smbolos. A interpretao pode ser difcil em programas escritos em uma linguagem complexa pois o significado de
cada instruo deve ser determinado diretamente do programa fonte em tempo de execuo. Por isso,
normalmente utilizada em linguagens de programao com estruturas mais simples, como PROLOG, LISP e SQL.
Sistemas de Implementao Hbridos
Algumas linguagens se utilizam de um modelo intermedirio, entre a compilao e a interpretao, para
implementao. Eles traduzem os programas da linguagem fonte para uma linguagem intermediria de forma a
facilitar a interpretao. Esse mtodo torna a execuo mais rpida que a interpretao pura (embora ainda mais
lenta que a compilao) pois a linguagem intermediria normalmente mais prxima da linguagem de mquina. A
compilao parcial, ou interpretao de cdigo intermedirio, oferece a vantagem de tornar o interpretador mais
simples, alm de permitir a identificao de alguns erros antes da execuo. Alguma linguagens bem conhecidas se
utilizam desse mtodo, como a linguagem Perl. As primeiras implementaes de Java tambm utilizavam esse
mtodo, a partir de uma linguagem intermediria chamada bytecode. No caso do Java, uma vantagem adicional a
portabilidade oferecida pela Mquina Virtual Java. Evoluo das principais linguagens de programao:
FORTRAN; LISP; COBOL; Smalltalk;
Evoluo das principais linguagens de programao
O incio da histria das linguagens de programao, tais como as conhecemos hoje, pode ser datada em 1945. De l
pra c muitas e interessantes linguagens foram projetadas, implementadas e evoludas com o singular objetivo de
facilitar a interao homem x mquina. Nesta aula sero apresentadas apenas 4 das linguagens mais marcantes
dessa histria. A escolha, embora subjetiva, permite ter uma viso ampla do que j foi feito nessa rea e imaginar o
que est por vir.

FORTRAN: A linguagem FORTRAN tida por alguns como a primeira linguagem de alto nvel compilada. At ento,
as implementaes em linguagens mais amigveis era feitas por interpretao e a compilao era feita apenas em
linguagens de mais baixo nvel. A primeira meno linguagem foi feita em um documento intitulado The IBM
Mathematical FORmula TRANslating, de 1954. O documento descrevia a primeira verso do FORTRAN, a qual foi
batizada de FORTRAN 0. Esse documento descrevia uma linguagem que minimizaria erros de codificao e
maximizaria a produtividade dos programadores. FORTRAN teve, na prtica, 5 verses lanadas no decorrer do
tempo. A cada uma delas novas caractersticas e funcionalidades foram apresentadas: FORTRAN I: Criada a partir
modificaes feitas durante a implementao da FORTRAN 0, iniciada em 1955 e finalizada em 1957. Inclua
formatao de entrada/sada, nomes de variveis de at 6 caracteres, sub-rotinas definidas pelo usurio, a instruo
IF e a instruo loop. No havia instrues de tipificao de dados e os tipos eram definidos por conveno em
funo dos nomes das variveis. FORTRAN II: Essa verso foi distribuda na primavera de 1958. Alm de corrigir
problemas existentes na verso anterior, acrescentou alguns recursos novos linguagem, sendo o mais destacado a
compilao independente de sub-rotinas. Essa implementao se tornou importante porque a pouca confiabilidade
do hardware existente, associada necessidade de se compilar todo o programa a cada alterao, limitava o
tamanho dos programas a meras 400 linhas. A nova funcionalidade resolveu a questo. FORTRAN IV: Um FORTRAN
III chegou a ser desenvolvido mas nunca foi distribudo. A verso subsequente FORTRAN IV, tornou-se rapidamente a
linguagem mais utilizada de seu tempo. Os principais avanos foram a declarao explcita de tipos de dados e a
capacidade de se passar sub-rotinas como parmetro para outras sub-rotinas. FORTRAN 77: Lanada em 1978,
trouxe como inovao a possibilidade de manipulao de cadeias de caracteres, instrues lgicas de controle de
lao e um IF com a clusula opcional ELSE. FORTRAN 90: Lanado em 1992, a verso mais atual da linguagem e
drasticamente diferente da verso 77. Inclui um conjunto de operaes para manipulao de matrizes; novas
instrues de controle como CASE, EXIT e CYCLE; recurso e passagem opcional de parmetros; a possibilidade de se
modularizar os programas em pacotes. O impacto da linguagem FORTRAN na histria da programao difcil de ser
medido precisamente, mas fcil afirmar que foi o primeiro e mais importante passo para a codificao tal como a
conhecemos hoje.
Exemplo de cdigo em FORTRAN 90
PROGRAM circulo
IMPLICIT NONE
! Esse programa calcula a equacao de um circulo passando por 3
! pontos fornecidos pelo usuario . Utiliza -se da subrotina calcula_circulo
! Declaracao de variveis
REAL :: x1 , y1 , x2 , y2 , x3 , y3 , a, b, r
! Passo 1: le coordenadas
PRINT *,"Entre com a coordenada dos tres pontos"
PRINT *,"na ordem x1,y1,x2,y2,x3,y3"
READ *,x1 ,y1 ,x2 ,y2 ,x3 ,y3
! Passo 2: chama subrotina calcula_circulo
CALL calcula_circulo(x1 ,y1 ,x2 ,y2 ,x3 ,y3 ,a,b,r)
! Passo 3: escreve resultado na tela
PRINT *,"O Centro do circulo que passa por esses & &pontos eh (",a,",",b,")"
PRINT *,"Seu raio eh ",r
END PROGRAM circulo
LISP: LISP a primeira linguagem de programao funcional e foi criada para oferecer recursos para processamento
de listas. Essa necessidade surgiu a partir das primeiras aplicaes na rea de Inteligncia Artificial (IA). O interesse
por IA surgiu em meados da dcada de 50. A linguagem mais popular existente na poca, FORTRAN, no apresentava
os recursos necessrios para a fcil manipulao de listas de elementos e, em 1958, John McCarthy props a
primeira verso de uma linguagem com essas caractersticas, a qual batizou de LISt Processing, ou LISP. LISP possui
um conjunto de caractersticas peculiares e lanou um novo paradigma de linguagens de programao, o paradigma
funcional. Suas principais caractersticas so: Estrutura de dados: LISP possui apenas dois tipos de dados, tomos e
listas. tomos so smbolos ou nmeros e listas so estruturas lineares para armazenamento de tomos ou de
outras listas. Processos na programao funcional: Toda a computao feita por meio da aplicao de funes a
argumentos. No so necessrias atribuies ou variveis. A iterao feita por recurso, sendo desnecessrias

instrues de loop. Sintaxe: A sintaxe de um programa funcional notadamente diferente daquela dos programas
imperativos, como Java ou C. Nessas linguagens, os programas parecem uma mescla de instrues em ingls e
lgebra. LISP um modelo de simplicidade. O cdigo do programa e os dados tem exatamente a mesma forma de
lista entre parnteses. LISP dominou as aplicaes de IA durante mais de 25 anos e ainda uma das linguagens mais
utilizadas nessa rea. Suas verses mais atuais podem ser compiladas (as antigas eram s interpretadas) o que
melhora bastante o desempenho. Para alguns tipos de problemas, a programao funcional muito superior aos
demais paradigmas de linguagens. A verso inicial de LISP, dada a sua popularizao na rea de IA, foi modelo para
uma srie de dialetos e descendentes da linguagem. Dessas, as mais importantes so: Scheme: Surgida no MIT em
meados da dcada de 70, introduziu o conceito de escopo esttico e o tratamento de funes como entidades de
primeira classe. Por ser pequena e simples, indicada para o ensino. Common LISP: Criada com o intuito de unificar
os diversos dialetos LISP existentes na dcada de 80. Buscou unificar as principais e melhores funcionalidades de
cada dialeto. Haskell: Uma das mais novas verses, data da dcada de 90, muito utilizada em aplicaes de
modelagem 3D.
Exemplo de cdigo COMMON LISP
(defun fatorial (n)
(do ((i n (- i 1))
(resultado 1 (* resultado i)))
((= i 0) resultado)))
COBOL: COBOL tem uma histria bastante peculiar. Foi, provavelmente, uma das linguagens de programao mais
utilizadas mas deixou poucas contribuies ao desenvolvimento de outras linguagens. Projetada especificamente
para aplicaes comerciais, tem como principal progenitora a linguagem FLOW-MATIC da empresa UNIVAC. Sua
especificao inicial foi publicada em 1960, aps o encontro patrocinado pelo Departamento de Defesa NorteAmericano, em 1959, para a definio de uma linguagem comum para aplicaes comerciais. Novas verses da
linguagem foram publicadas em 1961 e 1962, ainda patrocinadas pelo Departamento de Defesa. A partir de 1968 foi
feita uma padronizao pelo American Standards Institute (ANSI), que publicou novas veres em 1974 e 1985. A
linguagem continua a evoluir atualmente e bastante utilizada em aplicaes financeiras h quase 50 anos. Talvez
seja a mais antiga das linguagens ainda em uso no mercado. COBOL deu origem a uma srie de conceitos novos,
como por exemplo a instruo DEFINE e o uso de variveis mais longas (at 30 caracteres). A parte forte do projeto
de COBOL a diviso de dados, embora a diviso de procedimentos seja relativamente fraca. O detalhamento na
manipulao de dados tornou-a referncia no processamento de dados e emisso de relatrios, mas a inexistncia
do conceito de funes limitou seu uso mais amplo. O fato de ter nascido como uma imposio do Departamento de
Defesa provavelmente garantiu sua sobrevivncia inicial, quando ainda era muito imatura, mas sua evoluo
posterior e adoo para aplicaes de contabilidade garante sua existncia at hoje.
Exemplo de cdigo COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. hello-world.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY "hello ," WITH NO ADVANCING
DISPLAY "world!"
STOP RUN.
Smalltalk: Historicamente, Smalltalk marca o incio do paradigma de orientao a objetos como o conhecemos hoje.
As trs principais caractersticas desse paradigma (abstrao, herana e vinculao dinmica) at j tinham surgido
de forma elementar em outras linguagens. Mas apenas em Smalltalk foram reunidas para compor uma linguagem
completa. Sua origem data da dissertao de Ph.D. de Allan Kay, no final da dcada de 60, na Universidade de Utah.
Seu trabalho previu o surgimento de computadores pessoais poderosos e seu uso por no programadores. Os
computadores existentes poca eram grandes e voltados para o processamento de instrues em lote, sendo
usados normalmente por programadores profissionais e cientistas. Kay anteviu que uma nova gerao de

computadores, utilizados por no programadores, deveriam ser altamente interativos e usar grficos sofisticados.
Sua contratao pela Xerox e a criao do Learning Research Group deu a ele os meios para prosseguir em suas
pesquisas, que culminaram na primeira verso da linguagem, o Smalltalk-72. Nos anos que se seguiram, mais
pesquisas e desenvolvimento foram realizados, o que resultou na linguagem Smalltalk-80. Nessa poca, tanto a
linguagem quanto o hardware da poca quase coincidiam com viso que Kay tivera mais de 10 anos antes. Em
Smalltalk, as unidades de programa so objetos e encapsulam dados locais e m um conjunto de operaes chamados
de mtodos. Essa unidades ficam disponveis a outros objetos e sua interao se traduz na funcionalidade dos
programas. O mundo do Smalltalk no preenchido por outra coisa seno objetos. Toda a computao feita por
meio da mesma tcnica uniforme: envia-se uma mensagem a um objeto (chamada de mtodo) e o retorno enviado
(um objeto) contm a informao solicitada ou informa a execuo de um processamento. Em termos de simulao,
a linguagem simula uma coleo de computadores (objetos) que se comunicam entre si (por meio de mensagens).
Assim, cada objeto uma abstrao de um computador em termos de armazenamento de dados e processamento
de instrues. Smalltalk no apenas uma linguagem, mas um ambiente completo de desenvolvimento de software.
A interface com o ambiente altamente grfica, fazendo uso de janelas sobrepostas, menus suspensos e mouse. A
linguagem promoveu como ningum dois aspectos distintos e importantes da computao atual: os sistemas de
janelas e a orientao a objetos. Embora algumas das ideias j existissem poca, somente em Smalltalk elas
atingiram a maturidade. O impacto da linguagem sobre o mundo da computao extenso e ter longa durao.
Exemplo de cdigo Smalltalk
Magnitude subclass: Person [
| name age |
Person class >> name: name age: age [
^self new name: name; age: age; yourself
]
< aPerson [ ^self age < aPerson age ] name [ ^name ]
name: value [ name := value ]
age [ ^age ]
age: value [ age := value ]
printOn: aStream [ aStream nextPutAll: ('%1 (%2)' % { name. age })
]
group := {
Person name: 'Dan' age: 23.
Person name: 'Mark' age: 63.
Person name: 'Cod' age: 16.
}.
group asSortedCollection reverse