O modelo do computador
4.4 Abstra¸ c˜ ao das instru¸ c˜ oes (linguagem)
significado que eles est˜ao desempenhando no programa.
Ent˜ao chega o momento de n´os sabermos que o programa que est´a em mem´oria recebe como entrada dois valores b e c e escreve como sa´ıda as ra´ızes da equa¸c˜ao x2 −bx +c = 0. Os c´alculos usam o m´etodo de Bhaskara. A figura 4.8 mostra a conven¸c˜ao para a substitui¸c˜ao dos endere¸cos por nomes.
Endere¸co Nome
54 dois
50 quatro
46 B
47 quadradoB
48 C
49 quadruploC
51 discriminante
52 raizDiscriminante
53 dobroMenorRaiz
55 menorRaiz
56 dobroMaiorRaiz
57 maiorRaiz
Figura 4.8: Dando nomes para os endere¸cos.
Agora, usaremos esta conven¸c˜ao de troca de endere¸cos por nomes para podermos reescrever o programa ainda mais uma vez, obtendo a vers˜ao da figura 4.9.
Esta vers˜ao define o ´ultimo grau de abstra¸c˜ao simples. A partir deste ponto a nota¸c˜ao deixa de ser s´o uma abreviatura das instru¸c˜oes e a tradu¸c˜ao deixa de ser direta.
Apesar do fato de ser o ´ultimo n´ıvel de nota¸c˜ao simples, ainda ´e poss´ıvel melhorar-mos o grau de facilidade visual, mas desta vez passamelhorar-mos para a nota¸c˜ao ou linguagem de “alto n´ıvel”, que vai exigir a introdu¸c˜ao dos chamados compiladores.
4.4 Abstra¸ c˜ ao das instru¸ c˜ oes (linguagem)
Apesar de todas as nota¸c˜oes e conven¸c˜oes que foram feitas no programa, at´e se chegar na vers˜ao mostrada na figura 4.9, de certa maneira, o programa ainda est´a em um formato muito parecido com o do programa original.
Para que seja poss´ıvel aumentar o n´ıvel de nota¸c˜ao ainda mais ´e preciso contar com a ajuda de programas tradutores, ou como eles s˜ao mais conhecidos, oscompiladores.
Estes programas conseguem receber como entrada um texto escrito em um for-mato adequado e gerar como sa´ıda um programa no forfor-mato da m´aquina. Isto ´e
dois ← 2
Figura 4.9: Programa reescrito com nomes para vari´aveis.
poss´ıvel apenas se os programas forem escritos em um formato que respeite regras extremamente r´ıgidas, pois sen˜ao a tarefa n˜ao seria poss´ıvel.
As linguagens de alto n´ıvel s˜ao definidas a partir de umagram´atica extremamente mais r´ıgida que a do portuguˆes, por exemplo. Estas gram´aticas, conhecidas como gram´aticas livre de contexto, tˆem como uma de suas principais caracter´ısticas que elas n˜ao permitem escrever programas amb´ıguos. O portuguˆes permite.
Sem entrarmos muito em detalhes desta gram´atica, a t´ıtulo de exemplo mostrare-mos vers˜oes em mais alto n´ıvel do programa da figura 4.9. Estas vers˜oes s˜ao apresen-tadas na figura 4.10.
Figura 4.10: Duas outras vers˜oes do programa.
Estas vers˜oes s˜ao compreens´ıveis para o ser humano, mas ainda n˜ao est˜ao no formato ideal para servirem de entrada para o compilador, em particular por causa dos s´ımbolos de fra¸c˜ao ou do expoente. Os compiladores exigem um grau maior de rigidez, infelizmente. A disciplina Constru¸c˜ao de Compiladores, no sexto per´ıodo do curso, ´e exclusiva para o estudo profundo dos motivos desta dificuldade, tanto de se verificar se o programa est´a correto do ponto de vista gramatical, quanto do ponto de vista de se traduzir o programa para linguagem de m´aquina.
4.5. CONCLUS ˜AO 39 No momento, vamos nos limitar a apresentar na figura 4.11 uma vers˜ao do mesmo programa escrito em Pascal. Ap´os compila¸c˜ao, o resultado ´e um programa que pode ser executado pelo computador.
Em suma, o compilador Pascal ´e um programa que, entre outras coisas, consegue transformar o c´odigo de alto n´ıvel mostrado na figura 4.11 e gerar um c´odigo que o computador possa executar tal como mostrado na primeira figura.
program bhaskara (input , output) ; var b, c , raizdiscriminante : real; begin
read (b) ; read (c) ;
raizdiscriminante:= sqrt (b∗b− 4∗c) ; write ((b− raizdiscriminante )/2) ; write ((b + raizdiscriminante )/2) ; end.
Figura 4.11: Vers˜ao do programa escrito em Pascal.
4.5 Conclus˜ ao
Nesta parte do texto procuramos mostrar que qualquer linguagem de programa¸c˜ao de alto n´ıvel (tal como Pascal, C ou JAVA) ´e meramente uma nota¸c˜ao convencionada visando facilitar a vida do ser humano que programa o computador. Esta nota¸c˜ao trata de como um texto se traduz em um programa execut´avel em um determinado sistema operacional (que usa um determinado conjunto reduzido de instru¸c˜oes).
Um programa que traduz um texto que emprega uma certa nota¸c˜ao convencionada em um programa execut´avel ´e chamado de “compilador”.
Assim, a arte de se programar um computador em alto n´ıvel ´e, basicamente, conhecer e dominar uma nota¸c˜ao atrav´es da qual textos (ou programas fonte) s˜ao traduzidos em programas execut´aveis.
Programar, independentemente da linguagem utilizada, significa concatenar as instru¸c˜oes dispon´ıveis dentro de um repert´orio a fim de transformar dados de entrada em dados de sa´ıda para resolver um problema.
Nas linguagens de alto n´ıvel, as instru¸c˜oes complexas s˜ao traduzidas em uma sequˆencia de opera¸c˜oes elementares do repert´orio b´asico da m´aquina. Por isto os pro-gramas fonte, quando compilados, geram execut´aveis que s˜ao dependentes do sistema operacional e do hardware da m´aquina onde o programa executa.
A partir destas ideias, partindo do princ´ıpio que se tem um algoritmo que resolve um problema, o que ´e preciso saber para se programar um computador?
• Ter `a disposi¸c˜ao um editor de textos, para codificar o algoritmo na forma de programa fonte;
• Ter `a disposi¸c˜ao um compilador para a linguagem escolhida (no nosso caso, o Free Pascal), para transformar automaticamente um programa fonte em um programa execut´avel.
No restante deste curso, vamos nos preocupar com a arte de se construir algoritmos, tendo em mente que o estudante dever´a ser capaz de saber transformar este algoritmo em forma de programa fonte de maneira que este possa ser compilado e finalmente executado em um computador.