You are on page 1of 16

Captulo 4

Linguagens de Programao
4.0 ndice
4.1 Programao de Computadores 2 2 2 3 3 5 6 6 8 8 8 12 13 13 13 13 14 14 14 14 15 15 15

4.2 Nveis de Linguagens de Programao 4.2.1 Linguagem de Mquina 4.2.2 Linguagem Hexadecimal 4.2.3 Linguagem Assembly 4.2.4 Linguagem de Alto Nvel 4.2.5 Linguagens estruturadas 4.3 Execuo de Programas

4.4 Desenvolvimento de Programas 4.4.1 Gerao do cdigo fonte (codificao) 4.4.2 Traduo do Cdigo Fonte (cdigo objeto) 4.4.3 Editores de ligao 4.4.4 Depuradores ou debuggers 4.5 Paradigmas de programao 4.5.1 Programao no-estruturada 4.5.2 Programao Procedural 4.5.3 Programao Modular 4.5.4 Programao Orientada a Objetos 4.5.5 Linguagens de programao e seus paradigmas 4.6 Linguagens Interpretadas 4.6.1 Compilador Versus Interpretador 4.6.2 Mquina Virtual 4.6.3 Java

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

4.1 Programao de Computadores


Embora o equipamento bsico para a realizao das tarefas associadas Cincia da Computao seja, evidentemente, o Computador, ns utilizaremos, ao longo deste curso, o conceito de Sistema Computacional, pelo seu significado mais abrangente, tanto quanto ao tipo de hardware envolvido quanto pela sua extenso aos demais componentes envolvidos nas atividades computacionais, particularmente os programas, mtodos, regras e documentao. Um Sistema Computacional pode ser visto como uma associao entre dois conceitos cada vez mais utilizados na terminologia de informtica:
n o hardware , que est associado parte fsica do sistema (os circuitos e

dispositivos) que suporta o processamento da informao; n o software , que corresponde ao conjunto de programas responsveis pela pilotagem do sistema para a execuo das tarefas consideradas. No que diz respeito a esta segunda classe de componentes, pode-se estabelecer uma classificao segundo o tipo de servio por ele realizado. Assim, tem-se as seguintes definies:
n o software de sistema (ou sistema operacional) capaz de oferecer ao usurio,

ou a outros softwares, facilidades de acesso aos recursos do computador, seja atravs de comandos, seja atravs de servios especiais ativados a nvel de um programa. O sistema operacional administra os arquivos, controla perifricos e executa utilitrios. n o software utilitrio, que podem ser programas desenvolvidos por especialistas ou mesmo por usurios experimentados que tem por objetivo facilitar a realizao de determinadas atividades correntes no uso dos computadores (deteco e eliminao de vrus, programas de comunicao em redes de computadores, compresso de arquivos, etc...);
n o software aplicativo, que so os programas desenvolvidos ou adquiridos pelos

usurios para algum fim especfico, seja ele de natureza profissional, educacional ou mesmo de lazer (jogos). Informalmente, uma linguagem de programao pode ser definida como sendo um conjunto limitado de instrues (vocabulrio), associado a um conjunto de regras (sintaxe) que define como as instrues podem ser associadas, ou seja, como se pode compor os programas para a resoluo de um determinado problema. Ao longo dos anos, foram desenvolvidas (e continuam sendo) uma grande quantidade de linguagens de programao, algumas de uso mais geral e outras concebidas para reas de aplicao especficas.

4.2 Nveis de Linguagens de Programao


As linguagens de programao podem ser classificadas em nveis de linguagens, sendo que os nveis mais baixos so mais prximas da linguagem interpretada pelo processador e mais distante das linguagens naturais.

4.2.1 Linguagem de Mquina


Lembrando que o computador corresponde basicamente a um conjunto de circuitos, a sua operao controlada atravs de programas escritos numa forma bastante primitiva, baseada no sistema binrio de numerao tanto para a representao dos dados quanto das operaes. A esta forma de representao dos programas, dado o nome de linguagem de mquina , em razo de ser a forma compreendida e executada pelo hardware do sistema.

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

As instrues de linguagem de mquina so representadas por cdigos que correspondem palavras binrias cuja extenso pode variar de 8 a 64 bits ( Figura 1). Dependendo da operao considerada, o cdigo de uma instruo pode simbolizar a operao a ser executada e os dados envolvidos na operao (ou uma referncia localizao dos dados).

1 0 1 0

0 0 0 0

0 1 0 0

1 0 0 1

1 1 0 0

0 0 1 1

1 1 0 1

0 1 1 0

1 0 1 0

1 0 0 1

0 1 1 1

0 0 0 1

1 1 0 0

0 1 1 0

1 0 1 1

0 0 1 0

Figura 1.

Ilustrao de um programa em linguagem de mquina

Por uma questo de custo a nvel do hardware, as operaes representadas pelas instrues de linguagem de mquina so bastante elementares, como por exemplo, a transferncia de dados entre memria e registro da CPU, a adio de dois valores, o teste de igualdade entre dois valores, etc... A linguagem de mquina impraticvel para escrita ou leitura. invivel escrever ou ler um programa codificado na forma de uma string de bits.

4.2.2 Linguagem Hexadecimal


