Vous êtes sur la page 1sur 8

A realizao de determinadas operaes em linguagem de mquina pode ser extremamente complexa.

Operaes que necessitem de interface com os dispositivos de entrada e sada, como gravao ou leitura de dados em disco, um exemplo. Esse tipo de operao no importante apenas em linguagens de programao. Este um dos motivos pelos quais os sistemas operacionais so construdos. Na realidade, os sistemas operacionais constroem uma camada entre hardware e software, facilitando a utilizao dos recursos da mquina real por meio da criao de uma mquina virtual. Essa mquina virtual muito mais simples de ser utilizada e prov uma srie de mecanismos ao usurio que facilitam a utilizao dos recursos do computador. Um exemplo so os arquivos, que permitem a manipulao de dados em disco sem que seja necessrio o conhecimento dos detalhes do funcionamento dos discos, como trilhas, setores, velocidade da rotao, posicionamento dos dados no disco e outros mais. Alm disso, o sistema operacional gerencia os recursos da mquina, evitando a m utilizao e at mesmo a danificao de seus componentes por um programador. Alm de os sistemas operacionais programarem operaes complexas e extremamente teis ao uso do computador, tambm fornecem uma interface para que outros programas possam utiliz-las. Essas interfaces so conhecidas como chamadas de sistema, ou system calls, e o conjunto de operaes disponibilizadas so as bibliotecas do sistema operacional. Os compiladores utilizam essas interfaces em vez de programar as operaes complexas por si mesmas. Quando o compilador encontra chamadas ao sistema operacional no cdigo-fonte em linguagem de alto nvel, transforma-as em referncias no resolvidas no cdigo-objeto em linguagem de mquina. Para que esse cdigo possa ser executado, precisa ser ligado ao cdigo do sistema operacional que efetivamente programa a operao. Esta a segunda etapa da compilao. O processo conhecido como ligao do cdigo ou linking. A integrao dos compiladores com os sistemas operacionais permite que o cdigo objeto de um programa seja portvel para qualquer mquina que utilize o mesmo sistema operacional, tornando o cdigo-objeto dependente do sistema operacional e no mais da plataforma do processador, visto que o sistema operacional deixa transparente as diferenas entre plataformas diversas. Porm, um cdigo-objeto compilado em um sistema operacional no poder ser executado em outro sistema operacional. Assim, um programa executvel em Linux provavelmente no poder ser executado em um sistema operacional HP-UX, SunOS, AIX ou da famlia Microsoft. Para que esse programa funcione nesses sistemas operacionais, o cdigofonte, em linguagem de alto nvel, dever ser compilado neste sistema operacional. A linguagem de programao Java tem uma arquitetura diferente, o que fornece a seus programas mais portabilidade que outras linguagens de programao de alto nvel. A compilao do cdigo Java no gera cdigo executvel em nenhum sistema operacional. Em vez disso, gera um cdigo pseudo-executvel, chamado bytecode. Esse cdigo uma espcie de cdigo de baixo nvel que, porm, no uma linguagem de mquina de algum processador, nem faz interface especfica com algum determinado sistema operacional. Para que esse cdigo possa ser executado em algum (e ao mesmo tempo em qualquer) sistema operacional, necessrio que mais uma camada de software esteja a instalada. A camada

funciona como um sistema operacional genrico, deixando transparentes as particularidades do sistema operacional real. Essa camada de software chamada de Mquina Java Virtual, ou Java Virtual Machine (JVM). A JVM faz a traduo dos byte odes para cdigo executvel naquele sistema operacional. Isto faz com que um programa escrito em Java e que seja compilado para byte ode possa ser executado em qualquer mquina que tenha a JVM adequada instalada. Durante a execuo, esse cdigo ser traduzido em tempo real para a linguagem proprietria e executado. A traduo em tempo real pode ser entendida como uma espcie de interpretao. Portanto, difcil afirmar que a linguagem de programao Java seja uma linguagem puramente compilada ou interpretada. Essa caracterstica da linguagem Java faz com que esta seja extremamente interessante para o uso na Internet, visto que o cdigo Java que esteja presente em um site poder ser executado em qualquer plataforma que contenha a JVM instalada. Normalmente, os browsers j contm uma JVM para que possam trabalhar com sites que contenham programas Java.

