Caderno de Apoio à Cadeira
2000/2001
Modulo de Estudo 1: Diversidade das linguagens
A utilização de uma linguagem de programação é por excelência a forma de especificar o funcionamento de um computador. Consoante os problemas a serem tratados, as melhores formas de especificação e tratamento podem ser distintas. Se incluirmos linguagens especificas e em estudo, não surpreende pois que existam, actualmente, mais de um melhor de linguagens de programação e dialectos distintos. Mais ainda, por todo o mundo comissões internacionais e grupo de investigação continuam a criar, desenvolver, melhorar ou substituir linguagens de programação diferentes. É pois normal a um informático ter contacto com um numero elevado de linguagens de programação distintas.
Embora algumas linguagens possam parecer à partida muito diferente, cedo se começam a encontrar as semelhanças entre as diversas linguagens. Esta caracterização será mais fácil quando enquadrada numa perspectiva histórica de evolução das varias linguagens. Só assim se compreendem as motivações, funções e objectivos da criação dos vários paradigmas relativamente as linguagem de programação e dentro destes das especificidades das várias linguagens.
Todos os programas executados num computador tem de ser codificados num conjunto de instruções similares a estas. Os programas assim codificados dizem-se em linguagem maquina ou código maquina.
Compilador: Um compilador é um programa, capaz de ler um ficheiro (normalmente de texto) contendo um programa escrito numa dada linguagem de programação e gerar um programa em linguagem maquina que seja equivalente ao programa inicial. Para tal, o compilador deve analisar o programa lido quer sintacticamente (i.e. verificar se a sua escrita esta de acordo com uma gramática bem definida) quer semanticamente.
Interpretador: Tal como o compilador, um interpretador analisa sintáctica e semanticamente uma dada linguagem de programação. No entanto, em vez de converter o programa que lhe é dado em linguagem maquina, o interpretador executa o programa que lhe é dado, passo a passo. Assim é um interpretador que controla o comportamento do programa, facilitando a interacção com o utilizador e a reescrita do programa(visto que o programa não tem de ser recompilado sempre que o desejamos executar).
Linguagens de programação: Linguagens formais utilizadas na descrição de mecanismos abstractos. Tem como objectivo descrever e comunicar um processo computacional. Podem ser utilizadas para estudar os algoritmos e para os definir de modo não ambíguo.
Tipologia das linguagens
Há diferentes formas para representar e relacionar as linguagens de programação entre si.
a) Por níveis:
disposição hierárquica, segundo seu nível e âmbito. O nível denota um índice da facilidade do programador enunciar a solução dos seus problemas.
Linguagens de baixo nível: O código maquina e a sua representação em Assembler.
Linguagens de alto nível: algoritmicas, imperativas, prescritivas, procedimentais (apoiadas sobre processo),determinísticas e quantitativas. Papel determinante do cálculo numérico. Exs: FORTRAN, PASCAL e SIMULA.
Linguagens de muito alto nível: Idealmente, não algoritmias, declarativas, não determinísticas e qualitativas. Vocacionadas para o processamento simbólico (como cálculo formal, manipulação de formulas algébricas, processamento de língua natural), conduzindo a programas mais abstractas. O programador descreve o problema em função de relações sobre objectos. Com uma descrição precisa o computador resolverá o problema sem qualquer outra intervenção. Exs: SQL, PROLOG, Haskell. Devido ao facto de ser ainda hoje uma das principais linguagens funcionais alguns autores incluem igualmente o LISP nesta família; isto apesar desta linguagem ser fortemente algoritmica e já ter sido exclusivamente utilizada na construção de um sistema operativo.
b) Por Árvores genealógicas
Desenha-se a rede das linguagens de programação destacando as suas ligações implícitas e explicitas. As principais árvores dividem-se pelos paradigmas da programação: Imperativo, orientados por objectos, funcional e lógica.
c) Gerações
As linguagens agrupam-se de acordo com um processo de mutações e selecções tecnológicas. Este processo é descontinuo. É usual a seguinte classificação em 5 gerações:
1ª Geração: Linguagem binária,linguagens maquinas e assembly.
2ª Geração: Utilizando compiladores ( i.e. baseadas em sistemas que lêem o programa numa destas linguagens e o "traduzem", ou compilam, para linguagem binária): COBOL, BASIC, RPG, FORTRAN IV/V, ALGOL, 58/60/68W.
3ª Geração: Linguagens procedimentais:PL/I, PASCAL, FORTRAN 8X,APL,C,SIMULA,BLISS.
4ª Geração: Geradores de programas (i.e. produzem programas noutras linguagens). A linguagem ADA.
Linguagens de interrogação (p.ex. para bases de dados):SQL,QBE.
5ª Geração:linguagens de especificação de problemas: LISP,PROLOG.
d) Outras formas de classificação
Eis outras formas de classificação referidas no texto, úteis essencialmente par identificar quando e como se deve optar por uma linguagem ou por outra.
Classificação por dominios de aplicação:
.cientificas:ALGOL, BASIC, FORTRAN
.comerciais:COBOL