Para simplificar a compreenso e a programao de computadores, num primeiro tempo foi adotado a notao hexadecimal para representar programas em linguagem de mquina, onde a seqncia de bits representada por nmeros hexadecimais, conforme ilustrado na Figura 2. 11 1A 39 03 84 47 84 03 Figura FB AB 7F 30 39 73 F3 37 84 83 03 83 2. Ilustrao 43 27 5B 6C 63 F4 3A B4 50 83 BC 5F 78 5F FF FF de um programa em D5 6F 74 84 6C 10 00 00 linguagem 99 FF 10 AB 7D 6B 39 85 85 00 00 00 hexadecimal 11 54 94 00 20 35 47 74

A linguagem hexadecimal portanto apenas uma simplificao de notao da linguagem de mquina. Apesar disto, a programao e leitura usando a linguagem hexadecimal continua impraticvel.

4.2.3 Linguagem Assembly


Embora seja a linguagem diretamente executvel pelos processadores, a programao de aplicaes diretamente em linguagem de mquina impraticvel, mesmo representada na notao hexadecimal. Por esta razo, a linguagem de mquina de cada processador acompanhada de uma verso legvel da linguagem de mquina que a chamada linguagem simblica Assembly. Simblica pois esta linguagem no composta de nmeros binrios ou hexadecimais como nas duas linguagens anteriores. A linguagem Assembly na realidade uma verso legvel da linguagem de mquina. Ela utiliza palavras abreviadas, chamadas de mnemnicos, indicando a operao. Abaixo so apresentados dois exemplos de instrues Assembly:
n MOV R1, R2 nesta instruo identifica-se o mnemnico MOV (abreviao de

MOVE) e dois registradores como parmetros: R1 e R2. Quando o processador executa esta instruo, ele comanda o movimento do contedo de R2 para R1 (equivalente a instruo Pascal R1:=R2, sendo R1 e R2 equivalente a duas variveis); n ADD R1, R2 nesta instruo identifica-se o mnemnico ADD (abreviao de ADDITION) e dois registradores como parmetros: R1 e R2. Quando o processador executa esta instruo, ele comanda a adio do contedo de R1 ao contedo de R2 e o resultado armazenado e m R1 (equivalente a instruo Pascal R1:=R1+R2). Escolhendo nomes descritivos para as posies de memria, e usando mnemnicos para representar cdigos de operao, a linguagem assembly facilitou significativamente

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

a leitura de seqncias de instruo de mquina. Como exemplo, supomos a operao de dois nmeros inteiros: A:=B+C. Esta operao, em um PC, em notao hexadecimal ficaria: A1000203060202A30402. Se associarmos o nome B posio de memria 200h, C posio 202h e A posio 204h, usando a tcnica mnemnica, a mesma rotina poder ser expressa da seguinte forma:
MOV AX,B ADD AX,C MOV A,AX ; registro AX recebe o valor de memria contida na varivel B ; AX recebe a soma de AX (valor de B) com o valor de C ; varivel A recebe valor de AX

A maioria concorda que a segunda forma, embora ainda incompleta, melhor que a primeira para representar a rotina. Apesar de oferecer uma representao mais prxima do que o programador est acostumado a manipular, a linguagem Assembly apresenta certas dificuldades para a realizao dos programas, tais como a necessidade de definio de um conjunto relativamente grande de instrues para a realizao de tarefas que seriam relativamente simples (se representadas atravs de outras linguagens) e a exigncia do conhecimento de detalhes do hardware do sistema (arquitetura interna do processador, endereos e modos de operao de dispositivos de hardware, etc...). Por outro lado, a utilizao da linguagem Assembly proporciona um maior controle sobre os recursos do computador, permitindo tambm obter-se bons resultados em termos de otimizao de cdigo Como a linguagem Assembly apenas uma verso legvel da linguagem de mquina, a passagem de um programa escrito em Assembly para a linguagem de mquina quase sempre direta, no envolvendo muito processamento. Esta passagem de um programa Assembly para linguagem de mquina chamada de Montagem, e o programa que realiza esta operao chamado de montador (Assembler ). A linguagem Assembly orientada para mquina (ou melhor, para processador), necessrio conhecer a estrutura do processador para poder programar em Assembly. A linguagem Assembly utiliza instrues de baixo nvel que operam com registros e memrias diretamente. Assim ela muito orientada s instrues que so diretamente executadas pelo processador. Na seqncia da evoluo das linguagens de programao, procurou-se aproximar mais a linguagem de programao linguagem natural que utilizamos no dia-a-dia: surgiram ento as linguagens de alto nvel, tipo Pascal, C, C++, etc.

Vantagens e Desvantagens da Linguagem Assembly


Mas se ns temos as linguagens de alto nvel para qu precisamos utilizar a linguagem Assembly? Para responder esta pergunta necessrio conhecer as vantagens e desvantagens da linguagem Assembly e a sua utilizao. Desvantagens com relao as linguagens de alto nvel:
n A linguagem Assembly apresenta um nmero muito reduzido de instrues, do

tipo operaes de movimentao de dados em memria, para registros e para memrias, e operaes lgicas e aritmticas bem simples. Estas instrues so de baixa expressividade, isto , elas so de baixo nvel. O programador deve programar num nvel de detalhamento muito maior para fazer a mesma coisa que em um programa escrito em linguagem de alto nvel. n Como o programador utiliza diretamente os recursos do processador e memria, ele deve conhecer muito bem a mquina onde ele est programando.
n Um programa escrito em linguagem Assembly no muito legvel, por isso ele