Linguagem natural Vimos evoluo na portabilidade dos programas de alto nvel e o quanto tais linguagens de programao se afastaram da linguagem de mquina e se aproximaram da lgica humana. Porm, para um iniciante, mesmo a linguagem de programao de alto nvel pode ser um tanto complexa. Claro que muito mais simples do que programar em linguagem de mquina ou em linguagem de baixo nvel, mas o verdadeiro problema que as pessoas, em geral, no esto acostumadas a fazer algoritmos. Diferentemente da linguagem natural, a linguagem de programao dirigida a orientar uma mquina e no pessoas. Mquinas no podem tomar decises com base em premissas. Mquinas no podem escolher alternativas, mesmo que estas nos paream bvias. Mquinas no podem corrigir comandos mal redigidos. Mquinas no podem descobrir a inteno do programador, mesmo que ela seja (ou pelo menos parea) clara no contexto. Pessoas fazem tudo isso (pelo menos na maior parte das vezes) sem sequer notar. Por isso, a linguagem de programao precisa ter algumas caractersticas que a linguagem natural no tem. Veja-as a seguir: Rigidez sinttica: O compilador um tradutor relativamente limitado, que s consegue fazer as tradues sobre um idioma bastante limitado, com construes muito bem definidas. Apesar de encontrarmos palavras pertencentes linguagem natural, elas no sero usadas com a mesma liberdade. Rigidez semntica: O computador definitivamente no pode lidar com ambigidades. Por isso, no adianta o programador ter uma inteno se no conseguir exprimi-la de forma exata. Podemos dizer que o computador um timo cumpridor de ordens, porm no tem idia de quais ordens est cumprindo, nem o contexto em que essas aes esto inseridas. Diferentemente da linguagem de programao, a linguagem natural apresenta ambigidades. Veja o exemplo: A velhinha ouviu o barulho da janela.

Essa frase curta pode ser interpretada de pelo menos trs maneiras: 1. A velhinha ouviu o barulho produzido pela janela. 2. A velhinha estava junto janela e ouviu o barulho. 3. A velhinha ouviu o barulho que veio atravs da janela. Qualquer mquina seria incapaz de interpretar o que realmente est acontecendo, mesmo que o contexto pudesse ajudar. Por isso, a rigidez semntica to crucial e conseqentemente a linguagem natural no pode ser utilizada como ferramenta para a construo de algoritmos para computador. A necessidade desses quesitos faz com que a linguagem natural no seja a escolha adequada para a escrita de algoritmos para computador. A segunda alternativa seria escrever o algoritmo diretamente na linguagem de programao. Porm, a rigidez sinttica e a semntica tornam a escrita de algoritmos diretamente em uma linguagem de programao real, mesmo de alto nvel, uma tarefa bastante difcil, pois as pessoas no esto acostumadas a essas exigncias para expressar ordens. Muitas vezes, mesmo em linguagem natural, esta no uma tarefa trivial. Realmente chegamos a um dilema: a linguagem natural no adequada porque no tem rigidez sinttica e semntica e a linguagem de programao no adequada justamente por ter essas caractersticas. Parece claro que teremos de encontrar uma terceira alternativa para expressarmos algoritmos para computador. Na realidade, j existem algumas alternativas. Apresentaremos duas delas: fluxograma e pseudocdigo. Fluxograma Os fluxogramas apresentam os algoritmos de forma grfica. So formados de caixas que contm as instrues a serem executadas. Tais caixas so ligadas por setas que indicam o fluxo das aes. Algumas caixas especiais indicam a possibilidade de o fluxo seguir caminhos distintos, dependendo de certas situaes que podem ocorrer durante a execuo do algoritmo. Tambm h representaes para o incio do algoritmo e para o seu final, para que o fluxo do algoritmo possa ser determinado do seu princpio at o seu trmino. De fato, a representao de algoritmos por meio de fluxogramas tem uma srie de vantagens. A primeira a facilidade proporcionada para a compreenso do funcionamento do algoritmo, mesmo para os leigos. Algumas pessoas tambm se adaptam bem ao desenvolvimento de algoritmos sob essa representao. Entretanto, a representao grfica no prtica. A correo de uma linha de pensamento pode implicar a reconstruo de muitas instrues. Alm disso, a construo de algoritmos mais complexos e longos pode se tornar extremamente trabalhosa, ocupando vrias pginas. Essas caractersticas acabam tornando a utilizao do fluxograma desaconselhvel como ferramenta principal para o desenvolvimento de algoritmos. Todavia, a utilizao de

