LP Ap01
LP Ap01
LP Ap01
Atualização: 07/02/2010
INTRODUÇÃO
Muitas pessoas podem pensar que uma linguagem de programação seja algo
complexo. Embora não sejam de aprendizado automático, as linguagens de programação são
linguagens bastante simples, com poucos elementos e grande parte das pessoas são capazes
de aprendê-las em poucos dias.
O aluno, neste instante, pode não ter muita certeza disso mas, para ajudá-lo a
compreender a razão pela qual uma linguagem de computador é bastante simples, é útil
entender o conceito de linguagem ou língua. O que é uma língua?
Uma língua é um conjunto de símbolos e regras com as quais estes símbolos são
combinados, para que seja possível transmitir uma idéia. Na língua portuguesa, por exemplo,
teríamos as palavras, sinais de pontuações, ortografia e a gramática.
Os programas estão em nosso dia-a-dia, ainda que nem sempre pensemos nisso. São
programas uma lista de compras, uma lista de afazeres, instruções de uso de aparelhos...
Entretanto, nem sempre estes programas são completos, isto é, descrições completas do que
precisa ser feito. Uma lista de compras não costuma indicar onde comprar os produtos, ou a
data e hora em que isso deve ser feito.
a) Ligue os cabos
b) Ligue o aparelho de TV e o DVD
c) Insira um DVD
Observe que são instruções genéricas e uma porção de dúvidas surgem: ligar quais
cabos e onde? Ligar qual aparelho de TV? Inserir um DVD onde? O que é uma TV e um
DVD? O que é um cabo?
Está claro, assim, que a linguagem em si - no caso, o português - não é suficiente para
que as instruções sejam compreendidas. O que está faltando?
Basicamente, o que está faltando é definir as instruções de forma não ambígua, isto é,
sem nenhum tipo de dúvida acerca do que estas instruções significam. Adicionalmente, talvez
seja necessário detalhar um pouco mais estas instruções.
Quando vamos programar um computador, não podemos agir desta maneira, assim
como não aceitaremos se "às vezes ele agir a contento e às vezes não". Ao programar um
computador, precisamos ser específicos, isto é, dizer exatamente o que queremos, e o
computador seguirá à risca.
Linguagem de Programação 3
Atualização: 07/02/2010
Obviamente ter que explicar tudo em detalhe para um computador pode ser uma
tarefa bastante chata e, em alguns casos, árdua. Até mesmo um tarefa simples, como imprimir
uma letra na tela, pode exigir centenas e centenas de linhas de código.
Como imprimir um caractere é uma tarefa muito comum - assim como diversas
outras, as linguagens de programação costumam vir acompanhadas de um pacote contendo
muitas e muitas destas tarefas pré-programadas, cada uma delas com um nome. Desta forma,
para imprimir um caractere, basta pedir à linguagem que use o código pronto que imprime o
caractere. Isso é feito pelo nome da tarefa, que pode ser algo simples como "imprimir".
Estes pacotes de tarefas prontas, que podem ser encarados como mini-programas, são
chamados de bibliotecas e sua utilidade é enorme, pois eles reduzem em muito o nosso
trabalho como desenvolvedores.
2. A LINGUAGEM JAVA
Origens
Sempre que um projeto é realizado, uma decisão importante que deve ser feita é a
definição de quais serão os componentes do equipamento que está sendo projetado. No caso
de um equipamento eletrônico, componentes importantes são os eletrônicos, em especial os
circuitos integrados e, no caso dos eletro-eletrônicos programáveis (ou programados), os
microprocessadores.
Via de regra, o processador selecionado é aquele que tiver o menor custo, dado que
atende às características básicas do projeto. Entretanto, um eletro-eletrônico pode continuar
sendo produzido e vendido por vários anos; por outro lado, o preço dos processadores não é
estático ao longo destes mesmos anos, fazendo com que o "processador mais barato que
atenda às necessidades" possa mudar com o tempo. Nestas situações, em geral os
equipamentos voltam para a prancheta e são redesenhados para acomodar um novo
processador, por exemplo.
É importante ressaltar que uma economia de alguns reais em cada unidade pode levar
a grandes lucros para a empresa, visto que dezenas de milhares de unidades daquele
eletro-eletrônico são produzidas ao longo de um ano: um aumento de lucro que as empresas
em geral não desprezam. Exemplos, em casos de video-games (SMS1/2/3/Compact,
MD1/2/3, PS/PSOne, PS2/PS2Slim, PS3/PS3Slim, XBox/XBox360,
GameCube/NintendoWii...)
Projetos Iniciais
O primeiro destes projetos foi o Projeto Green, que visava a criação de uma nova
interface com o usuário para o equipamento "*7" (Star Seven), que tinha o objetivo de
controlar os eletrodomésticos de uma casa através de ícones animados e uma touch screen.
Um outro projeto foi o de VoD (Video On Demand), com uma função similar ao que hoje se
chama de TV Interativa.
Entretanto, foi com o surgimento da Web que a nova linguagem realmente apareceu a
público: os navegadores web estavam em franca evolução quando a Sun apresentou o
WebRunner, mais tarde renomeado para HotJava. A principal característica destes browsers
não era exatamente a renderização HTML (o que eles faziam de forma similar aos já
existentes Mosaic e Netscape), mas sim o fato de terem capacidade de executar applets java,
pequenos programas que rodavam no computador do usuário, fosse esse computador IBM PC
ou Apple MacIntosh.
A inovação fez tanto sucesso que em poucas semanas a Netscape lançava sua primeira
versão capaz de executar a Java Virtual Machine da Sun como plugin e, com isso, executar
também applets java. Mais tarde foi incorporado no browser da Netscape também o
JavaScript e, rapidamente, ambos se tornaram padrões tão importantes que é quase impossível
navegar hoje sem os mesmos instalados, juntamente com o Macromedia Flash.
O Java Hoje
O tempo foi passando e mostrou que a Sun Microsystems, de alguma forma, estava
adiante de seu tempo. Com o surgimento dos PDAs (Personal Data Assistants, os "PALMs")
e telefones celulares capazes de executar aplicativos, tornou-se bastante atrativa uma
tecnologia que permitisse que um programa pudesse ser executado em máquinas diferentes:
afinal de contas, não só os recursos disponíveis nestes equipamentos, como também seus
processadores e arquiteturas podem ser bastante diferentes até mesmo de um modelo para
outro!
Assim, hoje o Java voltou a ter sua vocação inicial: desenvolvimento de software
embaracado em eletro-eletrônicos. Ainda não é muito comum, mas vem crescendo o número
de equipamentos como Set-Top-Boxes (HDTV), modems ADSL, computadores portáteis,
DVD players, TVs e outros equipamentos que se utilizam de programas escritos na
linguagem Java para permitir que o usuário se comunique com o equipamento.
funciona como um intermediário. É como um intérprete de um técnico de futebol que não fala
a língua dos jogadores:
Perceba que ao trocar a língua do time, não é preciso trocar o técnico nem a língua
que ele fala, pois existe um intérprete que faz as traduções. Se trocar o time e mantiver o
técnico, basta trocar o intérprete. No caso do programa em Java, ocorre o mesmo: não é
preciso trocar o programa nem a linguagem dele quando se troca de processador: basta trocar
a JVM.
Como existe um passo a mais de tradução, isso tem influência direta no desempenho
das aplicações Java. Apesar de aplicações Java possuírem um desempenho bastante superior
ao de linguagens script normais, seu desempenho pode ser bastante mais lento que uma
linguagem compilada como C. Entretanto, os fabricantes não têm se mostrado muito
preocupados com esse "problema", dado que os equipamentos têm poder de processamento
cada vez maior a custos cada vez menores: preservar o investimento em software
desenvolvido acaba sendo muito mais importante quando se visa lucro em alguns mercados
(como o dos celulares).
Além de todas estas vantagens, o Java ainda tem uma porção de vantagens para os
programadores, pois o interpretador Java cuida de uma série de aspectos, como
gerenciamento de memória, e a programação é feita de tal maneira que ajuda o programador a
organizar melhor o seu programa e, para finalizar, possui uma vasta biblioteca com milhares
de tarefas prontas.
Linguagem de Programação 7
Atualização: 07/02/2010
O Java passou por muitas evoluções ao longo dos anos e a nomenclatura não foi feita
de uma maneira organizada. Por esta razão, os programadores novatos normalmente se
confundem com a mesma. Vejamos quais foram as versões:
UmPrograma.java
class UmPrograma {
public static void main(String[] args) {
System.out.println("Ola, mundo!");
}
}
javac UmPrograma.java
java UmPrograma
O resultado será:
Olá, mundo!
UmPrograma.java
class UmPrograma {
public static void main(String[] args) {
System.out.println("Ola, mundo!");
}
}
Antes de mais nada, é preciso entender que todo programa Java está organizado em
blocos chamados Classes, que esturademos melhor no futuro. Cada classe principal deve ter
seu próprio arquivo, que deve ter o nome EXATAMENTE igual ao da classe (incluindo
maiúsculas e minúsculas, não use caracteres especiais e acentos). Convenciona-se que todas
as palavras que compõem um nome de classe sempre começam com uma letra maiúscula e as
outras são minúsculas. Daí o nome da nossa classe: UmPrograma.
Como uma classe é um bloco, é necessário usar indicadores para marcar onde ela
começa e onde ela acaba. O java usa as chaves como marcadores, usando o abre chaves { para
indicar o início de um bloco e o fecha chaves } para indicar o fim de um bloco.
E tudo que estiver entre o abre e o fecha chaves será colocado pelo Java dentro do
bloco "UmPrograma". Dentro deste bloco, a primeira linha é:
UmPrograma.java
class UmPrograma {
public static void main(String[] args) {
System.out.println("Ola, mundo!");
}
}
Esta linha indica que um bloco de tarefa será definido (note o abre chaves). Um bloco
de tarefas é chamado de método.
Linguagem de Programação 9
Atualização: 07/02/2010
Uma classe pode conter vários métodos e, em geral, possui pelo menos um. Sendo
assim, é útil dar um nome a cada método, de maneira que, quando precisarmos cumprir
aquela tarefa, possamos pedir para o Java executá-lo simplesmente mencionando o nome.
UmPrograma.java
class UmPrograma {
public static void main(String[] args) {
System.out.println("Ola, mundo!");
}
}
System.out
println
System.out.println( "..." );
Significa que estamos pedindo que o Java execute o método println da classe
System.out, imprimindo o texto que estiver indicado dentro dos parênteses. A razão para
precisar indicar o nome do método e o nome da classe é que outras classes podem ter
métodos com o mesmo nome println, como, por exemplo, uma classe que imprima na
impressora.
Sim, entende tudo que escrevemos, como a execução do código mostrou. Entretanto, a
JVM não entende a língua em que escrevemos. Para isso, é necessário "traduzir" ou, em
termos técnicos, "compilar" esse texto, para a língua que a JVM realmente entende, chamada
bytecode. Isso foi feito com o programa JavaC (Java Compiler), usado no item anterior. As
extensões do arquivo nos indicam qual a língua que está sendo usada dentro do arquivo:
4. VARIÁVEIS EM JAVA
Para tornar um programa mais útil, é interessante usarmos as variáveis. Variáveis são
locais na memória do computador em que guardamos dados para que possamos realizar
operações com eles. Como é muito complicado lidar diretamente com posições de memória
de um computador, deixaremos que o Java faça isso por nós. É como se tivéssemos um
empregado responsável por cuidar de nossas roupas, pegá-las e guardá-las no armário sempre
que precisamos.
Para que o Java possa gerenciar nossas variáveis, ou seja, gerenciar o uso da memória
do computador, precisamos informá-lo que tipo de dado queremos guardar na memória e,
mais importante, dar um nome para este lugar da memória já que, sem um nome, não
teríamos como recuperar aquele valor no futuro. Essa informação é feita através de uma
declaração de variável. O formato geral é o seguinte:
tipoDeVariavel nomeDaVariavel;
Uma variável pode ser deeclarada em qualquer lugar em um programa, mas ela só tem
validade dentro do bloco em que foi declarada; em outras palavras, fora daquele bloco em que
ela foi criada, é como se ela não existisse.
Há varios tipos de variáveis possíveis, como veremos mais adiante. O tipo mais
comum, e o tipo "número inteiro", que é indicado para o Java como int. Assim, se quisermos
pedir para o Java arrumar um espaço para guardarmos uma idade, que é um número inteiro,
podemos indicar da seguinte forma:
Linguagem de Programação 11
Atualização: 07/02/2010
OutroPrograma.java
class OutroPrograma {
public static void main(String[] args) {
int idade;
}
}
Uma variável, entretanto, só é útil quando colocamos algum valor dentro dela. Isso
pode ser feito facilmente usando o sinal de igualdade, em uma instrução como a indicada
abaixo:
OutroPrograma.java
class OutroPrograma {
public static void main(String[] args) {
int idade;
idade = 18;
}
}
Observe que só podemos guardar informações dentro de uma variável depois que ela
for declarada; se não for respeitada esta ordem, ocorrerá um erro ao compilar ou executar o
código.
OutroPrograma.java
class OutroPrograma {
public static void main(String[] args) {
int idade;
idade = 18;
System.out.println( idade );
}
}
Linguagem de Programação 12
Atualização: 07/02/2010
É possível criar outras variáveis e colocar o valor de uma delas na outra, como indica
o código seguinte:
OutroPrograma.java
class OutroPrograma {
public static void main(String[] args) {
int idade;
int outraIdade;
idade = 18;
outraIdade = 20;
idade = outraIdade;
System.out.println( idade );
}
}
O resultado agora será diferente, pois o valor de idade não é mais 18 quando o seu
valor é impresso: ele recebeu o valor que estava na variável outraidade, que era 20.
Mas isso continua não sendo muito útil. Para tornar isso realmente útil, precisaremos
realizar operações com estes números!
5. OPERAÇÕES EM JAVA
+ soma
- subtração
* multiplicação
/ divisão
% resto de divisão
Linguagem de Programação 13
Atualização: 07/02/2010
Operacoes.java
class Operacoes {
public static void main(String[] args) {
int idade;
int idadeMaisUm;
idade = 18;
idadeMaisUm = idade + 1;
System.out.println( idade );
System.out.println( idadeMaisUm );
}
}
Qualquer cálculo pode ser feito. Por exemplo, para saber aproximadamente o número
de semanas que uma pessoa viveu, podemos multiplicar a idade dela em anos pelo número de
semanas de um ano, que é 52:
Operacoes.java
class Operacoes {
public static void main(String[] args) {
int idade;
int idadeEmSemanas;
idade = 18;
idadeEmSemanas = idade * 52;
System.out.println( idadeEmSemanas );
}
}
Substitua o valor "18" pela sua idade e descubra, aproximadamente, quantas semanas
você viveu do dia em que nasceu até o seu último aniversário.
Linguagem de Programação 14
Atualização: 07/02/2010
Um cáclulo mais complexo pode ser feito, combinando várias operações, por
exemplo:
NovasOperacoes.java
class NovasOperacoes {
public static void main(String[] args) {
int x;
int y;
y = 12;
x = 2*y + 37;
System.out.println( x );
}
}
Como foi dito anteriormente, existem vários tipos básicos de variáveis em Java. Estes
tipos estão indicados a seguir, com a faixa de valores que podem ser armazenados nessas
variáveis e também com o uso comum.
O programa abaixo mostra como usar uma variável float para multiplicar um valor
inteiro por 1.5. Observe, porém, que o resultado desta operação será um número de ponto
flutuante, isto é, com casas decimais e, portanto, ele precisa ser armazenado em uma variável
de ponto flutuante.
Linguagem de Programação 15
Atualização: 07/02/2010
OperacoesTipos.java
class OperacoesTipos {
public static void main(String[] args) {
int idade;
double indice;
double resultado;
idade = 18;
indice = 1.5;
resultado = 18 * indice;
System.out.println( resultado );
}
}
Caso tentemos armazenar um valor double ou float em uma variável inteira, seja ela
de qual tipo for, pode ocorrer "perda de precisão", isto é, os valores depois da vírgula serão
perdidos. Assim, se multiplicarmos 1.75 por 10 e armazenarmos o resultado em uma variável
do tipo inteira, o valor armazenado será 17, e não 17,5.
int x
x = 10 * 1.75;
O Java irá reclamar, dizendo que isso está errado. Se quisermos fazer isso, precisamos
usar um recurso de "casting". Casting significa dizer para o Java "converte do jeito que eu
estou mandando, eu sei que vai ter perda de precisão e você não precisa reclamar". O casting
é feito com o nome do tipo "destino" entre parênteses, como indicado no código a seguir:
Casting.java
class Casting {
public static void main(String[] args) {
int resultado;
A indicação (int) feita força o Java a converter o resultado para int antes de colocar o
resultado na variável resultado.
Linguagem de Programação 16
Atualização: 07/02/2010
É comum termos de usar casting de uma outra maneira, quando vamos criar um
número do tipo float. Por exemplo:
CastingFloat.java
class CastingFloat {
public static void main(String[] args) {
float umaVariavel;
umaVariavel = 0.5;
System.out.println( umaVariavel );
}
}
umaVariavel = 0.5;
Mas o que há de errado nesta linha? Simples: por padrão, o java considera que o valor
numérico 0.5 digitado é do tipo double, e ao colocar um valor double em uma variável float,
há perda de precisão.
Para contornar esse erro sem ter que usar o casting (float) em um caso tão simples,
existe uma forma alternativa de indicar o número 0.5, acrescentando um f na frente,
indicando se tratar de um número float, não double, como indicado no código a seguir.
CastingFloat.java
class CastingFloat {
public static void main(String[] args) {
float umaVariavel;
umaVariavel = 0.5f;
System.out.println( umaVariavel );
}
}
Este código irá compilar normalmente. Esta mesma regra vale para variáveis do tipo
long, que precisarão ser associadas com um número seguido da letra l, como indicado a
seguir.
Linguagem de Programação 17
Atualização: 07/02/2010
CastingLong.java
class CastingFloat {
public static void main(String[] args) {
long umaVariavel;
umaVariavel = 1000000000l;
System.out.println( umaVariavel );
}
}
7. EXERCÍCIOS
UmPrograma.java
class UmPrograma {
public static void main(String[] args) {
System.out.println("Ola, mundo!");
}
}
\n
serve para "quebrar linha", escreve as mesmas duas linhas do item 2 com um único
System.out.println().
4) Na empresa onde trabalhamos, há tabelas com o quanto foi gasto em cada mês.
Para fechar o balanço do primeiro trimestre, precisamos somar o gasto total. Sabendo que, em
Janeiro, foram gastos 15000 reais, em Fevereiro, 23000 reais e em Março, 17000 reais, faça
um programa que calcule e imprima o gasto total no trimestre. Siga esses passos:
a) Crie uma classe chamada BalancoTrimestral com um bloco main, como nos
exemplos anteriores;
Linguagem de Programação 18
Atualização: 07/02/2010
Extras
4) Se conhecer alguém que está trabalhando em um projeto Java, pergunte a ele o que
ele pensa sobre a linguagem e por que o Java foi escolhido para este projeto.
8. BIBLIOGRAFIA
CAELUM, FJ-11: Java e Orientação a Objetos. Acessado em: 10/01/2010. Disponível em: <
http://www.caelum.com.br/curso/fj-11-java-orientacao-objetos/ >
DEITEL, H.M; DEITEL, P.J. Java: como programar - Sexta edição. São Paulo:
Pearson-Prentice Hall, 2005.
HOFF, A; SHAIO, S; STARBUCK, O. Ligado em Java. São Paulo: Makron Books, 1996.