deve ser muito bem documentado.


n Um programa Assembly no muito portvel. Ela portvel apenas dentro de

uma famlia de processadores. Por exemplo, diferente de um programa C, ele no pode ser executado em PCs e estaes de trabalho. n Devido a sua baixa expressividade, ilegibilidade e exigncia do conhecimento sobre a mquina faz a programao Assembly ter um custo de desenvolvimento

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

maior, requerendo um maior nmero de homens/hora comparado com a programao utilizando linguagens de alto nvel. Apesar das desvantagens acima citadas, a utilizao da linguagem Assembly tem algumas vantagens que so listados abaixo:
n Ela permite o acesso direto ao programa de mquina. Utilizando uma linguagem

de alto nvel, no tem-se o controle do cdigo de mquina gerado pelo compilador (alguns compiladores permite a otimizao de tamanho e de velocidade do programa). Devido a este acesso, o programador pode gerar um programa mais compacto e eficiente que o cdigo gerado pelo compilador. Um programa escrito em linguagem Assembly pode ser 0 ou 300 % menor e mais rpido que um programa compilado. n Alm disso, esta linguagem permite o controle total do hardware, por exemplo, permitindo a programao de portas seriais e paralela de um PC.

Aplicaes da Linguagem Assembly


A linguagem Assembly utilizada em vrios tipos de aplicaes:
n Controle de processos com resposta em tempo real, devido a possibilidade de

gerar programas mais eficientes. Neste tipo de aplicao, geralmente o processador deve executar um conjunto de instrues em um tempo limitado. Por exemplo, a cada 10 milisegundos o processador deve ler um dado, process-lo e emitir um resultado. n Comunicao e transferncia de dados, devido a possibilidade de acessar diretamente o hardware, a linguagem Assembly utilizada para a implementao de programas de comunicao ou transferncia de dados. n Otimizao de subtarefas da programao de alto nvel, um programa no precisa somente ser escrito em linguagem Assembly ou linguagem de alto nvel. Ns podemos ter programas de alto nvel com subtarefas escritas em linguagem Assembly. Sendo assim, ns podemos otimizar partes de programas, no caso de tarefas tempo-real ou para a programao do hardware do computador.

4.2.4 Linguagem de Alto Nvel


As linguagens de alto nvel so assim denominadas por apresentarem uma sintaxe mais prxima da linguagem natural, fazendo uso de palavras reservadas extradas do vocabulrio corrente (como READ, WRITE, TYPE, etc...) e permitirem a manipulao dos dados nas mais diversas formas (nmeros inteiros, reais, vetores, listas, etc...); enquanto a linguagem Assembly trabalha com bits, bytes, palavras, armazenados em memria. As linguagens de alto nvel ou de segunda gerao surgiram entre o final da dcada de 50 e incio dos anos 60. Linguagens como Fortran, Cobol, Algol e Basic, com todas as deficincias que se pode apontar atualmente, foram linguagens que marcaram presena no desenvolvimento de programas, sendo que algumas delas tm resistido ao tempo e s crticas, como por exemplo Fortran que ainda visto como uma linguagem de implementao para muitas aplicaes de engenharia. Cobol um outro exemplo de linguagem bastante utilizada no desenvolvimento de aplicaes comerciais. Em comparao com a linguagem Assembly, a passagem de um programa escrito em linguagem de alto nvel para o programa em linguagem de mquina bem mais complexa. Para esta passagem so utilizados compiladores e linkadores. Com o desenvolvimento das linguagens de alto nvel, o objetivo da independncia de mquina foi amplamente alcanada. Dado que os comandos das linguagens de alto nvel no referenciam os atributos de uma dada mquina, eles podem ser facilmente compilados tanto em uma mquina como em outra. Assim, um programa escrito em linguagem de alto nvel poderia, teoricamente, ser usado em qualquer mquina, bastando escolher o compilador correspondente. Em realidade, no entanto, provou no ser to simples. Quando um compilador projetado, certas restries impostas pela mquina subjacente so, em ltima instncia, refletidas como caractersticas da linguagem a ser traduzida. Por exemplo, o tamanho do

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

registrador e as clulas de memria de uma mquina limitam o tamanho mximo dos inteiros que nela podem ser convenientemente manipulados. Disso resulta o fato de que, em diferentes mquinas, uma mesma linguagem pode apresentar diferentes caractersticas, ou dialetos. Conseqentemente, em geral necessrio fazer ao menos pequenas modificaes no programa antes de move-lo de uma mquina para outra. A causa deste problema de portabilidade , em alguns casos, a falta de concordncia em relao correta composio da definio de uma linguagem em particular. Para auxiliar nesta questo, o American National Standards Institute (ANSI) e a International Organization for Standardization (ISO) adotaram e publicaram padres para muitas das linguagens mais populares. Em outros casos, surgiram padres informais, devido popularidade de um dados dialeto de uma linguagem e ao desejo, por parte de alguns autores de compiladores, de oferecerem produtos compatveis.

4.2.5 Linguagens estruturadas