fluxogramas continua sendo til para apresentao de algoritmos em um nvel de abstrao alto, sem entrar nos detalhes de sua implementao.

Pseudocdigo Algoritmos podem ser representados em cdigo diretamente em linguagem de programao, a implementao de algoritmos diretamente em uma linguagem de programao apresenta algumas desvantagens. Porm, fato que temos algumas vantagens como o cdigo pronto para a execuo (mesmo que seja aps a compilao) e, o mais importante, a rigidez sinttica e a semntica, que so imprescindveis para que o algoritmo possa ser lido e executado pelo computador. O pseudocdigo visa a trazer o mximo possvel desses benefcios, tentando diminuir o nus da utilizao da linguagem de programao. Abre-se mo do cdigo compilvel para se ter um cdigo menos rgido, menos dependente das peculiaridades que todo compilador tem. Ao contrrio da linguagem de programao, o pseudocdigo tem um grau de rigidez sinttica intermediria entre as linguagens natural e de programao. Alm disso, podemos utilizar o idioma nativo. Em geral, linguagens de programao so construdas utilizando palavras reservadas em ingls, uma espcie de padro de mercado. Porm, o pseudocdigo deve manter, tanto quanto possvel, a rigidez semntica. A ideia que o pseudocdigo seja um passo intermedirio entre a linguagem natural, a que os iniciantes esto acostumados, e a linguagem de programao de alto nvel. Aps a construo do algoritmo em pseudocdigo, necessrio que mais um passo seja executado para que o algoritmo possa ser compilado e posteriormente executado. a transformao do pseudocdigo em cdigo de alguma linguagem de programao real. O pseudocdigo independente do compilador e pode ser traduzido de uma forma quase direta para uma gama de linguagens de programao. Um pseudocdigo bastante conhecido no Brasil o Portugol, que apresenta uma aceitao grande e tem suas razes para isso. bastante simples e atende s caractersticas necessrias no que concerne rigidez semntica e sinttica. Entretanto, o Portugol opta por algumas construes em detrimento de outras que consideramos interessantes para o passo posterior, que a transformao do pseudocdigo em programa. A questo principal a ausncia de blocos genricos de comandos. Tais construes esto presentes na maior parte das linguagens de programao de alto nvel e so importantes para que o programador iniciante fique acostumado com esse tipo de estruturao. Para representarmos nossos algoritmos, utilizaremos uma adaptao do Portugol, que incluir algumas construes e mecanismos que julgamos adequados para o melhor aprendizado do programador, procurando facilitar o processo de construo do algoritmo.

Bibliografia: MEDINA, Marco; FERTING, Cristina. Algoritmos e Programao. Captulo 1. Novatec Editora. Rio de Janeiro. 2008.

Quanto ao paradigma Diferentes linguagens de programao podem ser agrupadas segundo o paradigma que seguem para abordar a sua sintaxe e semntica. Os paradigmas se dividem em dois grandes grupos: imperativo e declarativo. Paradigmas Imperativos Os paradigmas imperativos so aqueles que facilitam a computao por meio de mudanas de estado. Se dividem em: O paradigma procedural. Neste paradigma, os programas so executados atravs de chamadas sucessivas a procedimentos separados. Exemplos de linguagens deste paradigma so o Fortran e o BASIC. O paradigma de estruturas de blocos. A caracterstica marcante deste paradigma so os escopos aninhados. Exemplos de linguagens deste paradigma so o Algol 60, Pascal e C. O paradigma de orientao a objetos. Este paradigma descreve linguagens que suportam a interao entre objetos. Exemplos de linguagens deste paradigma so C++,Java, Pythone Ruby. O paradigma da computao distribuda. Este paradigma suporta que mais de uma rotina possa executar independentemente. Um exemplos de linguagem deste paradigma a linguagem Ada. Paradigmas Declarativo Os paradigmas declarativos so aqueles nos quais um programa especifica uma relao ou funo. Se dividem em:

O paradigma funcional. Linguagens deste paradigma no incluem qualquer proviso para atribuio ou dados mutveis Na programao funcional, o mapeamento entre os valores de entrada e saida so alcanados mais diretamente. Um programa uma funo (ou grupo de funes), tipicamente constituda de outras funes mais simples. Exemplos de linguagens deste paradigma so as linguagens Lisp , Scheme e Haskell.

O paradigma da programao lgica. Este paradigma se baseia na noo de que um programa implementa uma relao ao invs de um mapeamento. Exemplos de linguagens deste paradigma so o Prolog e a linguagem Gdel. Quanto a estrutura de tipos

Fracamente tipada, como PHP e Smalltalk, onde o tipo da varivel muda dinamicamente conforme a situao. Fortemente tipada, como Java e Ruby, onde o tipo da varivel, uma vez atribudo, se mantm o mesmo at ser descartada da memria. Dinamicamente tipada, como SNOBOL, APL, Awk, Perl, Python e Ruby, onde o tipo da varivel definido em tempo de execuo. Estaticamente tipada, como Java e C, onde o tipo da varivel definido em tempo de compilao.

Quanto ao grau de abstrao

Linguagem de programao de baixo nvel, cujos smbolos so uma representao direta do cdigo de mquina que ser gerado, onde cada comando da linguagem equivale a um "opcode" do processador, como Assembly. Linguagem de programao de mdio nvel que possui smbolos que podem ser convertidos diretamente para cdigo de mquina (goto, expresses matemticas, atribuio de variveis), mas tambm smbolos complexos que so convertidos por um compilador. Exemplo: C, C++ Linguagem de programao de alto nvel, composta de smbolos mais complexos, inteligvel pelo ser humano e no-executvel diretamente pela mquina, no nvel da especificao de algoritmos, como Pascal, Fortran, ALGOL,Java e SQL.

Quanto gerao A classificao das linguagens de programao em geraes uma questo que apresenta divergncias de autor para autor. Segundo Maclennan, as linguagens se dividem em cinco geraes com as seguintes caractersticas:

Primeira gerao - So linguagens onde suas estruturas de controle so aparentemente orientadas a mquina. As instrues condicionais no so aninhadas e dependem fortemente de instrues de desvio incondicional como o GOTO. Uma linguagem tpica desta gerao a linguagem Fortran. Segunda gerao - So linguagens onde as estruturas de controle so estruturadas de forma a minimizar ou dispensar o uso de instrues GOTO. A segunda gerao elaborou melhor e generalizou diversas estruturas de controle das linguagens de primeira gerao. Uma das grandes contribuies desta gerao foi suas estruturas de nomes, que eram hierarquicamente aninhadas. Isto permitiu melhor controle de espaos de nomes e uma eficiente alocao dinmica de memria. Uma linguagem tpica desta gerao o Algol 60. Terceira gerao - So linguagens que do nfase a simplicidade e eficincia. Uma linguagem tpica desta gerao a linguagem Pascal. As estruturas de dados desta gerao mostram um deslocamento da mquina para a aplicao. As estruturas de controle so mais simples e eficientes. Quarta gerao - Esta gerao essencialmente o sinnimo para linguagens com abstrao de dados. A maioria das linguagens desta gerao foca na modularizao e no encapsulamento. Uma linguagem tpica desta gerao a linguagem Ada. Quinta gerao - Nesta gerao, Maclennan agrupa diversos paradigmas como a orientao a objeto e o paradigma funcional, paradigma lgico.

