0 notas0% acharam este documento útil (0 voto) 74 visualizações35 páginasCurso Java
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu,
reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF ou leia on-line no Scribd
Curso de Java Basico
Fabio Mengue~fbio@unicarp br
Centro de Compatagio-Unicamp
Historia Répida da Linguagem
Em 1991, um grupo de engenheiros da Sun Microsystems foi encarregado de criar uma
nova linguagem que pudesse ser utilizada em pequenos equipamentos como controles de TV,
telefones, fornos, geladeiras, ete. Essa linguagem deveria dar a esses aparelhos a capacidade de
se comunicar entre si, para que a casa se comportasse como uma federagio, Deveria ainda ser
capaz de gerar cédigos muito pequenos, que pudessem ser executados em varios aparelhos
diferentes, ¢ praticamente infalivel.
Os engenheiros escolheram o C++ como ponto de partida, Orientada a objetos, muito
poderosa e gerando pequenos programas, parecia a escolha correta. Para solucionar o problema
da execucao em varias arquiteturas, eles utilizaram 0 conceito da maquina virtual, onde cada
fabricante iria suportar algumas fungdes bésicas que os programas utlizariam,
Até hoje a linguagem resultante deste projeto nao ¢ utilizada em aparelhos
eletrodomésticos. Ao invés disso, o Java se tornou um das linguagens de programacao mais
utilizadas no planeta.
Vantagens do Java (Por Que Estudar Essa Linguagem ?)
Na maioria das linguagens de programagio, vocé precisa compilar ou interpretar um
programa para que ele seja executado em seu computador. A linguagem Java é diferente, pois
seus programas si compilados E interpretados. Com 0 compilador, voce inicialmente
transforma seu programa em uma linguagem intermediiria, chamada bytecode. Esse codigo &
independente de plataforma, e é mais tarde interpretado por um interpretador ava, A compilagio
acontece apenas uma vez; a interpretagao acontece todas as vezes que seu programa é executado.
A figura abaixo mostra como isso acontece.
on
rnyProgran.java
yProgran class:
EasVoeé deve pensar nos byrecodes como instrugdes de maquina para a Java Virtual
Machine (ou SVM). Todos os produtos que conseguem executar programas em Java (como um
browser que executa applet’s) possuem uma cépia da JVM.
Bytecodes Java tornam possivel a tecnologia “escreva uma vez, execute em qualquer
lugar”. Vocé pode compilar seu programa Java em qualquer plataforma que possua um
compilador. Os byfecodes gerados podem ser interpretados em qualquer plataforma que possta
uma JVM. Veja na figura abaixo:
—» (Compiler
HelToforldkpp. jave
(Cotorpretar5 (interpreter) Ciiorpreta)
a 2
Pc — sale
‘Win32 Solaris MacOS
A Plataforma Java
Por plataforma, entendemos 0 conjunto de hardware e software no qual um programa
executa, Alguns exemplos de plataformas muito usadas so 0 Windows, 0 Linux, o MacOS. A
plataforma Java é diferente, pois nfo envolve hardware; ela utiliza a plataforma de hardware das
outras.
A plataforma Java tem dois componentes
+ Java Virtual Machine (Java VM ou JVM)
+ Java Application Programming Interface (Java API)
A API Java é uma colegio de componentes de software prontos, que incluem desde
estruturas para manipulacdo de arquivos até a construciio de aplicativos grificos. A API é
organizada como um grupo de bibliotecas com classes e interfaces; essas bibliotecas so
chamadas de pacotes.
A figura abaixo mostra 0 esquema de funcionamento da plataforma Java:
rogran Java
Java API]
[aris fer rasom
Hardware-Based PlatformErros Comuns de Conceito Sobre Java
Muita gente pensa muita coisa sobre Java, e muita coisa errada. A seguir listamos
algumas idéias erradas mais comuns.
Java é uma linguagem facil de aprender.
‘Nenhuma lingagem poderosa como o Java é ficil de aprender. E sempre ficil escrever
programas do tipo “Alo Mundo”. Aprender a lidar com if, while e tipos do Java é uma tarefa
simples; a parte complexa vem da orientagdo a objetos e das classes presentes na linguagem.
‘Temos mais de 1.500 classes e interfaces diferentes. A descrigao de cada uma cabe em um livro
de 600 paginas.
O ambiente Java facilita a programacao.
Vocé vai aprender Java usando 0 notepad eo prompt do DOS. Nio é 0 melhor ambiente
do mundo, especialmente se comparado as linguagens visuais que temos hoje, como o Visual
Basic. Em um ambiente de alta produtividade, o uso do Java deve ser muito racional, levando em
conta as dificuldades da codificagao,
Java seré: a linguagem universal no futuro.
E possivel, em teoria. Mas existem muitos sistemas com cédigos nativos que sao
perfeitos da maneira que esto hoje, e por isso no devemos “mexer”. O Java nio é recomendado
para solucionar todos os problemas.
Java é apenas mais uma linguagem como qualquer outra.
‘A linguagem Java, apenas pelo fato de permitir que um programa seja executado em.
qualquer plataforma, ja realizou revolugao suficiente. Além disso, a linguagem foi desenhada
para se utilizar da rede, e os conceitos de ambiente multitarefa auxiliam 0 produto a ter poucas
comparagdes no mercado hoje.
Todos os programas Java tem que ser executados dentro de um navegador.
‘Um dos usos do Java é a confeccao de applets. Java também serve para programar
aplicativos, servlets, JavaBeans, componentes ¢ uma grande gama de produtos.
Javascript é uma versao simplifieada do Java.
Javascript é uma linguagem utilizada em navegadores. Ela foi inventada pela Netscape, e
sua sintaxe é semelhante da linguagem Java. Com excecao do nome, as semelhangas terminam
ai.Instalando o ambiente
Para o desenvolvimento de aplicativos utilizando o Java, é necessirio a instalagao do compilador
Java, das API's e da IVM. A instalagdo do ambiente segue 0 mesmo esquema da instalago de
qualquer produto para Windows.
Devemos fazer 0 download da versio mais apropriada via fip ou http e executar 0
arquivo, para que o produto se instale
As versoes para Windows, Linux e Solaris pode ser obtido em:
‘hitp-/iavasun.com
Meu primeiro programa Java
Como a maioria das linguagens de programagiio, o fonte de seu programa em Java deve
ser criado a partir de um editor de texto que gere arquivos em formato ASCII. F possivel utilizar
editores como o Word e 0 Wordpad, mas o texto deve ser salvo sem formatagao. O editor ideal &
o notepad.
O programa fonte em Java deve ser salvo obrigatoriamente com a extensio java. Salve
xno notepad o arquivo utilizando aspas duplas, assim:
‘AloMundo av:
‘Vamos ento criar uma pasta chamada CURSO (md curso) para que possamos organizar
os programas e exercicios que faremos.
Execute o Notepad agora, e vamos digitar nosso primeiro programa em Java. Copie as
linhas abaixo:
class AloMundo {
public static void main(String args[]) {
System out println(““Alo Mundo !");
}
3
‘Nao se preocupe em entender 0 cédigo; é apenas um exemplo, e explicaremos esses
comandos mais tarde. Salve o arquivo como AloMundo java (letras maitisculas e miniisculas sio
importantes),A seguir, vamos compilar o programa. A compilagio ira gerar os bytecodes. Do prompt
do DOS, execute:
javac AloMundo java
Se niio houver erro, depois de alguns segundos voeé deve ter avesso ao prompt
‘novamente. Para executar o programa,
java AloMundo
Vocé deve ter recebido como resposta a frase “Alo Mundo !”. Isso significa que tudo esti
certo com seu ambiente e vocé acabou de criar seu primeiro programa em Java.
Exercicios
—Altere o programa AloMundo para que ele imprima seu nome completo.
~Altere o programa AloMundo e faga com que ele imprima seu nome em duas linhas separadas.Objetos
O Que Siio Objetos ?
Quando temos um problema e queremos resolve-lo usando um computador,
necessariamente temos que fazer um programa, Este nada mais é do que uma serie de instrugdes
que indicam a0 computador como proceder em determinadas situagdes. Assim, o grande desafio
do programador é estabelecer a associagio entre o modelo que o computador usa e © modelo que
© problema the apresenta.
Isso geralmente leva o programador a modelar o problema apresentado para © modelo
utilizado em alguma linguagem, Se a linguagem escolhida for LISP, 0 problema seri traduzido
como listas encadeadas, Se for Prolog, o problema sera uma cadeia de decisdes. Assim, a
representagao da solugdo para o problema é caracteristica da linguagem usada, tornando a eserita
dificil
A orientagao a objetos tenta solucionar esse problema. A orientagao a objetos é geral 0
suficiente para ndo impor um modelo de linguagem ao programador, permitindo a ele escolher
‘uma estratégia, representando os aspectos do problema em objetos. Assim, quando se "Ié" um
programa orientado a objeto, podemos ver no apenas a solug40, mas também a deseri¢ao do
problema em termos do proprio problema, O programador consegue "quebrar" o grande
problema em pequenas partes que juntas fornecem a solugio.
Othando sua volta é possivel perceber muitos exemplos de objetos do mundo real: seu
cachorro, sua mesa, sua televisio, sua bicicleta, Esses abjetos tem duas caracteristicas bisicas,
que so 0 estado eo comportamento.
Por exemplo, os eachorros tem nome, cor, raga (estados) e eles balangam o rabo, comem,
¢ latem (comportamento). Uma bicicleta tem 18 marchas, duas rodas, banco
(estado) ¢ elas brecam, aceleram e mudam de marcha (comportamento).
De maneira geral, definimos objetos como um conjunto de variiveis e métodos, que
representam seus estados e comportamentos.
Vanabies
stemoas i> ‘som
annoy { aa
‘Veja a ilustragio:Temos aqui representada (de maneira logica) a idéia que as linguagens orientadas a
objeto utilizam. Tudo que um objeto sabe (estados ou varidveis) e tudo que ele podem fazer
(comportamento ou métodos) esta contido no préprio objeto.
No exemplo da bicicleta, poderemos representar 0 objeto como no exemplo abaixo:
10 mph
ON sen
Temos métodos para mudar a marcha, a cadéncia das pedaladas, e para brecar. A
utilizagdo desses métodos altera os valores dos estados. Ao brecar, a velocidade diminui. Ao
mudar a marcha, a cadéncia & alterada.
Note que os diagramas mostram que as varidveis do objeto esto no centro do mesmo. Os
métodos cercam esses valores e os “escondem” de outros abjetos. Deste modo, s6 é possivel ter
acesso a essas varidveis através dos métodos. Esse tipo de construgio é chamada de
encapsulamento, e é a construgao ideal para objetos.
Exercicio
- Imagine um exemplo de objeto diferente dos vistos até agora, Para esse objeto, relacione
possiveis métodos e atributos.
Mas um objeto sozinho geralmente nio é muito titil. Ao contrario, em um programa
orientado a objetos temos muitos objetos se relacionando entre si. Uma bicieleta encostada na
garagem nada mais é que um pedago de ferro e borracha. Por si mesma, ela nao tem capacidade
de realizar nenhuma tarefa, Apenas com outro objeto (vocé) utilizando a bicicleta, ela & capaz de
realizar algum trabalho.
A interagdo entre objetos ¢ feita através de mensagens. Um objeto “chama” os métodos
de outro, passando parametros quando necessério. Quando vocé passa a mensagem “mude de
marcha” para o objeto bicicleta vocé precisa dizer qual marcha vocé deseja.
A figura a seguir mostra os trés componentes que fazem parte de uma mensagem:
+ objeto para o qual a mensagem é dirigida (bicicleta)
+ nome do método a ser executado (mudamarcha)
+ 0s parimetros necessirios para a execugao do método.
changeGears(1owerGear)
YouricycleA troca de mensagens nos fornece ainda um beneficio importante. Como todas as
interagdes sfo feitas através delas, nfo importa se o objeto faz parte do mesmo programa; ele
pode estar até em outro computador. Existem maneiras de enviar essas mensagens através da
rede, permitindo a comunicagao remota entre objetos.
Assim, um programa orientado a objetos nada mais é do que um punhado de objetos
dizendo um ao outro 0 que fazer. Quando vocé quer que um objeto faca alguma coisa, vocé envia
a ele uma "mensagem" informando o que quer fazer, ¢ 0 objeto faz. Se ele precisar de outro
objeto que o auxiliar a realizar o "trabalho", ele mesmo vai cuidar de enviar mensagem para esse
outro objeto. Deste modo, um programa pode realizar atividades muito complexas baseado
apenas em uma mensagem inicial,
Vocé pode definir varios tipos de objetos diferentes para seu programa. Cada objeto ter
stias proprias caracteristicas, e saber’ como interpretar certos pedidos. A parte interessante é que
objetos de mesmo tipo se comportam de maneira semelhante, Assim, vocé pode ter fungSes
genéricas que funcionam para varios tipos diferentes, economizando cédigo.
‘Vale lembrar que métodos so diferentes de procedimentos e fungdes das linguagens
procedurais, e & muito facil confundir os conceitos. Para evitar a confusdo, temos que entender 0
que sio classes.
Exercicios
- Imagine dois objetos que se relacionam, Mostre como é possivel através de mensagens 0
relacionamento entre eles.
Classes
Até agora, comentamos sobre o que é um objeto e como ele se relaciona com outros
objetos. Falaremos agora a respeito de classes.
Sua bicicleta é apenas uma das varias que existem. A sua bicicleta especifica foi feita por
‘um fabricante, e tem certas caracteristicas que seguem uma linha ou modelo. Assim, é possivel ir
em uma loja e comprar varias unidades de bicicletas essencialmente idénticas. Mas no podemos
dizer que todas so © mesmo objeto, simplesmente por serem parecidas.
Em orientagao a objetos, dizemos que um (ou mais) objetos pertencem a uma classe
quando eles sio muito semelhantes, de acordo com certos padres. Assim, dependendo da
situagao, alguém pode dizer que sua bicicleta é um veiculo, pois ele anda sobre rodas e carrega
‘uma pessoa, Se seguirmos esse padrio, uma motocieleta também é um veiculo, assim como um
automével ou até um avido (ué, nfio anda sobre rodas quando decola ou pousa ? Nio carrega uma
pessoa ?). Na verdade, quando programamios em linguagens orientadas a objetos, antes de tudo
nds construimos as classes, os modelos, para depois usé-las na criagao de objetos daquele tipo.Voltando ao nosso exemplo das bicicletas. Quando elas sio construidas, os fabricantes
tiram vantagem do fato que elas tem as mesmas caracteristicas, e podem construir varias delas a
partir de uma mesma planta, Seria muito custoso fazer um novo projeto para cada bicicleta que
eles fossem construir.
Exercicios
- Agrupe em classes os objetos abaixo:
avitio elefante computador tigre calculadora motocicleta__formiga
Na orientagdo a objetos, quando programamos, tentamos visualizar os objetos necessérios
para resolver um problema. Se cu estou criando um programa de controle de estoque, eu vou
necessitar de uma classe que represente os itens que tenho nesse estoque. Outra elasse que
represente as ordens de compra. E assim por diante.
Nota: A classe ¢ um modelo ou prototipo, que define as varidveis € comportamentos em comum
que um certo tipo de objeto especifico contém.
No nosso exemplo, depois de criada a classe bicicleta, nos é possivel criar a partir dela
objetos que sero cépias idénticas da classe, mas cada uma delas tera seus proprios estados. O
modelo pode fornecer dados que serio compartilhados entre todos os objetos ou permitir que
estes tenham dados prépiros.
Nota: Objetos “derivados” de uma classe sfio chamados instancia de classe.
Para tornar o entendimento mais facil, vamos ver um exemplo mais facil e pratico,
Inicialmente vamos pensar em um objeto bem simples, como uma limpada.
As limpadas podem ter diversos formatos, cores e tamanhos, mas basicamente elas tem
apenas uma flngao, que é iluminar o ambiente, Assim, imagine uma classe limpada,
Essa classe pressupde apenas 2 estados. Um objeto derivado dessa classe pode estar
ligado ou desligado. Mas a Kimpada por si s6 nao decide quando vai ligar ou destigar. Quem liga
ou desliga esse objeto limpada é um interruptor, acionado normalmente por uma pessoa.
Pare resolver esse problema, teremos que definir um objeto baseado na classe liimpada.
Teremos ainda um objeto da classe interruptor e outro da classe pessoa. Pessoa ita enviar uma
mensagem ao interruptor que por sta vez ira enviar uma mensagem para a limpada.
‘Uma coisa interessante é que no interessa para a pessoa que esti ligando a lampada
como 0 interruptor funciona: importa que quando pressionado, a limpada acenda, Esta & uma das,
grandes vantagens de se utilizar 0 conceito de objetos em informatica. Um objeto é como uma
caixa preta: niio me importa como ele faz. as coisas, apenas o que tenho que fazer para que as
coisas acontecam.Voltando ao exemplo da lampada, em Java eu poderia definir uma kimpada assim:
Jampada sala_de_aula = new lampada);
Se eu quiser ligar a lampada, é s6 informar a ela o meu desejo, através de uma
mensagem:
sala_de_aula.ligar();
Ea lampada vai acender. Nao me importa como ela fez. isso, me importa apenas que ela
faga,
Sintaxe
‘No basta um objeto estar definido para ser utilizado. Se eu pretendo usar um objeto, eu
preciso cria-lo, e atribuir o controle desse objeto a um nome. A eriagao de objetos em Java &
sempre necesséria, e é chamada de instanciagao (por isso o objeto é chamado de instancia).
Quando eu crio o objeto sala_de_aula, eu digo que ele é do tipo limpada e que eu quero
que ele seja instanciado nesse momento (new lampada()). A partir de agora, sala_de_aula é um
objeto do tipo definido e tem como fngdes tudo que uma kimpada pode fazer.
Classes, Atributos e Métodos
Uma das grandes vantagens do Java e nosso propésito de estudo é a capacidade de vocé
definir seus proprios objets. Como j comentado, um objeto contém atributos (dados) e métodos
(fungSes para manipulacao dos dados). Esses objetos irdio ajud4-lo a resolver o problema
apresentado e tornarao seu trabalho mais facil.
‘Vamos inicialmente criar um objeto simples, que contenha apenas dados.
class meuObjeto
t
String nome;
int idade;
String telefone;
4
Vocé acabou de definir um objeto chamado meuObjeto. Temos nome, idade e telefone
como dados deste objeto.
Mas niio basta defini-lo para que ele nos seja itil, Para isso, voeé deve instancit-lo,
10assim:
meuObjeto amigo = new meuObjeto();
A partir de agora, meu objeto amigo pode ser utilizado para guardar dados. Eu posso
incluir dados assim:
amigo dade = 33;
amigo.telefone
E quando eu precisar dos valores, eu simplesmente os imprimo.
Nota: para facilitar nosso aprendizado, o comando para imprimir um dado é System.out.println, ¢
pode ser utilizado assim:
System.out.printin (amigo.nome);
‘Vamos agora criar um método para 0 meuObjeto. Esse método vai se chamar aniversario,
e ele serve para aumentar em 1 ano a idade do objeto. Ento, meu objeto ficaria:
class meuObjeto
1
String nome;
int idade;
String telefone;
public void aniversario()
{
idade = idade + 1;
3
i
Agora, para um teste, poderiamos fazer:
meuObjeto amigo = new meuObjeto();
33;
amigo.telefone = "2223311";
System.out printin ("Idade antiga"-+amigo dade);
amigo.aniversario();
System.out.printla ("Nova idade"+amigo dade);
Percebam que o valor da idade foi alterado.
ulExercicio
- Digitem o exemplo acima e fagam o mesmo funcionar.
Nota: o esquema geral para a defini¢do de um método &
tipo_do_dados_de_retorno nome_do_metodo (argumentos)
{
corpo_do_metodo
J
No caso do método aniversario definido acima, nao temos nenhum tipo de retorno, por
isso ele é do tipo void.
Se precisarmos algum resultado de retorno, temos que indicar qual o tipo desse resultado.
‘Vamos definir outro método, que me retorna o numero de meses baseado na idade, ©
método poderia ser definido assim:
int idadeEmMeses()
|
return (idade * 12);
}
A instrugo return vai indicat qual o valor a ser retornado na chamada do método. Como
temos um retorno, ele dever ser utilizado ow apresentado. Podemos apresenté-lo assim:
System.out.printin (amigo. idadeEmMeses());
Nota: Se o valor for utilizado para outros fins, devemos definir uma variavel do mesmo tipo do
retomo para conter o resultado:
int idade_em_meses = amigo dadeEmMeses();
As vezes, necessitamos do envio de argumentos (também chamados parametros) para um
método para que ele possa executar seu trabalho. A passagem de parimetro € feita na hora da
chamada, e temos que criar © método j levando em consideragao a quantidade de parametros
que iremos passar.
Assim, caso eu queira alterar ao atributo idade do objeto, eu poderia criar um método
assim:
void alteraldade(int nova_idade)
{
2idade = nova_idade;
}
E a chamada ao método ficaria:
amigo alteraldade(30);
Exercicio
- Implemente o exemplo acima.
Nota: Caso eu tenha mais de um argumento, eles devem ser separados por virgulas.
Nota2: Na definigdo do método com mais de um argumento, eu tenho que prever as varidveis a
serem recebidas.
Exemplo:
void qualquerCoisa (String nome, int idade, String telefone)
A chamada é
amigo.qualquerCoisa ("paulo”, 24, "2221133
Construgao De Programas Em Java
Vocés podem estar se perguntando qual a finalidade de criar métodos para alterar valores
dentro de um objeto. Nesses exemplos fica facil perceber que é muito mais facil fazer uma
atribuigo simples (amigo. idade34) do que eriar um método s6 para alterar a idade. Mas isso
tem sentido de ser, em linguagens orientadas a objetos.
‘A idéia é que o objeto deve gerenciar seus proprios dados, que s6 devem ser acessiveis 20
“mundo exterior" através de seus métodos (excetuando-se aqui os métodos e varidveis estaticas).
Entao, pelo menos em teoria, cada atributo do meu objeto deve ter um método para gravar dados
¢ outro para devolver o dado gravado, Isso vai permitir que esse objeto seja utilizado por
qualquer um, a qualquer tempo
‘Vamos passar ent&o um pequeno cédigo de um programa completo em Java para que
possamos ir comentando e esclarecendo.
import java.util.*;
public class Propriedades
t
public static void main (String{] args)
System.out.printin ("Bom dia... Hoje é dia\n");
Systemout.printin(new Date()):
i
1BLogo na primeira linha temos "import...". E normal nas primeiras linhas de um programa
em Java a colocagio da instrugao import. Essa instrugo serve para que nosso programa possa
utilizar qualquer classe externa que ele necessite. No caso, meu programa usa uma fungao que
retorna a data do sistema, e essa fiungao faz parte de java.util. Assim, eu preciso importar essas
funedes para que meu programa funcione. Isso sera explicado melhor quando falarmos a respeito
de API's,
‘Na segunda linha, definimos 0 nome desse objeto (em Java, chamado de classe). FE.
importante notar que o objeto deve ter 0 mesmo nome do arquivo no disco, caso contririo 0
programa nfo iré funcionar.
‘Notamos ainda nessa mesma linha que essa classe & do tipo publica (public). Isso quer
dizer que esse objeto é acessivel por outros objetos, que ele pode ser importado e usado.
‘Na proxima linha, temos @ definigao do método main, Vemos novamente o public, e a
palavra static, indicando que esse método nfo pode ser instanciado, apenas usado do jeito que
esta, Vemos que 0 método main admite uma lista de Strings como argumentos (chamado de
args). Esses argumentos nio sfo necessirios nesse programa, mas caso necessitissemos de
passar algum tipo de informagao para o programa, essas informagdes estariam armazenadas na
varidvel args,
‘Na proxima linha, temos a impressio de um texto na tela. A tinica novidade é a presenga
de um sinal \n no final do texto. Ele indica ao Java para pular de linha depois de escrever o texto
indicado,
‘Na ultima linha temos outra impressdio. Dessa vez, temos a instanciagdo de um objeto do
tipo Date, e seu valor é imediatamente impresso. Como nao necessitamos do objeto, apenas
queremos um valor impresso, no é necessério criar uma varidvel apenas para isso. Note que
rem sempre isso é possivel.
Métodos Construtores e Overloading
Como ja apresentado, ¢ sempre necessirio instanciar um objeto para poder utilizé-lo.
Existe um método especial em uma classe que fornece instrugdes 4 respeito de como devemos
instanciar 0 objeto. Esse método é chamado de construtor.
A fungao do construtor é garantir que o objeto associado a variavel definida seré inciada
corretamente, Sempre é necessario ter um construtor, e como na maioria das vezes esse
construtor nao faz nada (além de instanciar 0 objeto), nio é necessério declara-lo, O Java faz. isso
automaticamente para nos,
Nota: O método construtor tem exatamente o mesmo nome da classe, Assim, no exemplo:
4class meuObjeto
1
String nome;
int idade;
String telefone;
public void aniversario()
idade = idade + 1;
i
}
‘Nao temos construtor definido.
Mas existem casos onde teremos necessidade de um construtor que faz algo, como na
definigdo de String. Eu posso definir uma String assim
String nome = new String();
Ow assim:
String nom
new String ("Joao");
Isso quer dizer que o objeto String tem pelo menos 2 construtores; um que inicia 0 objeto
sem argumentos e outro que inicia com argumentos. Esse tipo de artificio é chamado de
sobrecarga (em inglés, Overloading).
Se eu quiser que meuObjeto tenha o mesma tipo de funcionalidade do String, eu defino
dois construtores, assim:
class meuObjeto
\
String nome;
int idade;
String telefone;
meuObjeto() J/ Esse & 0 construtor sem argumentos
{
}
meuObjeto(String _nome, int _idade, String _telefone) // Construtor com argumentos
t
nome =_nome;
idade = “idade;
telefone = _telefone;
i
public void aniversario()
{
idade ~ idade + 1;
i
Isi
Agora meuObjeto pode ser instanciado como
meuObjeto amigo = new meuObjeto();
ou
meuObjeto amigo = new meuObjeto("Joao", 32, "2223311");
‘A sobrecarga é um dos recursos mais interessantes da orientagao a objetos. E nao esta
restrito aos construtores; podermos definir 0 mesmo nome de método para qualquer método.
Assim, tornamos o programa mais legivel e temos menos nomes para "inventar”
Nota: Como os dois (ou mais) métodos tem o mesmo nome, a diferenciagdo de qual método é
executado depende da quantidade e do tipo dos argumentos enviados.
Nota2: Quando nao definimos construtores, o Java eria um sem argumentos para nos. Quando eu
escolho definir o construtor, tenho que definir para todos os tipos, inclusive 0 sem argumentos.
Utilizagao das API's
Como ja falado, existem muitos objetos prontos que a linguagem Java nos proporciona.
Como todos 0s abjetos, eles podem conter dados ¢ tem varios métodos para que possamos usa-
los. E importante para um programador Java conhecer 0 maximo desses objetos que puder; eles
facilitam o trabalho na medida que evitam que nos tenhamos o trabalho de inventar algo que jé
esti pronto. Lembre que normalmente nés nilo temos acesso aos atributos dessa classe; apenas a
seus métodos
Quando executamos um import ... no inicio do nosso programa, estamos informando a0
compilador Java quais as classes que desejamos usar.
Assim, um import java.util; quer dizer: "eu vou utilizar alguns objetos do pacote
java.util". Um programa pode ter tantos import quanto necessario.
Isso permite que vocé utilize componentes de pacotes baixados da Internet, com
utilizagdo mais restrita,
‘Nota: Uma lista completa das API's existentes pode ser achada na lista de links no final do
documento.
16Conceito De Pacote
Um pacote pode ser entendido como uma serie de objetos agrupados por afinidade. Eles
ficam "juntos" pois tem fumgdes semelhantes (como por exemplo manipula texto).
Quando nés vamos eriar nossos préprios objetos para resolver um problema,
normalmente esses objetos ficam todos no mesmo sub-diretorio; entre eles estabelecemos uma
relagio de "amizade", e podemos considera-los como parte do mesmo pacote (default). Estando
no mesmo sub-diretorio, certas restrigdes de acesso entre esses objetos mudam. Explicamos
restrigdo de acesso no t6pico a seguir.
Tipos De Métodos: Publicos, Privados E Protegidos
As restrigdes de acesso em Java existem por dois motivos. O primeiro é nao permitir que
© programador utilize meus objetos da maneira que quiser. Eu dito o que pode e 0 que no pode
ser utilizado. E 0 segundo motivo é que tudo que nfo for publico (e consequentemente no
permite acesso) pode ser alterado na hora que eu quiser. Contanto que os métodos de acesso (que
sto piiblicos) fiquem inalterados, ninguém vai pereeber a diferenga.
‘Como exemplo, vejamos o objeto String. O String na verdade é um vetor de caracteres.
Eu nfo tenho permissao para acessar os contetidos internos desses caracteres; eu tenho que fazer
{sso utilizando um método. Assim, existem situagdes onde € interessante que meus objetos
tenham um certo controle sobte o que o programador pode fazer com eles, para que niio ocorram
problemas. Para isso, temos trés tipos de acesso a métodos e atributos.
Quando utilizamos a palavra public, liberamos 0 acesso do atributo/método para ser
utilizado por qualquer um que importe © pacote ou o objeto,
No caso do private, ninguém pode acessar 0 método/atributo daquele objeto, nem mesmo
0s objetos daquele pacote ou objetos que herdam suas caracteristicas. Isso evita que certos
métodos sejam acessados diretamente, evitando erros.
Métodos/atributos protected podem ser herdados, mas nao alterados. Iremos comentar a
respeito de heranga mais a frente.
Exemplo:
class exemplo {
public metodol() {
private metodo2() {
Nessa classe, 0 metodo] pode ser executado por qualquer outro objeto. O método
metodo? s6 pode ser executado pelo proprio objeto.
0Composicao e Heranca
Um dos conceitos mais interessantes das linguagens orientadas a objeto é a reutilizaga0
de codigo. Mas para isso realmente funcionar, vocé tem que conseguir fazer mais do que
simplesmente copiar cddigo ¢ altera-lo. Vocé deve ser capaz de criar uma nova classe usando
outra classe ja existente.
Existem duas maneiras diferentes de fazer isso. Uma & chamada composico. A
composigio é geralmente utilizada quando se deseja utilizar as caracteristicas de um objeto mas
no sua interface.
Quando eu tenho um objeto do tipo carro e uma outra pessoa vai utilizar um carro com as
mesmas funcionalidades, é mais ficil ela construir um carro utilizando as "pecas" (que ja estio
prontas). Assim, ela pode importar a classe carro e usar:
carro meuCarro = new carro():
‘A partir de agora, dentro do seu objeto, vocé tem um objeto do tipo carro. O que voce fez
aqui foi compor um objeto. Seu objeto agora é do tipo composto, ja que ele possui mais do que
um objeto dentro dele.
Mas existe situagdes onde a composigao no basta. F quando eu desejo utilizar 0 objeto
existente para criar uma versio melhor ou mais especializada dele. Isso & chamado heranga.
Imagina que eu tivesse uma classe chamada Empregado. Essa classe tem como atributos
© nome, segao e salirio do empregado, Existe também um método para alterar 0 salaro.
class Empregado
\
public Empregado (String nome, String _secao, double _salario)
{
‘nome = _nome;
secao =_secao;
salario = _salario;
}
public void aumentaSalario (double percentual)
{
}
String nome:
String secao;
double salario;
salario *= 1 + perventual / 100;
18‘Vamos supor agora que temos que necessitamos de um tipo especial do objeto
Empregado, que é o Gerente. O Gerente tem secretaria, e a cada aumento ele recebe a mais 0,5%
a titulo de gratificagao.
Mas o Gerente continua sendo um empregado; ele também tem nome, segiio e sakirio,
Assim, fica mais ficil utilizar a classe Empregado jé pronta como um modelo, e aumentar as
funcionalidades. Isso & chamado de heranga.
Veja a classe Gerente no exemplo abaixo:
class Gerente extends Empregado
4
public Gerente (String _nome, String _secao, double _salario, String _secretaria)
{
super (nome, secao, salario); // Aqui eu chamo a super classe do Gerente
secretaria = _secretari
i
public void aumentaSalario (double percentagem)
1
super.aumentaSalario (percentagem+0,5);
1
public String getSecretaria ()
1
}
return (secretaria);
public void setSecretaria (String _secretaria)
{
i
seeretaria = _secretaria;
private String secretaria;
© que fizemos aqui foi literalmente nos aproveitarmos do eédigo de outro programa,
especializando o objeto Empregado. Adicionamos métodos a essa classe e mesmo alteramos um.
de seus métodos (aumentaSalario) para refletir uma nova condigao.
‘Uma palavra que apareceu nessa classe foi a super. Ela referencia a classe da qual essa se
originou, a classe que foi estendida ou herdada, Assim, super.aumentaSalario invoca 0 método
aumentaSalario da classe Empregado. A classe Gerente poderia ter substituido completamente 0
método ou fazer alteragSes, como fizemos.
19Assim, 6 sempre uma boa idéia sempre pensar em construir objetos que possam ser
genéricos o suficiente para que possam ser reaproveitados.
‘Nota: Como referencia para nos auxiliar a determinar se devemos utilizar composig&io ou heranga
para construir um objeto, sempre pense
€ para heranga (um carro é um veiculo),
COntémM para composigio (um carro contém motor, freio, etc.).
‘Nota 2: Quando nao desejamos que um método ou atributo seja redefinido, utilizamos a palavra
reservada final
Polimorfismo
O conceito de heranga nos leva a discutir outro: o polimorfismo. Podemos traduzir essa
palavra pela capacidade de um objeto em saber qual o método que deve executar. Apesar da
chamada ser a mesma, objetos diferentes respondem de maneira diferente.
Assim, quando chamamos aumentaSalario da chasse Gerente, é esse método que sera
executado, Se a classe Gerente nao tivesse esse método, 0 método da classe Empregado seria
executado, Caso a classe Empregado também nio tivesse esse método, a classe da qual ele veio
seria objeto do pedido.
‘Como exemplo, imagine uma classe chamada Figura. Essa classe tem a habilidade de
desenhar a si mesma na tela, Se eu definir uma classe chamada Triangulo que estenda a classe
Figura, ela pode usar o método da super classe para desenhar a si mesma, sem necessidade de
criar um método apenas para isso.
‘Usando ainda nosso exemplo de Funcionétio e Gerente. Se a classe Funcionaio tivesse
‘um método para mudar a seco do fiunciondio, nfo seria necessirio definir um método igual para
a classe Gerente. Entretanto, quando eu invocasse o método Gerente.musaSecao(nova_secao), ©
objeto saberia como se comportar, pois ele herdou essa “sabedoria” de sua superclasse.
Nota: Como todos os objetos definidos so subclasses de Object, todas as classes que usamos ou
definimos, por mais simples que sejam, tem certas capacidades herdadas desta classe. Para
maiores detalhes, veja a API.
Exerciclos
-Implemente 0 exemplo acima, Altere ou defina métodos usando o mesmo nome (sobrecarga),
defina atributos e métodos private e public e teste sua seguranga.
20Métodos Estaticos
Um tiltimo conceito importante diz respeito a métodos especiais. Eles foram criados para
resolver situagdes especiais na orientagao a objetos, e também para simplificar certas operagdes
Imagine uma classe, criado por outra pessoa, que tenha apenas um método. A classe se
chama validaCPF, e serve para verificar se um CPF é valido ou no.
Segundo as "leis" da orientacao a objetos, eu preciso instanciar um objeto desse tipo &
utilizar seu método para a verificagao do valor. Isso é um tanto quanto inedmodo, pois eu
simplesmente necessito de uma funcionalidade, e ndo do objeto todo. Da mesma maneira, temos
dezenas de fimngSes mateméticas, fisicas, estatisticas e outras que no nos interessam,
Gostariamos apenas de enviar os pardimetros e receber resultados, como se esses métodos fossem
fungdes.
‘Nesses casos (¢ em alguns outros) podemos criar esse método como estitico (static). Um
método estitico presente em uma classe nio obriga a instanciar um objeto para que eu tenha
acesso a seus servigos; ele serve apenas para que possamos aproveita-lo em pequenas
computagdes. Assim, a definigao do validaCPF seria
static boolean validaCPF(String mumero_cpf)
{
cédigo,
i
Quando eu precisasse utilizar 0 eédigo, eu faria algo do tipo:
boolean cpf_valido = validaCPF(" 123123123");
Nota: Os métodos estiticos s40 utilizados em casos especificos. Um programa orientado a
objetos que é feito inteiramente de métodos estiticos nio é orientado a objetos :)
Exercieio
- Crie uma classe que possua um método estitico chamado Soma. Esse método deve receber dois
parimetros e devolver o resultado da soma destes parimetros. Use sobrecarga de métodos para
que os pariimetros possam ser tanto do tipo inteiro (int) quanto do tipo fracionario (double)
2Apéndice A — Programacio Fundamental
Nessa segdio falamos sobre os conceitos biisicos do Java, como tipos de dados, loops, ¢
métodos.
Como nio é trivial escrever programas que utilizam a interface grafica, iremos
inicialmente aprender como criar aplicativos, ou programas que no utilizam outros recursos
além do prompt do DOS.
Comentarios
E sempre interessante a colocacao de comentirios em programas. Os comentirios
permitem que a manutengao posterior do eédigo seja mais rapida e serve para indicar 0 que o
programa faz. Os comentérios em Java podem ser de dois tipos. Utiliza-se duas barras (// ) em
qualquer posigio da linha. Tudo o que aparecer & direita das duas barras sera ignorado pelo
compilador. Exemplo:
a++; //Ineremento da variavel
Existem ocasides onde varias linhas de comentario sio necessa Nesse caso,
utilizamos os sinais de /* e */ para indicar inicio e fim de bloco de comentarios, como no
exemplo:
/* Programa de Exemplo — Esse programa nio faz nada.
Criado por Fabio Mengue em Outubro de 2000
Versao 1.0
+
Tipos de Dados
Java 6 uma linguagem que necesita que todas as variéveis tenham um tipo declarado.
Existem 8 tipos primitivos em Java, Seis deles so numéricos, um é 0 caracter e o outro & 0
booleano. Os tipos inteiros guardam valores numéricos sem parte fraciondria. Valores negativos
so permitidos.
Tipo Tamanho Faixa de Valores
Int 4 bytes -2.147.483.648 até
2.147.483.647
Short 2 bytes -32.768 até 32.767
Byte L byte -128 até 127
Long 8 bytes -9.223.372.036.854.775.808 até
9.223.373.036.854.775.807
2‘Na muioria das ocasides, o tipo int é suficiente. Nao se pode esquecer que como Java
portivel, esses valores so os mesmos para qualquer plataforma de hardware.
Os tipos primitivos que representam valores com ponto flutuante:
Tipo ‘Tamanho Faixa de Valores
Float 4 bytes “4/- 3.40282347E+38F
(aproximandamente 7 digitos
significativos)
Double 8 bytes +f
1.79769313486231570E+308
(5 digitos significativos)
Normalmente utilizamos o double na maioria das situagdes onde é necesséria a
representagao desse tipo de niimero, pois sua precis4o é maior.
‘Nota: Nimeros do tipo float aparecem com um sufixo F. (3.04F). Se o mimero aparecer sem o F,
ele é considerado double.
O tipo caracter serve para representar apenas uma letra ou mimero.
‘Tipo Tamanho a de Valores
Char 2 bytes O até 65536
Esse tipo serve para representar caracteres usando a tabela Unicode. Dessa tabela faz
parte a tabela ASCII e mais alguns caracteres especiais,
‘Nota: O tipo caracter é sempre representado por aspas simples (“h’). Caracteres representados
or aspas duplas (“h”) na verdade so strings.
0 tipo booleano pode assumir apenas dois valores, true ou false. Esse tipo & usado apenas
para testes logicos.
Tipo ‘Tamanho Faixa de Valores
Boolean 1 bit true ou false
Declaragio de Variiveis
A declaragao de varidveis em Java, como em varias outras linguagens, exige que o tipo
da variavel seja declarado. Voc@ inicia a declaragao indicando 0 tipo da varidvel e o nome
desejado, como no exemplo:
int a;
23byte b;
char ch;
Note que todas as declaracdes terminam com 0 ponto-e-virgula. Os nomes das varidveis
devem ser iniciados com qualquer letra, seguidas por uma seqiiéncia de letras ou digitos.
tamanho do nome da variavel ndo tem limites.
E possivel declarar varias variaveis em uma linha, bem como atribuir valores a clas na
declaragio, como nos exemplos abaixo:
int abs
int a= 10; (/ Isto é uma inicializaga0
Conversées Entre Tipos
Java nfo tem problemas para atribuir um tipo int para um double ~ ele vai tratar o valor
como double. Assim sempre que uma atribuigao for efetuada o tipo mais representativo sera
utilizado.
Entretanto, existem ocasides onde queremos representar o valor inteiro de um tipo
double, por exemplo. Assim, tonna-se necessario converter o tipo, em uma operagao chamada de
cast. Essa conversao nada mais é do que indicar 0 tipo desejado, como no exemplo:
double x = 9.345
int z = (int)x;
A varidivel z terd como valor o nimero 9.
As conversdes permitidas sem cast sao:
byte->short->int->long->float->double e char-> int
Constantes
‘Vocé pode definir constantes em Java utilizando a palavra reservada final. Essa palavra
indica que voé definiu 0 valor da uma varidvel e que esse valor nao pode ser modificado.
‘Normalmente as constantes sio definidas em caixa alta, como no exemplo:
final double TEMPERATURA = 25.4;
4Operadores
Os operadores aritméticos + - * / sfo utilizados para a adigao, subtraco, multiplicagio e
divisio. A divisio retorna resultado inteiro se os operadores forem inteizos, ¢ valores de ponto
flutuante em caso contrario. Se for necessirio ter 0 valor do resto da divisio, utilizamos 0 %
(fungdo mod).
E possivel utilizar operadores na atribuigtio das varidveis, como no exemplo:
intn=5;
inta=2*n; //a=10
Existe também a possibilidade de utilizar atalhos para operagdes:
xt=4i // equivalente ax
+45
A exponenciagao é feita por uma fungao da biblioteca matematica. Essa biblioteca tem
dezenas de operagdes especificas.
double y = Math pow (x, b); 1x € elevado a b (x")
Incremento e Decremento
uso de contadores em programas é muito comum, Existem maneiras de realizar
inerementos e decrementos em varidveis utilizando o sinal + € 0 --. Veja nos exemplos:
int a= 12;
at+ /faagora vale 13
uso do ineremento e do decremento depende da posicdo onde eles se encontram na
expresso, Existem ocasides em que quero a expresso calculada ¢ o valor seja incrementado
depois. Em outros casos, o valor deve ser incrementado e a expressio avaliada ao final.
Acompanhe 0 exemplo:
int m=7;
intn=7;
inta=2* ++m; ///a vale 16, m-vale 8
int b=2%n++; //bvale 14,n vale 8
25Operadores Relacionais e Booleanos
Esses operadores servem para avaliar expresses. Para verificar a igualdade entre dois,
valores, usamos o sinal == (dois sinais de igual).
‘Temos ainda os sinais de maior
0 operador usado para verificar a diferenga (no igual) é 0
(@), menor (<), maior on igual (=), menor ou igual (<
Existem operadores logicos AND (&&), OR (||).
Strings
Todos os outros valores que utilizamos em Java com exceeio dos tipos explicados acima
(tos primitivos) sio objetos. Um dos objetos mais utilizados € o String (com S maiisculo);
O String é uma sequencia de caracteres.
String
String oi
1/ String vazia. Note as aspas duplas.
“Bom dia”;
‘As strings podem ser coneatenadas, utilizando o sinal de +, como no exemplo:
String um = "Curso”;
String dois = “Java”;
String result = um + dois;
Nota: Uma String nao deve ser comparada com outra usando o sinal ==, pois elas sio objetos,
Existe um método especial para comparar objetos, utilizando 0 equals, Assim, a comparagao da
String a coma String b seria:
a.equals(b);
Nota 2: O objeto String em Java tem mais de 50 métodos diferentes.
Vetores e Matrizes
‘Vetores sio estruturas utilizadas para armazenar dados afins. Esses dados podem ser de
qualquer tipo, desde variaveis primitivas até objetos complexos.
‘Um vetor pode ser definido assim:
26in[] vetor = new int[100];
Aqui temos um vetor de 100 posigdes (de 0 a 99) de valores inteiros. Os elementos do
vetor podem ser acessados segundo stia posigio:
vetor[30]
E podemos iniciar seus valores na propria inicializagio, como abaixo:
int{] impares
2,3,5,7,9,11,13}
E possivel definir vetores de varias dimensdes. E muito usado em matemitica 0 conceito
de matriz, que em Java é definida como:
int{J[] matriz = new int{S][6];
E os valores sio acessados da mesma maneira que os vetores.
Controle De Fluxo Do Programa
Apresentamos aqui os comandos que nos permitem controlar o fluxo do programa e
expressdes condicionais em Java. Mas antes temos que aprender a delimitar blocos e conceituar
0 escopo
‘Um bloco nada mais é uma séries de linhas de codigo situadas entre um abre e fecha
chaves ( { } ). Podemos criar blocos dentro de blocos. Dentro de um bloco temos um
determinado escopo, que determina a visibiidade e tempo de vida de variaveis e nomes. Por
exemplo:
1
int x= 10;
1/ aqui eu tenho acesso a0 x
int z= 20;
1/ aqui eu tenho acesso ao xe a0 z
}
/ aqui eu tenho acesso ao x; 0 esta fora do escopo
i
Assim, 6 permitido a definigao de variéveis com mesmo nome, desde que elas nfo
estejam compartilhando o mesmo escopo. A definigao dos blocos ajuda a tornar o programa mais
legivel ¢ a utilizar menos meméria, além de indicar quais os comandos a serem executados pelas
instrugdes condicionais e os loop, que veremos a seguir:
27if (expresso)
comando ou { bloco }
else J/opcional
comando ou { loco} // opcional
Desvia 0 fluxo de acordo com o resultado da expresstio. A expressio pode ser algo
simples ou composto. O else ¢ opcional. Se for necessario mais de um comando, é necessirio
colocar o bloco das instrugdes entre ¢ }
return
© comando return serve para 2 propésitos: mostrar qual valor deve ser retornado do
método (se ele nilo for void) e para encerrar a execucio do método imediatamente.
Os comandos que utilizamos para executar a mesma porgio de cédigo varias vezes so
chamados de comandos de iterago, ou comandos de loop.
while (expressio)
comando ou { bloco }
A expresso é avaliada uma vez antes do comando. Caso seja verdadeira, 0 comando &
executado, Ao final do comando, a expressiio é avaliada novamente. Se for necessério mais de
um comando, é necessirio colocar o bloco das instrugdes entre { }
do
comando ou { bloco }
while (expressio);
O comando é executado, e a expresso é avaliada no final. A tinica diferenga entre 0 do-
while ¢ 0 while ¢ que no primeiro © comando é sempre executado pelo menos uma vez. Se for
necessirio mais de um comando, é necessario colocar o bloco das instrugdes entre { }
for (inicializacdo; expresso; passo)
comando ou { bloco }
‘Uma variivel é iniciada na parte de inicializagao. A expressio & testada a cada execugao
do comando, ¢ enquanto for verdadeira, a(s) instrugdo(es) contidas no bloco é (sao) executada(s)..
Ao final, passo é executado.
28Nota: E possivel a inicializagio de mais de uma varidvel e a execugdio de mais de uma instrugio
no passo, dividindo as instrugdes com virgulas, como abaixo
for (int i=0, j=1; i< 10 && j!=
[sit jh)
break
O comando termina a execucio de um loop sem executar 0 resto dos comandos, e forga a
sadia do loop.
continue
© comando termina a execugao de um loop sem executar o resto dos comandos, e volta
para o inicio do loop para uma nova iteragao,
switeh (varlivel)
{
case (valor): comando ou { bloco } break;
case (valor2): comando2 ou { bloco2 } break;
default: comando_final ow { bloco final }
O comando switch serve para simplificar certas situagdes onde existem varios valores a
serem testados. Assim, identificamos a varidvel a ser testada, e colocamos uma linha case para
cada possivel valor que a varidvel pode assumir. No final, nos é permitido colocar uma linha
default para o caso da variavel nfo assumir nenhum dos valores previstos. O break no final de
cada comando serve para evitar comparagGes initeis depois de encontrado 0 valor correto. Se for
necessirio mais de um comando, ¢ necessirio colocar 0 bloco das instrugdes entre { } .
Outras instrugdes
Ainda existem centenas de outras instrugdes que podem ser utilizadas em Java, A maioria
delas faz referéneia a métodos de objetos e classes, que existem para realizar operagdes
especificas
Mas nao precisamos nos limitar as fungdes definidas pela linguagem. Temos a
possibilidade de criar nossas proprias funedes, utilizando procedimentos simples para realizar
tarefas complexas (tradicionalmente chamadas de fungdes). Além disso, podemos ainda estender
a API, com classes especificas de outros fabricantes.
29Apéndice B - Objetivos do Desenho da Linguagem Java
Simples ~ A linguagem Java é na verdade uma verso mais “limpa” do C++. A idéia era
que a linguagem deveria evitar consumir um grande tempo para o treinamento de
programadores; entretanto, ela deveria utilizar as técnicas mais modernas de construgio de
software.
Orientada a Objetos ~ Hi trinta anos 0 conceito de orientagao a objetos existe na
programaco. Hoje em dia, ele é sinénimo de modernidade, eficiéncia e extensibilidade, em um
‘universo cujas expectativas mudam muito rapidamente.
Familiar ~ © Java se manteve 0 mais perto possivel do C-+r. Removendo suas
complexidades e mantendo sua sintaxe, é possivel a uma grande gama de programadores iniciar
diretamente a programaco nessa linguagem.
‘Robusta ~ Java foi criada para desenhar programas confidveis. O interpretador verifica
continuamente a execugao dos programas, protegendo o sistema de erros. A linguagem também
evita que vicios prejudiciais por parte dos programadores possam causar instabilidade no sistema
operacional. Nao é necessaria a alocagdo de meméria, e uma série de erros de bibliotecas podem
ser descobertos imediatamente, na propria compilacio.
‘Segura ~ A tecnologia do Java foi desenhada para utilizar extensivamente a rede e os
ambientes distribuidos. Nessas arquiteturas, seguranga é um dos parametros principais. Um
aplicativo em Java no pode ser invadido via rede, pois suas restrigdes de seguranga niio
permitem acessos nfio autorizados.
Neutralidade — Java foi criada para funcionar em uma grande variedade de plataformas
de hardware. seus bytecodes permitem a criag3o de um programa em qualquer plataforma e sua
execugdo em qualquer plataforma.
Portabilidade — A neutralidade de arquitetura é apenas um dos pontos que indicam a
portabilidade de um sistema. Além disso, o Java uniformiza os tipos de dados nas diferentes
arquiteturas, de modo que um inteiro num PC representa a mesma quantidade de bits em uma
estagdo de trabalho. Assim, um programa Java é totalmente independente de hardware e
software.
Alta Performance ~ A performance de um programa Java é relacionada estritamente a
performance do interpretador. A. JVM Java permite que se execute o cédigo do usuario na
miixima velocidade possivel; todas as outras tarefas ficam em segundo plano. Ainda assim, se for
necessirio uma performance ainda maior, é possivel compilar 0 bytecode para cédigo nativo da
mquina.
Multi-Tarefa ~ Sistemas orientados & rede necessitam executar varias tarefas ao mesmo
tempo. Java permite a construgio de um modelo onde podem ser executadas threads
concorrentes. Esse modelo tem controle de concorréneia, sincronizacao e monitoramento
presentes na propria linguagem. Além disso, o Java tem um sistema threadsafe que evita
qualquer tipo de conflito entre as varias tarefas.
30Apéndice C — Dicas para a Construcio de Classes
Sempre mantenha seus dados como private.
FE a dica principal. Se seus atributos forem todos public, vocé estar violando 0
encapsulamento. Voce vai necessitar de métodos para alterar os valores, 0 que da um poueo mais
de trabalho, mas a experigncia mostra que o formato dos dados pode ser alterado, mas a forma de
alterd-los muda muito pouco.
Sempre inicialize seus dados.
Java nfo fard a inicalizacao de varidveis locais para vocé. Nao contie nos valores padrio,
sempre prefira fazé-lo vocé mesmo.
Nio utilize muitos tipos basicos em uma classe.
A idéia aqui 6 substituir os tipos bisicos que sfo relacionados entre si por outras classes.
Como exemplo:
private String rua;
private String cidade;
private String estado;
private String cep;
Nesse caso, teremos uma maior legibilidade usando uma classe chamada endereco, que
contenha todos esses atributos.
‘Nem todos os atributos necessitam de métodos.
Imagine uma classe que represente os empregados da sua empresa. Voeé provavelmente
no necessita ter um método para alterar a data de contratagao de uma pessoa, uma vez que 0
objeto est construido. Entao isso pode ser resolvido no constructor, sem a necessidade de um
método,
Use definigdes padrao para suas classes.
Sempre use um pad. Isso torna muito mais facil a manutengdo e entendimento de
cédigo. Normalmente, o padrio usado em Java é
Escopo piblico
Escopo de pacote
Escopo privado
E em cada uma dessas segdes,
31Constantes
Métodos Estaticos
Instiineias de varidveis
Variiveis Estaticas
Divida classes que estdo muito complexas.
Essa dica é vaga, pois a complexidade depende de quem olha. Entretanto, se houver
oportunidade de dividir uma grande classe em duas ou mesmo trés, devemos aproveitar a
oportunidade. Mas claro que isso tem um limite: dividir sua aplicagio em 10 classes de | método
cada normalmente vai fazer seu programa ser mais lento.
Faga 0 nome de suas classes e métodos fazer sentido.
Assim como as varidveis devem ter nomes que representam 0 dado que elas contém,
classes devem seguir 0 mesmo prineipio. Uma convengao usada é que a classe deve ser um
substantivo seguido de um adjetivo ou de um gerindio. A convengao dos métodos propde que
eles devem ser iniciados por letras miniisculas, e cada palavra envolvida com 0 método tem sua
primeira letra maiiscula (como em converteTemperatura). Quando estamos falando de métodos
cuja fungdo é recuperar dados, iniciamos 0 método usando a palavra ser, e quando o método
recupera os dados, usamos ger (setSalario, getSalario).
32Apéndice D — Erros Mais Comuns e Suas Solugoes
Problemas de Compilador
Erro: Bad command or file name (Windows 95/98) ou
The name specified is not recognized as an internal or external
command, operable program or batch file (Windows NT)
Caso essa mensagem de erro apareca quando da execucdo do javac ou do java, isso quer
dizer que o seu sistema nao esta encontrando esses programas. O mais comum ¢ a falta da
informacao no PATH do computador.
Para solucionar o problema, procure ajuda no menu do sistema operacional relacionado a
como alterar ou adicionar elementos no PATH,
Erros de Sintaxe
Se vocé nao digitou corretamente alguma instrugao do seu programa, o compilador vai
indicar 0 erro. A mensagem normalmente mostra o tipo do erro, a linha onde o erro foi detectado,
0 eédigo naquela linha e a posigZo do erro na linha. Segue uma anostra:
testing java:14: °y expected.
System.out.printin("Input has " + count + " chars.
Lerror
O erro indica a falta de um “;" no final da linha,
As vezes podem ocorrer erros onde 0 compilador nio consegue entender o que vocé
pretendia, e mensagens de erro confusas so geradas. No exemplo abaixo, também temos a falta
de um *;", mas as mensagens so um tanto quanto diferentes:
‘while (System in.read()
count-+
System.out.println("Input has " + count + " chars.
-l)
‘Ao processar esse codigo, teremos duas mensagens de erro:
testing.java:13: Invalid type expression.
count++
testing java: 14: Invalid declaration
System.out.println("Input has " + count +" chars.");
2 errors
33© compilador processa 0 count+, ¢ como niio hi o sinal , ele pensa que ainda esta
avaliando uma expresso. Assim temos a primeira mensagem. A segunda acontece quando 0
compilador tenta “juntar” a primeira expresso com a segunda, e ao perceber que nao existe
sentido, apresenta a outra mensagem,
Quando erros sintaticos acontecem, o bytecode nao é gerado. E necessirio corrigir 0
problema e tentar novamente,
Erros Semanticos
Além dos erros sintaticos, existem também os erros semanticos. Por exemplo, se vooé
tentou incrementar uma varivel que nao foi iniciada:
testing,java:13: Variable count may not have been initialized.
count
testing.java:14: Variable count may not have been initialized.
System.out.printin("Input has " + count + " chars.");
2 errors
Erros de Execucao
‘Um erro comum ¢ tentar executar uma classe utilizando-se da extensdo. Quando quero
compilar 0 programa, fago
javac MeuProg.java
Quando vou exeeuté-lo, fago
java MeuProg
‘Nao é necessiria a extensfio. Se o usuirio a especificar, uma mensagem do tipo
Can't find class MeuProg.class
Outro problema comum é a criagao de uma classe sem o método main(). Toda classe dita
“executavel” deve possuir esse método. A falta dele gera uma mensagem assim:
In class MeuProg: void main(String argv(]) is not defined
E por tiltimo, no esquecer que é necessirio recompilar programa a cada alteraglo. Se
‘vocé altera seu cédigo mas parece que isso nfo surte efeito, o problema pode estar ai
34Bibliografia
btp:/java. sun. com/does/white/langenv!
Thinking In Java — Eckel, Bruce. Prendice Hall PTR. (www.phprt.com, www. bruceeckel.com)
Just Java — Linden, Peter Van Der. Makron Books, SunSoft Press.
Core Java 2 — Fundamentals ~ Horstmann, Cay 8, ~ Cornell, Gary. The Sun Microsystems Press.
Proibida a alteragao, reprodugio e cépia de parte deste material para qualquer finalidade sem a
permissao do Centro de Computagao da Unicamp,
Autilizagio deste material é permitida desde que conste a autoria do mesmo.
¥ 2002 Centro de Computagao da Unicamp.
35