Nesta classe, encaixam-se as chamadas linguagens de programao de alto nvel surgidas em meados dos anos 60. As linguagens concebidas neste perodo foram resultado da necessidade da produo de cdigo de programa de forma clara, aparecendo o conceito de estruturao do cdigo (endentao, utilizao de letras maisculas e minsculas nos identificadores, eliminao de instrues problemticas como o go to, etc...). O perodo compreendido entre a dcada de 60 e a de 80 foi bastante produtivo no que diz respeito ao surgimento de linguagens de programao, o que permitiu o aparecimento de uma grande quantidade de linguagens as quais podem ser organizadas da seguinte forma:
n as linguagens de uso geral , as quais podem ser utilizadas para implementao

de programas com as mais diversas caractersticas e independente da rea de aplicao considerada; encaixam-se nesta categoria linguagens como Pascal, Modula-2 e C; n as linguagens especializadas, as quais so orientadas ao desenvolvimento de aplicaes especficas; a lgumas das linguagens que ilustram esta categoria so Prolog, Lisp e Forth; n as linguagens orientadas a objeto, que oferecem mecanismos sintticos e semnticos de suporte aos conceitos da programao orientada a objetos; alguns exemplos destas linguagens so Smalltalk, Eiffel, C++ e Delphi.

4.3 Execuo de Programas


Para que um programa possa ser executado, preciso que seja transferido para a memria principal. A maioria dos programas ficam armazenados em disco (disco rgido, disquetes, etc.), mas a CPU no pode executar nenhum programa diretamente a partir do disco. O programa precisa ser antes lido do disco e carregado na memria principal. Por exemplo, para executar o programa FORMAT (usado para formatar disquetes), preciso que voc fornea pelo teclado um comando como: FORMAT A: Uma vez que voc digita este comando, o programa FORMAT.COM lido do disco rgido e carregado na memria principal. O carregador (loader) o utilitrio do sistema operacional responsvel pela cpia do programa do dispositivo de armazenamento para a memria principal. A CPU pode ento executar o programa, que far a formatao de um disquete. A Figura 3 simboliza a leitura do programa FORMAT.COM a partir do disco para a memria principal (essa operao chamada de CARGA), e seu processamento pela CPU (essa operao chamada de EXECUO).

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

Figura 3. Carga e execuo do programa FORMAT.COM O sistema operacional responsvel pela leitura do arquivo FORMAT.COM e a execuo. O MS-DOS um exemplo de sistema operacional. O WINDOWS tambm pode ser considerado uma espcie de sistema operacional. Uma das vrias funes do sistema operacional permanecer o tempo todo ativo na memria principal, esperando que o usurio comande a execuo de a lgum programa. Portanto, quando se usa um comando como "FORMAT A:", o que ocorrer na verdade o seguinte:
n Inicialmente o sistema operacional checa se voc fornece algum comando. n Voc digita o comando "FORMAT A:". n O sistema operacional procura no disco o arquivo FORMAT.COM e carrega-o na

memria RAM. n O sistema operacional momentaneamente transfere o controle da CPU para o programa FORMAT.COM, que a essa altura j est carregado na memria principal. n A CPU executa o programa FORMAT.COM n Ao terminar a execuo do FORMAT.COM, o sistema operacional volta a ter o controle da CPU. Fica ento aguardando que voc envie um novo comando. Podemos entender ento que nenhum programa chega at a memria por mgica, e sim, atravs do controle feito pelo sistema operacional. Algum mais observador pode ento ficar com a seguinte dvida: "Se o sistema operacional quem l para a memria principal todos os programas a serem executados, como ento que o prprio sistema operacional chegou nesta memria?". No instante em que ligamos o computador, a memria principal no contm programa algum. Nesse instante, o sistema operacional est armazenado no disco (normalmente no disco rgido, no caso dos PCs), e precisa ser carregado na memria. Quem faz a carga do sistema operacional para a memria um programa chamado BIOS, que fica gravado em memria ROM. Lembre-se que a memria ROM no perde seus dados quando o computador desligado. Portanto, no instante em que ligamos o computador, o BIOS j est na memria, e imediatamente processado pela CPU. O processamento do BIOS comea com uma contagem de memria, seguido de alguns testes rpidos no hardware, e finalmente a leitura do sistema operacional do disco para a memria principal. Esse processo, ou seja, a carga do sistema operacional na memria RAM, chamado de BOOT. A Figura 4 mostra o processo de BOOT para a carga do sistema operacional DOS: 1) No instante em que o computador ligado, o sistema operacional est armazenado em disco, a RAM est "vazia", e a CPU executa o BIOS. 2) Mostra o instante em que termina a operao de BOOT. O sistema operacional j est carregado na memria e j est sendo executado pela CPU.

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

3) Mostra o que ocorre imediatamente antes da execuo do programa FORMAT.COM. O sistema operacional recebe um comando do usurio para que leia o arquivo FORMAT.COM do disco para a memria RAM. 4) O programa FORMAT.COM est sendo executado pela CPU.

Figura 4. BOOT e carga de um programa

4.4 Desenvolvimento de Programas


O desenvolvimento de programas associado ao uso de ferramentas ou ambientes de desenvolvimento que acompanham o programador desde a etapa de codificao propriamente dita at a gerao e teste do cdigo executvel. Sero apresentadas a seguir as principais etapas de gerao de um programa, alm das ferramentas utilizadas. Mais adiante sero apresentadas metodologias mais completas que definem os passos para o desenvolvimento de programas. Esta rea da informtica chamada de engenharia de software.

