Como Funciona A Linguagem Java
Como Funciona A Linguagem Java
Como Funciona A Linguagem Java
Introdução
Já parou para imaginar como funcionam os programas de computador? Já quis aprender
como criar seus próprios programas? Se você tem 14 anos de idade e gostaria de
aprender a criar seu primeiro jogo, ou se tem 70 e faz 20 anos que está curioso sobre
programação de computadores enfim não importa a idade, este artigo foi feito
especialmente para você. Nesta edição, ensinaremos como os programas de computador
funcionam. Vamos começar com a linguagem de programação Java.
E para ensiná-lo, vamos supor várias coisas:
presumiremos que você não saiba nada sobre programação. No entanto, se já
conhece um pouco sobre isso, a primeira parte deste artigo vai parecer fácil
demais para você. Sinta-se à vontade para pular as seções até chegar algo que
você não conheça;
presumiremos que você conhece um pouco sobre o computador que está
usando, ou seja já sabe editar, copiar, apagar e renomear arquivos, encontrar
informações no seu sistema e outras coisas do tipo;
para simplificar as coisas, vamos supor também que você está usando uma
máquina com Windows 95, 98, 2000, NT ou XP, e para aqueles que não estão
usando um desses sistemas operacionais, já sabem que terão de transpor os
conceitos para o sistema que estiverem usando, certo?
e, por último, mas não menos importante, vamos supor que você tem vontade
de aprender.
Todas as ferramentas de que precisa para começar a programar em Java estão
disponíveis na internet, de graça. Também há uma grande quantidade de material
educativo sobre o assunto, o que significa que dá para continuar a aprender mais mesmo
depois que terminar de ler este artigo. É possível aprender a programação em Java sem
gastar dinheiro com compiladores, ferramentas de desenvolvimento, material para leitura,
etc. E depois que tiver aprendido Java, fica fácil aprender outras linguagens. Por isso, não
se preocupe pelo fato de ser um iniciante no assunto, você veio para o lugar certo.
Bem, considerando tudo isso, estamos prontos para continuar. Mãos à obra
Alguns termos
Lembre-se vamos supor que você não sabe nada sobre programação. Aqui vão alguns
termos para deixar as coisas mais compreensíveis:
programa de computador - um programa de computador é um conjunto de
instruções que diz ao computador exatamente o que deve fazer. Estas
instruções podem dizer ao computador para somar alguns números ou
comparar 2 números. E, também, tomar uma decisão dependendo do resultado
da comparação ou o que quer que você consiga imaginar! Mas um programa de
computador não é nada mais do que um conjunto de instruções para o
computador, assim como uma receita é um conjunto de instruções para um
cozinheiro ou notas musicais são um conjunto de instruções para um músico. O
computador segue suas instruções à risca e acaba fazendo algo que você
precisa (como calcular o seu orçamento mensal, exibir um jogo na tela ou
executar um processador de textos).
linguagem de programação - para que o computador consiga reconhecer as
instruções que você deu, elas precisam ser escritas em um idioma que ele
entenda: uma linguagem de programação. Da mesma maneira que há vários
idiomas diferentes, também há muitas linguagens de programação por aí
(Fortran, Cobol, Basic, Pascal, C, C++, Java, Perl). No fundo, todas elas
expressam mais ou menos os mesmos conceitos, mas de maneiras diferentes.
compilador - um compilador traduz um programa de computador escrito em
uma linguagem que pode ser lida por humanos (como o Java) para uma forma
que o computador possa entender e executar. Sabe aqueles arquivos EXE que
existem no seu computador? Então! Eles são os arquivos que os compiladores
geram e contêm programas executáveis, programas em linguagem de
máquina que foram traduzidos a partir de programas escritos em linguagem de
humanos.
Para que você possa começar a escrever programas na linguagem de programação
chamada de Java, vai precisar de um compilador específico para essa linguagem. A
próxima seção vai guiá-lo por todo o processo de download e instalação de um
compilador. Depois de ter obtido um compilador, estaremos prontos para começar. Mas,
dependendo da sua conexão Internet, esta parte do processo vai levar algum tempo, com
uma grande parte dele sendo usada para fazer o download de vários arquivos grandes. E,
além disso, você também vai precisar de cerca de 40 megabytes de espaço livre em disco
rígido (certifique-se de que tem esse espaço disponível antes de começar!)
Deve surgir uma linha diagonal sendo traçada do canto superior esquerdo ao canto inferior
direito:
Aumente um pouco a janela de visualização do applet para conseguir ver a linha toda.
Além disso, também dá para abrir a página HTML em qualquer navegador moderno como
o Netscape Navigator ou o Microsoft Internet Explorer e ver quase a mesma coisa.
É isso aí! Você acabou de criar se primeiro programa!!!
Esta é a linha do programa que faz todo o trabalho. É ela que desenha a linha diagonal. O
resto do programa, por sua vez, é a armação que dá suporte àquela linha, e vamos nos
permitir ignorar a armação no momento. O que você fez nesse programa foi mandar o
computador desenhar uma linha do canto superior esquerdo (0,0) ao canto inferior direito
(200, 200). E o computador, obediente que é, desenhou exatamente como mandamos.
Essa é a essência da programação de computadores!
(Repare também que, na página HTML, configuramos o tamanho da janela do applet (no
passo 5 acima) para ter largura e altura iguais a 200.)
Neste programa, nós usamos um método (ou função) chamada drawLine e passamos 4
parâmetros para ela (0, 0, 200, 200). A linha termina com um "ponto e vírgula". Ele atua
como o ponto final no fim de uma frase. A linha começa com g., o que significa que
queremos usar a função chamada de drawLine no objeto específico g (que, como você
pode conferir uma linha acima, é da classe Graphics, ou gráfico, em Português. Não se
preocupe, ainda vamos entrar nos detalhes sobre classes e suas funções neste artigo).
Um método não é nada mais do que um comando, ou seja, ele manda o computador fazer
algo. No nosso caso, drawLine manda o computador desenhar uma linha entre os pontos
especificados: (0, 0) e (200, 200). Imagine a janela tendo sua coordenada 0,0 no canto
superior esquerdo, com os eixos positivos X e Y se estendendo para a direita e para baixo.
Cada ponto na tela (cada pixel) representa um incremento na escala.
Uma coisa que pode estar passando pela sua cabeça neste momento é: "Como é que ele
sabia que tinha de usar Color.red em vez de somente red (vermelho), e como ele sabia
que tinha de adicionar uma segunda linha import?" Bom, esse é o tipo de coisa que você
aprende com exemplos. Como lhe mostrei um exemplo de como usar o método setColor,
agora você sabe que sempre que quiser mudar a cor, terá de usar Color. seguido por um
nome de cor como parâmetro para o método setColor; também vai lembrar de adicionar a
linha import apropriada no começo do programa. Se for olhar o setColor na
documentação, vai ver que tem um link que fala sobre a classe Color, e dentro dele há
uma lista de todos os nomes de cores válidos e técnicas para criar novas cores (sem
nome). É só ler, guardar na cabeça e agora já sabe como alterar as cores em Java. Essa é
a essência de se tornar um programador: aprender novas técnicas e lembrar delas no
próximo programa que você for criar. E para aprender essas novas técnicas, você lê um
exemplo (como fizemos aqui) ou lê a documentação. Ou, ainda, olha um código de
exemplo (como os que estão no diretório de demonstração). Se o seu cérebro gosta de
explorar, aprender e lembrar de coisas, você vai adorar programação!
Nesta seção, você aprendeu como escrever códigos lineares e seqüências, ou seja, blocos
de códigos que consistem em métodos começando na parte superior e vão descendo
(experimente desenhar uma das linhas antes de desenhar o retângulo vermelho e veja o
que acontece. Ela será coberta pelo retângulo e ficará invisível, o que nos ensina que a
ordem das linhas na seqüência do código é importante). Linhas de código em seqüência
formam o núcleo básico de qualquer programa de computador. Agora, antes de irmos para
a próxima seção, faça testes com todos os diferentes métodos de desenho e veja o que
acontece.
Bugs e depuração
Uma coisa que você vai notar enquanto aprende sobre programação é que você costuma
cometer um certo número de erros e suposições que fazem com que o seu programa: 1)
não possa ser compilado; ou 2) produza resultados inesperados na execução. Esses
problemas são conhecidos como bugs (erros), e a ação de removê-los chama-se
depuração. Os programadores costumam passar metade do seu tempo fazendo isso.
Eu sei que você é capaz e vai ter tempo e oportunidade de sobra para criar os seus
próprios bugs, mas vou criar alguns para deixá-lo mais familiarizado com as
possibilidades. No seu programa, apague um dos "ponto e vírgula" do final de uma linha e
tente compilar o programa com o javac. O compilador vai lhe mostrar uma mensagem de
erro. Isso se chama erro de compilador e temos de eliminar todos eles antes de poder
executar o programa. Outra possibilidade é cometer um erro de digitação no nome de uma
função. Experimente esquecer de digitar um "{" ou eliminar uma das linhas import para
ficar acostumado com os diferentes erros de compilador. A primeira vez que você vir um
certo tipo de erro de compilador, pode ficar bem frustrado. No entanto, se fizer
experiências assim (com erros conhecidos criados de propósito), vai se sentir mais
familiarizado com vários dos erros comuns.
Um bug, também conhecido como erro de execução ou erro em tempo de execução,
acontece quando o programa é compilado, normalmente e consegue ser executado, mas
não produz o resultado planejado durante a programação. Por exemplo, este código
produz um triângulo vermelho com duas linhas diagonais que o cruzam:
g.setColor(Color.red);
g.fillRect(0, 0, 200, 200);
g.setColor(Color.black);
g.drawLine(0, 0, 200, 200);
g.drawLine(200, 0, 0, 200);
O código a seguir, por outro lado, produz apenas o retângulo vermelho (ele cobre as 2
linhas):
g.setColor(Color.black);
g.drawLine(0, 0, 200, 200);
g.drawLine(200, 0, 0, 200);
g.setColor(Color.red);
g.fillRect(0, 0, 200, 200);
Embora o código seja quase idêntico, o resultado é completamente diferente na execução.
E se o resultado esperado for visualizar 2 linhas diagonais, o código do segundo exemplo
contém um bug.
Lá vai outro exemplo:
g.drawLine(0, 0, 200, 200);
g.drawRect(0, 0, 200, 200);
g.drawLine(200, 0, 0, 200);
Este código produz uma caixa com uma moldura em preto e 2 diagonais. Já este próximo
pedacinho de código produz apenas uma diagonal:
g.drawLine(0, 0, 200, 200);
g.drawRect(0, 0, 200, 200);
g.drawLine(0, 200, 0, 200);
Novamente, se o que você queria era ver 2 diagonais, o segundo código contém um bug
(examine-o até descobrir o que há de errado). Este é o tipo de bug que, por ser muito sutil,
pode levar tempo para ser encontrado.
E não se preocupe, pois você vai ter bastante tempo para praticar a "arte" de encontrar
seus próprios bugs. O programador comum gasta cerca de metade de seu tempo
procurando, encontrando e eliminando esses erros. Então, tente não ficar frustrado quando
ocorrerem, eles fazem parte da vida de um programador.
Variáveis
Todos os programas utilizam variáveis para guardar, temporariamente, alguns dados . Por
exemplo, se você pedir um número de um usuário em alguma parte do programa, vai
armazená-lo em uma variável para que possa utilizar depois.
As variáveis devem ser definidas (ou declaradas) em um programa antes que você possa
usá-las, e além disso, é necessário atribuir um tipo específico a cada variável. Mais um
exemplo: você pode definir uma variável para ter um tipo que permita armazenar números,
e definir outra para ter um tipo que a deixe armazenar o nome de uma pessoa. (Como o
Java requer que você defina as variáveis antes de usá-las e diga o tipo de valor que
deseja armazenar nelas, ela é chamada de uma linguagem de tipagem forte. Como você
deve estar se perguntando, há linguagens que não requerem isso, são as linguagens de
tipagem fraca. No geral, ao criar programas grandes, a tipagem forte costuma reduzir o
número de erros de programação que você pode cometer).
import java.awt.Graphics;
import java.awt.Color;
public class FirstApplet extends java.applet.Applet
{
public void paint(Graphics g)
{
int width = 200;
int height = 200;
g.drawRect(0, 0, width, height);
g.drawLine(0, 0, width, height);
g.drawLine(width, 0, 0, height);
}
}
O primeiro cálculo diz: "Divida o valor da variável chamada diameter (diâmetro) por 2,0 e
coloque o resultado na variável chamada radius (raio)". Perceba que o sinal "=" significa
"Coloque o resultado do cálculo à direita dentro da variável cujo nome está à esquerda".
Dando voltas
Uma das coisas que os computadores fazem muito bem é realizar cálculos e operações
repetitivas. Nas seções anteriores, vimos como escrever "blocos seqüenciais de código", o
que, automaticamente nos leva a falar sobre as técnicas para fazer um bloco destes
acontecer repetidamente.
Por exemplo, digamos que eu lhe peça para desenhar a seguinte figura:
Para alguns programadores iniciantes, a frase "y = y + 25;" pode parecer estranha na
primeira vez que a virem, mas o que ela significa é: "Pegue o valor que está na variável y,
some 25 e coloque o resultado de volta na variável y." Por exemplo, se y contiver 10 antes
da linha ser executada, ele terá 35 imediatamente após a linha ter sido executada.
Não é difícil perceber logo de cara que esse código contém 2 linhas iguais sendo repetidas
várias vezes. O que acontece é que, neste caso, a repetição não é tão trabalhosa, mas
imagine se você quisesse criar uma tabela com milhares de linhas e colunas. Ia ser muito
cansativo escrever o programa usando este método de repetição. A solução para esse
problema é um loop, como você pode ver abaixo:
import java.awt.Graphics;
public class FirstApplet extends java.applet.Applet
{
public void paint(Graphics g)
{
int y;
y = 10;
while (y <= 210)
{
g.drawLine(10, y, 210, y);
y = y + 25;
}
}
}
Ao executar este programa, vai ver que ele desenha 9 linhas horizontais com 200 pixels de
comprimento.
A expressão while é uma expressão de loop na linguagem Java. Ela manda o Java agir da
seguinte maneira: na frase em que pode ler while, o Java observa a expressão entre
parênteses e pergunta, "O y é menor ou igual a 210?":
caso a resposta seja positiva, o Java insere o bloco de código colocado entre
chaves, "{" e "}". A parte do loop acontece ao final do bloco de código. Quando
o Java chega à chave final, volta à frase com o while e faz a mesma pergunta
novamente. Pode ser que essa seqüência de loop ocorra várias vezes.
mas se a resposta for negativa, ele pula o código colocado entre as chaves e
segue em frente.
Quando executar esse programa, vai ver que o valor inicial de y é 10. Como dez é menor
do que 210, o Java bloqueia as chaves, desenha uma linha de (10,10) a (210,10), define y
como 35 e volta à frase while. E como 35 é menor do que 210, o Java bloqueia as chaves
mais uma vez, desenha uma linha de (10,35) a (210,35), define y como 60 e retorna à
frase while. E isso vai se repetindo até que y seja maior do que 210, a única condição em
que o programa pára.
E podemos completar nossa grade adicionando um segundo loop ao programa, veja só:
import java.awt.Graphics;
public class FirstApplet extends java.applet.Applet
{
public void paint(Graphics g)
{
int x, y;
y = 10;
while (y <= 210)
{
g.drawLine(10, y, 210, y);
y = y + 25;
}
x = 10;
while (x <= 210)
{
g.drawLine(x, 10, x, 210);
x = x + 25;
}
}
}
Dá para ver que tudo o que esse novo tipo de programa faz é condensar as linhas de
inicialização, avaliação e acréscimo em uma só linha. Não passa de uma maneira de
reduzir o tamanho do programa que você escreveu.
E já que estamos aqui, lá vão 2 pontos rápidos a respeito dos loops:
em muitos casos, também seria fácil inicializar y como 210 e subtrair 25 a cada
passagem pelo loop. A avaliação iria perguntar: "o y é maior ou igual a 10?" A
escolha é só sua, mas o que posso dizer é que a maioria das pessoas acha
mais fácil somar do que subtrair. E você, o que acha?
o passo de acréscimo é muito importante. Um exemplo disso é o seguinte:
digamos que você deixou de fora, sem querer, a parte que diz "y = y + 25;"
dentro do loop. O que iria acontecer é que o valor de y nunca mudaria (ficando
sempre em 10), o que não o deixaria ficar maior do que 210 e o loop continuaria
para sempre (ou até que você o parasse, desligando o computador ou fechando
a janela). Essa condição é chamada de loop infinito e é um bug bem comum.
Para praticar um pouco o loop, tente escrever programas que desenhem as seguintes figuras:
Para obter mais informações sobre o Java e outras linguagens de programação, confira os
links na próxima página.
Mais informações
Artigos relacionados
Como funciona a programação em C
Como funciona a linguagem Perl
Como funcionam os scripts em CGI
Como funciona a lógica booleana
Como funcionam as páginas da Internet