Henri Bal e Dick Grune, j apresentam uma classificao em geraes de forma diferente, enfatizando mais o aspecto da aplicao. So elencadas 6 geraes.

Primeira gerao - linguagem de mquina. Segunda gerao - linguagens de montagem (assembly). Terceira gerao - Linguagens procedurais. Quarta gerao - Linguagens aplicativas. Quinta gerao - Linguagens voltadas a Inteligncia artificial como as linguagens lgicas (Prolog) e as linguagens funcionais (Lisp).

Sexta gerao - Redes neurais.

Existem vrias linguagens de programao; de acordo com o ndice Tiobe, as 20 mais populares so: 1. C 2. Java 3. Objective-C 4. C++ 5. PHP 6. C 7. Visual Basic 8. Python 9. Perl 10. JavaScript 11. Ruby 12. Visual Basic .NET 13. Transact-SQL 14. Lisp 15. Pascal 16. Bash 17. PL/SQL 18. Delphi / Object Pascal 19. Ada 20. MATLAB

Bibliografia: ORGANICK, E. I.;FORSYTHE, A. I.;PLUMMER, R. P.. Programming Language Structures. New York: Academic Press, 1978. 659 p. Programao estruturada Uma das operaes mais notveis em um computador a capacidade de tomar decises previamente estabelecidas e de fato um computador pode realizar muito rpido um conjunto de decises. Dependendo do nvel de programao um programa pode tomar decises to complexas quanto a de um ser humano, no entanto essas decises complexas de um programa de computador so compostas por decises elementares que por sua vez, em geral, so compostas por comparao entre dois ou trs variveis. Dependendo do resultado da comparao realizado outras sequncias de decises. Em geral as decises no Fortran so tomadas pelo comando if, que por sua vez esto contidos ou no dentro de outros comandos do.

Em conjunto com os camandos if e do, temos outros comando para controlar a execuo que so os comandos continue, pause, stop, end, call e return. O comando call utilizado para transferir o controle de execuo para uma subrotina e o comando return utilizado para retornar para o programa principal uma vez estando dentro de uma subrotina3.7. A programao estrutura um mtodo para combinar as estruturas de controle formadas por blocos de do e if de maneira organizada e que traduza o problema a ser resolvido. A estruturao do programa, ou seja, a traduo entre as equaes que esto no papel (livros) e o programa propriamente dito deve tornar-se por hbito um parte muito importante na logstica da construo, para que a construo do programa seja a mais inteligente, rpida e leve possvel, pois tempo excessivo de processamento acaba tornando em disperdcio de recursos e de hardware. Essas estruturas de controle so formadas por quatro estruturas bsicas de controle: 1. Estrutura Sequencial - vrios blocos de comandos podem ser colocados para serem executados seqencialmente; 2. Estrutura if-then-else - um bloco pode ser construdo unindo-se dois blocos mediante ha uma condio; 3. Estrutura de lao do while - um bloco pode ser construdo colocando-se um bloco interno de lao do tipo do while; 4. Estrutura de repetio, repetindo sob condio - um bloco pode ser construdo colocando-se um bloco interno de lao de repetio do tipo repita a operao mediante uma condio. A maior dificuldade para programadores iniciantes e j com algum conhecimento o de expressar de modo organizado a idia e a lgica do programa, de maneira prtica seria a capacidade do programador explicar o que um determinado programa executa e como ele executa. Para possibilitar a expresso do funcionamento do programa de forma fcil e organizada utilizaremos o conceito de programao estruturada que a tcnica de construir programas de forma organizada utilizando-se da combinao das formas bsicas das estruturas de controle. Dentro do esquema da programao estruturada, podemos expressar um programa como uma sequncia de blocos constitudos pelas estruturas de controle. Uma vez estabelecido esta sequncia de blocos veremos que a estrutura permite tambm estabelecer um fluxo de sequncias lgicas afim de resolver um determinado problema. Esta idia de fluxo de sequncias lgicas baseado nas estruturas bsicas de controle o que conhecemos como um fluxograma.