4.4.1 Gerao do cdigo fonte (codificao)


A codificao a escrita, utilizando uma linguagem de programao, das instrues que o computador deve realizar para alcanar um resultado. Para a realizao desta tarefa so utilizados os chamados editores. Os editores so a primeira ferramenta qual o programador recorre na etapa de codificao, pois atravs dela que ser gerado o arquivo (ou o conjunto de arquivos) que vai conter o cdigo-fonte do programa a ser desenvolvido. Apesar de que possvel utilizar qualquer editor de linha (como por exemplo o EDIT do DOS) para gerar o arquivo de programa, alguns ambientes oferecem ferramentas de edio mais poderosas (orientadas sintaxe ou de colorao de sintaxe). Alguns ambientes mais recentes oferecem a possibilidade de projeto de interfaces grficas e gerenciadores de eventos, com gerao automatizada do cdigo-fonte.

4.4.2 Traduo do Cdigo Fonte (cdigo objeto)


Independente da linguagem utilizada e da arquitetura do sistema computacional, o cdigo-fonte no executvel diretamente pelo processador. Ele permite apenas que o programador consiga definir o programa em uma forma legvel aos humanos. Para que se possa obter o programa executvel, necessrio que o cdigo-fonte seja traduzido para o cdigo de mquina do processador que compe a arquitetura do sistema. Felizmente, isto realizado de forma automtica graas existncia de ferramentas

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

como os Montadores (ou Assemblers que, como o nome indica, so orientados para traduzir programas escritos na linguagem Assembly) e os Compiladores, construdos para gerar o cdigo de programas originalmente escritos em linguagens de alto nvel como Pascal, C, Fortran e outras. O cdigo gerado por estas ferramentas representado segundo o sistema de numerao binria e denominado cdigo-objeto. O cdigo-objeto o cdigo produzido pelo compilador. Ele se trata de uma forma intermediria similar a linguagem de mquina do computador. O cdigo-objeto, apesar de estar representado em binrio, no auto-contido, ou seja, no executvel diretamente pelos processadores. A principal razo disto que o cdigo-objeto caracterizado normalmente por referncias a partes de programa que no esto necessariamente definidas no mesmo arquivo que gerou o aquele arquivo objeto. Estas outras partes do cdigo do programa podem ter sido geradas a partir de outros arquivos de cdigo-fonte concebidos pelo mesmo programador ou existirem sob a forma de arquivos de bibliotecas de sub-rotinas. O processo de traduo do cdigo fonte em cdigo objeto compreende trs atividades: anlise lxica, anlise sinttica e gerao de cdigo, que so processadas pelos mdulos do tradutor conhecidos como analisador lxico, sinttico e gerador de cdigo. Anlise lxica o processo de reconhecer quais cadeias de smbolos do programa-fonte representam entidades indivisveis. Por exemplo, os trs smbolos 153 no devem ser interpretados como 1, seguido por 5, seguido por 3, mas so reconhecidos como um valor numrico apenas. Do mesmo modo, as palavras que aparecem no programa, embora compostas de caracteres individuas, devem ser interpretadas cada qual como uma unidade inseparvel. A maioria dos seres humanos executa a atividade de anlise lxica com um esforo consciente pequeno. Quando solicitados a ler em voz alta, pronunciamos palavras completas, em vez de caracteres individuais. Dado que o analisador lxico identifica um grupo de smbolos que representam uma nica entidade, ele a classifica como sendo ou um valor numrico, ou uma palavra, ou um operador aritmtico, e assim por diante, e gera um padro de bits conhecido como tomo (token), indicativo da classe do elemento. Esses tomos so os dados de entrada do analisador sinttico. Anlise sinttica o processo de identificao da estrutura gramatical do programa, e de reconhecimento do papel de cada um dos seus componentes. O processo de anlise sinttica feito com base em um conjunto de regras sintticas, que definem a sintaxe da linguagem de programao. Uma forma de expressar tais regras travs de diagramas de sintaxe, representaes grficas da estrutura gramatical de um programa. A Figura 5 apresenta um diagrama de sintaxe do comando if-then-else existente em muitas linguagens de programao. Este diagrama indica que uma estrutura if-then-else comea com a palavra if, seguida de uma Expresso Booleana, seguida pela palavra then e, finalmente, por um Comando. Esta combinao pode ser ou no seguida por uma palavra else e outro Comando. Note que os termos de fato contidos num comando if-then-else so representados em uma elipse, enquanto os que exigem explicao adicional, tal como Expresso Booleana e Comando, esto em retngulo. Termos que exigem explicao adicional (aqueles nos retngulos) so chamados no-terminais; aqueles contidos nas elipses so os terminais. Na descrio completa da sintaxe de uma linguagem, os no terminais so descritos por meio de diagramas adicionais.

if

Expresso Booleana

then

Comando

else

Comando

Figura 5. Diagrama de sintaxe do comando if-then-else A Figura 6 apresenta um diagrama de sintaxe que descreve a sintaxe de uma estrutura chamada Expresso. Ela formada por um Termo que pode aparecer isolado ou ento seguido pelos smbolos +, e de outra Expresso. O segundo diagrama descreve um Termo como sendo, na sua forma mais simples, uma varivel, e em sua forma mais

10

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

complexa, qualquer Termo j construdo, seguido de um smbolo * ou /, seguido de uma Expresso.


Expresso: + Term Expresso

Termo: / Term * Expresso

Varivel

Figura 6. Diagrama de sintaxe descrevendo a estrutura de uma expresso algbrica simples Pode-se representar, de forma grfica, a maneira pela qual uma cadeia adere sintaxe descrita por um conjunto de diagramas de sintaxe, atravs de uma rvore sinttica, como ilustrado na Figura 7, que apresenta uma rvore sinttica para a cadeia x+y*z com base no diagrama da figura acima. Note-se que a raiz da rvore o no-terminal Expresso, e que cada nvel mostra a maneira como os no-terminais daquele nvel vo sendo decompostos, at que finalmente sejam obtidos os smbolos da prpria cadeia analisada.
Expresso

Termo

Expresso

Termo

Termo

Expresso

Termo

Figura 7. rvore sinttica da cadeia x+y*z O processo de anlise sinttica de um programa consiste, essencialmente, em construir uma rvore de sintaxe para o programa-fonte. Por isso, as regras de sintaxe que descrevem a estrutura gramatical de um programa no devem propiciar que duas ou mais rvores de sintaxe distintas possam ser construdas para a mesma cadeia, dado que isto levaria a ambigidades no analisador sinttico. Esta falha pode ser bastante sutil. Com efeito, a prpria regra da Figura 8 contm esse defeito, pois aceita as duas rvores de sintaxe mostradas na figura para o nico comando seguinte:

11

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

If B1 then if B2 then S1 else S2


Comando

if

Expresso booleana

then

Comando

else

Comando

B1 if Expresso booleana then Comando

S2

B2

S1

Comando

if

Expresso booleana

then

Comando

B1 if Expresso booleana then Comando else Comando

B2

S1

S2

Figura 8. Duas rvores de sintaxe distintas para o comando if B1 then B2 then S1 else S2 Note-se que as duas interpretao so significativamente diferentes. A primeira implica que o comando S2 ser executado se B1 for falso, enquanto a segunda implica que S2 s ser executado se B1 for verdadeiro e B2, falso. As definies de sintaxe para linguagens formais de programao so projetadas para evitar tais ambigidades. Em muitas linguagens, evita-se tais problemas usando chaves, ou ento Begin-End. Em particular, escreveramos:
If B1 then Begin End else S2 if B2 then S1

e
If B1 then Begin End;

if B2 then S1 else S2

para distinguir as duas possibilidades. medida que um analisador sinttico recebe tomos do analisador lxico, ele vai analisando os comandos e ignorando os comentrios. As informaes extradas das declaraes so tabeladas em uma estrutura conhecida como tabela de smbolos. Dessa forma, a tabela de smbolos guarda informaes sobre as variveis declaradas, os tipos

12

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

de dados e as estruturas de dados associadas a tais variveis. O analisador sinttico, ento, utiliza como base estas informaes ao analisar comandos tais como:
Total:=Custo+Imposto;

De fato, para determinar o significado do smbolo +, o analisador sinttico dever saber qual o tipo de dados associados s variveis Custo e Imposto. Se Custo for do tipo real e Imposto for do tipo caractere, esto somar Custo e Imposto faz pouco sentido e dever ser considerado um erro. Se Custo e Imposto forem ambos de tipo inteiro ento o analisador sinttico solicitar ao gerador de cdigo a construo de uma instruo em linguagem de mquina que utilize o cdigo de operao correspondente adio de inteiros. Se, porm, ambos forem de tipo real, o analisador solicitar o uso do cdigo de operao correspondente adio de valores em ponto flutuante. O comando acima tambm tem sentido quando os dados envolvidos no forem do mesmo tipo. Por exemplo, se Custo for inteiro e Imposto for real, o conceito de adio ainda ser aplicvel. Neste caso, o analisador sinttico poder decidir que o gerador de cdigo construa as instrues necessrias para converter um dado de um tipo para outro, antes de executar a adio. Tal converso implcita entre tipos denominada coero. As operaes de coero so mal-vistas por muitos projetistas de linguagens. Eles argumentam que a necessidade da coero um sintoma de falha no projeto do programa, no devendo, pois, ser contornada pelo analisador sinttico. O resultado que a maioria das linguagens modernas so fortemente tipadas, o que significa que todas as aes solicitadas por um programa devem envolver dados de tipos compatveis, sem coero. Analisadores sintticos para estas linguagens consideram como erros quaisquer incompatibilidade de tipo. A gerao de cdigo, ao f inal do processo de traduo, o processo de construo das instrues, em linguagem de mquina. Este processo envolve numerosos problemas, um dos quais o da construo de um cdigo eficiente. Por exemplo, consideremos a tarefa de traduzir a seguinte seqncia de dois comandos:
x:=y+x; w:=x+z;

Estes comandos poderiam ser traduzidos como comandos independentes. Todavia, esta interpretao tende a no produzir um cdigo eficiente. O gerador de cdigo deve ser construdo de tal forma que seja capaz de identificar que, ao ser completado o primeiro comando, os valores de x e de z j se encontram em registradores de propsito geral do processador, no necessitando, pois, serem carregados a partir da memria para o clculo do valor de w. Melhorias como essa constituem a otimizao de cdigo, cuja realizao constitui importante tarefa do gerador de cdigo. Note-se que as anlises lxica e sinttica e a gerao de cdigo no so efetuadas em ordem estritamente seqencial, mas de forma intercalada. O analisador lxico comea identificando o primeiro tomo e fornecendo-o ao analisador sinttico. J com esta pista sobre a estrutura que vem a seguir, o analisador sinttico solicita ao analisador lxico o prximo tomo. medida que o analisador sinttico reconhece sentenas ou comandos completos, vai ativando o gerador de cdigo, para que este possa produzir as correspondentes instrues de mquina.

4.4.3 Editores de ligao


A tarefa realizada pelo editor de ligaes, ou linker como mais conhecido rearranjar o cdigo do programa, incorporando a ele todas as partes referenciadas no cdigo original, resultando num cdigo executvel pelo processador. Esta tarefa pode ser feita tambm pelos chamados carregadores. A figura abaixo resume as trs etapas anteriores.

13

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

Cdigo Fonte

Cdigo Fonte

Cdigo Fonte

Cdigo Fonte

Cdigo Objeto

Cdigo Objeto

Cdigo Objeto

Cdigo Objeto

Biblioteca

Programa executvel

Figura 9. Desenvolvimento de um programa

4.4.4 Depuradores ou debuggers


Os debuggers so assim chamados devido sua funo essencial que de auxiliar o programador a eliminar (ou reduzir) a quantidade de bugs (erros) de execuo no seu programa. Eles executam o programa gerado atravs de uma interface apropriada que possibilita uma anlise efetiva do cdigo do programa graas :
n execuo passo-a-passo (ou instruo por instruo) de partes do programa; n visualizao do estado do programa atravs das variveis e eventualmente dos

contedos dos registros internos do processador; n alterao em tempo de execuo de contedos de memria ou de variveis ou de instrues do programa; n etc...

4.5 Paradigmas de programao


Do Assembly s linguagens mais sofisticadas de inteligncia artificial, a programao evoluiu para tcnicas de programao de mais em mais transparentes frente mquina, numa tentativa de prover uma maior modularidade e um crescimento em desempenho e expressividade. Existem vrios paradigmas de programao, que so estilos utilizados pelos programadores para conceber um programa. A evoluo das linguagens de programao pode ser apresentada a partir da forma como os paradigmas de programao evoluram desde a programao no estruturada programao orientada a objetos. A seguir sero apresentados alguns destes paradigmas de programao.

4.5.1 Programao no-estruturada


Usualmente, pessoas aprendem a programao escrevendo programas pequenos e simples, consistindo apenas de um programa principal. Aqui programa principal significa uma seqncia de comandos ou declaraes que modificam dados que so acessvel a todos os pontos do programa. Esta tcnica de programao tem vrias desvantagens no caso de programas grandes. Por exemplo, se a mesma seqncia necessria em localizaes diferentes ela deve ser copiada. Isto leva a idia de extrair estas seqncias, nomear elas e oferecer uma tcnica para chamar e retornar destes procedimentos .

4.5.2 Programao Procedural


Aqui um programa pode ser visto como uma seqncia de chamadas de procedimentos. Um exemplo de procedimento clssico o clculo de uma raiz quadrada. Uma chamada

14

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

de procedimento usada para invocar o procedimento, podendo ser passado alguns parmetros (por exemplo, o nmero cuja raiz quadrada deve ser calculada). Aps a seqncia ser executada, o controle retorna justo aps o ponto de chamada do procedimento. Introduzindo parmetros to bem quanto procedimentos de procedimentos (sub-procedimentos), programas podem ser escritos mais em mais estruturados e livres de erro. Por exemplo, se um procedimento correto, toda vez que ele usado ele produz um resultado correto. Conseqentemente, no caso de erros voc pode direcionar sua busca queles lugares que no so livres de erros.

4.5.3 Programao Modular


No passar dos anos, a nfase no projeto de programas passou do projeto de procedimentos para a organizao dos dados, surgindo a programao modular. Nela, procedimentos relacionados e dados que eles utilizam so agrupados em mdulos separados. Por exemplo, todas as funes de manipulao de uma pilha (empilhar, desempilhar, etc.) e a pilha em si podem ser agrupadas em um mdulo. Um programa portanto no consiste mais de apenas uma parte nica. Ele agora composto de vrias pequenas partes que interagem atravs de chamadas de procedimento. Cada mdulo tem seus prprios dados. Isto permite que cada mdulo gerencie um estado interno que modificado por chamadas a procedimentos deste mdulo.

4.5.4 Programao Orientada a Objetos


Em contraste com as outras tcnicas apresentadas, ns agora temos uma malha de objetos que interagem, cada um mantendo seu prprio estado. A essncia da programao orientada a objetos consiste em tratar os dados e os procedimentos que atuam sobre os dados como um nico objeto uma entidade independente com uma identidade e certas caractersticas prprias. Este paradigma de programao ser o objeto de estudo deste curso. Uma abordagem orientada a objetos identifica as palavras-chaves no problema. Estas palavras-chaves so descritas ento em um d iagrama e setas so desenhadas entre estas palavras-chaves para definir uma hierarquia interna. As palavras-chaves sero os objetos na implementao e a hierarquia define a relao entre estes objetos. O termo objeto usado aqui para descrever uma estrutura bem definida, contendo todas as informaes sobre certa entidade: dados e funes para manipular os dados. Os objetos introduzem uma maneira diferente de conceber, de programar, de analisar e de manter as aplicaes. Aps um longo perodo de maturao em laboratrios de pesquisa, as linguagens objetos comeam a invadir os domnios profissionais. possvel hoje em dia dizer que no se trata de um modo, mas de um processo de mutao. O principal argumento desses novos produtos inclui as facilidade de reutilizao de cdigo e em conseqncia ganhos de produtividade so alcanados. A reusabilidade depende em muito da modularidade dos programas.

4.5.5 Linguagens de programao e seus paradigmas


Uma linguagem de programao fornece o suporte a um estilo ou paradigma de programao se ela fornece funcionalidades que a tornam conveniente para usar determinado estilo. Uma linguagem no suporta uma tcnica se necessrio esforos excepcionais ou destreza para escrever tal programa: ela meramente habilita a tcnica a ser usada. Por exemplo, voc pode escrever programas estruturados em Fortran e programas orientados a objetos em C, mas isto desnecessariamente difcil de fazer porque estas linguagens no suportam diretamente estas tcnicas. de responsabilidade do programador aplicar certa tcnica de programao.

4.6 Linguagens Interpretadas


As etapas de desenvolvimento anteriores consideram que o uso de linguagens de programao compiladas, ou seja, aquelas que produziro um programa na forma da

15

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

linguagem de mquina do processador. Portanto, as instrues definidas pelo programador usando uma linguagem de alto nvel sero traduzidas para as instruo na linguagens de mquina. Existe outra forma de execuo de um programa, que a sua interpretao por um outro programa, chamado interpretador. So as ditas linguagens interpretadas. A linguagem Java a linguagem de programao interpretada mais conhecida atualmente. Ela interpretada por uma mquina virtual chamada JVM (Java Virtual Machine). Um interpretador um programa que executa as instrues escritas em linguagem de alto nvel. Geralmente, o interpretador translada as instrues de alto nvel em uma forma intermediria, que executada. Ao contrrio do compilador que traduz as instrues de alto nvel em uma linguagem de mquina.

4.6.1 Compilador Versus Interpretador


Um programa compilado geralmente executa mais rapidamente que um programa interpretado. A vantagem do interpretador que ele no necessita passar por um estgio de compilao durante a qual as instrues de mquina so gerados. Este processo pode consumir muito tempo se o programa longo. O interpretador, por outro lado, pode executar imediatamente os programas de alto-nvel. Por esta razo, os interpretadores so algumas vezes usados durante o desenvolvimento de um programa, quando um programador deseja testar rapidamente seu programa. Alm disso, os interpretadores so com freqncia usados na educao, pois eles permitem que o estudante programe interativamente. Tanto os interpretadores como os compiladores so disponveis para muitas linguagens de alto nvel. Mas, Java, Basic e LISP so especialmente projetadas para serem executadas por um interpretador. Embora se obtenha um programa mais lento, algumas linguagens interpretadas tem outra vantagem: a portabilidade. Como no gerado um cdigo de mquina, e sim um cdigo intermedirio que ser interpretado por uma mquina virtual, pode-se obter a portabilidade do cdigo se esta mquina virtual for desenvolvida para vrias plataformas (computadores diferentes). Este o caso da linguagem Java.

4.6.2 Mquina Virtual


Uma mquina virtual um ambiente operacional (ambiente onde os usurios executam o programa) auto-contido que se comporta como se fosse um computador separado. Por exemplo, uma applet Java executa em uma Mquina Virtual Java que no acessa ao sistema operacional do computador hospedeiro. Este projeto tem duas vantagens:
n Independncia de sistema: uma aplicao poder ser executada em qualquer

mquina virtual, sem se preocupar com o hardware e software dando suporte ao sistema.
n Segurana: como a mquina virtual no tem contato com o sistema operacional,

existem poucas possibilidade de um programa interpretado danifique outros arquivos ou aplicaes. Esta vantagem trs consigo uma limitao: os programas executando em uma mquina virtual no pode tomar vantagem das funcionalidades do sistema operacional

4.6.3 Java
Java uma das linguagens interpretadas mais conhecidas no momento. Ela uma linguagem de programao de alto nvel, desenvolvida pela Syn Microsystems. Ela uma linguagem orientada a objetos similar ao C++, mas simplificada para eliminar caractersticas que causam erros comuns de programao. Cdigos fontes de Java (arquivos com a extenso .java) so traduzidos na forma de um cdigo intermedirio chamado bytecode (arquivos com a extenso .class), que podem ser executados por um interpretador Java. O bytecode pode ser transferido atravs de uma rede e executada por uma Mquina Virtual Java (JVM).

16

Captulo 4: Linguagens de Programao

Prof. Roberto Willrich

Existem vrias implementaes de JVMs para diversos sistemas operacionais, incluindo UNIX, Macintosh OS e Windows. Alm disso, o bytecode pode ser convertido diretamente em instrues de linguagem de mquina, usando o compilador JIT (Just-Intime Compiler). Java uma linguagem de programao de propsito geral com um nmero de caractersticas que fazer ela muito interessante para ser usada na World Wide Web. Aplicaes Java menores, chamadas applets, podem ser baixadas de um servidor Web e executar no seu navegador por um navegador compatvel com o Java, tal como o Netscape Navigator ou o Microsoft Internet Explorer.

Figura 10. Criao e Execuo de uma aplicao Java

You might also like