Вы находитесь на странице: 1из 145

JAVA com Orientao a Objetos

Copyright Editora Cincia Moderna Ltda., 2012


Todos os direitos para a lngua portuguesa reservados pela EDTORA CNCA
MODERNA LTDA.
De acordo com a Lei 9.610, de 19/2/1998, nenhuma parte deste livro poder ser
reproduzida, transmitida e gravada, por qualquer meio eletrnico, mecnico, por
fotocpia e outros, sem a prvia autorizao, por escrito, da Editora.
Paulo Andr P. Marques
Aline Vieira Marques
Amanda Lima da Costa
Paulo Vermelho
Daniel Jara
Eveline Vieira Machado
Vrias aparecem no decorrer deste livro. Mais do que
simplesmente listar esses nomes e informar quem possui seus direitos de
explorao, ou ainda imprimir os logotipos das mesmas, o editor declara estar
utilizando tais nomes apenas para fins editoriais, em benefcio exclusivo do dono da
Marca Registrada, sem inteno de infringir as regras de sua utilizao. Qualquer
semelhana em nomes prprios e acontecimentos ser mera coincidncia.
!"#$%&'!
COELHO, Alex.
JAVA com Orientao a Objetos
Rio de Janeiro: Editora Cincia Moderna Ltda., 2012.
1. Informtica, 2. Programao de Computador Programas e Dados
Ttulo
SBN: 978-85-399-0236-1 CDD 001.642
005
)$+
+,-./0
1,1/234+5647864
#938:33487...3;<938:33487.=5.
7!$$>$+%+2
???+$+%+248;83
Agradecimento
Inicialmente agradeo a Deus por me dar foras e condies de realizar este
trabalho. Agradeo ainda a meus amigos, todos esses anos trabalhando com
vocs s me fzeram uma pessoa melhor. Em especial, a minha famlia, a mi-
nha querida esposa Fernanda, a meu pai Alexandre, a minha me Leonidia, a
meus irmos e a meus queridos sobrinhos. Obrigado a todos pelo apoio to
importante que me fornecem.
Introduo
Caro leitor, um prazer apresentar para vocs a tecnologia Java e os
conceitos vinculados programao orientada a objetos. A ideia central deste
livro garantir aos estudantes da rea de Cincia da Computao e afns uma
forma alternativa de conhecer essa tecnologia e o paradigma que atualmente
dominam parte do mercado. O livro resultado de anos de experincia tra-
balhando com disciplinas ligadas rea de programao, no qual foram apli-
cados conhecimentos da tecnologia Java, assim como a prestao de servios
que envolviam tais elementos. Ao fnal da leitura deste livro, espera-se que o
leitor tenha conhecimento sufciente para desenvolver e entender as aplica-
es que utilizam as diversas caractersticas que norteiam a tecnologia Java.
Nos ltimos anos, a programao Java tornou-se uma das mais po-
pulares do mercado e tem feito com que os profssionais, que dominam seus
preceitos, passem a ser mais valorizados e at mesmo disputados por empre-
sas, considerando a carncia existente para tais nichos de mercado. Tal fatia
de mercado, dominada pela tecnologia Java, deve-se em sua maioria s suas
potencialidades, uma vez que so aplicaes que podem estar presentes em
desde eletrodomsticos, aparelhos celulares, carros at as mais simples, tais
como as existentes na Web. Assim, a linguagem Java tem caractersticas que
a tornam diferenciada, sendo de grande importncia no que tange a criao
de software.
Diante disso, foi montado um roteiro neste livro, no qual se priori-
zou garantir ao leitor uma viso ampla de todos os conceitos importantes
para sua iniciao na programao com a tecnologia Java. No Captulo 1, so
apresentados os fundamentos da programao com a linguagem Java, consi-
derando elementos importantes, como, por exemplo, as palavras reservadas,
estrutura bsica de um programa Java e as vantagens e desvantagens de uti-
lizar a tecnologia mantida atualmente pela Oracle.
No segundo captulo, comearemos a ver os fundamentos do paradig-
ma de programao orientada a objetos, considerando passo a passo cada
conceito, fazendo com que o leitor entenda os aspectos bsicos e necessrios
para a continuidade no aprendizado, como, por exemplo, a ideia de classe
e objetos na tecnologia Java. Continuando, no Captulo 3, so trabalhadas
VI JAVA com Orientao a Objetos
as estruturas mais avanadas da programao orientada a objetos, fazendo
com que o leitor consiga dar mais um passo no aprendizado do paradigma e
da tecnologia Java, sendo considerados conceitos, tais como construtores,
destrutores e outros.
Assim como no Captulo 3, no Captulo 4 continuaremos a trabalhar
com os elementos mais avanados da programao orientada a objetos, tais
como os importantssimos conceitos de herana e polimorfsmo, que devem
ser vistos e tratados como elementos-chave da tecnologia Java e do paradig-
ma de programao orientada a objetos. Claro que devemos lembrar sempre
do conceito de portabilidade oriundo da estruturao muito bem pensada da
tecnologia Java como um importante diferencial.
Em nosso quinto captulo, ser apresentado a voc, leitor, outros ele-
mentos da tecnologia Java, no qual iremos lidar com ferramentas teis para
o dia a dia de um programador. Trabalharemos nesse captulo com bibliote-
cas matemticas, nmeros randmicos ou ainda veremos como lidar com da-
tas, manipular strings e assim por diante. Logo, sero consideradas diversas
possibilidades e vantagens que podem ser exploradas, o que com certeza ir
auxiliar os programadores a dominarem tais conceitos.
O Captulo 6 tem por objetivo apresentar o trabalho de tratamento de
excees, sendo de extrema importncia seu entendimento, j que se trata
de um elemento central nas atividades que exigem a manipulao de dados,
seja em arquivos texto, seja mesmo em um banco de dados. Este tema de
grande importncia, pois a tecnologia Java possibilita, em sua programao,
que sejam tratados eventuais problemas ou erros antes que estes venham a
realmente ocorrer, permitindo que sejam tomadas as devidas providncias
para uma autorrecuperao do software durante a execuo. Podemos en-
xergar isso como uma preveno para os possveis erros nos trechos mais
suscetveis a problemas.
Finalizando, em nosso stimo captulo, comearemos a trabalhar com
a manipulao de arquivos, lidando com o processo de criao, persistncia
de dados e leitura de dados utilizando classes e interfaces disponibilizadas
pela tecnologia Java.
Amigo leitor, em todo o livro tentarei manter uma linguagem mais
simples, clara e cotidiana, na qual o principal objetivo e descomplicar o en-
tendimento dos diversos contedos mencionados. Recomendo que sejam
feitos os exemplos disponibilizados, que foram pensados considerando os
aspectos que devem acompanh-lo em sua jornada. Logo, vamos ao que inte-
ressa e tenha uma tima leitura.
Sumrio
Captulo 1
Conceitos bsicos da tecnologia Java..........................1
1.1 Fundamentos da tecnologia Java ....................................................1
1.2 Estrutura e conceitos bsicos da programao Java .......................5
1.3 Entrada de dados ........................................................................... 13
1.4 Estruturas de controle ................................................................... 15
1.5 Arrays e matrizes ........................................................................... 21
1.6 Funes. ......................................................................................... 25

Captulo 2
Programao orientada a objetos.............................29
2.1 Conceitos da programao orientada a objetos ........................... 30
2.1.1 Classe .......................................................................................... 32
2.1.1.1 Qualifcadores de acesso ......................................................... 33
2.1.1.2 Pacotes ..................................................................................... 35
2.1.1.3 Import ...................................................................................... 36
2.1.1.4 Comentrios ............................................................................ 37
2.1.2 Atributos ..................................................................................... 38
2.1.3 Mtodos ...................................................................................... 39
2.1.3.1 Identifcador this ..................................................................... 40
2.1.4 Mensagem e modularizao de cdigo ...................................... 41
2.1.5 Objeto ou instanciao ............................................................... 44
Captulo 3
Construtores, destrutores e encapsulamento............51
3.1 Construtores .................................................................................. 51
3.2 Destrutores e Garbage Collector (Coletor de Lixo) ...................... 54
3.2.1 Garbage Collector ....................................................................... 55
3.3 Encapsulamento ............................................................................ 56
VIII JAVA com Orientao a Objetos
Captulo 4
Herana, polimorfsmo e interface...........................63
4.1 Herana .......................................................................................... 63
4.2 Polimorfsmo ................................................................................. 69
4.2.1 Sobrecarga .................................................................................. 70
4.2.2 Cast ............................................................................................. 71
4.2.3 instanceof ................................................................................... 73
4.2.4 Sobrecarga de construtores ....................................................... 74
4.2.5 Redefnio ................................................................................. 74
4.3 Interface ......................................................................................... 76
4.3.1 Herana mltipla ........................................................................ 83
Captulo 5
Ferramentas teis para o dia a dia............................85
5.1 Manipulao de strings ................................................................. 85
5.1.1 Construtores da classe String .................................................... 86
5.1.2 Outros mtodos .......................................................................... 86
5.2 Data e hora ..................................................................................... 88
5.3 Operaes matemticas ................................................................ 93
5.4 Trabalho com vetores especiais .................................................... 95
5.4.1 Classe Vector............................................................................... 96
5.4.2 Classe HashMap ......................................................................... 98
5.4.3 Classe Arrays .............................................................................. 99
Captulo 6
Tratamento de excees e entrada de dados............101
6.1 Tratadores de excees ................................................................ 102
6.1.1 Trows ....................................................................................... 106
6.2 Entrada de dados ......................................................................... 107
Sumrio IX
Captulo 7
Manipulao de arquivos de texto ..........................111
7.1 Arquivos ....................................................................................... 111
7.2 Entradas ....................................................................................... 112
7.3 Sadas ........................................................................................... 114
7.4 Streams ........................................................................................ 116
7.5 Acessos aleatrios em arquivos .................................................. 118
Referncias Bibliogrfcas................121
Apndice I
Instalao do Sdk e Confgurao das Variveis de Ambiente
(Windows Xp) .................................................................................... 123
Apndice II
JAVADOC ........................................................................................... 129
Captulo 1
Conceitos bsicos da tecnologia Java
Quando falamos em programao, no h como deixar de vislumbrar
tal atividade como sendo um elemento central na vida de um profssional
ligado rea de Cincia da Computao e afns. No cotidiano, o mnimo que
se espera de um profssional de TI que este domine os elementos e os con-
ceitos bsicos, aplicados a uma determinada linguagem de programao.
O mercado atualmente oferta uma infnidade de possibilidades
de linguagens de programao para a construo de softwares, indo das
mais complexas e trabalhosas at as mais simples. Existem, entre essas
linguagens de programao, vrias que so bem aceitas no mercado, que
consideram obviamente variveis estratgicas, tais como preo, velocidade
da curva de aprendizagem e desenvolvimento. Entre tais, a linguagem e a
plataforma de desenvolvimento de aplicaes Java vm no decorrer dos anos
tornado-se uma das mais utilizadas e aceitas no mercado. Isso, graas ao seu
potencial tecnolgico combinado ao paradigma de orientaes a objetos,
alm de considerar os custos envolvidos.
O Java uma tecnologia que foi originalmente desenvolvida pela Sun
Microsystem em meados de 1995, sendo regida pela GPL (General Public
License). A Oracle Corporation adquiriu todos os direitos pela Sun e obvia-
mente, tambm sobre a tecnologia Java. Para a maioria dos autores e desen-
volvedores, a tecnologia Java pode ser defnida como:
simples, distribuda, interpretada, robusta, segura, de arquitetura
neutra, porttil, multifunes e dinmica.
Ao considerar tais perspectivas, o objetivo deste captulo apresentar
e preparar o leitor para compreender e aplicar os fundamentos bsicos da tec-
nologia Java. Estes so teis e de extrema importncia para a compreenso
dos demais conceitos vinculados plataforma de desenvolvimento mantida
pela Oracle e que sero considerados nos prximos captulos de nosso livro.
1.1 Fundamentos da tecnologia Java
A maioria dos autores restringe-se a citar que o Java consiste em uma
2 JAVA com Orientao a Objetos
linguagem de programao orientada a objetos baseada na sintaxe da lingua-
gem de programao C. Porm, podemos ir alm disso ao citar que o Java
uma plataforma tecnolgica que possui diversas caractersticas que o merca-
do considera como importante e que devido a isto, tem garantido uma fatia
considervel das aplicaes desenvolvidas com essa tecnologia. Com certeza,
pode-se afrmar que a caracterstica que mais se destaca neste processo e a
torna diferenciada diante das demais linguagens consiste na portabilidade
dos sistemas desenvolvidos com o Java.
Entende-se portabilidade como, nada mais nada menos, a indepen-
dncia de plataforma - no caso, o sistema operacional (Windows, Linux,
Solaris, MAC OS) e o hardware, no qual os softwares sero executados. Tal
caracterstica nasce do fato da estrutura das aplicaes desenvolvidas com a
tecnologia Java ser inicialmente compilada e depois, interpretada. Indo um
pouco mais alm no entendimento, o ponto central desse processo esta na
gerao do bytecode, tambm conhecido como arquivo com extenso .class.
Este obtido ou gerado por meio da compilao do cdigo-fonte dos arqui-
vos java puros ou de extenso .java, que sero interpretados futuramen-
te. importante mencionar que com isso, graas ao fato da tecnologia Java
possuir para cada plataforma (sistema operacional + hardware) uma Mqui-
na Virtual Java, tambm conhecida como Java Virtual Machine (JVM), este
processo torna todas as aplicaes Java portveis entre si. Assim, quem ir
preocupar-se com as especifcidades de cada plataforma no mais o progra-
mador, mas sim a JVM fornecida.
Essa mquina virtual capaz de interpretar os arquivos compilados
(.class), iniciando a execuo do software, independentemente da platafor-
ma na qual o programa foi construdo. Por exemplo, uma vez compilado nos-
so programa utilizando o sistema operacional Windows em uma estrutura de
hardware da famlia x86, caso queiramos que nosso programa rode em uma
mquina com o sistema operacional Linux, no ser necessrio realizar uma
nova compilao para este software, como acontece com as outras tecnolo-
gias e linguagens de programao. Neste contexto, ser apenas necessria a
presena da JVM para o Linux instalado, o que hoje algo natural nas m-
quinas comercializadas.
Como o leitor pode reparar, esta caracterstica mpar s possvel gra-
as existncia da JVM, que fornecida pela tecnologia Java e na qual cada
sistema operacional possui uma especfca, distribuda pela mantenedora da
tecnologia. A JVM pode ser vista como sendo uma camada intermediria
Captulo 1 - Conceitos bsicos da tecnologia Java 3
entre sua aplicao e a plataforma que executar seu programa. A maioria
dos computadores atuais j vendida com algum tipo de Mquina Virtu-
al Java e isso tem garantido uma popularizao ainda maior das aplicaes
Java, o que nos faz crer que, em sua maioria, qualquer aplicao Java funcio-
nar corretamente nos computadores obtidos atualmente no mercado. Para
uma melhor visualizao do processo citado como portabilidade, a Figura
1 demonstra o modelo computacional defnido pela tecnologia Java e suas
aplicaes. Vamos conferir?
Figura 1: Estrutura de compilao e execuo de programas no Java.
Como defnio, podemos mencionar que um programa Java consis-
te em um conjunto de instrues, que a JVM responsvel por interpretar
e dessa forma, garantir a independncia de plataforma na qual o programa
foi construdo e ser executado. Isto , basta que haja uma implementao
de uma mquina virtual para a plataforma ser utilizada. O termo platafor-
ma, como j vimos, normalmente no meio computacional defnido como a
combinao de sistema operacional mais hardware. Porm, para a plataforma
Java, ela defnida somente com o software, por isso o conceito de mquina
virtual.
A plataforma Java possui dois componentes que precisamos conhecer
quando a adquirimos, sendo:
4 JAVA com Orientao a Objetos
Mquina Virtual Java (JVM): A mquina imaginria que implemen-
tada por meio da emulao em um software executado em uma mquina real
e que fornece as especifcaes da plataforma de hardware para a qual todo o
cdigo Java est compilado. A JVM faz parte do ambiente de execuo Java,
mais popularmente conhecido como JRE (Java Run-Time Environment);
Interface para Desenvolvimento de Aplicaes (API Java): Trata-se
das interfaces de desenvolvimento para a utilizao na criao de aplicaes
Java, no caso so as bibliotecas para a criao de programas que a prpria lin-
guagem Java fornece, disponibilizados por meio do JDK (Java Development
Kit) ou como vem sendo disponibilizado nos ltimos anos como SDK (Source
Development Kit).
Para o desenvolvimento de aplicaes Java, necessrio que se tenha
instalado no computador o SDK. Desta forma, obtenha uma cpia na pgina
ofcial da Oracle e instale em seu computador.
O Apndice deste livro contm mais informaes sobre
o processo de instalao do pacote SDK, assim como a conf-
gurao das variveis de ambiente necessrias para a correta
utilizao do conjunto de ferramentas da tecnologia Java.
Aps a correta instalao e confgurao das variveis de ambiente
do SDK, podemos usar um editor de texto qualquer para a construo do
cdigo de nosso programa Java. Porm, existem diversos ambientes de de-
senvolvimento, tambm conhecidos como IDE (Integrated Development
Environment), para a programao Java, sendo que os mais utilizados no
mercado so: Eclipse, NetBeans e JBuilder.
Como nossa inteno consiste no aprendizado da linguagem Java, no
nos apegaremos a nenhuma IDE, o que deixa voc, leitor, livre para a uti-
lizao ou no de uma dessas ferramentas de desenvolvimento, sendo que
apenas um editor de texto ser sufciente para concluir o aprendizado deste
livro.
Um aspecto importante a ser citado aqui que a linguagem Java pos-
sui diferentes tipos de programas, sendo que a classifcao feita por meio
da modalidade X localizao de execuo dos mesmos. Assim, esses progra-
mas podem ser defnidos como: applications, applets e servlets. Nesta unida-
de, somente trabalharemos com as applications no console, ou seja, prompt de
comando, seja Windows, seja Linux.
Captulo 1 - Conceitos bsicos da tecnologia Java 5
1.2 Estrutura e conceitos bsicos da programao Java
Agora, vamos ao que interessa. Nesta seo do livro, vamos aprender
como so construdas as estruturas bsicas para os programas escritos na
linguagem Java, alm de conhecer os conceitos mais bsicos da programao
com a tecnologia. O primeiro detalhe que deve ser considerado na linguagem
consiste no fato de que todo programa Java uma classe, independentemen-
te das trs possveis modalidades dos programas Java citadas anteriormente
(Applications, Applets e Servlets). A estrutura bsica sempre a mesma: uma
classe. Um programa Java organizado em arquivos de texto com a exten-
so .java e cada arquivo pode conter vrias classes, mas usualmente tere-
mos apenas uma. Aqui, temos uma considerao importante e que voc no
deve esquecer jamais:
O nome do arquivo da classe java deve possuir exata-
mente o mesmo nome que foi dado internamente classe,
pois a mquina virtual procura a classe por meio do nome do
arquivo.
Uma metodologia que pode auxili-lo a entender a tecnologia Java
neste momento consiste na utilizao de analogias com outras linguagens
de programao, das quais voc j tenha conhecimento e domnio. Ento,
vamos a elas! Se fssemos realizar uma comparao bsica, poderamos dizer
que as classes no Java podem ser comparadas s famosas units do Pascal. J
para os adeptos do C e C++, a estrutura de nossos programas praticamente
ser a mesma, uma vez que a tecnologia Java est baseada em tais lingua-
gens. Ainda, veremos mais frente em nossos captulos que os atributos no
Java so como as variveis existentes em Pascal e C, e os mtodos das classes
Java seriam os procedimentos e as funes da linguagem C e Pascal. Vrios
destes aspectos citados sero considerados quando estivermos tratando do
conceito de orientao a objetos.
Outro detalhe a ser considerado a defnio de blocos de cdigo que,
no Java, so defnidos com a utilizao de { e }, assemelhando-se assim
ao C ou C++, diferentemente dos elementos em Pascal, que utilizam no caso,
BEGIN e END. Por enquanto, preocupe-se apenas em entender como
os blocos so defnidos, sendo de extrema importncia para comearmos a
6 JAVA com Orientao a Objetos
entender os conceitos fundamentais para a construo de programas simples
com a tecnologia Java.
Ento, diante disso, vamos ao que interessa. Chegou a hora de desen-
volvermos nosso primeiro programa em Java. Transcreva o contedo abaixo
para um editor de texto simples, tal como o notepad do Windows ou mesmo
o Vi do Linux. Por enquanto, siga o exemplo conforme apresentado, digi-
tando como pode ser observado na primeira coluna, visto que a linguagem
Java case sensitive, ou seja, existem diferenas entre as letras maisculas e
minsculas em sua compilao e interpretao. A seguir, faremos uma anli-
se do que foi feito em nosso primeiro programa.
//Classe PrimeiroPrograma.java
class PrimeiroPrograma{
public static void main (String arg []){
System.out.println(Ol leitor);
}
}
Agora que voc j construiu seu primeiro programa em Java e consi-
derando o que j foi citado anteriormente neste captulo, salve seu programa
lembrando que o nome do arquivo Java deve ser necessariamente igual ao
nome de declarao da classe - no caso especfco, o arquivo deve ser salvo
como PrimeiroPrograma.java. Salve o arquivo tomando o cuidado neces-
srio para assegurar que a extenso .java seja garantida por seu editor de
textos, uma vez que eles podem manter a extenso .txt e isso impedir a
compilao e a interpretao de seu programa.
Feito isso, vamos explicao de nosso programa, entendendo o c-
digo apresentado. Para que voc tenha um programa executvel construdo
com a linguagem Java, sua classe deve sempre possuir um mtodo especf-
co, que caracteriza a classe como uma aplicao que a Mquina Virtual Java
dever interpretar no momento da execuo do programa. Todo programa/
classe Java que possuir a funo executvel ou, como veremos nos captulos
seguintes, o mtodo executvel com a assinatura public static void main
(String[] args){ } apresentada na linha 3 de nosso cdigo anterior, ser
considerado um programa executvel pela JVM.
Captulo 1 - Conceitos bsicos da tecnologia Java 7
Logo, este trecho ser executado automaticamente quando for encon-
trado no programa submetido maquina virtual. Um detalhe importante
que deve ser comentado nesse trecho trata-se do vetor (array) String[]
args. Esse trecho presente na assinatura de nossa funo executvel pode
conter parmetros, que foram passados pela linha de comando na execuo
de nosso programa. Demonstraremos isso a seguir.
Outro detalhe a ser destacado e que voc deve reparar no cdigo apre-
sentado, est no fato de que, por conveno, ou seja, algo aceito por todos
os programadores Java, os nomes das classes no Java so sempre iniciados
com letra maiscula e, caso venham a ser compostos, cada nova palavra ser
iniciada novamente com uma letra maiscula, defnindo seu incio. Note que
isso feito em nosso cdigo anterior e, diante disso, passe a adotar em seus
programas Java. Na quarta linha de nosso primeiro programa, apresentada
a linha System.out.println(Ol leitor);, que nada mais faz do que reali-
zar a impresso em console. Esse comando informa ao sistema (System) que
ser realizada uma operao de sada (out), sendo que tal operao consiste
em uma impresso com quebra de linha (println). Existem outras possibili-
dades de realizar a impresso em console Java e estaremos lidando com elas
no momento certo. Ento, memorize a linha demonstrada, pois sempre ire-
mos utilizar essa linha de cdigo quando quisermos realizar a impresso em
console em nossos prximos programas.
Certo pessoal, at aqui conseguimos vencer uma parte importante de
nosso primeiro captulo, considerando que os aspectos citados so comuns a
qualquer programa Java que voc venha a construir de agora em diante. Mas,
est faltando visualizarmos o resultado de nosso primeiro programa. Para
isso. teremos de compilar e interpretar nosso programa e, logo, necessitamos
de outras ferramentas.
Existem dois comandos bsicos que a tecnologia Java fornece por
meio do JDK para tais funes, sendo: javac e java, respectivamente. Tais
comandos s funcionaro em seu prompt de comando, como, por exemplo, o
DOS do Windows, depois de defnidas as variveis de ambiente, para que os
comandos estejam disponveis em qualquer caminho de seu sistema opera-
cional, sendo:
JAVA_HOME: Deve conter o caminho da pasta, na qual foi instala-
do o SDK, ou seja, o local onde possui todas as ferramentas e APIs
bsicas fornecidas pela tecnologia Java em seu computador;
8 JAVA com Orientao a Objetos
CLASSPATH: Deve conter o caminho no qual esto localizadas as
bibliotecas dos programas que voc est utilizando. Por padro,
o valor desta varivel apenas ., que signifca que as bibliote-
cas utilizadas esto na mesma pasta da aplicao que voc est
desenvolvendo. Caso seja necessrio, incremente a essa varivel
os caminhos nos quais existam outras APIs importantes para o
desenvolvimento de sua aplicao, que podem ter sido adquiridas
na Internet, por exemplo.
Para que voc obtenha maiores informaes sobre a criao de vari-
veis de ambiente, disponibilizamos, ao fnal deste livro, no ANEXO I, um
tutorial sobre o assunto. Alm disso, podem ser encontrados na Internet di-
versos tutoriais sobre o assunto, sendo que sempre devemos levar em con-
siderao o sistema operacional a ser utilizado no momento do desenvolvi-
mento e da confgurao.
Uma vez que o JDK est instalado corretamente e foram defnidas
as variveis de ambiente, estamos prontos para compilar e executar nosso
primeiro programa. Assim, digite os comandos apresentados abaixo em um
prompt de comando do seu sistema operacional, considerando que no prompt,
devemos estar no diretrio no qual so mantidas nossas classes. Em nosso
exemplo, a classe PrimeiroPrograma.java est no diretrio c:/>programas.
javac PrimeiroPrograma.java
java PrimeiroPrograma
O primeiro comando apresentado consiste no javac que ir realizar a
compilao de sua classe. J o segundo comando apresentado, java, ir reali-
zar a interpretao do bytecode gerado por meio da compilao, conforme a
estrutura apresentada na Figura 1.
Certo! Se tudo ocorreu conforme o esperado, ser impresso o texto
Ol leitor, como apresentado na imagem a seguir.
Captulo 1 - Conceitos bsicos da tecnologia Java 9
Caso o leitor tenha dvidas sobre como realizar a navegao nos di-
retrios de seu computador, indicamos a leitura de qualquer tutorial que
auxilie na manipulao de comandos na linha de comando de seu sistema
operacional.
Mas, outro ponto importante na construo de uma aplicao no Java,
ou seja, na construo das classes e que deve ser considerado para darmos
um passo adiante em nosso aprendizado consiste na defnio das variveis
de uma classe Java. Em muitos momentos, conforme j mencionamos, as
variveis na linguagem Java aparecero nos textos, livros e tutoriais, sendo
tratadas como atributos. Logo, qual a diferena entre atributos e variveis?
A diferena entre eles que um atributo est intrinsecamente ligado
s caractersticas da classe, ou seja, descreve algo ligado ao contexto ou
ideia central qual a classe est relacionada ou preocupa-se em descrever.
Um exemplo seria um atributo para manter os dados de RG de uma pessoa.
J as variveis no precisam ser aplicadas necessariamente a um contexto da
classe, como, por exemplo, em uma varivel auxiliar para o comando de re-
petio FOR ou mesmo uma constante. Por enquanto, no se preocupe com
isso, pois no decorrer da disciplina, essa diferena se tornar mais clara e
logo voc saber diferenciar tais elementos de programao com base nos
paradigmas da orientao a objetos.
Em continuidade ao nosso aprendizado sobre os conceitos bsicos da
tecnologia Java, vamos por a mo na massa e criar nosso segundo progra-
ma, utilizando o armazenamento em memria com variveis. Transcreva o
cdigo a seguir para um editor de texto, assim como fzemos em nosso pri-
meiro programa. Depois disso, compile e execute-o por meio dos comandos
javac e java, respectivamente, em um prompt de comando de seu sistema
10 JAVA com Orientao a Objetos
operacional, conforme realizado no exemplo anterior. No se esquea: Para
que voc consiga executar tais comandos seguido do nome de seu programa,
aqui SegundoPrograma.java, voc deve estar localizado no diretrio no qual
a classe se encontra, no caso onde foi salva. Fique atento tambm ao fato
mencionado de que o nome de nosso arquivo Java deve ser igual ao da classe
- neste exemplo, nosso arquivo Java deve ser nomeado como SegundoPro-
grama.java.
// SegundoPrograma.java
class SegundoPrograma{
public static void main (String arg []){
int a = 5;
a = 5+10;
System.out.println(O valor :+a);
}
}
No cdigo de nosso segundo programa, comeamos a manipular o ar-
mazenamento na memria voltil, ou seja, a criao de variveis. No progra-
ma, foi inicialmente criada uma varivel do tipo inteiro a, que recebe uma
atribuio de valor, no caso o valor 5. Depois, na quarta linha de nosso se-
gundo programa, feita uma operao cujo resultado armazenado na mes-
ma varivel a, que impressa na linha seguinte. Note que, em regra, quando
se quer defnir variveis, constantes e mesmo atributos no Java, como ve-
remos nos conceitos de orientao a objetos, em primeiro lugar voc deve
informar o tipo de dado que ser mantido, no caso String, int ou qualquer
outro tipo de dados, sendo ele primitivo ou no. Depois, dado o nome de
acesso varivel e fnalmente, atribumos um valor inicial ou no, conforme
apresentado a seguir.
Tipo varivel = ValorInicial;
fnal tipo CONSTANTE = Valor;
Captulo 1 - Conceitos bsicos da tecnologia Java 11
Na segunda linha de nossa caixa anterior, a palavra reservada fnal
determina que tal varivel no sofrer alteraes, sendo mantido o valor atri-
budo no momento de sua declarao, consistindo assim em uma constante
para todo o programa, enquanto este estiver em execuo. Outro detalhe
importante que voc deve saber e nunca mais esquecer que o Java uma
linguagem de programao fortemente orientada a objetos e com exceo
dos tipos primitivos, qualquer coisa no Java consiste em uma classe/ob-
jeto. Devemos destacar que existem vrias palavras que so reservadas pela
linguagem Java e elas no podem ser utilizadas em vrios momentos em seu
programa, como, por exemplo, na defnio de nome dos atributos, classes
ou outros elementos. Tais palavras reservadas so apresentadas na Tabela 1
a seguir.
Tabela 1. Palavras reservadas.
abstract double int strictfp
boolean else interface super
break extends long switch
byte QDO native synchronized
case QDOO\ new this
catch RDW package throw
char for private throws
class goto protected transient
const if public try
continue implements return void
default import short volatile
do instanceof static while
Vrias dessas palavras reservadas so elementos naturais em outras lingua-
gens de programao, principalmente na linguagem C. Assim, o leitor que j
possui algum domnio do C ou C++, no ter difculdades com a manipulao
das palavras reservadas no Java.
Outro ponto importante no Java que devem ser considerados, uma
vez que so extremamente necessrios, os operadores matemticos. No caso,
utilizamos os operadores +, -, * e / para realizarmos as operaes matemti-
cas bsicas, ou seja, soma, subtrao, multiplicao e diviso, respectivamente.
No Captulo 5, iremos trabalhar com a API Math, que possibilitar a voc
realizar operaes matemticas mais complexas. Devemos ainda considerar
12 JAVA com Orientao a Objetos
outros operadores que so de suma importncia para a linguagem Java, es-
tando relacionados principalmente ao processo lgico dentro de nossos pro-
gramas, como no caso dos testes condicionais, sendo que os mais utilizados
so listados no quadro da Tabela 2.
Tabela 2. Operadores no Java.
OPERADORES DESCRIO
== gualdade
!= Diferente
> Maior
< Menor
>= Maiorigual
<= Menorigual
! Negao
&& Elgico
|| Oulgico
Entre as vrias consideraes que podem ser feitas quanto ao uso dos
operadores, devemos destacar ainda a outra funcionalidade atribuda ao ope-
rador +, que consiste na concatenao de Strings, como pode ser observado
em nosso prximo exemplo. Conforme mencionado anteriormente e como
pode ser vislumbrado na Tabela 1, uma String no um tipo primitivo, mas
sim uma classe. Logo, voc deve estar perguntando-se: Ento, qual a dife-
rena entre um tipo primitivo e uma classe? Existem vrias diferenas que
poderiam ser citadas, mas como diversas delas esto relacionadas ao concei-
to de orientao a objetos, do qual ainda no tratamos, vamos prender-nos
inicialmente diferena de que uma classe geralmente agrega funcionalida-
des das quais os tipos primitivos no dispem.
Essas funcionalidades, no caso, so denominadas de mtodos e que co-
nheceremos mais profundamente no Capitulo 2. Um exemplo que demons-
tra essa diferena com a utilizao de uma funcionalidade pode ser observa-
do no exemplo a seguir, no qual realizada a converso de uma String em um
inteiro, sendo de extrema importncia para os vrios programas que iremos
construir. Logo, tente memorizar tal funcionalidade da classe Integer.
Captulo 1 - Conceitos bsicos da tecnologia Java 13
// TerceiroPrograma.java
public class TerceiroPrograma {
public static void main(String args[]){
String entrada = 1;
entrada = entrada+1;
Integer numero = Integer.parseInt(entrada);
System.out.println(entrada);
System.out.println(numero);
}
}
Note que no exemplo anterior, criada uma varivel do tipo String de-
nominada entrada, que recebe o caractere 1. Note que no um nmero,
mas sim um caractere. Em nossa segunda linha do exemplo, o valor existente
na varivel de entrada concatenado a um novo caractere, no caso 1. Note
que o resultado dessa operao matematicamente seria o valor 2, mas, no
caso, por se tratar de manipulao, em especfco uma concatenao, o valor
mantido na varivel ser 11, pois no estamos lidando com uma operao
matemtica. Na terceira linha feita a transformao desse conjunto de ca-
racteres em um tipo nmero, que possibilitar as operaes matemticas.
Nas duas ltimas linhas do exemplo so realizadas as impresses em console
dos valores existentes nas duas variveis do programa.

1.3 Entrada de dados
Bom pessoal, um importante aspecto de qualquer programa compu-
tacional consiste na entrada de dados. Pois bem, a primeira coisa a ser feita
conhecer a classe Scanner do pacote java.util. A classe Scanner possibilita
que seja realizada a leitura dos dados procedentes tanto do teclado quanto de
outras fontes como arquivos de texto. A Scanner passou a ser disponibilizada
a partir da distribuio Java 5, na qual se buscou simplifcar todo o traba-
lho com a manipulao de dados oriundos de fontes de dados, no caso as
streams vindas do sistema (System.in) ou mesmo de arquivos de texto. Pois
bem, nada como um exemplo para que possamos memorizar todos os con-
ceitos e detalhes vinculados classe Scanner. Assim, transcreva o cdigo a
seguir e execute, observando a utilizao de nossa nova funcionalidade.
14 JAVA com Orientao a Objetos

//QuartoPrograma.java
import java.util.Scanner;
class QuartoPrograma{
public static void main(String[] arg){
Scanner entrada = new Scanner(System.in);
System.out.println(Digite um numero );
//lendo o nmero digitado no teclado
int valor = entrada.nextInt();
System.out.println(o numero digitado + valor);
}
}
Repare que em nosso exemplo anterior, surgiu um novo elemento que
est relacionado importao de uma classe para sua utilizao. Este concei-
to fcar mais claro em nosso prximo captulo quando estivermos falando
sobre os conceitos relacionados mensagem entre as classes por meio de
mtodos. Mas, voltando ao exemplo, repare que na quarta linha criada uma
varivel denominada entrada do tipo Scanner, que inicializada escutando
as entradas do sistema (System.in). Repare que na sexta linha de nosso pro-
grama, por meio da funo ou do mtodo nextInt( ) da varivel de entrada, o
valor digitado pelo usurio ser atribudo varivel valor, que ser impressa
na linha seguinte. No momento da execuo do programa, voc ir reparar
que logo aps ser impressa a mensagem solicitando que o usurio digite um
nmero, o programa aguardar a entrada do valor. Isso se deve s caracters-
ticas do mtodo nextInt( ) da classe Scanner.
Um ponto importante a ser citado est no fato de que, assim como
no caso das impresses no console, existem outras possibilidades para rea-
lizar a entrada de dados no Java, porm, com certeza, a utilizao da classe
Scanner a mais simples. Portanto, em nossos exemplos iniciais, a utilizao
da classe Scanner ser o sufciente at que conheamos as outras possibilida-
des e voc escolha qual a mais adequada para seus programas.
Captulo 1 - Conceitos bsicos da tecnologia Java 15
1.4 Estruturas de controle
Certo pessoal, chegamos a um ponto importante de sua leitura, no
qual iremos aprender a trabalhar com uma das caractersticas mais impor-
tantes em um programa, que consiste nas estruturas de controle. Agora,
comentaremos sobre os famosos if/else, switch, while, do-while e for. Po-
demos mais uma vez considerar a relao de analogia para entender estes co-
mandos. Essencialmente, a nica diferena desses comandos no Java para a
programao em Pascal est nos indicadores de bloco { e }, sendo, porm,
semelhantes em C ou C++.
Ento, vamos trabalhar com cada um deles. O primeiro consiste no
comando de seleo if que possibilita que um programa analise se uma ex-
presso lgica verdadeira ou falsa e a partir disto, direcione a execuo de
seu programa. A estrutura do if trabalha com a perspectiva de acontecimen-
tos, logo, realiza o que sua traduo do ingls, que Se, se prope. Sendo
mais detalhista, trata-se de uma estrutura na qual, Se a expresso lgica
do comando for verdadeira, a sequncia natural do if ser executada. Porm,
Se a expresso lgica for falsa, surgir um novo elemento na estrutura, que
consiste na clusula else (ento). Essa clusula ser executada na sequncia
do if, obviamente se ela tiver sido implementada.
if (expresso_lgica){
Sequncia 1;
}else{
Sequncia 2;
}
Para que no existam dvidas, vamos a um pequeno exemplo de fxa-
o dos conceitos do comando de seleo if/else.
16 JAVA com Orientao a Objetos
//Classe ExemploIf.java
class ExemploIf{
public static void main (String[] args){
if (args.length > 0){
System.out.println(Dentro do if);
}else{
System.out.println(Dentro do else);
}
}
}
Assim como fzemos em nossos exemplos anteriores, salve sua classe
com o nome ExemploIf.java e utilize os comandos javac e java, respectiva-
mente, para a compilao e a execuo de seu programa, conforme apresen-
tado na fgura a seguir.
Repare que em nossa fgura anterior, junto ao comando java e ao nome
da classe, consta um conjunto de valores Teste do if/else. Estes, por sua
vez, so os argumentos passados para o programa durante a execuo, que
podem ser acessados por meio do vetor de String args, presente na assi-
natura do mtodo principal void main. No exemplo apresentado no cdigo
java, o cdigo dentro do bloco defnido pela clusula if s ser realizado caso,
pelo menos, um argumento seja passado no momento da execuo do pro-
grama, do contrrio, o vetor args estar vazio e o bloco da clusula else ser
executado.
Captulo 1 - Conceitos bsicos da tecnologia Java 17
Outra interessante estrutura de seleo que deve ser mencionada con-
siste na clusula switch. A switch equivalente de maneira lgica a um con-
junto de clusulas if organizadas de forma encadeada e isso usualmente
mais efciente durante uma execuo de um programa. A expresso utiliza-
da pelo switch deve retornar necessariamente um resultado ordinal, ou seja,
classifcado em um dos possveis blocos da clusula, mais conhecidos como
case. As diretivas encontradas a partir do caso escolhido so executadas at
o fnal da clusula switch ou at uma ordem de break que encerra a clusula.
Se o valor a ser testado no possuir um caso especfco, ento ser executada
a diretiva default, que opcional, sendo colocada ao fnal da clusula switch,
aps todos os casos de classifcao possveis. Assim, para um melhor enten-
dimento do mencionado, vamos a mais um exemplo.
/Classe ExemploSwitch.java
class ExemploSwitch{
public static void main (String args[]){
switch(args[0].charAt(0)) {
case A:System.out.println(Vogal A);
break;
case E:System.out.println(Vogal E);
break;
default:System.out.println(No vogal);
}
}
}
Repare que, em nosso exemplo, trabalhamos mais uma vez com a uti-
lizao do vetor args, ao qual os valores so passados durante a execuo,
conforme feito no exemplo para a clusula if. Aqui, nosso programa faz uma
verifcao se a vogal presente na primeira posio do vetor a vogal A ou
E, ou seja, realiza a classifcao dos valores testados. interessante men-
cionarmos a existncia da diretiva default no exemplo, que ser executada se
nenhum dos casos for realizado. Ento, salve seu programa e execute, con-
forme apresentado a seguir.
18 JAVA com Orientao a Objetos
Veja que neste exemplo, fzemos uso mais uma vez dos argumentos
para passar valores para que sejam verifcados em nosso programa, em espe-
cfco a vogal A.
Prosseguindo, outra estrutura a ser mencionada no Java a estrutura
de repetio condicional while. O while consiste em uma clusula na qual seu
bloco ser executado durante ou ENQUANTO a expresso lgica a ser testa-
da for verdadeira. A execuo do bloco s ser realizada desde que a expres-
so lgica analisada seja verdadeira. A sntaxe para a estrutura de repetio
while descrita a seguir.
while ( expresso lgica ){
Sequncia;
}
Assim, mais uma vez iremos recorrer a um exemplo para a fxao des-
ta estrutura de controle de fuxo. No programa abaixo, iremos imprimir os
valores menores que o passado no argumento durante a execuo para nosso
programa.
//Classe ExemploWhile.java
class ExemploWhile{
public static void main (String args[]){
int j = 10;
Captulo 1 - Conceitos bsicos da tecnologia Java 19
while (j > Integer.parseInt(args[0])){
System.out.println(+j);
j--;
}
}
}
Outra possibilidade na linguagem de programao Java para a estru-
tura de repetio while consiste na estrutura do-while, que pode ser utilizada
como uma condio ao fnal do loop. Essa estrutura est intrinsecamente li-
gada traduo dos termos, que : faa/enquanto. Isso faz com que tenha-
mos a garantia de que o bloco de cdigo defnido ser executado ao menos
uma vez. No caso, ambas as estruturas apresentadas, while e do-while so
repeties baseadas em condies lgicas. Observe a seguir a sntaxe da es-
trutura do-while.
do{
Sequncia;
}
while (expresso_lgica);
Vamos brincar com a estrutura do-while? Ento, transcreva o cdigo
abaixo, compile e execute-o.
//ExemploDoWhile.java
public class ExemploDoWhile {
public static void main (String args[]) {
int min, max;
Scanner entradas = new Scanner(System.in);
System.out.print(Digite o valor minimo:);
min = entradas.nextInt();
System.out.print(Digite o valor maximo:);
max = entradas.nextInt();
do {
System.out.println( + min + < + max);
min++;
20 JAVA com Orientao a Objetos
max--;
} while (min < max);

System.out.println( + min + < + max +
Condicao invalida.);
}
}
No exemplo, so capturados dois valores vindos do teclado. O mais
importante de nosso exemplo est na clusula do-while, que ir imprimir os
valores mnimo e mximo passados, e que sero impressos em tela e decre-
mentados, pois fazem parte do bloco do, ou seja, o bloco ser executado ao
menos uma vez. Diante disso, outras impresses s ocorrero caso a condi-
o existente na diretiva while seja satisfeita. Repare, na fgura a seguir, a
execuo do cdigo proposto.
Porm, existem situaes nas quais a repetio necessita ser apenas
incremental e decremental, obviamente com uma condio de parada para
ambos os casos. Para estes momentos, a estrutura for executar a sequncia
do comando enquanto a expresso lgica for verdadeira. Um fato interessan-
te que deve ser comentado sobre essa estrutura a possibilidade da criao
e da inicializao da varivel de controle na entrada do comando. Ela ser
utilizada para o controle da condio, sendo incrementada ou decrementada
a cada repetio. A seguir observe a estrutura de repetio for.
Captulo 1 - Conceitos bsicos da tecnologia Java 21
for(inicializao;
condio;
incremento/decremento){
Sequncia;
}
Assim como nos exemplos anteriores, vejamos uma aplicao dessa
estrutura.
//Classe ExemploFor.java
class ExemploFor{
public static void main (String args[]){
for (int j=0; j<10; j++){
System.out.println(j);
}
}
}
Repare que na condio a ser satisfeita, foi inicializada uma varivel
j que ir auxiliar no processo de controle com o seu incremento. O mesmo
poderia ser feito com o decremento do valor atribudo a j. No caso, no Java,
assim como em C ou C++, o incremento e o decremento podem ser obtidos
apenas com a utilizao dos comandos j++ ou j- -.
1.5 Arrays e matrizes
Agora, em nosso primeiro captulo, trabalharemos com os arrays ou
tambm conhecidos como vetores e matrizes, que nada mais so que vetores
multidimensionais. No caso, os arrays so vistos como estruturas homogne-
as e estticas, ou seja, mantm uma estrutura regular que no muda de tama-
nho. Logo, o espao destinado aos armazenamentos de valores, bem como o
tipo de dado, sempre do mesmo tipo do incio ao fm da vida do programa.
A primeira posio de um vetor no Java consiste na posio 0. A
22 JAVA com Orientao a Objetos
linguagem disponibiliza diversas propriedades que podem ser teis na mani-
pulao de vetores, uma vez que sua criao muito simples, como veremos
no exemplo a seguir. Uma das propriedades mais importantes de um array
length, que representa o tamanho de seu vetor. Ela se torna til, pois alm
de verifcar qual o tamanho do vetor, auxilia no acesso a determinadas po-
sies, como, por exemplo, a ltima, que iremos acessar como (length 1).
Mas, vamos ao que realmente interessa, que conhecer a sintaxe de criao
de nossos vetores, bem como verifcar sua manipulao. Para isso, o cdigo
abaixo demonstra a utilizao dos arrays no Java.
//Classe ExemploArray.java
class ExemploArray{
public static void main(String[] args){
int[] vetor = new int[ 10 ];
System.out.println(Tamanho vetor:+vetor.
length);
for (int i = 0; i < vetor.length; i++) {
vetor[i] = i;
System.out.println(vetor[i]);
}
}
}
Uma vez executado como feito anteriormente, nosso exemplo defne
um vetor com 10 posies do tipo inteiro. Repare que a defnio do espao
de memria para tal vetor depende da utilizao da sintaxe [ ]. Vrias podem
ser as possibilidades de utilizao dos vetores, que, como mencionado, con-
sistem em um espao de memria destinado ao armazenamento de valores
durante a execuo, auxiliando na organizao de nossos programas, como
exemplifcado com a utilizao do comando for.
Eles sero muito teis em exemplos nos quais no so utilizados con-
ceitos relacionados ao banco de dados, pois auxiliam na manuteno dos
valores durante a execuo. No caso, teremos acesso sempre a uma determi-
nada posio, sendo que podemos considerar um vetor como uma linha na
qual iremos acessar um endereo de memria mantido em sequncia, como
demonstrado abaixo.
Captulo 1 - Conceitos bsicos da tecnologia Java 23
0 1 2 3 4 5 6 7 8 9
10 20 50 70
Assim, se acessarmos o vetor em sua segunda posio, obteremos o va-
lor 50. Outro detalhe a ser mencionado na defnio de valores para um vetor
que estes podem ser inseridos no vetor no momento da defnio de seu
tamanho, no momento de sua criao. No caso, execute o exemplo a seguir e
observe seu funcionamento.
//Classe NovoVetor.java
class VetorInicializado{
public static void main(String[] args){
double[] nota = {7,8, 8,4, 4,2, 1,8, 6,4};
for(int i=0; i < nota.length-1;i++)
System.out.println(Valor no vetor:+nota[i]);
}
}
Repare que no exemplo, o tamanho do vetor apresentado defnido
pelos valores que sero armazenados e passados entre { }. No caso, teremos
um vetor com 5 posies, no qual sua instanciao realizada no momento
de sua defnio com valores do tipo double. Ainda no exemplo anterior,
importante mencionar que devido nossa estrutura de repetio for possuir
apenas uma linha defnida em seu bloco, no caso a impresso dos valores do
vetor, no necessria a delimitao do bloco de escopo da estrutura com os
caracteres { }.
Certo, mas e quanto s matrizes? Quando falamos sobre matrizes
no Java, devemos ter em mente um aspecto importante que, porm, no
impedir ou difcultar seu trabalho. O fato que a linguagem Java possui
somente arrays unidimensionais, sendo que para a criao de arrays multidi-
mensionais, ou seja, matrizes, o que podemos fazer criar ou simular pseu-
domatrizes por meio da defnio de um array de arrays.
24 JAVA com Orientao a Objetos
Obviamente que isso passa de maneira despercebida na construo de
suas matrizes, sendo apenas uma estruturao interna da linguagem e que,
como mencionado, no ir interferir em seu programa de maneira signif-
cativa. Voc deve ter em mente apenas a constante necessidade de duas es-
truturas de repeties para percorrer todo o vetor, assim como em qualquer
outra linguagem de programao. Para entender melhor o processo, vamos
a um exemplo.
//Classe Matrizes.java
class Matrizes{
public static void main(String[] args){
int [][]matriz = new int[2][3];
for(int i=0; i< matriz.length; i++){
System.out.println(Linha: +i);
for(int j=0; j< matriz[i].length; j++){
matriz[i][j]= i+1;
System.out.println(Valores da coluna);
System.out.println(matriz[i][j]);
}
}
}
}
Aps executar o programa, teremos como resultado a impresso da
coluna, da qual cada uma das posies faz parte no momento. Como men-
cionamos, so necessrias duas estruturas de repetio para percorrer toda
a matriz, lembrando que uma responsvel por fazer referncia linha e a
outra estrutura a um novo vetor, no caso, uma pseudocoluna, conforme
impresso no programa anterior.
No Java, existem outras estruturas de vetores que, no caso, so clas-
ses que fornecem mais ferramentas e funcionalidades, agregando valor ao
programa. Em nosso sexto captulo, iremos analisar mais e apresentar essas
estruturas adicionais para o trabalho com vetores, tais como as classes Array,
HashMap e Vector.
Ento, para a defnio de vetores e matrizes, sempre estaremos envol-
vidos em trs etapas:
Captulo 1 - Conceitos bsicos da tecnologia Java 25
1-Declarao do vetor ou matriz: Ocorre da mesma forma como
em uma varivel, porm basta acrescentar antes ou depois da varivel um
par de colchetes.
Exemplo:
RDWQRWD>@
double posicao[][], controle[][];
int []indice;
2- Reservar o espao de memria: No caso, necessrio defnir o
tamanho do espao de memria que ser mantido para a estrutura. Para isso,
utilizado o operador new.
Exemplo:
QRWDQHZRDW>@
posicao = new double[10][20];
indice = new int[5];
3- Armazenar valores nas posies: Para armazenar um valor ou
informao em um dos elementos do vetor ou matriz, necessrio informar
o ndice, ou seja, o local no qual iremos manter os dados.
Exemplo:
nota[3] = 7.8;
posio[4][6] = 3365;
double[] nota = {7,8, 8,4, 4,2, 1,8, 6,4};
A manipulao de vetores e matrizes essencial para o trabalho com
as estruturas de dados. Diante disso, fca como sugesto que seja dada uma
especial ateno ao trabalho com vetores e matrizes, refazendo os exemplos
sugeridos e memorizando sua sintaxe.
1.6 Funes
Caro leitor, chegamos ao ltimo tema que ser analisado neste captu-
lo, que se trata do trabalho com funes. Assim como nas demais linguagens,
uma funo consiste em uma rotina ou sub-rotina automatizada. As funes
26 JAVA com Orientao a Objetos
so interessantes para as atividades que sero utilizadas rotineiramente, ou
seja, que se repetiro vrias vezes e com isso, evitam que tenhamos de reim-
plementar tal trecho a cada momento de necessidade. Resumidamente, sem-
pre que se quiser usar um mesmo trecho de cdigo que realiza uma tarefa
especfca repetidamente, o melhor a fazer criar uma funo.
O entendimento deste conceito primordial para que, em nosso pr-
ximo captulo, possamos lidar com o conceito de mtodos. O primeiro passo
para criar uma funo gira em torno do fato de que a funo deve ser sempre
global, ou seja, deve ser enxergada por todo o cdigo da classe e para tanto,
tambm deve ser esttica, sendo defnida pela palavra reservada static.
A palavra reservada static responsvel por garantir que ao ser reali-
zada a execuo de uma instncia da classe mais de uma vez, somente have-
r uma nica referncia para determinada varivel ou funo existente na
memria em seu computador. Ou seja, ao declarar uma funo como static,
todas as instncias de uma determinada classe iro acessar e compartilhar o
mesmo endereo de memria da funo. Outro detalhe ao qual devemos fcar
atentos que ao declararmos algum trecho, varivel ou funo como static,
isso nos permitir que sejam acessados diretamente sem a necessidade de
criar uma instncia da classe. Esses conceitos fcaro mais claros ao traba-
lharmos com a orientao a objetos, porm importante saber que existem
diversos padres de projetos que fazem referncia utilizao da palavra re-
servada static, como, por exemplo, o Singleton.
As funes podem ser tanto sem argumentos quanto parametrizadas,
porm a estrutura padro que deve ser digitada dentro da classe, mas fora da
funo main, como apresentada a seguir.
static void nomeDaFuno(lista de parametros){
// cdigo da funo
}
Em nosso exemplo, a estrutura apresentada faz referncia a uma lista
de parmetros, que pode ou no ser declarada. Assim, como mencionado,
existem funes nas quais no existem argumentos, mas necessariamente
devem existir os parnteses. Para ter uma melhor fxao da sintaxe, vamos
a um exemplo da utilizao de funes. Digite o cdigo a seguir e verifque
seu funcionamento, assim como nos demais exemplos averiguados at aqui.
Captulo 1 - Conceitos bsicos da tecnologia Java 27
// Classe ExemploFuncao.java
public class ExemploFuncao{
public static void mostrarMensagem() {
System.out.println(Chamei minha funo);
}
public static void main(String[] args) {
// chamando a funo dentro do
// programa principal
mostrarMensagem();
}
}
Em nosso exemplo, foi criada uma funo chamada mostrarMensa-
gem( ), que apenas imprime na tela. Nossa funo chamada dentro do m-
todo principal main( ), ou seja, poderamos realizar a chamada quantas ve-
zes fossem necessrias sem ter de reescrever todo o cdigo novamente. Este
exemplo um bom comeo para o entendimento da ideia de mensagens, mas
isso um assunto para o nosso prximo captulo. importante mencionar
que a ideia de funo em java muitas vezes confundida com o conceito de
mtodos, sendo que iremos saber mais sobre eles em nosso segundo captulo
Bom pessoal, assim fnalizamos nosso primeiro capitulo e espero
que todos tenham assimilado, aprendido e gostado do fascinante e, ao mes-
mo tempo, importante mundo Java. Um detalhe que deve ser mencionado e
deve fazer parte de sua rotina como programador que a atividade de pro-
gramao torna-se cada vez mais clara com a prtica. Desta forma, sempre
que possvel, refaa todos os exemplos sugeridos neste capitulo. Nos vemos
no prximo captulo.
Captulo 2
Programao orientada a objetos
A tecnologia Java ganhou espao nos ltimos anos considerando di-
versos aspectos. Vrios deles j comentamos, como, por exemplo, a ideia de
mquina virtual que possibilita a portabilidade entre os programas desen-
volvidos com o Java ou mesmo o fato da tecnologia Java ser regida pela GPL.
Porm, outro aspecto deve ser mencionado neste contexto. Ele consiste no
fato da linguagem Java trabalhar sobre os conceitos oriundos do paradigma
da programao orientao a objetos. Neste captulo, trabalharemos com os
conceitos bsicos relacionados a este paradigma de programao, obviamen-
te baseados na tecnologia Java. Fica como dica que muito importante que
os temas abordados em nosso primeiro captulo tenham sido assimilados
de maneira satisfatria, garantindo assim um melhor aproveitamento dos
tpicos que viro a ser tratados no s neste captulo, como nos seguintes
tambm.
Certo! Vamos ao que realmente interessa. O paradigma de programa-
o orientada a objetos trata de uma forma diferente o enfoque at ento
trabalhado na maioria das linguagens de programa, que se sustentavam no
paradigma de programao estruturada. A ideia por trs do paradigma da
programao orientada a objetos baseia-se em uma contextualizao mais
humana e prxima da realidade, isso considerando que quase tudo o que te-
mos e lidamos em nosso dia a dia so objetos. Por exemplo, o carro que voc
anda, a casa onde voc mora.
Poderamos, ento, imaginar que at mesmo as pessoas, animais e
qualquer outro tipo de entidade podem ser vistos grosseiramente como ob-
jetos. Claro que existem situaes nas quais esses objetos podem no ser
concretos e palpveis, tal como o veculo que mencionamos, mas no caso abs-
trato, como, por exemplo, os softbots (robs de software), tambm podemos
imaginar que eles existem e possuem elementos que os diferenciam, assim
como atitudes e funes que possibilitam que possamos imaginar que estes
podem servir de modelos computacionais.
O paradigma de programao orientada a objetos relativamente
novo na concepo e na implementao de sistemas de software, considerado
30 JAVA com Orientao a Objetos
os demais disponveis no mercado. Vrios so os benefcios que podem ser
vislumbrados com a utilizao desse paradigma, entre eles esto o aumento
da produtividade de programadores por meio de uma maior expansibilidade
e a reutilizao de cdigo, ou mesmo o fato de controlar a complexidade e os
custos com a manuteno do software.
Neste caso, o objetivo central da orientao a objetos na criao de
programas computacionais permitir que os programas possam ser desen-
volvidos de maneira a espelhar o modo como os objetos so organizados no
mundo real, criando a fgura de modelos que podem ser reutilizados quantas
vezes forem necessrias, bem como criar uma estrutura modular, na qual os
problemas possam ser resolvidos sem que o todo seja afetado. Tais benefcios
oriundos do paradigma fcaro mais claros com o decorrer da leitura do livro
e o conhecimento dos conceitos.
Diante do exposto, caro leitor, importante que voc saiba que a pro-
gramao orientada a objetos baseia-se nos seguintes conceitos: classes, atri-
butos, mtodos e objetos que sero apresentados neste captulo, alm dos
construtores, encapsulamento, herana, polimorfsmo e interface que sero
apresentados em nosso prximo captulo.

2.1 Conceitos da programao orientada a objetos
Ento, vamos l amigo leitor! Aqui, iremos entender mais a fundo a
Programao Orientao a Objetos (POO). Como citado, grande parte de
nosso entendimento e relacionamento com as coisas do mundo real se d
atravs do conceito de objetos concretos ou mesmo abstratos. Observando
ainda as coisas e seres que existem, h uma natural tendncia a identifcar o
que cada uma destas diferentes entidades, um mvel, uma pessoa e assim
por diante.
Relembrando um exemplo claro deste fenmeno e que j citamos,
olhemos um carro. Logo, algo que se pode ver e reconhecer sua forma, tama-
nho, cor e aplicao. Porm, algo que acredito que muitos ainda no imagina-
ram que tais observaes podem ser feitas para todos os carros. Esse carro
que acabamos de observar no o nico que existe. Inmeros outros esto
disponveis com as mesmas caractersticas, porm sendo objetos completa-
mente distintos. O que podemos comear a vislumbrar que podemos ter
computacionalmente uma estrutura que garanta que as informaes possam
ser mantidas e trabalhadas para inmeras situaes semelhantes.
Captulo 2 - Programao orientada a objetos 31
Voltemos ao exemplo do carro. Se existem vrios carros com as mes-
mas caractersticas e funcionalidades, de se imaginar que exista uma for-
ma ou molde que garanta que todos saiam iguais, de forma padronizada e
serializada. Estes conceitos oriundos da administrao foram absorvidos de
maneira efciente pela computao e pelo paradigma da orientao a obje-
tos, que adotou a ideia de criao de modelos computacionais que podem ser
reutilizados e fazer com que esses elementos se completem, modularizando
a programao.
O que temos inicialmente a ideia de uma modelo, que a qualquer
momento podemos dispor de seu uso para criar novos objetos de um deter-
minado tipo de entidade que ser mantida na memria.
claro que cada objeto no mundo real nico, no caso, ningum
igual a ningum. Cada objeto possui uma caracterstica ou mesmo uma fun-
o que o torna nico, servindo como uma identidade que o diferencia dos
demais, mesmo que sejam do mesmo tipo. Por exemplo, uma pessoa. Todas
as pessoas possuem um nome, endereo, trabalho, mas todas so diferentes
uma das outras, sendo que cada uma possui sua identidade prpria, algo que
a torna nica e diferenciada. Poderamos grosseiramente dizer que se trata
do RG individual e pessoal de cada objeto. Assim pessoal, alm das caracte-
rsticas genricas vinculadas a todas as classes de objetos, existe tambm a
identidade vinculada a cada objeto individualmente.
Por meio dos exemplos citados, podemos descrever informalmente os
conceitos fundamentais da programao orientada a objetos, sendo eles:
Classe;
Atributos e mtodos;
Objeto;
Referncia a Objetos;
Construtores;
Encapsulamento;
Herana;
Polimorfsmo;
Interface.
Como citado no incio deste captulo, iremos concentrar-nos agora
apenas nos quatro primeiros conceitos mencionados. Os demais sero apre-
sentados nos prximos captulos.
32 JAVA com Orientao a Objetos
Caro leitor, mas o que voc deve ter em mente quando iniciar o estudo
sobre os conceitos da orientao a objeto o fato de que tal paradigma ir
auxili-lo a entender e visualizar de maneira mais ampla um problema a ser
resolvido, conseguindo assim, uma maior independncia entre a programa-
o e o modelo do problema a ser trabalhado, o que obviamente ir facilitar
possveis manutenes e reutilizaes com uma modularizao, como j citei.
2.1.1 Classe
Em nosso primeiro captulo, j trabalhamos com a criao de classes.
Mas, agora, vamos entender sua real contextualizao, sendo o conceito pri-
mordial para o entendimento da POO. Uma classe um modelo formado
por propriedades ou caractersticas, que sero defnidas mais frente como
atributos, operaes e funcionalidades, que iremos conhecer como mtodos
e defnem o comportamento bsico dos objetos oriundos de uma classe.
Podemos imaginar uma classe em seu sentido estrito e epistemol-
gico, ou seja, uma representao genrica de um conjunto de entidades in-
dividuais e iguais. Por exemplo, uma classe de alunos, na qual todos so se-
melhantes dentro do contexto, com nome, matrcula e assim por diante. Em
nosso caso, a classe a representao comum ou padro de um conjunto de
entidades iguais. As classes so a modelagem das entidades do mundo real
de uma forma mais natural computacionalmente, pois estamos acostumados
a lidar com objetos, que possuem caractersticas, atributos, funcionalida-
des e mtodos.
Tomemos como exemplo o carro. Este poderia ser defnido por uma
classe que descreve de maneira comum um conjunto de objetos do tipo car-
ro, independentemente de sua marca, cor ou tipo, atendo-se especifcamente
aos conceitos que, de alguma maneira, descrevem a estrutura de um carro de
forma genrica. Ento, vamos a um exemplo de uma classe, na qual podemos
descrever um conjunto de entidades a partir de um modelo computacional
genrico.
// Classe Carro.java
class Carro{
String cor;
String marca;
String modelo;
Captulo 2 - Programao orientada a objetos 33
void andar(){
System.out.println(Carro andando);
}
void parar(){
System.out.println(Carro parado);
}
}
Vale a pena novamente mencionar que os nomes das classes devem
ser iniciados com letras maisculas, diferenciando assim dos atributos e das
instncias de objetos que utilizam letras minsculas em suas iniciais. Caso o
nome seja composto por mais de uma palavra, recomenda-se que as demais
palavras tambm iniciem em letra maisculas. Exemplo: Carro, CarroDeCorrida.
Observando o exemplo de classe acima, verifca-se que ela no possui
um mtodo principal, sendo assim, ela no retornar nenhuma ao ao ser
executada, sendo apenas a descrio de um objeto do mundo real, ou seja, a
ideia central e descrevendo o problema a ser implementado. Em nosso caso,
descreve uma estrutura para manter os dados e descreve as funcionalidades
de um carro como um modelo que ser utilizado.
Isso interessante, pois sempre que quisermos manter informaes
ou mesmo utilizar suas funcionalidades, no precisaremos implementar no-
vamente todo o cdigo, necessitando apenas uma nova instanciao de um
objeto da classe ou mesmo sua cpia para outro projeto. De maneira mais
formal, podemos ento dizer que uma classe uma abstrao que descreve
as propriedades relevantes de um conjunto de elementos em termos de sua
estrutura, atributos e comportamento - os mtodos.
2.1.1.1 Qualifcadores de acesso
Outro aspecto interessante e que auxilia em uma programao mais
realista com a utilizao do paradigma orientado a objetos consiste na ideia
do qualifcador de acesso. Tantos as classes que j conhecemos quanto os
atributos e mtodos que ainda iremos conhecer fazem uso e esto na maioria
das vezes associados ao conceito de qualifcador de acesso ou tambm conhe-
cido como especifcao de visibilidade.
34 JAVA com Orientao a Objetos
Vamos a uma analogia para tentar entender o conceito de visibilida-
de. Voc resolve parar um pouco com a leitura de seu livro de programao
com Java e resolve dar uma volta de carro. Diante disso, comea a lembrar
dos conceitos que leu, rememorando que seu carro um objeto dentro de
uma classe que defne todos os aspectos comuns de todos os carros. Mas,
ao ligar seu carro, voc comea a pensar: Bom, eu tenho visveis vrias ca-
ractersticas e vrias funcionalidades, mas existem outras que no consigo
enxergar e que tenho certeza que contribuem para o bom funcionamento do
veculo, tais como a partida, rotao do motor e assim por diante. Pois bem,
ao considerar esta situao, possvel verifcar que, em diversos momentos
em nosso cotidiano, existem objetos, caractersticas e funcionalidades que
esto visveis e outras no. Logicamente que isso ir depender dos aspectos
funcionais e da utilidade de cada objeto.
a que entram os especifcadores ou os qualifcadores de visibilidade.
Eles permitem defnir quem ou o que pode ser visvel ou acessvel no mo-
mento do desenvolvimento de suas classes. Na maioria das situaes, com as
quais voc ir deparar-se, uma classe far uso de outras classes e essas devem
estar acessveis por meio da utilizao dos qualifcadores. Para tanto, deve-
-se utilizar uma das estruturas apresentadas a seguir. No caso, os tipos de
qualifcadores bsicos so:
Tabela 3. Qualifcadores de acesso.
Qualifcador Descrio
public
Defne que o contedo da classe pblico e pode ser utilizado
livremente por outras classes do mesmo pacote ou de outro
pacote.
protected
Defne que o contedo da classe est protegido e que s pode
ser utilizado por classes do mesmo pacote.
private
Defne que o contedo privado e s pode ser utilizado inter-
namente na prpria classe.
Assim, poderamos enriquecer nosso exemplo da classe carro apresen-
tada anteriormente com os qualifcadores de visibilidade. Verifque que tanto
Captulo 2 - Programao orientada a objetos 35
a classe como suas variveis que descrevem as caractersticas e as funes,
que descrevem seu comportamento ou funcionalidades, podem fazer uso de
tais especifcadores.
//Classe Carro.java
public class Carro{
public String cor;
public String marca;
public String modelo;
protected void andar(){
ligar();
System.out.println(Carro andando);
}
protected void parar(){
System.out.println(Carro parado);
}
private void ligar(){
System.out.println(Carro ligado);
}
}
Os qualifcadores de visibilidade so essenciais para o conceito de en-
capsulamento, com o qual trabalharemos em nosso prximo captulo. Por pa-
dro, quando no declarada a visibilidade de uma classe ou mesmo atributo
e mtodo, a mquina virtual Java ir interpretar que tais elementos estaro
especifcados com o operador protected, ou seja, protegidos e acessveis ape-
nas dentro do pacote do qual fazem parte.
2.1.1.2 Pacotes
Com isso, temos outro conceito que interfere nas classes tanto quan-
to a visibilidade. No caso, consiste na ideia de pacotes, declarados no Java
como package. A principal funo desta diretiva no Java est na organiza-
o das classes e obviamente em sua visualizao por outras classes de um
projeto. O que podemos ento verifcar que o pacote est diretamente
36 JAVA com Orientao a Objetos
relacionado aos qualifcadores de visibilidade no acesso a classes, caracters-
ticas e funcionalidades destas.
Ou seja, a utilizao da diretiva package na classe indica que todo o
contedo pblico (public) pode ser utilizado por outras classes pertencentes
ao mesmo pacote ou no. O contedo determinado como protegido (protected)
na classe pertencente a um pacote s pode ser acessado ou utilizado por ou-
tras classes pertencentes ao mesmo pacote e o contedo defnido como pri-
vado (private) s ser acessvel dentro da prpria classe, independentemente
do pacote do qual faz parte. Caso o pacote de uma classe no seja informado,
essa classe passar a fazer parte do pacote default (src, abreviao de source,
traduzindo, fonte).
Do ponto de vista usual, dentro de seu projeto, um pacote de classes
Java consiste em um diretrio, no qual existem uma ou mais classes, ou seja,
um repositrio de classes. Geralmente, colocam-se no mesmo package as
classes com o mesmo propsito. Sob certos aspectos, os packages reprodu-
zem a ideia de bibliotecas, que podem ser importadas em uma classe Java por
meio do comando import.
2.1.1.3 Import
O comando import responsvel por garantir a reutilizao e a modu-
larizao dos programas no Java. Logicamente, tais conceitos so semelhan-
tes ao include do C ou C++ e garantem, com os demais conceitos de visibili-
dade e pacotes, defnies de segurana e organizao. Certo pessoal! Diante
do exposto at aqui, vamos a um exemplo de uma estrutura padro de uma
classe, considerando todos os conceitos apresentados. Alm disso, apresen-
taremos um novo elemento da linguagem neste exemplo, que consiste nos
comentrios.
package local.diretorio;
TXDOLFDGRUBGHBDFHVVRFODVV1RPHB'DB&ODVVH^
// atributos da classe
// mtodos da classe
}
Captulo 2 - Programao orientada a objetos 37
Note que a estrutura apresentada apenas defne os conceitos j vistos
por voc nos exemplos anteriores. Porm, deve-se tomar muito cuidado com
a manipulao de pacotes e imports, pois podem ocorrer erros de referncia,
uma vez que as classes e os pacotes no existam.
2.1.1.4 Comentrios
Bom pessoal, os comentrios so extremamente teis na linguagem
Java. Isso porque no somente permitem os simples comentrios, mas ga-
nham valor ao considerarmos as possibilidades que a prpria mquina vir-
tual defne para tal elemento. No caso, a tecnologia Java defne trs tipos de
comentrios, sendo eles: com uma linha, mltiplas linhas e documentao.
O primeiro, com uma linha, utiliza duas barras (//) para marcar seu
incio e tudo aps as duas barras considerado um comentrio pela JVM.
O segundo tipo de comentrio utiliza a combinao /* e */ para delimitar as
mltiplas linhas de comentrios. E o ltimo tipo consiste no comentrio de
mltiplas linhas, semelhante ao segundo, porm com o propsito de docu-
mentar a programao. No Java, recomenda-se como uma boa prtica de pro-
gramao, que todas as classes sejam documentadas e para isso, a tecnologia
Java nos d uma mozinha, como pode ser observado no Apndice II deste
livro. Na Tabela 4, demonstrada a utilizao dos comentrios apresentados.
Tabela 4. Tipos de comentrios
Tipos de comentrios
// comentrio de uma linha
// tudo aps as duas barras um comentrio
/*
comentrio
de mltiplas linhas
*/
/** comentrio de documentao que tambm
* podem ter mltiplas linhas
*/
38 JAVA com Orientao a Objetos
Usualmente, o comentrio com o objetivo de documentao posi-
cionado antes do elemento a ser documentado, sendo que seu contedo
extrado automaticamente pelo utilitrio javadoc fornecido com o JDK.
Como mencionado, o apndice deste livro traz exemplos
para a criao da documentao de suas classes, com a utiliza-
o do suporte fornecido pela JVM.
Conforme j citado em nosso captulo anterior e algumas vezes na se-
o onde defnimos as classes, os atributos e os mtodos so conceitos que
esto intrinsecamente associados ideia de classe. Ento, mos obra! Va-
mos conhecer um pouco mais sobre esses conceitos.
2.1.2 Atributos
Um atributo nada mais que uma varivel contextualizada, na qual
representa uma caracterstica ou uma propriedade da classe de objetos em
questo. uma varivel destinada a armazenar informaes associadas
classe. Por exemplo, vamos considerar novamente o famoso carro apresenta-
do nas sees anteriores. Seja qual for o carro, vrias caractersticas podem
ser elencadas para ele, entre elas, sua marca. Trata-se de uma propriedade
comum a todos os carros, pois todo carro possui uma marca ou mesmo uma
cor. Assim, natural que ao defnirmos uma classe, por exemplo, CarroDe-
Corrida, ela possua um atributo ou no caso, uma varivel contextualizada
destinada a armazenar sua marca e sua cor.
Podemos defnir os atributos como variveis da classe que podem ser
de tipos primitivos ou de outras classes destinadas a manter os dados dentro
de um contexto. A defnio de um atributo dentro de uma classe Java
feita da mesma maneira como em uma declarao de varivel, sendo defnido
o seu tipo e nome, que deve indicar qual seu propsito. Considere o exemplo
da classe CarroDeCorrida a seguir.
//Classe CarroDeCorrida.java
package fabrica;
Captulo 2 - Programao orientada a objetos 39
public class CarroDeCorrida{
public String cor;
public String marca;
}
Mais uma vez, temos de lembrar que, em nossa classe, no existe um
mtodo executvel, ou seja, o mtodo main( ), sendo que tal classe represen-
ta uma descrio de um problema que, no caso, consiste em manter as infor-
maes sobre, por exemplo, um carro de corrida durante a execuo. Poder-
amos dizer grosseiramente que se trata de um mapeamento das informaes
a serem mantidas. Mas, de nada valem os atributos sem que estes possam ser
trabalhados e transformados. a que entram os mtodos.
2.1.3 Mtodos
Como verifcamos no tpico anterior, enquanto os atributos permitem
manter dados vinculados e contextualizados aos objetos, ou seja, valores que
descrevem as caractersticas de um objeto, os mtodos so responsveis por
realizar operaes sobre os atributos, sendo capazes de especifcar aes ou
transformaes para uma classe de entidades. A ideia central na construo
de mtodos est relacionada ao fato de conferir um carter dinmico aos ob-
jetos de uma classe, exibindo um comportamento que transforme e modi-
fque seu estado atual. Na maioria das vezes, essa transformao se d por
meio da alterao de valores dos seus atributos, tentando imitar o comporta-
mento de um objeto real ou abstrato.
Bom, assim como nos demais conceitos, cada mtodo possui uma assi-
natura e corpo defnidos por:
qualifcador de acesso;
tipo de retorno;
nome;
lista de parmetros.
Defnido o corpo do mtodo, vem seu escopo, que defne a implemen-
tao qual o mtodo se prope, que deve estar entre { }. Apresento a seguir
mais um exemplo, alm de aproveit-lo para demonstrar mais um elemento
da linguagem Java. Vamos utilizar o exemplo de um caixa eletrnico.
40 JAVA com Orientao a Objetos
//Classe ContaCorrente.java
package banco;
public class ContaCorrente{
SULYDWHRDWVDOGR
private String titular;
SXEOLF6WULQJVDFDURDWYDORU^
this.saldo -= valor;
return Saque realizado com sucesso!;
}
SXEOLF6WULQJGHSRVLWDURDWYDORU^
this.saldo = this.saldo + valor;
return Deposito realizado com sucesso!;
}
}
Repare que no exemplo, temos dois mtodos, sacar e depositar. Por
conveno, os mtodos sempre devem ser declarados com o verbo no infni-
tivo, tal como: desenhar, andar, propor, correr e assim por diante. No caso
de nomes compostos, o primeiro nome ser no infnitivo e os demais decla-
rados normalmente, tal como: gerarDocumentacao( ), depositarDinheiro( )
ou depositarCheque( ). Mas, um elemento deve ter chamado sua ateno no
exemplo. No corpo dos mtodos pode ser visualizado o identifcador this.
2.1.3.1 Identifcador this
O identifcador this responsvel por fazer referncia a um atributo
ou mtodo da prpria classe. No exemplo apresentado anteriormente, feita
a referncia ao atributo saldo. Isso muito til, pois comum que os par-
metros possuam nomes iguais aos j existentes nos atributos de uma classe,
diferenciando-os.
Uma alternativa para a utilizao do identifcador this sua defnio
nas classes Java para a chamada de um mtodo construtor dentro da prpria
Captulo 2 - Programao orientada a objetos 41
classe. Isso feito por meio do mtodo reservado this( ).
importante que voc saiba que todos os conceitos apresentados at
aqui devem ser sempre bem planejados e isso geralmente feito no momen-
to do projeto de suas aplicaes. As classes, atributos e mtodos podem ser
representados de maneira grfca, o que extremamente til para enxergar
os possveis gargalos ou defcincias em sua aplicao.
Para tanto, existem vrias notaes, geralmente grfcas, para a repre-
sentao de classes, atributos e mtodos, mas com certeza a mais utilizada
comercialmente trata-se da UML (Unifed Modeling Language). No iremos
aprofundar-nos quanto utilizao da UML em nosso livro. Fica como suges-
to para o leitor que, como forma de enriquecer sua leitura e aprendizado da
programao orientada a objetos, procure conhecer mais sobre tal notao.
2.1.4 Mensagem e modularizao de cdigo
Como mencionado no incio deste captulo, um dos pontos-chave da
programao orientada a objetos consiste na possibilidade de modularizar o
cdigo. Com isso, podemos chegar mais prximo da realidade vivida no coti-
diano, bem como possibilitar uma manuteno mais simples. considerando
tais perspectivas que surge um novo conceito relacionado linguagem Java e
ao paradigma de orientao a objetos: a mensagem.
O conceito de mensagem entre as classes Java trabalha com a ideia de
que as classes, ou melhor, os objetos ou as instncias de uma classe podem in-
vocar mtodos de objetos de outras classes para desempenhar alguma tarefa
de maneira a completar sua funo e melhor defnir o problema. O conceito
garante que caso uma classe necessite de um servio ou funcionalidade, mas
a funo faa parte de outro contexto, ento ser necessrio apenas utilizar
o que proposto em outra classe, mantendo assim a organizao de modo a
garantir que todo o cdigo fque em seu devido lugar. Obviamente, isso tor-
nar seu cdigo mais inteligvel para as possveis intervenes que venham a
ocorrer no futuro, como no caso de uma manuteno.
Dvidas? Certo, vamos ao j mencionado no exemplo do carro. Imagi-
ne que se construa uma classe Carro que possui vrios atributos, tais como:
cor, marca e modelo. Alm disso, na classe sejam defnidos os mtodos an-
dar( ) e parar( ). Pois bem, at aqui nada de novidade. Porm, para que um
veculo ande, necessrio que seu motor seja ligado. a que entra o conceito
de mensagem como uma forma de melhor defnir o problema.
42 JAVA com Orientao a Objetos
O correto seria a criao de uma nova classe, que defna a ideia do
objeto motor, que teria como atributos caractersticas, tais como: potncia,
ignio e combustvel. Alm dos atributos, os mtodos para a manipulao
desses atributos, que seriam, por exemplo, ligar( ) e desligar( ). Desta forma,
quando um carro anda, o que acionado o motor e para tanto, ele que
deve ter seu estado alterado. O motor, como parte do carro, deve receber uma
mensagem oriunda da classe carro que informe tal solicitao, fazendo aces-
so ao mtodo ligar( ). Logo, o conceito de mensagem trata da comunicao
entre as classes.
Para ter uma melhor fxao, vamos demonstrar tais conceitos da ma-
neira como devem ser abordados, criando classes. Aqui, utilizaremos as clas-
ses que defnem nosso problema e de forma legvel para seu entendimento,
caro leitor. Ento, vamos l? Transcreva as classes abaixo para um editor de
texto. Entretanto, no necessria a compilao e a execuo do programa,
j que no temos uma classe principal que garanta uma visualizao dos
resultados.
// Classe CarroNovo.java
package fabrica;
public class CarroNovo{
// atributos
String cor;
String marca;
String modelo;
Motor novoMotor = new Motor();

// mtodos
public void andar() {
novoMotor.ligar();
System.out.println(ANDANDO);
}
public void parar() {
novoMotor.desligar();
System.out.println(PARANDO);
}
}
Captulo 2 - Programao orientada a objetos 43
_____________________________________________________
__
// Classe Motor.java
package fabrica;
public class Motor {
// atributos
Boolean ignicao;
String potencia;
String combustvel;

// mtodos
public void ligar() {
ignicao = true;
System.out.println(Ligado);
}
public void desligar() {
ignicao = false;
System.out.println(Desligado);
}
}
Neste exemplo, podemos notar que existe um novo elemento na classe
CarroNovo, que consiste na utilizao de uma INSTNCIA da classe Motor.
Estarei abordando mais sobre a importncia deste conceito na prxima se-
o com o uso da palavra reservada new. Outro exemplo que pode ser til
para o entendimento do conceito de mensagens entre classes apresentado
a seguir.
No prximo exemplo, implementada uma classe denominada Pro-
gramaPrincipal, com um mtodo principal onde se cria uma varivel ou para
que voc v acostumando-se, um objeto da classe Mensagem que possui o
mtodo imprimir( ) acessado durante a execuo pela classe ProgramaPrinci-
pal. Trata-se de um exemplo sem uma contextualizao, mas que til para
enxergar a diviso de tarefas e a modularizao do cdigo com os conceitos
da orientao a objetos. Considerando as caractersticas do exemplo, pode-
mos compilar e execut-lo para a visualizao.
44 JAVA com Orientao a Objetos
// Classe ProgramaPrincipal.java
class ProgramaPrincipal{
public static void main (String arg []){
Mensagem m = new Mensagem();
m.imprimir();
}
}
// Classe Mensagem.java
class Mensagem{
public void imprimir(){
System.out.println(Mensagem);
}
}
No exemplo, feita a utilizao do mtodo imprimir( ) da classe Men-
sagem pela classe ProgramaPrincipal. Ainda no exemplo, feita novamente a
utilizao do operador new. Trata-se de mais uma palavra reservada para
a tecnologia Java que responsvel pela atribuio de uma instncia
a um atributo. A ideia de instanciao essencial para compreendermos
todo o paradigma da programao orientada a objetos. Ento, vamos conhe-
cer o conceito de objeto.
2.1.5 Objeto ou instanciao
Como j deve ter sido percebido, a criao de novos objetos de uma
classe se chama instanciao ou simplesmente criao do objeto. O objeto
consiste em representar um nico exemplar de uma determinada classe. Va-
mos voltar ao exemplo do carro. A classe CarroDePasseio representa os atri-
butos (caractersticas) e os mtodos (comportamento) de todos os carros de
passeio. Logo, a classe consiste em um modelo para reservar um espao de
memria para manter e transformar os dados. A partir da classe CarroDePas-
seio, podemos criar vrios objetos, ou seja, vrias representaes ou instn-
cias a partir do mesmo modelo, pertencente classe. Por exemplo, podemos
manter os dados de uma Mercedez, um Gol ou qualquer que seja o carro de
passeio. Note, qualquer um dos veculos citados um exemplar especfco da
Captulo 2 - Programao orientada a objetos 45
classe CarroDePasseio. Cada carro em especfco possui caractersticas, tais
como, cor, tamanho e marca, que o torna nico e mtodos que defnem como
ele pode ser ligado, desligado e como deve andar.
Se fssemos pensar grosseiramente, poderamos ter uma classe Pes-
soa, da qual voc, leitor, um objeto ou uma instncia da classe (conjunto)
de pessoas. Pensemos, voc nico e ningum igual ao outro, onde cada um
possui caractersticas prprias e comportamentos distintos, ou seja, cada um
um objeto diferente pertencente a uma determinada classe.
Pode-se defnir um objeto como sendo uma instncia de uma classe
(grupo) que tem valores prprios para os atributos defnidos na classe, tendo
uma identidade nica, ou seja, sendo nico no conjunto de elementos do
mesmo tipo. A notao para instanciar um novo objeto utiliza o operador
new, destinado sua criao.
NomeDaClasse nomeDoObjeto = new NomeDaClasse();
Exemplo:
CarroDePasseio mercedez = new CarroDePasseio();
Mensagem m = new Mensagem();
A primeira coisa que voc deve ter reparado que a declarao de um
objeto realizada de maneira semelhante a dos atributos de uma classe. En-
to, valido mencionar que as classes podem conter instncias de outras
classes como atributos, com diversos elementos compondo um todo, assim
como apresentado na classe Carro e Motor.
Outro exemplo seria a mesma classe carro que pode ter como atributo
um proprietrio, que pode ser defnido como sendo de uma classe Pessoa,
como apresentado no exemplo a seguir. Conforme j visto neste captulo,
o exemplo abaixo apresenta o conceito de importao de outras classes. O
cdigo meramente ilustrativo, no sendo necessria sua execuo.
// Classe Carro.java
package concessionaria;
import concessionaria.Pessoa;
public class Carro{
// atributos
46 JAVA com Orientao a Objetos
int velocidadeMaxima = 50;
Pessoa proprietario = new Pessoa();
// mtodos
public void mostrarVelocidadeMaxima(){
proprietario.dirigir();
System.out.println(velocidadeMaxima);
}
}
______________________________________________________
// Classe Pessoa.java
package concessionaria;
public class Pessoa{
String nome;
String endereco;
public void dirigir(){
System.out.println(DIRIGINDO);
}
}
Mas, quando falamos de objeto, o que realmente est por trs disso
outra importante caracterstica da orientao a objetos, no caso, o reuso do
cdigo. Mais uma vez fazendo referncia ao exemplo do carro, a mesma clas-
se pode ser utilizada para defnir vrios objetos do mesmo tipo, sendo que
somente os dados referentes s caractersticas de cada um diferem.
Por exemplo, poderamos ter um objeto denominado carroDePasseio e
outro instanciado com sua referncia sendo carroDeCorrida. Ambos podem
ser instncias da classe Carro, sendo que os dois objetos so oriundos da
mesma classe, diferenciados apenas pelos valores associados aos atributos
que cada um assume. Porm, ambos utilizam o mesmo modelo, mais especi-
fcamente, a classe Carro.
Cabe ainda destacar outros detalhes da instanciao de objetos. Ago-
ra que j sabemos como os objetos so criados, com a utilizao do operador
new, importante entender o que acontece quando criamos esses objetos.
Captulo 2 - Programao orientada a objetos 47
Quando um objeto criado por meio do comando new, o que retornado
varivel ou ao atributo, como j vimos, uma referncia. Referncia? O que
isso? Vamos explicao.
Quando um objeto criado, ele uma referncia ou uma indicao
para um determinado espao de memria reservado, sendo que o nome da
varivel torna-se apenas uma ncora para o acesso ao espao de memria
no momento da execuo de seu programa, no qual esto dispostos nossos
atributos e mtodos. A ilustrao apresentada a seguir torna isto mais claro.
Figura 2. Referncia para objetos.
Aps a explicao e as consideraes feitas sobre o espao de memria
ser o objeto, necessrio tambm dizer que o operador new no a nica
forma de atribuirmos referncia a um objeto ou uma instncia. Uma maneira
de visualizar o objeto como uma referncia, no caso uma ncora, o fato de
tambm se poder fazer a cpia de uma referncia de um objeto para outro,
com ambos passando a apontar para o mesmo endereo de memria. Se co-
piarmos uma referncia para outro objeto, ele estar referenciando o mesmo
objeto que a instncia original est referenciando. Para ter um melhor enten-
dimento do que foi dito, observe a Figura 3.
Figura 3. Cpia de referncia de objetos.
48 JAVA com Orientao a Objetos
Entendido o conceito, voc deve perguntar: Mas, como fca isto em
linhas de cdigo no Java? Respondendo ao seu questionamento, observe e
transcreva o cdigo na sequncia, onde so criadas duas classes que exempli-
fcam o explicado. Conforme visto em nosso primeiro captulo, utilizaremos
o mtodo executvel main para imprimir os valores que foram referenciados
aos atributos das classes.
//Classe Carro.java
package concessionaria;
import concessionaria.Pessoa;
public class Carro{
//atributos
int velocidadeMaxima = 50;
Pessoa proprietario = new Pessoa();
//mtodos
public void mostrarVelocidadeMaxima(){
proprietario.dirigir();
System.out.println(velocidadeMaxima);
}
}
___________________________________________________
//Classe Pista.java
package concessionaria;
public class Pista{
public static void main(String[] args){
Carro carroDeCorrida = new Carro();
Carro carroDePasseio = new Carro();
carroDeCorrida.velocidadeMaxima = 300;
carroDePasseio.velocidadeMaxima = 60;
carroDeCorrida.mostrarVelocidadeMaxima();
carroDePasseio.mostrarVelocidadeMaxima();
Captulo 2 - Programao orientada a objetos 49
Carro novoCarro = carroDeCorrida;
carroDeCorrida.mostrarVelocidadeMaxima();
carroDePasseio.mostrarVelocidadeMaxima();
novoCarro.mostrarVelocidadeMaxima();
}
}
Entre as diversas linhas que devem ser observadas no cdigo anterior,
devemos dar mais importncia linha na qual a instncia da classe Carro
chamada novoCarro recebe a referncia, ou seja, o endereo de memria do
objeto carroDeCorrida, observe.
Carro novoCarro = carroDeCorrida;
Os atributos carroDeCorrida e novoCarro fazem referncia ao mesmo
espao de memria, pois no foi atribudo um novo espao de memria para
o objeto novoCarro, mas sim, o mesmo espao ao qual o objeto bolaGrande
j fazia referncia. Esta uma caracterstica fundamental da linguagem Java,
sendo que sempre so passadas referncias no Java, no valores. Tal fato tor-
na o trabalho e a manipulao das estruturas de dados com o Java muito
simples. Assim, fnalizamos nosso segundo captulo e no prximo, iremos
continuar a conhecer outros conceitos vinculados programao orientada
a objetos.
Captulo 3
Construtores, destrutores e encapsulamento
Dando continuidade nossa anlise sobre os conceitos relacionados
ao paradigma da programao orientada a objetos, iremos, neste capitulo,
descrever e aprender a lidar com trs novos e importantes elementos para
a tecnologia Java. importante que os conceitos expostos nos captulos an-
teriores tenham sido compreendidos para ter um melhor aproveitamento
do contedo que ser apresentado neste captulo. Como visto nos captulos
anteriores, a ideia de classe na linguagem Java o ncleo de todo o processo
da orientao a objetos, no qual podemos representar qualquer objeto, seja
ele concreto, tal como um carro, seja mesmo abstrato, tal como um softbot.
Mas, no podemos deixar de mencionar outros conceitos importantes
que auxiliam a concretizar o paradigma, como, por exemplo, os atributos e os
mtodos, conhecidos no captulo anterior, ou mesmo os mtodos construto-
res, destrutores e a ideia de encapsulamento na qual iremos trabalhar. Tais
ferramentas tecnolgicas possibilitam que a linguagem Java possa descrever
com maior clareza o problema e com isso, obter uma soluo melhor. O pri-
meiro conceito no qual iremos trabalhar so os construtores e sua funo no
paradigma e na linguagem Java.
3.1 Construtores
Em nosso segundo captulo, analisamos a criao de objetos, que de-
nominamos de instanciao de um objeto. Ali, obtnhamos uma referncia
para um espao de memria, lembra? Pois bem, como vimos, isso nos obriga
a seguir uma determinada sintaxe, conforme apresentado a seguir.
Carro novoCarro = new Carro();

J foi analisada a utilizao da palavra reservada new no ato da ins-
tanciao de um objeto ao verifcar sua responsabilidade pela nova instncia.
Mas, podemos dizer que uma meia verdade. Isto porque, como visto no
exemplo anterior, o operador new antecede a chamada de um mtodo. esse
52 JAVA com Orientao a Objetos
mtodo que denominamos de construtor do objeto ou apenas construtor.
Sua funo, como o prprio nome explicita, construir, ou melhor,
preparar o espao de memria defnido para um objeto para receber os da-
dos conforme determinado na estrutura defnida na classe. Sua invocao
geralmente feita no momento da criao de um objeto, da mesma maneira
como feita para qualquer mtodo. Porm, um detalhe a ser considerado
que os mtodos construtores possuem o mesmo nome da classe na qual so
defnidos.
Por defnio, os mtodos construtores so mtodos especiais invo-
cados pelo sistema na instanciao de um objeto, sendo que o operador new
apenas informa qual mtodo construtor de uma determinada classe ser uti-
lizado pela JDK no momento da criao do objeto para inicializar os valores
dos atributos.
Neste caso, cabe um exemplo para ter uma melhor visualizao dos
conceitos. No exemplo a seguir, defnimos um mtodo para a classe Car-
ro. Transcreva o cdigo e tente visualizar as peculiaridades dos mtodos
construtores.

// Classe Carro.java
package conceitos;
public class Carro {
// atributos
Boolean chave = true;

// mtodos construtores
public Carro(){
this.chave = true;
}
public Carro(Boolean chave){
this.chave = chave;
}
// mtodos funcionais
public void ligar() {
Captulo 3 - Construtores, destrutores e encapsulamento 53
chave = true;
System.out.println(Ligar);
}
public void desligar() {
chave = false;
System.out.println(Desligar);
}
}
No exemplo apresentado, foi criada a classe Carro, sendo defnidos
dois mtodos funcionais: ligar e desligar. Pois bem, mas o que realmente im-
porta para ns est na defnio dos mtodos construtores. Repare que no
exemplo, foi defnido o mtodo pblico Carro(). Ele consiste em um mtodo
construtor.
A invocao de um mtodo construtor nada mais que uma referncia
para a rea de memria onde foi criado o novo objeto, podendo ser traba-
lhados os valores de inicializao do objeto. Desta forma, podemos, ento,
dizer que o mtodo construtor responsvel pela defnio e pela alocao
de memria para um novo objeto.
Como mencionado, um mtodo construtor deve possuir o mes-
mo nome da classe, porm verifque que, para tal mtodo, no defnido
nenhum tipo de retorno. Isso acontece sempre e com qualquer que seja o
mtodo construtor ou mesmo objeto a ser inicializado, pois nosso mtodo
construtor responsvel por estruturar o espao de memria e inicializar os
valores para os atributos de uma classe, no por fazer operaes funcionais
do objeto criado e retornar valores.
O mtodo construtor apresentado sem parmetros tambm conhe-
cido como mtodo construtor DEFAULT, sendo o mais comum. Nele, podem
ser realizadas todas as inicializaes citadas para os mtodos construtores
parametrizados. Outro aspecto interessante a ser destacado sobre os mto-
dos construtores a capacidade fornecida pela prpria JVM, que no caso de
no ser defnido nenhum mtodo construtor para uma classe, a prpria JVM
fca responsvel por disponibilizar um mtodo construtor para a inicializa-
o do espao de memria no ato da instanciao de um objeto. Esse mtodo,
porm, sempre ser vazio, sem parmetros e sem inicializaes com valores
para seus atributos. Um exemplo para tal citao a criao do objeto chave
demonstrado no quadro anterior, no qual utilizado o construtor default.
54 JAVA com Orientao a Objetos
Em vrios problemas, interessante que os valores de determinados
atributos sejam inicializados no momento da instanciao dos objetos, como
ocorreu no nosso exemplo. No caso, podem ser criados quantos mtodos
construtores forem necessrios, diferenciados apenas pela lista de parme-
tros defnida para o mtodo construtor PARAMETRIZADO. Assim, podem
ser passados valores para a inicializao dos atributos da classe no momento
de sua instanciao. Outra importante funo dos mtodos construtores a
possvel realizao operaes que auxiliem e interfram no funcionamento
de um objeto, abrindo arquivos, estabelecendo comunicao, inicializando
dispositivos que sero teis ao programa.

Carro novoCarro = new Carro(Boolean chave);

Resumidamente, uma classe Java pode possuir diversos construto-
res, todos obrigatoriamente devem possuir o mesmo nome da classe, SEN-
DO SOMENTE UM DEFAULT, diferenciados por sua assinatura, no caso,
suas listas de parmetros. Isto o que denominamos de sobrecarga do cons-
trutor.
Isto torna o conceito de orientao a objetos mais prximo da reali-
dade, facilitando o uso de classes em diferentes contextos e circunstncias.
Detalhe importante a ser mencionado aqui o fato de um mtodo construtor
poder fazer a chamada de outros mtodos da classe ou mesmo instanciar no-
vos objetos, realizando assim, a chamada de mtodos construtores de outras
classes e com isso, possibilitando a construo de objetos que se completam
e defnem de maneira mais realista a representao do problema, j que, con-
forme vimos, em sua maioria, um programa composto por vrias classes
que se comunicam por meio de mensagens.
Uma vez criados os objetos, interessante para nossa programao
entender a liberao dos recursos de memria utilizados. Para isso, iremos
detalhar e trabalhar com os destrutores e o coletor de lixo.
3.2 Destrutores e Garbage Collector (Coletor de Lixo)
Na tecnologia Java, existem os construtores que realizam as ope-
raes iniciais de um objeto, preparando-o para o correto funcionamento,
alm da alocao de memria para estas, mas existem tambm os mtodos
Captulo 3 - Construtores, destrutores e encapsulamento 55
destrutores. Assim como os construtores, o destrutor uma caracterstica
oriunda da linguagem C++. um mtodo especial que tem por fnalidade
liberar o espao de memria utilizado por um objeto e com isso, fnalizar
qualquer operao que esteja em andamento, como, por exemplo, fechar ar-
quivos, encerrar a comunicao e liberar os recursos alocados no sistema,
e com isso, eliminar qualquer vestgio da instncia do objeto. Os mtodos
destrutores seguem uma sintaxe padro, conforme apresentado a seguir.
SURWHFWHGYRLGQDOL]H^
// Aqui geralmente utilizado
// para liberar recursos.
}
Como apresentado, um mtodo destrutor deve sempre ser identif-
cado pelo nome fnalize() e pode ser invocado a qualquer momento. Outro
detalhe que pode ser percebido quanto aos destrutores que ao contrrio
dos construtores, que podem conter parmetros em sua assinatura, os des-
trutores no tm parmetros na assinatura do mtodo, porm sempre deve
ser defnido o valor de retorno como void.
A real fnalidade dos destrutores liberar do sistema a memria usa-
da durante a execuo do objeto, sendo que este um dos mais complexos
problemas encontrados no desenvolvimento de sistemas. Isto devido ao
fato de que os recursos de um sistema so fnitos. Importante detalhe a ser
citado que a invocao de um mtodo destrutor no caracteriza a fnaliza-
o concreta do objeto instanciado, mas sim, apenas uma sinalizao para
que o sistema, assim como defnido pela JVM, libere os recursos recolhendo
o espao de memria do objeto destrudo. a que surge outro conceito.
3.2.1 Garbage Collector
Preocupados com o problema do estouro de memria comum e en-
contrado em diversas linguagens, os criadores da tecnologia Java incorpora-
ram maquina virtual um mecanismo que tem como objetivo a liberao da
memria automaticamente, que executado simultaneamente ao programa
Java. Este recurso denominado Garbage Collector ou mais popularmen-
te conhecido como Coletor de Lixo. No Java, conforme mencionado no
56 JAVA com Orientao a Objetos
captulo anterior, um objeto sempre referencia um endereo de memria,
porm quando esse endereo deixa de ser referenciado pelo programa, no
caso, sai do processo de execuo do programa em questo, este espao de
memria marcado para uma futura liberao pelo Garbage Collector. A ideia
que uma vez marcado como um objeto no qual seu espao de memria pode
ser devolvido para o sistema, o coletor de lixo devolve a memria ao sistema
para uma futura utilizao.
Tal sinalizao feita por meio dos mtodos destrutores j vistos.
Outro aspecto interessante do coletor de lixo est no fato de que este me-
canismo tenta sempre se antecipar aos possveis erros, oriundos da falta de
recursos do sistema. Para isso, quando no h mais memria disponvel no
sistema, o garbage collector faz uma varredura para obter os espaos de me-
mria ociosos para sua liberao de imediato para o sistema, prevenindo er-
ros de estouro de memria.
Considerando tais elementos da tecnologia Java, um aspecto positi-
vo que no necessrio o tratamento para a liberao da memria, fcando
a critrio do programador a utilizao dos mtodos destrutores, diferente-
mente de outras linguagens de programao, como, por exemplo, o C++, que
deve realizar tal tratamento. Um detalhe importante para fnalizar nossa
anlise sobre o coletor de lixo e os mtodos destrutores est no fato de que
um objeto no Java pode ser eliminado com uma nova inicializao, por meio
da invocao dos mtodos construtores que iro reiniciar a referncia de uma
varivel ou um atributo. No caso, o objeto perder a referncia ao espao
de memria anterior. Outra possibilidade de fazer com que o coletor de lixo
libere recursos atribuir o valor null a um objeto, sendo que com isso, sua re-
ferncia de memria fcar disposio. Tais possibilidades so importantes,
pois garantem que no ocorram erros no sistema, devido falta de recursos
do hardware.
3.3 Encapsulamento
Iremos, agora, trabalhar com outro importante elemento conceitual
do paradigma de programao orientada a objetos - o encapsulamento. Este
conceito til para garantir que a soluo dos problemas propostos seja sem-
pre realista e que cada elemento s enxergue o que realmente importan-
te. No caso, consiste em um mecanismo que utilizado com a fnalidade de
esconder os detalhes de implementao das classes Java, de maneira a se
Captulo 3 - Construtores, destrutores e encapsulamento 57
assemelhar realidade dos objetos reais. O ponto central do conceito pos-
sibilitar uma maior segurana e domnio da complexidade, pois uma classe
deve ofertar apenas o que ela pode fazer, no como ela faz.
Vamos ser um pouco mais claros. O objetivo do encapsulamento que
uma classe impea que seus atributos e mtodos sejam acessados diretamen-
te. Para isso, o certo disponibilizar apenas mtodos pblicos para o aces-
so aos valores produzidos que realmente devem ser visualizados, ofertando
apenas a real funcionalidade que a classe se prope a realizar. Note que aqui
feita uma referncia aos qualifcadores de visibilidade apresentados em nos-
so segundo captulo, sendo: public, protected e private.
Tais caractersticas so oriundas da ideia cotidiana que encontramos e
que geralmente passam despercebidas em nosso dia a dia na abstrao de um
objeto do mundo real. Vamos a um exemplo para ter um melhor entendimen-
to. Ao assistirmos televiso ou mesmo ouvirmos um rdio, no temos ne-
nhum conhecimento de como estes objetos trabalham internamente. Aqui,
apenas so fornecidas interfaces ou maneiras de interagir com estes equi-
pamentos, por exemplo: um boto para ligar/desligar ou mesmo aumentar/
diminuir o volume. Todos esses elementos so funcionalidades que mexem
com parmetros ou propriedades internas (atributos) do equipamento. En-
to, o encapsulamento til na proteo dos atributos da classe, disponibili-
zando, por meio de mtodos, o acesso s propriedades da classe e com isso, a
alterao do estado destas e do sistema.
Defnindo os mtodos de encapsulamento, eles fornecem uma forma
de comunicao entre os usurios de uma classe e a implementao dispon-
vel nesta, facilitando a escrita, manuteno e alterao dos programas. Exis-
tem mtodos convencionados entre os programadores Java que criam uma
interface entre os atributos e o usurio, sendo uma camada de comunicao
publica. So denominados mtodos get e set vinculados a cada atributo das
classes e evitam o acesso direto a tais atributos, aumentando a segurana ao
impedir que a implementao e a forma como os atributos so tratados este-
jam visveis. Um exemplo desses mtodos apresentado no quadro a seguir.
// Classe Carro.java
package conceitos;
public class Carro {
// atributos
58 JAVA com Orientao a Objetos
private Boolean chave = true;

// mtodo construtor
public Carro(){
setChave(true);
}
public Carro(Boolean chave){
setChave(chave);
}
// mtodos de encapsulamento
private void setChave(Boolean status){
this.chave = status;
}
private Boolean getChave(){
return this.chave;
}
// mtodos de funcionamento
public void ligar() {
setChave(true);
System.out.println(###LIGADO###);
}
public void desligar() {
setChave(false);
System.out.println(###DESLIGADO###);
}
// mtodo destrutor
SURWHFWHGYRLGQDOL]H^
chave = null;
}
}
Destrinchando o cdigo apresentado no quadro anterior, observe que
os mtodos que descrevem o funcionamento da classe, aqui ligar e desligar,
Captulo 3 - Construtores, destrutores e encapsulamento 59
no fazem mais referncia direta aos atributos, como ocorria nos outros
exemplos apresentados at aqui. Algumas partes do cdigo devem ser cita-
das. Note que o atributo-chave passou a ser declarado como privado, evitan-
do o acesso de qualquer outra classe diretamente a ele. Foram implementa-
dos os mtodos set e get, que garantem o encapsulamento dos atributos, no
caso, as interfaces de acesso para a insero de valores e recuperao. Assim,
garantimos que qualquer requisio desse atributo deve ser realizada atravs
dos mtodos get e set defnidos para o atributo.
Nesta nova contextualizao, os atributos devem obrigatoriamente ser
acessados por meio de mtodos. Os mtodos set so utilizados para atribuir
valores e os mtodos get para a recuperao dos valores atuais dos atributos.
Isso consiste em uma boa prtica de programao que deve ser inserida em
seu cotidiano, ainda mais no que tange programao Java.
Vamos a mais um exemplo para demonstrar os vrios conceitos vistos
at aqui. Transcreva o programa a seguir e execute-o, conforme j foi realiza-
do em vrios exemplos dos Captulos 1 e 2.
// Classe Carro.java
package conceitos;
import java.util.Scanner;
public class Carro{
// atributos
private Boolean chave = true;

// mtodos construtores
public Carro(){
setChave(true);
}
public Carro(Boolean chave){
setChave(chave);
}

// mtodos de encapsulamento
private void setChave(Boolean status){
this.chave = status;
}
60 JAVA com Orientao a Objetos
private Boolean getChave(){
return this.chave;
}
// mtodos de funcionamento
public void ligar() {
setChave(true);
System.out.println(###LIGADO###);
}
public void desligar() {
setChave(false);
System.out.println(###DESLIGADO###);
}
// mtodo destrutor
SURWHFWHGYRLGQDOL]H^
chave = null;
}
// mtodo executvel
public static void main(String[] args){
Scanner scn = new Scanner(System.in);
Carro novoCarro = new Carro();
System.out.println(Digite 1 para ligar \n 2 para
+ desligar);
int opcao = scn.nextInt();

switch(opcao){
case 1: novoCarro.ligar();
break;
case 2: novoCarro.desligar();
break;
}
}
}
Captulo 3 - Construtores, destrutores e encapsulamento 61
No exemplo, solicitada uma entrada ao usurio que defne qual ser a
funcionalidade a ser acessada. Para tanto, a classe Scanner responsvel por
capturar essas entradas em um console, sendo utilizado o mtodo nextInt( ). O
programa apresentado inicialmente importa a classe Scanner para que pos-
samos capturar uma entrada do teclado, criando uma interao com o usu-
rio. Aps a defnio da classe Carro, foi criado o atributo-chave, bem como
os mtodos de encapsulamento get e set para acesso a este. Foram criados os
mtodos construtores, confgurando a sobrecarga dos construtores, com um
possuindo parmetros e o outro, no.
Um importante detalhe a ser mencionado para os construtores que,
caso o programador defna pelo menos um mtodo construtor, o mtodo
default disponibilizado pela prpria JVM deixar de existir, sendo necessria
a declarao do mtodo construtor default pelo programador, conforme
exemplifcado. Este um conceito que est relacionado ideia de polimor-
fsmo que iremos explorar mais a fundo no prximo captulo. Por enquan-
to, atente ao fato de que sempre que um mtodo construtor for defnido, o
mtodo default disponibilizado pela JVM deixar de existir e voc dever
fornec-lo, caso queira utiliz-lo. Finalizando, o exemplo anterior possui um
mtodo executvel que defne uma instncia, no caso, o objeto da classe car-
ro denominado novoCarro que permite o acesso ao espao de memria com
seus atributos e mtodos.
Assim, fnalizamos mais um captulo, no qual conhecemos os elemen-
tos do paradigma da programao orientada a objetos. Fica como sugesto
que todos os exemplos sejam refeitos para que todos os conceitos vistos se-
jam mais bem assimilados. Em nosso prximo captulo, continuaremos a tra-
balhar com a orientao a objetos aplicada tecnologia Java.
Captulo 4
Herana, polimorfsmo e interface
Caro leitor, neste captulo iremos conhecer outros conceitos ainda
vinculados ao paradigma da programao orientada a objetos. Sendo bem
mais especfco, poderamos dizer que este o mais importante dos captulos
estudados at aqui, pois daremos os princpios que tornam o paradigma e a
tecnologia diferenciados.
Como mencionado diversas vezes no decorrer do livro, o paradigma da
Programao Orientada a Objetos (POO) trabalha determinando um retrato
fdedigno dos objetos do mundo real. Logo, nada mais sensato e interessante
que a existncia de um conceito que denote a hierarquia existente entre os
objetos reais. Tal conceito de extrema importncia e diferencia a linguagem
de programao Java que, aliada orientao a objetos, possibilita um me-
lhor aproveitamento e reutilizao do cdigo por meio da ideia de herana.
Outra caracterstica da POO que iremos analisar est vinculada ao po-
limorfsmo. A palavra polimorfsmo oriunda da palavra grega polimorfos,
que signifca diversas formas. Este conceito fundamental, j que possibilita
chamadas ou invocaes semelhantes para diferentes implementaes por
meio da redefnio ou da sobrecarga de mtodos.
Finalizando, neste captulo ainda conheceremos o conceito de
interface, que nos possibilitar uma maior abstrao da modelagem do mun-
do real para as classes no Java. Isso torna a linguagem Java mais extensvel
e reutilizvel.
4.1 Herana
Como mencionamos, iremos trabalhar nesta seo com um dos mais
importantes conceitos da orientao a objetos, se no o mais importante:
a herana. Este, por sua vez, consiste na aplicao de uma tcnica muito
simples e que segue os preceitos do mundo real. Um bom comeo para o en-
tendimento da herana vislumbrar os aspectos j bem conhecidos da estru-
tura familiar, na qual existe uma hierarquizao entre pais e flhos, normal
a qualquer ser humano. Ao defnir a herana, pode-se dizer que consiste em
64 JAVA com Orientao a Objetos
uma tcnica na qual uma determinada classe, denominada subclasse, utiliza
atributos e mtodos j defnidos em outra classe denominada superclasse
(pai), especifcada como ancestral da subclasse (flho).
Sendo mais claro, a herana consiste no compartilhamento de atri-
butos e mtodos, assim como acontece num relacionamento gentico do tipo
pai e flho. A classe-pai, que denominada superclasse ou classe base, possui
defnies gerais que podem ser utilizadas nas classes-flho, tambm conhe-
cidas como subclasses. Isto signifca que podem ser defnidas classes mais
genricas, ou seja, em um sentido mais amplo, sendo refnadas sucessiva-
mente em subclasses que herdam todas as caractersticas das classes mais
genricas, sendo assim mais especfcas.
Isso conhecido como especifcao de uma classe. A especifcao,
termo muito utilizado quando se fala de herana, centra no fato de que as
subclasses possuem caractersticas prprias que as diferenciam das classes-
-pai ou mesmo de outras classes que tambm herdam das mesmas super-
classes, das quais so herdados atributos e mtodos. Um exemplo disso seria
imaginarmos uma estrutura familiar, no qual um flho herda de seu pai diver-
sas caractersticas, tais como a cor dos olhos, cabelos e voz. Porm, esse flho,
que herda tais atributos, possui caractersticas que so especifcamente suas,
como, por exemplo, o jeito de andar ou mesmo de correr. Isso o torna mais
especifco que o ente do qual herdou vrias caractersticas, no caso, seu pai.
Podemos considerar que sempre que uma classe herda de outra, a classe que
herda passa a ser um tipo especial da classe-pai.
Complicado? Veremos que no. Vamos a mais um exemplo, desta vez
contextualizado a linguagem Java para clarear esta ideia. Tome como exem-
plo uma subclasse Paciente que herda todos os atributos e mtodos de uma
superclasse Pessoa, sendo assim, um paciente um tipo de pessoa, porm
mais especifco, j que alm de herdar todos os atributos e mtodos defnidos
na classe-pai, no caso a classe Pessoa, a Paciente tem seus prprios atributos
e mtodos que a diferenciam para o contexto que se predispe a representar.
Caro leitor, acredito que devidamente apresentado o conceito de he-
rana, necessrio conhecermos a sintaxe para sua utilizao na linguagem
Java. O conceito de herana, no qual uma classe estende outra, realizado
por meio da utilizao da palavra reservada extends, conforme demons-
trado hierarquicamente no quadro a seguir.
Captulo 4 - Herana, polimorfsmo e interface 65
// Classe SuperClasse.java
public class SuperClasse{
//atributos e mtodos da superclasse
}
// Classe SubClasse.java
public class SubClasse extends SuperClasse{
//atributos e mtodos da subclasse
}
No quadro anterior, interessante notar que a superclasse no recebe
nenhuma marcao que a diferencia. Porm, repare que para a subclasse,
defnida a herana por meio da palavra reserva extends, que a torna uma
extenso da superclasse. Com isso, podemos dizer que a subclasse, mais es-
pecfca, possui o comportamento da superclasse.
Outro ponto importante a mencionar, que oriundo da utilizao dos
procedimentos de herana, a utilizao da palavra reservada super. Sua
funo possibilitar subclasse o acesso superclasse. Assim, quando for
necessrio acessar algum mtodo ou atributo na superclasse, a sintaxe para
tanto ser super.nomeMtodo( ). Desta forma, voc est explicitando
que deseja invocar um mtodo da superclasse. Outro detalhe importante
quanto a invocar o mtodo construtor da classe base e isto pode ser feito
atravs da invocao do mtodo super( ).
Provavelmente, voc ainda no deve ter percebido a importncia do
que foi dito at aqui. Pois bem, a importncia est no fato de que, com a
utilizao dos princpios da herana, no necessrio que seja reescrita boa
parte do cdigo em um programa Java, pois tudo que j foi produzido na
classe-pai fca disposio da classe-flho. Outro detalhe importante a ser
citado que uma parte do cdigo, que ser comum a vrias outras partes de
um programa, pode ser escrita somente uma vez em uma classe-pai, como
mencionamos. Com isso, caso seja necessria a manuteno de alguma parte
desse cdigo, no ser necessrio que seja alterado em todas as classes-flho,
somente na classe-pai, e as demais subclasses herdaro a alterao. Do ponto
de vista da manuteno do cdigo, isso um diferencial a ser considerado no
processo de desenvolvimento com a tecnologia Java. Como nos demais con-
ceitos trabalhados at aqui, vamos a um exemplo para fxar esse importante
princpio da orientao a objetos que imita a realidade. Ento, transcreva a
classe a seguir.
66 JAVA com Orientao a Objetos
// Classe Pessoa.java
package consultorio;
public class Pessoa{
// atributos
String nome;
String endereco;
// mtodos
public void setNome(String newNome){
this.nome = newNome;
}
public void setEndereco(String newEndereco){
this.endereco = newEndereco;
}
public String getNome(){
return this.nome;
}
public String getEndereco(){
return this.endereco;
}
public void andar(){
System.out.println("Estou andando");
}
}
Em nosso exemplo, foi defnida a classe Pessoa, na qual esto detalha-
das algumas caractersticas e comportamentos inerentes a uma pessoa real.
Feito isto, contextualizando o problema, todos sabemos que um mdico nada
mais que genericamente uma pessoa. Mas, no podemos deixar de consi-
derar que ele, alm de suas peculiaridades humanas, possui especifcidades
quanto ao exerccio da profsso de um mdico, que o diferem das demais
pessoas, sendo assim, temos uma especifcao da classe Pessoa.
Desta maneira, podemos dizer que um mdico tem uma relao
um(a) pessoa, com caractersticas e mtodos especfcos a este e que devem
Captulo 4 - Herana, polimorfsmo e interface 67
ser considerados. Ao trabalhar com as relaes do tipo um(a), temos uma
chave para identifcar e determinar quando uma classe deve ou no ser des-
cendente de outra existente. Para ter uma melhor visualizao do processo,
transcreva a classe Medico e note que ela explicita o conceito de herana de
atributos e mtodos da classe Pessoa por meio da palavra reservada extends
aps o nome da classe.
// Classe Medico.java
package consultorio;
public class Medico extends Pessoa{
// atributos
String horario;
String especialidade;

// mtodos
public void setHorario(String newHorario){
this.horario = newHorario;
}
public void setEspecialidade(String newEspecialidade){
this.especialidade = newEspecialidade;
}
public String getHorario(){
return this.horario;
}
public String getEspecialidade(){
return this.especialidade;
}
}
Como dito, note que os atributos e os mtodos que defnem um mdi-
co como pessoa no foram novamente reescritos, pois j foram defnidos na
classe Pessoa, sendo reaproveitados pela classe Medico por meio da herana.
Com isso, aquilo que foi defnido para certa classe no precisa ser repetido
para uma classe mais especializada originada da primeira, logo, seus atribu-
tos e mtodos. Desta forma, o paradigma da orientao a objetos auxilia a
68 JAVA com Orientao a Objetos
reduzir a repetio do cdigo em um programa e em sua manuteno.
Para ter uma melhor visualizao prtica das vantagens obtidas com a
herana, vamos a um exemplo. Nele, utilizamos as classes criadas anterior-
mente na defnio de um programa executvel, no qual feito o cadastro de
um mdico. Note que aqui, comeamos a fazer com que a soluo de nossos
problemas passe a ter uma caracterstica modular, aumentando o reuso e fa-
cilitando posteriormente a manuteno.
// Classe Consultorio.java
package consultorio;
import java.util.Scanner;
public class Consultorio{
public static void main(String[] args){
// instncia da classe Medico
Medico novoMedico = new Medico();
Scanner scn = new Scanner(System.in);
// entrada de dados
System.out.println("#####Cadastro Clinico#####");
System.out.println("Entre com o nome do mdico:");
novoMedico.setNome(scn.next());
System.out.println("Entre com o endereo do +
mdico:");
novoMedico.setEndereco(scn.next());
System.out.println("Entre com o horario do +
mdico:");
novoMedico.setHorario(scn.next());
System.out.println("Entre com a especialidade do +
mdico:");
novoMedico.setEspecialidade(scn.next());
//impresso dos dados obtidos e mantidos para o
//objeto
System.out.println("\n####DADOS DO MDICO####");
System.out.println("Nome do mdico:"+novoMedico.
getNome());
System.out.println("Endereo do mdico:"+novoMedico.
Captulo 4 - Herana, polimorfsmo e interface 69
getEndereco());
System.out.println("Horrio do mdico:"+novoMedico.
getHorario());
System.out.println("Especialidade:"+novoMedico.
getEspecialidade());
}
}
No exemplo anterior, o mais importante a ser mencionado que, mes-
mo no defnidos na classe Medico, os atributos e os mtodos referentes ao
nome e ao endereo, que so oriundos da classe Pessoa, esto disponveis
para a instncia da classe Medico denominada novoMedico. Isto, relembran-
do, s possvel graas herana existente na classe Medico da classe Pes-
soa, evitando a reescrita do cdigo j existente na superclasse Pessoa para a
subclasse Medico.
A utilizao do processo de herana tambm muito importante
para as estruturas correlatas ou mesmo as defnies de melhores prticas,
como no caso de vrios padres do projeto. Fica como sugesto a leitura so-
bre design pattern, que pode enriquecer seus programas, alm de evitar, em
muitos casos, o retrabalho.
Finalizando nossa seo que trata dos princpios da herana na orien-
tao a objetos com Java, importante citar que a linguagem no suporta a
herana mltipla, assim como o C++. Entretanto, existem alternativas para
lidar com tal limitao, que sero consideradas ainda neste captulo.
Com isso, chegamos ao fnal desta seo, na qual trabalhamos a im-
portante caracterstica do paradigma de orientao a objetos, que a heran-
a. Mas, iremos analisar outra caracterstica no menos importante para a
orientao a objetos baseada na tecnologia Java, o polimorfsmo, que consis-
te em uma estrutura fortemente dependente do processo de herana.
4.2 Polimorfsmo
Como j dito na introduo deste captulo, a palavra polimorfsmo ad-
vm do grego polimorfos e signifca diversas formas. Como observado em sua
essncia epistemolgica da palavra, o conceito segue os mesmo princpios.
Sendo mais especifco, o polimorfsmo nada mais que a defnio de m-
todos com o mesmo nome, que defnem a soluo de um mesmo problema,
70 JAVA com Orientao a Objetos
seja na prpria classe, seja na superclasse. O conceito, mais um do paradig-
ma da orientao a objetos, pode ser aplicado de duas formas: sobrecarga ou
redefnio.
Com certeza, a forma mais simples de obter o polimorfsmo por
meio da sobrecarga de mtodos ou tambm conhecido como overload.
4.2.1 Sobrecarga
A sobrecarga, em sua essncia, consiste na possibilidade de ter em uma
mesma classe, vrios mtodos com o mesmo nome, porm com assinatu-
ras diferentes. Mas, como assim com assinatura diferente? Certo, se voc
se lembra do conceito de assinatura visto em nosso primeiro captulo, ele
aplicado aos mtodos defnindo o nome, tipo de retorno e lista de parme-
tros ou argumentos. Neste caso, o que foi citado que apesar do nome ser
igual, o tipo de retorno ou mesmo a lista de parmetros deve ser diferente
para um mtodo.
Com isso, os mtodos podem possuir o mesmo nome, sendo conside-
rados diferentes por receberem um diferente nmero ou tipo de parmetros,
ou mesmo o tipo de retorno pode ser diferente. Este um conceito muito
simples de ser assimilado e para tanto, vamos utilizar nosso exemplo recor-
rente da classe Carro, na qual pode acontecer o polimorfsmo.
// Classe Carro.java
package fabrica;
public class Carro{
// atributos
Combustivel combustivel = new Combustivel();
// mtodos
public void setCombustivel(Combustivel
newCombustivel){
this.combustivel = newCombustivel;
}
public Combustivel getCombustivel(){
return this.combustivel;
}
Captulo 4 - Herana, polimorfsmo e interface 71
3ROLPRUVPRHQWUHRVPpWRGRVGDPHVPDFODVVH
public void abastecer(Alcool abstAlcool) {
setCombustivel((Combustivel) abstAlcool);
System.out.println(Abastecido com lcool);
}
public void abastecer(Gasolina abstGasolina) {
setCombustivel((Combustivel) abstGasolina);
System.out.println(Abastecido com gasolina);
}
public void abastecer(BioDiesel abstBioDiesel) {
setCombustivel((Combustivel) abstBioDiesel);
System.out.println(Abastecido com biodiesel);
}
}
Aqui, demonstrado um exemplo de sobrecarga dos mtodos de uma
mesma classe, no qual um carro pode ser abastecido de diversas maneiras,
porm a essncia da funo a mesma, no caso, abastecer o carro para que ele
possa andar. importante mencionar que o exemplo apresentado apenas
ilustrativo, uma vez que no foram apresentadas as classes Combustivel e
suas especifcaes, no caso, Gasolina, Alcool e BioDiesel, que tambm foram
utilizadas no exemplo. A ideia aqui que seja entendida a essncia do concei-
to de polimorfsmo e sua abstrao do mundo real.
Conforme pode ser observado, em nosso dia a dia, uma mesma fun-
cionalidade pode ser desempenhada de vrias maneiras, porm devendo
ser guardadas as devidas especifcidades de funcionamento de cada uma. O
exemplo disso um carro bicombustvel. Em nosso exemplo, mais um ele-
mento importantssimo que foi utilizado deve ser comentado - o cast.
4.2.2 Cast
O cast a forma mais comum de converso de tipos, porm sua utili-
zao possui algumas peculiaridades que devem ser observadas na hora da
72 JAVA com Orientao a Objetos
utilizao do recurso. O cast no Java pode ser realizado de duas formas, con-
siderando a converso dos tipos, sendo: implcito e explcito. Estes recursos,
por sua vez, esto geralmente associados utilizao do conceito de herana,
no qual, como vimos, uma classe-flho (subclasse) semelhante classe-pai
(superclasse), da qual foram herdados os atributos e os mtodos.
deste ponto que podemos partir para o entendimento do cast im-
plcito. Neste caso, toda subclasse pode ser associada declarao de uma
superclasse. Esta a forma mais simples, pois no h a necessidade de utili-
zao de nenhum recurso adicional para ser efetuado, sendo apenas descrito
por meio da declarao convencional de um objeto da classe-pai e do mtodo
construtor da classe-flho. Para ter uma melhor visualizao, vamos a um
exemplo.
Pai objeto = new Filho();
Em nosso exemplo, o objeto declarado como uma instncia da classe-
-pai, porm ele construdo como sendo do tipo da classe flho, ou seja, re-
cebe uma rea de memria referente subclasse. Note que h uma converso
natural, pois ambos so semelhantes devido ao processo de herana. Gros-
seiramente, poderamos dizer que isso possvel, pois a classe-flho pode ser
hierarquicamente inferior classe-pai, conhece e sabe que ela prpria do
tipo superclasse e, portanto, no precisa necessariamente ser informada que
ser convertida. Isto feito no momento em que utilizamos a palavra extends
na classe-flho, ou seja, a herana.
J o cast em sua forma explicita, denominado assim, pois necess-
ria a informao para a Mquina Virtual Java de qual classe se deseja fazer a
converso, no caso o cast. Neste caso, de uma classe-pai, tenta-se convert-
-la em uma classe-flho. Porm, ao fazer novamente uma anlise hierrquica
para ter um melhor entendimento, a superclasse no sabe e em momento
algum informada quais so suas classes-flho. Portanto, necessrio infor-
mar explicitamente em qual tipo de classe-flho a instncia da classe-pai ser
convertida. Ento, caro leitor, aqui o convido a verifcar como isso pode ser
realizado na linguagem Java, observando a sintaxe no exemplo a seguir.
Pai objetoPai = new Filho();
Filho objetoFilho = (Filho)objetoPai;
Captulo 4 - Herana, polimorfsmo e interface 73
Em nosso exemplo, o objeto declarado como objetoPai instanciado
como sendo do tipo da classe Filho. Logo aps, a referncia do objetoPai
convertida por meio de um cast explicito no objetoFilho. Estes conceitos so
importantes para que possamos tambm conhecer outro importante ele-
mento da linguagem Java - o operador instanceof.
4.2.3 instanceof
O instanceof um operador utilizado para a realizao de casts do tipo
explcito, nos quais no se tem conhecimento de qual classe o defne. Aqui,
podemos trabalhar um pouco mais o exemplo apresentado da classe Carro
quanto ao seu abastecimento. Vamos a ele ento.
...
public void encherTanque(Combustvel c){
if(c instanceof Alcool){
abastecer((Alcool) c);
}else{
abastecer((Gasolina) c);
}
}
...
No cdigo anterior, repare que temos um mtodo encherTanque que
recebe como parmetro um objeto da classe Combustvel. Dentro desse m-
todo, verifcado, por meio da utilizao dos operadores condicionais if/else,
qual o tipo de combustvel. Para isso, dentro do teste, utilizado o operador
instanceof, que realiza a verifcao de qual o combustvel selecionado. De
acordo com o valor da instncia, chamado o mtodo abastecer usando a
sobrecarga de mtodos.
Simploriamente, instanceof signifca instncia de ou do tipo. As-
sim, em nossa verifcao anterior, no teste condicional o que feito nada
mais que uma comparao para defnir se o objeto passado como parmetro
uma instncia da classe Alcool ou da classe Gasolina.
74 JAVA com Orientao a Objetos
4.2.4 Sobrecarga de construtores
Outro exemplo que pode ser citado para o polimorfsmo a sobrecarga
dos mtodos construtores, onde so defnidos diversos mtodos com o mes-
mo nome, porm com assinaturas diferentes. Tais consideraes j foram
feitas em nosso terceiro captulo, no qual defnimos dois mtodos constru-
tores para uma classe, pois, conforme visto, uma vez declarado um constru-
tor, qualquer que seja sua assinatura, passa a ser obrigatria a defnio do
mtodo construtor default para sua utilizao, j que o mtodo construtor
fornecido pela JVM deixar de ser fornecido.
4.2.5 Redefnio
Nossa segunda forma de utilizao do conceito de polimorfsmo con-
siste na redefnio de mtodos ou tambm conhecido como sobrescrita
(override), isso realizado sobre os mtodos existentes nas superclasses. Tal
conceito est baseado na herana, da qual as subclasses herdam atributos e
mtodos de uma classe-pai. Isso devido ao seguinte fato: Imagine que nem
sempre os mtodos fornecidos pela classe-pai so sufcientes para resolver os
problemas da subclasse, visto que a classe-flho uma especializao, tendo
suas particularidades a serem consideradas no processo. a que entra a so-
brescrita dos mtodos, na qual a subclasse reescreve um mtodo utilizando a
mesma assinatura defnida na classe-pai, sendo que no momento da invoca-
o do mtodo, dentro da subclasse, ser acionado o mtodo ali defnido que
se sobrepe ao da superclasse. Vamos a um exemplo: imagine um pai e um
flho, ambos so pessoas e assim, possuem caractersticas e comportamentos
de um ser humano. natural que o flho herde os trejeitos de seu pai, porm
existem caractersticas e comportamentos que, por mais inerentes ao proces-
so de herana que sejam, precisam ser especializados, ou seja, por mais que
exista o processo de herana, ao falar, por exemplo, o flho possui especifci-
dades em sua voz que so s suas, apesar da aproximada semelhana com a
de seu pai.
Para o paradigma da orientao a objetos, uma operao, ao ou mes-
mo uma transformao que um objeto realiza por meio dos mtodos so im-
plementaes especfcas das operaes desejadas para uma classe. Ento,
mesmo que esta venha a herdar os atributos e os mtodos de outra classe,
sempre tero prioridade as caractersticas e os comportamentos defnidos
Captulo 4 - Herana, polimorfsmo e interface 75
para o escopo especfco da classe. Para ter um melhor entendimento, vamos
a uma implementao. Altere a classe Medico do exemplo apresentado na
seo anterior, no qual essa classe herda os atributos e os mtodos da classe
Pessoa.
// Classe Medico.java
package consultorio;
public class Medico extends Pessoa{
// atributos
String horario;
String especialidade;

// mtodos
public void setHorario(String newHorario){
this.horario = newHorario;
}
public void setEspecialidade(String newEspecialidade)
{
this.especialidade = newEspecialidade;
}
public String getHorario(){
return this.horario;
}
public String getEspecialidade(){
return this.especialidade;
}
UHGHQLomRGRPpWRGR
public void andar(){
System.out.println("Estou andando rpido");
}
}
Note que no exemplo apresentado, foi criado na classe Medico o m-
todo andar( ). Tal mtodo j havia sido defnido na classe Pessoa, na seo
anterior, e devido ao processo de herana existente entre as classes Pessoa e
76 JAVA com Orientao a Objetos
Medico, no foi necessria sua reescrita na classe flho, ou seja, na classe Me-
dico. Porm, devido s caractersticas especfcas da classe Medico, esse m-
todo redefnido e, ento, passa a atender as particularidades dessa classe.
Assim, a mquina virtual Java entender que ao ser invocado um mtodo, no
qual houve o processo de redefnio, o mtodo da subclasse ser o que deve
ser acionado. Caro leitor, acredito que at aqui voc deve ter verifcado que o
conceito de polimorfsmo importantssimo para o paradigma de orientao
a objetos, assim como os demais mecanismos de abstrao de dados, herana
e encapsulamento j apresentados.
4.3 Interface
Amigo leitor, agora que j conhecemos os conceitos de herana e poli-
morfsmo, vamos a outro conceito-chave no paradigma da orientao a ob-
jetos - as interfaces. O conceito de interface um tanto amplo, j que ao
trabalharmos com o Java, ele est constantemente presente. De um lado,
como vimos, toda classe no Java tem um propsito especfco, geralmente se
relaciona com outras classes e a, temos um sistema completo e funcional que
se comunica por meio de mensagens. Essas mensagens so trabalhadas por
meio dos mtodos defnidos segundo os modifcadores de acesso e tais m-
todos so interfaces (entradas) para o acesso ao contedo de uma instncia.
Mas, a tecnologia Java ampliou o conceito, tornando-o ainda mais
fexvel. Poderamos dizer grosseiramente que a tecnologia Java possui um
tipo especial de classe que so as interfaces. Isso ocorre devido sintaxe de
defnio de uma interface no Java ser semelhante utilizada para uma clas-
se. Entretanto, no lugar do identifcador class, deve ser utilizada a palavra
reservada interface.
A ideia central do conceito de interface a modelagem dos comporta-
mentos que so esperados na defnio de uma determinada classe. O nome
interface coerentemente tem o objetivo de explicitar que esse conceito Java
pretende disponibilizar um meio padronizado de acesso a diferentes tipos de
implementao como uma interface propriamente dita.
Para isso, em uma interface so defnidos apenas mtodos abstratos
e variveis fnais. Um ponto importante a ser destacado o fato de uma
interface no ter uma implementao para seus mtodos ou mesmo ins-
tncias para suas variveis. Logo, a utilizao das interfaces garante que
voc sempre se concentre nos objetos e nos relacionamentos que existiro,
Captulo 4 - Herana, polimorfsmo e interface 77
construindo, desta forma, uma espcie de planta baixa do sistema para pos-
sibilitar a construo baseada nos modelos existentes, defnindo assim uma
camada extra de abstrao para seu sistema que servir de base para o res-
tante. O cdigo a seguir apresenta a sintaxe para a defnio de interfaces
nos Java.

// Interface Aluno.java
package escola;
public interface Aluno{
SXEOLFVWDWLFQDORDW0(',$B$3529$'2
SXEOLFDEVWUDFWRDWPHGLD
public abstract int faltas();
SXEOLFDEVWUDFWRDWQRWDRDWQRWD
SXEOLFDEVWUDFWRDWQRWDRDWQRWD
}
Algumas consideraes devem ser feitas e estar sempre em mente
quanto utilizao das interfaces. Uma interface no pode ser instancia-
da, sendo que seu objetivo defnir um modelo de comportamento abstra-
to para as classes. Tais classes que se propem a implementar a interface
devem fornecer a implementao dos mtodos declarados na interface ou,
ao menos, declar-los em seu escopo. Uma boa analogia para as interfaces
imagin-las como sendo um contrato, no qual qualquer classe que se prope
a implementar a interface deve, ao menos, declarar mtodos e variveis est-
ticas e fnais em seu escopo.
Note que no exemplo anterior, feita a utilizao da palavra reserva-
da abstract. Ela pode referenciar tanto mtodos quanto classes ao apresen-
tar apenas a ideia ou mesmo um modelo do todo, sem que seja fornecida a
implementao para tais mtodos ou classe, deixando explcita somente a
abstrao do objeto. O conceito de abstrao muitas vezes se confunde com o
conceito de interface. A funo das classes abstratas forar o programador a
implementar subclasses para a resoluo dos problemas. Assim, os mtodos
da classe abstrata so declarados com o modifcador abstract e sem corpo.
Voltando ao conceito de interface, para que uma classe imple-
mente uma interface, em sua defnio deve ser colocado o identifcador
78 JAVA com Orientao a Objetos
implements seguido da lista de interfaces separadas por vrgulas. Vamos a
um exemplo de uma classe que implementa a interface aluno defnida no
quadro anterior.
// Classe AlunoImp.java
package escola;
public class AlunoImp implements Aluno{
// atributos
SULYDWHRDWQRWDQRWD
private int faltas;
// mtodos
SXEOLFRDWPHGLD^
return nota1(nota1)+nota2(nota2)/2;
}
public int faltas(){
return faltas;
}
SXEOLFRDWQRWDRDWQRWD^
this.nota1 = nota;
return nota1;
}
SXEOLFRDWQRWDRDWQRWD^
this.nota2 = nota;
return nota2;
}
}
Caro leitor, vamos entender o exemplo apresentado no quadro an-
terior. Conforme pode ser observado, a classe AlunoImp implementa a
interface Aluno e, ento, deve fornecer uma implementao para os mto-
dos declarados na interface Aluno, que foi construda anteriormente. Alm
de fornecer a ideia de um contrato entre as classes, conforme mencionado,
outro aspecto que pode ser explorado no conceito de interface, consiste
na ideia da plugabilidade. Vamos a um exemplo para deixar tal perspectiva
Captulo 4 - Herana, polimorfsmo e interface 79
mais clara. Imagine uma classe que utiliza uma determinada interface que
disponibiliza os mtodos abstratos para a conexo com um banco de dados.
Assim, existem diversas formas de implementar uma conexo. Logo, po-
demos ter uma interface que defna todas as maneiras como uma conexo
pode ser implementada, cabendo ao desenvolvedor plugar o mtodo que lhe
for mais conveniente, isso sem a necessidade de alteraes drsticas no pro-
grama, uma vez que todas as classes que implementam tal interface para a
conexo, de alguma maneira, dever comprometer-se a fornecer todos os
mtodos, como em um contrato, independentemente da forma como ser
implementado cada mtodo.
Vamos a outro exemplo clssico e bem simples para o entendimento da
ideia de plugabilidade, que elemento central em vrios padres de projetos
utilizados. Pois bem, imagine uma empresa de software que possui um pro-
grama de controle mdico. Este pode ser aplicado tanto a clnicas para tratar
pessoas quanto a clnicas veterinrias. Tal sistema relativamente simples e
realiza apenas o controle de pacientes. Verifcando o funcionamento de am-
bas as clnicas, os processos so idnticos, apesar de lidar com pacientes com-
pletamente diferentes. Resumindo, o sistema pode ser utilizado em ambos
os casos. Mas, como? No caso, poderia ser criada uma interface Paciente que
defniria os mtodos comuns aos pacientes, restando as classes que imple-
mentam tal interface. Ento, observe o cdigo a seguir.
// Interface Paciente.java
package clinica;
public interface Paciente {
public void setNome(String nome);
public void setHistorico(String historico);
public String getNome();
public String getHistorico();
}
Observe a seguir que nossas classes Pessoa e Animal, que implemen-
tam a interface Paciente, a partir deste momento deveriam ter as seguintes
defnies obrigatoriamente.
80 JAVA com Orientao a Objetos
// Pessoa.java
package clinica;
public class Pessoa implements Paciente {
// atributos
private String nome;
private String historico;
// Mtodos
public void setNome(String nome) {
this.nome = nome;
}
public void setHistorico(String historico) {
this.historico = historico;
}
public String getNome(){
return nome;
}
public String getHistorico(){
return historico;
}
}
Defnida a classe Pessoa, para a classe Animal teramos uma semelhan-
a, uma vez que ela deve tambm implementar a interface Paciente.
// Animal.java
package clinica;
public class Animal implements Paciente {
// atributos
private String nome;
private String historico;
// Mtodos
public void setNome(String nome) {
this.nome = nome;
Captulo 4 - Herana, polimorfsmo e interface 81
}
public void setHistorico(String historico) {
this.historico = historico;
}
public String getNome(){
return nome;
}
public String getHistorico(){
return historico;
}
}
Isso permite uma padronizao dos procedimentos ou mesmo que
o cdigo possa ser utilizado duas ou mais vezes, dando extensibilidade ao
programa, bastando apenas que seja construda uma nova classe que se pro-
ponha a implementar a interface e assim, que se possam utilizar todos os
demais benefcios de seguir tais regras. Para tanto, teramos como declarao
dos objetos das classes, por exemplo.
// Clinica.java
package clinica;
public class Clinica {
public static void main(String[] args){
Paciente p = new Pessoa();
Paciente a = new Animal();

// Dados para a pessoa
p.setNome(Alex Coelho);
p.setHistorico(Apresentou problemas na +
garganta.);

// Dados para o animal
a.setNome(Tot);
a.setHistorico(Problemas na pata.);

// Imprimindo os relatrios
82 JAVA com Orientao a Objetos
Relatorios r = new Relatorios();
r.imprimirRelatorio(p);
r.imprimirRelatorio(a);
}
}
Note que em ambos os casos, o espaos de memria construdos so
diferentes, um para a pessoa ou para o animal. Porm, quanto sua defni-
o, so do mesmo tipo, no caso instncias da interface Paciente. Repare.
Paciente p = new Pessoa();
Paciente a = new Animal();
Isso nos garante uma padronizao nos processos, fazendo com que
outras funcionalidades do sistema possam ser utilizadas de forma extensvel
a vrios produtos. No nosso caso especfco, a vantagem de utilizar a interface
Paciente se caracterizaria na utilizao dos procedimentos de gerao de re-
latrio, por exemplo, como apresentado no cdigo a seguir e j referenciado
no exemplo anterior.
// Relatorios.java
package clinica;
public class Relatorios {
public void imprimirRelatorio(Paciente p) {
System.out.println(Relatrio de Pacientes);
System.out.println(Nome:+p.getNome());
System.out.println(Histrico:
+p.getHistorico());
System.out.println(Histrico:
+p.getCadastro());
}
}
Para fnalizarmos nosso capitulo, vamos a outra funcionalidade que o
conceito de interface possibilita, sendo a manipulao da herana mltipla
no Java.
Captulo 4 - Herana, polimorfsmo e interface 83
4.3.1 Herana mltipla
Embora a linguagem Java no fornea um mecanismo explcito que
possibilite a herana mltipla, ou seja, uma classe herdar de mais de uma
classe, com a utilizao de interfaces possvel obter algo prximo da essn-
cia do conceito, com a implementao de diversas interfaces por uma classe.
Como uma classe pode implementar diversas interfaces e deve prover
implementaes para os mtodos declarados nas interfaces, obtm-se uma
pseudosobrescrita dos mtodos e com isso, ela disponibiliza todos os mto-
dos e atributos para as classes que a utilizam. Para ter um melhor entendi-
mento, vamos a mais uma analogia. Um exemplo clssico o do carro anf-
bio, que possui caractersticas e comportamentos tanto de um carro quanto
de um barco. Ento, nosso primeiro passo criar as interfaces que defnem
os mtodos.
// Carro.java
package estaleiro;
public interface Carro {
public void puxarFreioDeMao();
}
'HQLUHPRVDJRUDDLQWHUIDFH%DUFRTXHVHUiXWLOL]DGD
na herana mltipla.
// Barco.java
package estaleiro;
public interface Barco {
public void navegar();
}
Feito isso, agora necessrio criar a nossa classe CarroAnfbio que
ir implementar as interfaces propostas e com isso, passar a ser obrigada
a reescrever os mtodos propostos nas interfaces. Assim, vamos ao que
interessa. Transcreva o cdigo a seguir e analise sua utilizao.
84 JAVA com Orientao a Objetos
&DUUR$QELRMDYD
package estaleiro;
SXEOLFFODVV&DUUR$QELRimplements Carro, Barco {
public void puxarFreioDeMao() {
System.out.println(Puxou o freio de mo!);
}
public void navegar() {
System.out.println(Navegando!);
}
}
Repare no exemplo que com isso, garantimos o comportamento amb-
guo do objeto real com a utilizao das interfaces que mapearam o problema.
Acredito que com isso, voc tenha conseguido visualizar toda a vantagem de
utilizar interfaces, que consiste na defnio de um protocolo que seja co-
mum entre as classes, alm de criar uma especifcao do que uma classe
dever oferecer e implementar em termos de mtodos, o que resulta numa
forma de abstrao.
Ento pessoal, chegamos ao fnal dos principais conceitos do paradig-
ma de programao orientada a objetos, porm isso no signifca o fnal de
nossa jornada. Nos prximos captulos, iremos conhecer ferramentas inte-
ressantes que iro possibilitar a voc, caro leitor, ter um melhor aprovei-
tamento da linguagem Java e dos conceitos do paradigma de programao
orientada a objetos. Assim como nos captulos anteriores, aproveite para re-
fazer todos os exemplos propostos.
Captulo 5
Ferramentas teis para o dia a dia
Neste captulo, iremos considerar diversas ferramentas para um pro-
gramador Java. Elencar quais seriam as prioridades de um programador em
seu cotidiano no algo to simples assim, porm com certeza a manipula-
o de strings, trabalho com datas e horas, defnio de operaes matem-
ticas e manipulao de vetores especiais esto entre as funes que mais se
destacam. Assim como mencionado no incio de nosso livro, tudo no Java
consiste em classes, exceto os tipos primitivos. Relembrando nossos tipos
primitivos: int, foat, boolean etc. Nossas classes derivam da classe Object,
que tem as defnies padro para qualquer classe. Logo, todas as funciona-
lidades e operaes que so fornecidas pela biblioteca padro da tecnologia
Java so defnidas em classes que operam por meio de seus mtodos. Diante
disso, iremos abordar como a linguagem Java possibilita o trabalho com es-
tas importantes ferramentas para o dia a dia.
5.1 Manipulao de strings
Como j vimos desde o incio de nossa leitura, a classe String trata-se
de uma das mais utilizadas, ao considerarmos que no cotidiano computacio-
nal, em sua maioria, as operaes dependem deste tipo de dado em sua en-
trada. Pois bem, diversas linguagens apresentam formas diferentes de lidar
com as strings, seja no formato de um vetor de caracteres, seja mesmo for-
necendo uma operao responsvel por desempenhar a funo de elemento
agregador destes.
A tecnologia Java fornece a classe String para a realizao de opera-
es e a manipulao de palavras e frases. Como voc deve j ter percebido,
diferentemente dos tipos primitivos, tais como int, foat e assim por diante,
sempre que instanciamos um objeto do tipo String, com S maisculo em
sua inicial, isso denota, segundo a conveno existente entre os desenvolve-
dores Java e j conhecida por voc, que se trata de uma classe. Por se tratar
de uma classe, ela nos fornece uma gama de servios que podem ser acio-
nados por meio de seus mtodos. So tais mtodos que tornam as classes
86 JAVA com Orientao a Objetos
diferenciadas dos tipos primitivos, como j citado. A tecnologia Java fornece
classes que tambm auxiliam na manipulao dos principais tipos, como, por
exemplo, Int, Float, classe Boolean, entre outras. Repare que aqui temos o
mesmo padro: todas as iniciais so maisculas, logo, todas so classes que
agregam valores aos tipos de dados por meio de mtodos.
Mas iremos apenas nos concentrar aqui na manipulao de strings
com as principais operaes possveis utilizando o Java. Desta forma, conhe-
ceremos os principais mtodos disponibilizados pela classe String, comean-
do pela utilizao de seus mtodos construtores.
5.1.1 Construtores da classe String
Assim como em todas as classes Java, necessria a existncia de um
mtodo construtor responsvel por garantir a instanciao dos objetos do
tipo String. Pois bem, a classe String fornece dois mtodos construtores para
a instanciao de seus objetos, sendo um parametrizado e outro default. Ou-
tra forma, no entanto, de realizar a criao de nosso objeto por meio da pas-
sagem de valor explcita, ao qual o objeto far sua referncia. Vamos observar
como pode ser realizada a criao de nossos objetos da classe String.
String s = Palavra;
String s1 = new String();
String s2 = new String(Palavra);
Repare que tudo que foi apresentado no quadro anterior no novida-
de. Vrios exemplos j apresentados a voc, leitor, nos demais captulos fze-
ram meno a alguma das possibilidades de criao ou instanciao de obje-
tos da classe String. vital para seus programas que o objeto seja construdo
com algumas das possibilidades mostradas, garantindo que no ocorra erro
de pontos nulos, sem uma referncia de memria.
5.1.2 Outros mtodos
Considerando inicializados nossos objetos, vrios mtodos so teis
para a manipulao de Strings, como segue na Tabela 5. Consideremos um
objeto s do tipo String para a sintaxe.
Captulo 5 - Ferramentas teis para o dia a dia 87
Tabela 5. Principais mtodos da classe String.
Mtodo Funo Sintaxe
length( )
Retorna o nmero de caracteres da
string.
Int tamanho = s.lenght( );
charAt(int)
Captura um caractere na posio
especifcada na string.
char caractere = s.charAt(3);
equals(String)
Compara duas strings e retorna um
valor booleano (verdadeiro ou falso)
Boolean iguais = s.equals(s1);
equalsIgnoreCase(String)
Compara duas strings ignorando a
diferena entre minsculas e mais-
culas e retornando valores booleanos.
Boolean iguais =
s.equalsIgnoreCase(s1);
compareTo(String)
Compara duas strings e retorna 0
se ambas forem iguais. Se a string
que chama o mtodo for menor que
a passada como parmetro, ser re-
tornado um nmero negativo e caso
contrrio, um nmero positivo.
Int result = s.compareTo(s1);
substring(int)
substring(int, int)
Retorna um novo objeto String a
partir do ponto especifcado em
valor inteiro ou, ento, delimitando a
posio inicial e fnal.
String nova = s.substring(3);
String nova =
s.substring(3,5);
indexOf(char)
Retorna a posio da primeira ocor-
rncia do caractere passado como
parmetro na string que invocou o
mtodo.
Int posicao = s.indexOf(A);
88 JAVA com Orientao a Objetos
toUpperCase( )
Retorna um novo objeto String com
todos os valores em maisculo.
String nova = s.toUpperCase(
);
toLowerCase( )
Retorna um novo objeto String com
todos os valores em minsculo.
String nova =
s2.toLowerCase( );
Amigo leitor, como voc deve ter percebido, a classe String fornece di-
versas possibilidades que podem tornar a vida do programador mais fcil.
Outros mtodos da classe String poderiam ser considerados aqui. Assim, fca
como dica que voc verifque na documentao ofcial da classe String as de-
mais possibilidades para a manipulao das strings.
Porm, nem s de strings vive um programa, outras classes devem ser
consideradas como elementos comuns e interessantes para o cotidiano de
um desenvolvedor Java. Entre tais classes, podemos citar as classes que auxi-
liam na manipulao de datas e horas, sendo nosso prximo assunto.
5.2 Data e hora
Um dos elementos que mais geram problemas e controvrsias na
programao Java, com certeza consiste na manipulao de datas e horas.
Isso pode tomar propores ainda maiores quando falamos de aplicaes que
iro rodar e depender da Internet e de seus diversos servidores espalhados
pelo mundo.
Considerando tais problemas, a tecnologia Java fornece um conjun-
to de classes que, conforme j vimos, disponibilizam uma grande variedade
de mtodos que possibilitam o trabalho com datas e horas. As principais clas-
ses que so utilizadas para a manipulao de datas so: java.util.Date, java.
util.Calendar e java.util.GregorianCalendar. importante mencionar que a
classe Date est em desuso e, portanto, em processo de depreciao, o que
pode fazer com que nas prximas verses da mquina virtual Java, ela no
seja mais fornecida e os sistemas que a utilizam tenham problemas devido
sua falta. Mas, ainda assim, importante apresent-la ao considerarmos que
diversos sistemas ainda a utilizam. Certo, ento, nada melhor que apresentar
sua utilizao com um cdigo. Logo, transcreva o cdigo a seguir e execute-o.
Captulo 5 - Ferramentas teis para o dia a dia 89
// ExemploData.java
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;

public class ExemploData {
public static void main(String[] args) {
Date d = GregorianCalendar.getInstance().
getTime();
SimpleDateFormat format = new SimpleDateFormat();
System.out.println(format.format(d));
}
}
Com a execuo do programa, voc deve ter percebido outra possibi-
lidade da classe Date, que consiste na manipulao de informaes sobre o
tempo, tais como: hora, minutos, segundos e milissegundos. No exemplo
apresentado, note que a data impressa segue o padro americano e para
isso, necessria a manipulao de sua formatao, que feita no mtodo
construtor da classe SimpleDateFormat. Essa classe fornece um conjunto de
caracteres padro para a formatao do objeto Date. Podemos citar alguns
exemplos de formataes de datas, como a seguir.
dd/MM/yy = 21/08/11
dd/MMM/yyyy = 21/AGO/2011
Para obtermos a formatao no padro brasileiro, criaremos uma classe alte-
rada no trecho que se refere ao mtodo construtor da classe SimpleDateFormat,
como apresentado a seguir. Execute o cdigo e verifque sua sada.
// Data.java
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
public class Data {
90 JAVA com Orientao a Objetos
public static void main(String[] args) {
Date d = GregorianCalendar.getInstance().getTime();
SimpleDateFormat format = new
SimpleDateFormat(dd/MM/yy);
System.out.println(format.format(d));
}
}
importante mencionar aqui que a classe SimpleDateFormat conta
com a utilizao de diversos caracteres que auxiliam na formatao para a
manipulao de datas e as mesmas, esto disponveis em sua documentao
padro. Outra maneira de obtermos a data pode ser com a utilizao das clas-
ses DateFormat e Locale.
A classe Locale importante, pois auxilia na designao do local e no
processo de alterao dos padres regionais. A mesma j vem com diversas
regies preconfguradas como constantes, que apenas necessitam ser deter-
minadas no momento de sua implementao. J a classe DateFormat, defne
alguns padres que podem ser aplicados a uma data ou hora. Vamos a um
exemplo para sua fxao.
// DataFormatada.java
import java.text.DateFormat;
import java.util.Locale;
import java.util.Date;
public class DataFormatada {
public static void main(String args[]){
Date d = new Date();
Locale local = new Locale (pt,BR);
DateFormat df = DateFormat.getDateInstance(
DateFormat.LONG, local);
System.out.println(Hoje so: + df.format(d));
}
}
Porm, como mencionado, a classe Date est em processo de desconti-
nuao e dessa forma, a tecnologia Java passa a fornecer outras classes para
Captulo 5 - Ferramentas teis para o dia a dia 91
a manipulao de datas. A principal, com certeza, consiste na Calendar. A
classe Calendar consiste em uma classe abstrata, ou seja, contm as abstra-
es que defnem uma data e hora, e desta forma, disponibiliza atributos e
mtodos para a manipulao de datas, uma vez que a data e a hora existem
em qualquer lugar. Mas, o fato de ser uma classe abstrata no permite a ins-
tanciao direta por meio do operador new. Assim, para instanciar um obje-
to Calendar, caro leitor, voc deve utilizar o mtodo esttico sobrecarregado
getInstance( ), que na maioria das vezes herdado da classe GregorianCalendar.
A classe Calendar permite que vrias operaes sejam aplicadas a uma data,
enriquecendo o que j ofertado pela classe Date. Para entender sua mani-
pulao, vamos a um exemplo.
// ExemploDataCalendar.java
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
public class ExemploDataCalendar {
public static void main(String args[]){
Date d = new Date();
Calendar calendario = Calendar.getInstance();
calendario.setTime(d);
DateFormat df = DateFormat.getDateInstance(
DateFormat.SHORT);
System.out.println( df.format(calendario.getTime()));
}
}

Repare que no exemplo, utilizamos uma instncia da classe Date para
defnirmos a data atual passada pelo sistema, porm poderamos tambm
ter, ao invs de utilizado o objeto do tipo Date, defnido por meio de String
os diversos parmetros de uma data ou mesmo hora. Segue um exemplo para
a visualizao.
92 JAVA com Orientao a Objetos
...
calendario.set(ano,ms,dia);
calendario.set(ano,ms,dia,hora,minuto);
calendario.set(ano,ms,dia,hora,minuto,segundo);
...
Porm, nem sempre interessante utilizar a classe Date, dada sua atu-
al situao, sendo que a prpria classe Calendar com a utilizao do mtodo
getInstance( ) j fornece todo o suporte necessrio para a aquisio da data.
Alm disso, o objeto do tipo Calendar, no nosso caso, calendrio, pode ser
utilizado para a manipulao dos elementos vinculados data por meio de
suas constantes, alm de realizar, como j dito, operaes como, por exem-
plo, a soma ou a subtrao dos dias em uma data. Como nos demais tpicos
trabalhados at aqui, vamos a mais um exemplo.
// DataCalendario.java
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Locale;
public class DataCalendario {
public static void main(String args[]){
Calendar calendario = Calendar.getInstance();
DateFormat df = DateFormat.getDateInstance(
DateFormat.SHORT, Locale.UK);
System.out.println(df.format
(calendario.getTime()));
System.out.println(Calendar.DAY_OF_MONTH);
System.out.println(Calendar.DAY_OF_WEEK);
System.out.println(Calendar.DAY_OF_YEAR);
calendario.add(Calendar.DAY_OF_YEAR,10);
//adiciona 10 dias data atual
calendario.add(Calendar.MONTH,5);
//adiciona 5 meses data atual
calendario.add(Calendar.YEAR,2);
//adiciona 2 anos data atual
System.out.println(df.format
(calendario.getTime()));
Captulo 5 - Ferramentas teis para o dia a dia 93
}
}
No exemplo anterior, utilizamos duas classes conhecidas, DateFormat
e Locale. Note que utilizamos a constante Locale.UK que defne que segui-
remos os aspectos regionais da Gr-Bretanha. Logo depois, feita a impres-
so da data e algumas operaes para, ento, termos uma nova impresso da
data com os valores alterados. claro que existem diversos outros mtodos
e constantes que a classe Calendar oferta e, logo, para serem obtidas maiores
explicaes, podem ser acessadas na documentao ofcial.
5.3 Operaes matemticas
Outra classe importante para o cotidiano de um programador Java
a java.lang.Math. Ela disponibiliza diversos mtodos e constantes para as
operaes matemticas que podem ser acessadas de maneira esttica, ou
seja, no necessrio realizar a instanciao de um objeto. Exemplos das
diversas possibilidades so as constantes (pi) e ln (base dos logaritmos na-
turais, tambm chamado de nmero de Euler ou logaritmo neperiano), sen-
do respectivamente 3,141592653589793 e 2.718281828459045. Essas duas
constantes podem ser acessadas conforme o exemplo a seguir explicita.
// Matematica.java
public class Matematica {
public static void main(String args[]){
// Clculo do comprimento de um crculo
RDWUDLR
double comp = 2 * raio * Math.PI;
System.out.println(comp);

// Logaritmo neperiano
System.out.println(Math.E);
}
}
Foram apresentadas no cdigo as constantes Math.PI e Math.E
que, conforme j mencionado, simplifcam a utilizao dos valores para
94 JAVA com Orientao a Objetos
e ln. Porm, nem s de constantes vivem as operaes matemticas e para
isso, a classe Math disponibiliza vrios mtodos que auxiliam nas mais di-
versas operaes. Entre os principais mtodos ofertados pela classe, temos a
comparao de valores maiores e menores, bem como operaes como potn-
cias e razes para os clculos de Trigonometria. Considerando isso, vamos
apresentao de mtodos para uma comparao para o conhecimento de sua
sintaxe.
// ComparaValores.java
public class CamparaValores {
public static void main(String[] args) {
RDWYDORUHV>@^`
System.out.println(O maior valor
+ Math.max(valores1[0], valores1[1]));
System.out.println(O menor valor
+ Math.min(valores1[0], valores1[1]));
}
}
Verifque que no exemplo, foi realizada a comparao de valores, se-
jam eles mximos, sejam mnimos por mtodos da classe Math. Porm, a
maioria dos mtodos fornecidos pela classe Math auxilia na manipulao dos
valores trigonomtricos. Para verifcarmos a utilizao dos mtodos da clas-
se Math para a Trigonometria, nada mais interessante que utilizar o clssico
exemplo da hipotenusa. Logo, transcreva o cdigo e execute-o.
// Hipot.java
public class Hipot{
public static void main(String args[]) {
double p1 = 12;
double p2 = 16;
System.out.println(A distancia entre os pontos
+ Math.hypot(p1, p2));
}
}
Captulo 5 - Ferramentas teis para o dia a dia 95
Outros mtodos, como os que calculam o seno, cosseno e tangente,
alm de suas variaes, so fornecidos pela classe Math. Finalizamos nossa
anlise sobre os mtodos da classe Math com um dos mais utilizados e im-
portantes, que o Math.random( ). O mtodo trabalha com valores rand-
micos que variam de 0.0 at 1.0. Em geral, necessria a manipulao de tais
valores para se obter sua utilidade para a criao de aplicaes do dia a dia,
como podemos perceber no exemplo a seguir.
// NumeroRandomico.java
public class NumeroRandomico {
public static void main(String[] args) {
int valorMin = 0;
int valorMax = 10;
int ranger = valorMax - valorMin;
double valorRandomico;
for (int i = 0; i < 10; i++) {
valorRandomico = Math.random();
System.out.println(O nmero entre
+valorMin+ e +valorMax+ :
+ Math.round(
valorMin + valorRandomico * ranger));
}
}
}
No exemplo, defnimos os valores mnimos e mximos que defnem
o limite para os valores randmicos que queremos. Logo aps, criamos uma
varivel que recebe o valor randmico. Finalizando, temos um lao de repe-
tio, no qual realizamos o arredondamento da transformao dos valores
fracionados. importante mencionar que existem outros mtodos da classe
Math que podem ser utilizados para as operaes matemticas que agregam
valor s suas aplicaes.
5.4 Trabalho com vetores especiais
Como temos visto desde o incio de nosso trabalho, a tecnologia Java
96 JAVA com Orientao a Objetos
se destaca claramente das outras devido sua diversidade. Diante isso, outra
ferramenta que deve ser mencionada, entre as diversas que a linguagem Java
disponibiliza, consiste nas classes para o trabalho com vetores.
Em sua maioria, as diversas linguagens de programao disponveis no
mercado trabalham com vetores convencionais que delimitam um tamanho
fxo. Isto , impedem que estes sofram alterao de tamanho durante a exe-
cuo, como, por exemplo, os que foram desenvolvidos em nosso primeiro
captulo.
A linguagem Java fornece subsdios adicionais para a manipulao dos
vetores, resolvendo problemas como o citado, no caso, a alterao de tama-
nho durante a execuo. Alm disso, disponibiliza classes para as operaes
de nossos vetores estticos. Isso tudo obviamente feito por um conjunto
de classes.
5.4.1 Classe Vector
Entre estas, temos a Vector, que possibilita a criao de uma estrutura
de dados semelhante aos vetores convencionais, porm os objetos instan-
ciados com a utilizao dessa classe podem ser redimensionados dinamica-
mente durante a execuo. Logo, a qualquer momento, quando necessrio
mais espao para o armazenamento, o prprio sistema, por meio da mquina
virtual, encarrega-se de dobrar o tamanho do espao inicialmente alocado
para o vetor, no caso, um objeto da classe Vector.
Pois bem, outra caracterstica, que deve ser considerada e que torna a
classe Vector diferenciada, est na capacidade de armazenar qualquer tipo
de entidade, independentemente de seu tipo. Isto se d devido ao fato da
classe Vector fazer o armazenamento de referncias para Object. Logo, como
j sabemos, tudo no Java consiste nas classes que herdam de Object e isso,
garante que possamos trabalhar com qualquer que seja o tipo do elemento
a ser armazenado no vetor. Ento, nada como a prtica para entendermos
melhor os conceitos apresentados. Vamos a eles.
// Classe ExemploVector.java
import java.util.Vector;
public class ExemploVector{
public static void main(String[] args){
Captulo 5 - Ferramentas teis para o dia a dia 97
Vector vetor = new Vector();

Carro mercedez = new Carro();
vetor.add(mercedez);

Bola bolaFutebol = new Bola();
vetor.add(bolaFutebol);

if(!vetor.isEmpty()){
for (int i = 0; i < vetor.size(); i++) {
Object object = vetor.elementAt(i);
}
System.out.println(vetor.size());
}
}
}
No exemplo anterior, um detalhe a ser observado est no fato de que,
diferentemente dos vetores trabalhados at aqui, no defnimos o tama-
nho de nosso vetor para a varivel vetor. Isso graas capacidade da classe
Vector que determina o tamanho a ser alocado durante a execuo, sendo
que isso ideal para a manipulao de grandes vetores, bem como estruturas
heterogneas. Por ser uma classe, Vector disponibiliza para seus objetos, no
caso, vetores especiais, funcionalidades que no so comuns aos vetores tra-
dicionais, tais como, a verifcao do tamanho do vetor ou mesmo se eles es-
to vazios, conforme foi apresentado no exemplo, atravs dos mtodos size( ) e
isEmpty( ).
Entretanto, isto no elimina um dos maiores problemas do trabalho
com vetores, que sua navegao e busca. Imagine um vetor que cresce e tem
um tamanho de um milho de poses. No caso, isso tornaria o processo
de busca computacionalmente invivel, j que para encontrar um elemento,
seria necessrio percorrer o vetor. Isto se torna mais crtico, caso o objeto
procurado esteja no fnal do vetor.
Para solucionar esse problema, a linguagem Java fornece outra classe
para o trabalho com vetores - a HashMap.
98 JAVA com Orientao a Objetos
5.4.2 Classe HashMap
Seu diferencial est no fato de que ela permite a associao de ndices
que identifcam e tornam o objeto nico dentro do vetor. Tal ndice se torna
uma chave para a recuperao do valor de maneira pontual. Isto garante que
possa ser realizada uma consulta de um vetor de um para um. Obviamente,
isto bem diferente do que ocorria com a defnio dos vetores estticos vis-
tos em nosso primeiro captulo ou mesmo nos defnidos com a classe Vector.
Depois destas consideraes, vamos a um exemplo com a classe HashMap.

// Classe NovoVetor.java
import java.util.HashMap;
public class NovoVetor{
public static void main(String[] args) {
HashMap pessoas = new HashMap();
Pessoa newPessoa = new Pessoa();
newPessoa.nome = "Fulano da Silva";
String chave = "Fulano";
pessoas.put(chave, newPessoa);
Pessoa outraPessoa = (Pessoa)pessoas.get(chave);
System.out.println("Nome recuperado: "+
outraPessoa.nome);
}
}
Note que no exemplo anterior, foi instanciado um objeto do tipo
HashMap denominado pessoas, no caso um vetor, e por meio do mtodo
put( ), foi armazenado um objeto da classe Pessoa. Repare que foi necessria
a atribuo de uma chave para a identifcao do objeto, que ser utilizado
em uma posterior recuperao. Isto, por sua vez, feito com a utilizao do
mtodo get( ) da classe HashMap, como visto no cdigo anterior.
importante ainda mencionar que o toolkit Java possui ainda uma
classe que disponibiliza mtodos para a realizao de operaes nos vetores.
Essa classe no denominada por acaso de Arrays.
Captulo 5 - Ferramentas teis para o dia a dia 99
5.4.3 Classe Arrays
A classe Arrays fornece suporte para as principais manipulaes que
um vetor pode sofrer, no caso a comparao, ordenao ou mesmo pesquisas
binrias, alm de outras. Para verifcarmos o funcionamento da classe Array,
transcreva o cdigo e execute para verifcar seu resultado.
// Classe ManipulandoArrays.java
import java.util.Arrays;
public class ManipulandoArrays {
public static void main(String[] args) {
String[] nomes = new String[3];
nomes[0]= "Fulano";
nomes[1]= "Ciclano";
nomes[2]= "Beltrano";
Arrays.sort(nomes);
for(int i=0;i<nomes.length;i++){
System.out.println(nomes[i]);
}
}
}
A classe Array, como pode ser observado, consiste em uma classe que
manipula vetores estticos. Alm disso, uma classe abstrata que no precisa
ser instanciada para a utilizao, sendo utilizada sua prpria referncia. Ela,
como j dito, possui uma srie de mtodos, entre eles, prov o mtodo sort( )
que foi utilizado no exemplo, responsvel por ordenar o array passado como
parmetro, realizando internamente um mecanismo de comparao entre as
strings e ordenando-as.
Note que utilizamos o atributo length para que a impresso ordenada
dos nomes fosse realizada atravs da estrutura de repetio for. Isto abre
espao para que seja comentado que mesmo os vetores sendo estruturas es-
tticas, estes possuem alguns atributos e mtodos que auxiliam em sua ma-
nipulao, como, por exemplo, o mtodo equals( ).
Com isso, chegamos ao fnal de mais um captulo. Nosso prximo com-
promisso a necessidade de trabalharmos com o tratamento de excees no
Java, o que nos abrir caminho para elementos mais avanados, tais como, o
trabalho com arquivos ou a manipulao de streams.
Captulo 6

Tratamento de excees e entrada de dados
Bom pessoal, vamos comear nosso sexto capitulo verifcando a im-
portncia do tratamento de excees. Depois de compreendermos at aqui
varios recursos da tecnologia Java, para que possamos dar mais um passo adi-
ante, necessario compreender que este um dos diIerenciais da tecnologia
Java. Neste sentido, de suma importncia que os conceitos sobre a orienta-
o a objetos tenham sido bem trabalhados e assimilados.
Para inicio de conversa, temos pleno conhecimento de que para os
programas e as aplicaes mais incrementados e complexos, geralmente so
necessarias articulaes para a utilizao de recursos, que muitas vezes vo
alm do que a propria tecnologia Iornece. Um exemplo disso a manipula-
o de arquivos textuais, redes de computadores ou mesmo banco de dados.
Diante disso, podemos vislumbrar um mundo completamente desconhecido
para a aplicao em si, onde eles so acessados para resolver problemas pon-
tuais, com peculiaridades inerentes a cada programa, que impossibilitam um
maior controle pela maquina virtual. Tais aspectos Iazem com que esses pon-
tos sejam a porta de entrada para inconsistncias que podem comprometer sua
aplicao.
Foi pensando em minimizar o impacto causado por tais gargalos e pon-
tos de vulnerabilidade que a tecnologia Java se preocupou e desta Iorma, pas-
sou a disponibilizar classes para o tratamento de excees. Tal conceito Ioi
herdado da linguagem C, que tambm Iornece suporte, indicando que algo
de errado ocorreu na execuo do programa. Com isso, possivel que sejam
realizados um tratamento e uma recuperao da exceo lanada pela JVM
para um estado que no comprometa a continuidade da utilizao da aplicao
pelo usuario.
Como mencionado, diversas classes fornecidas pelo JDK podem
ser utilizadas para fornecer tal suporte para as aplicaes desenvolvidas,
diminuindo o tempo de possveis manutenes que venham a ocorrer e au-
mentando a capacidade dos programas em Java.
102 JAVA com Orientao a Objetos
6.1 Tratadores de excees
A exceo na linguagem Java uma indicao de que um erro ou um
problema aconteceu durante a execuo de uma aplicao. Isto se torna mais
suscetvel considerando que a linguagem Java fornece uma grande quantidade
de bibliotecas, no caso, APIs, ou mesmo classes prprias. A ideia nem chega
perto da perfeio, mas, ao menos, tenta garantir tecnologia, que as classes
de exceo tratem as situaes de erros moderados que podem ser encontra-
dos e visualizados em seus programas e, ento, recuperados.
Uma maneira interessante de interpretar essas excees sempre tra-
balhar os trechos de cdigo que apresentam um grau maior de possibilidade de
que um erro possa vir a acontecer e geralmente, isto est vinculado utiliza-
o de recursos externos tecnologia. Isto, em um contexto mais recente e
atualizado, no qual os sistemas so construdos sem critrios, torna a tecno-
logia Java um elemento diferenciado e um porto seguro para o desenvolvi-
mento de solues complexas na construo de aplicaes crticas, tais como,
sistemas hospitalares, de aviao e at mesmo espaciais e de robtica.
O tratamento de excees no Java nada mais que um processo de ga-
tilho, que ao ser disparado um erro como mensagem para o sistema, possibi-
lita que seja trabalhada a exceo. Este processo demonstra ao sistema o erro,
alm de relat-lo para o entendimento e o tratamento da melhor soluo para
a recuperao e a continudade das prximas rotinas do programa.
Assim, o tratamento de excees geralmente deve ser utilizado ao:
Processar situaes excepcionais, nas quais um mtodo seja incapaz de
terminar sua funo por razes que fogem ao seu controle;
Processar excees de componentes que no esto projetados para re-
alizarem tais tarefas diretamente;
Em projetos de grande porte para tratar as excees de maneira uni-
forme em todo o projeto.
A manipulao das excees em Java feita da mesma maneira como
na linguagem C++, com a utilizao das clasulas try e catch. A clusula try
utilizada para indicar o trecho de cdigo que ser executado e no qual poder
ocorrer uma exceo, no caso, um pedao de cdigo onde a possibilidade de
que possveis erros ocorram maior, tal como a abertura de um arquivo ou
mesmo a abertura de uma conexo de rede com outro computador, e como j
mencionado, a conexo com um banco de dados.
Captulo 6 - Tratamento de excees e entrada de dados 103
J na declarao da clusula catch, defne-se o cdigo a ser executa-
do, caso algum erro ou, no caso, uma exceo venha a acontecer durante a
execuo da instruo principal, presente na clusula try. O quadro abaixo
demonstra a organizao das clusulas try/cath que devem ser utilizadas
dentro do escopo de um programa Java.
...
try{
...
// trecho do cdigo a ser executado
}catch(Classe que trata a excecao){
...
// tratamento da exceo
}
...
Um detalhe importante a ser considerado est na possibilidade de exis-
tirem quantas clusulas catch forem necessrias para o melhor desempenho
da aplicao. Isto se deve ao fato de poderem existir vrios tipos de possveis
excees e obviamente, interessante que exista um tratamento especfco
para cada um desses gargalos do que, por exemplo, apenas um tratamento
generalista que possa vir a comprometer sua recuperao e continudade na
execuo do programa.
Alm disso, podem ocorrer situaes nas quais necessria a execuo
de alguma tarefa ou instruo, ocorrendo ou no uma falha no trecho de
cdigo principal, ou seja, com o perfeito funcionamento da aplicao ou no.
Aqui, entra em cena a clusula fnally, na qual defnido o bloco de cdigo
que ser executado havendo ou no o lanamento de uma exceo. Sua utili-
zao deve ocorrer aps a declarao das clusulas try e catch. Assim, temos
uma nova estrutura para o tratamento das excees nos Java, como apresen-
tado no trecho a seguir.

...
try{
...
// trecho de cdigo a ser executado
104 JAVA com Orientao a Objetos
}catch(Classe que trata a excecao){
...
// tratamento da exceo
}catch(Classe que trata a excecao){
...
// tratamento da exceo
`QDOO\^
...
/*cdigo a ser executado com ou sem
exceo */
}
...
Aqui, necessrio que faamos algumas consideraes para entender-
mos o tratamentos de excees. Conforme voc deve ter observado nos qua-
dros, a clusula catch obriga-nos a adotar uma classe que ser responsvel por
tratar os possveis erros que venham a ocorrer. As clusulas vistas at aqui de
nada serviriam se no existissem classes responsveis pela identifcao dos
erros lanados pela JVM, alm de possuir mtodos que possibilitem o enten-
dimento do problema e dos elementos para a sua recuperao. Existem algu-
mas classes que devem ser conhecidas para a sua manipulao, em conjunto
com as clusulas para tratar as excees mais comuns, sendo apresentadas
na Tabela 6.
Tabela 6. Principais excees.
Classe Funo
ArithmeticException
Classe utilizada para tratar as excees
em operaes aritmticas e lana uma
exceo quando estas so impossveis de
ser realizadas.
NullPointerException Utilizada para o controle de instncias e
ocorre quando um objeto instanciado.
Captulo 6 - Tratamento de excees e entrada de dados 105
NegativeArraySizeException
Classe utilizada para o controle de
vetores e ocorre quando um valor nulo
atribudo a uma posio do array.
ArrayIndexOutOfBoundsException
Utilizada para o controle de vetores e
ocorre quando se tenta acessar uma posi-
o do array que no existe.
IOException
Utilizada para tratar as excees nas ope-
raes de entrada e sada de dados.
Exception
Classe geral para o tratamento de exce-
es, ou seja, qualquer que seja o erro.
Alm disso, utilizada pelas demais classes
que tratam os erros por meio da herana.
Bom pessoal, assim como qualquer classe, as de exceo devem ser im-
portadas para a utilizao dentro de um programa. Como feito nos demais
captulos trabalhados at aqui, nada como implementar alguns exemplos
para a fxao dos novos e essenciais conceitos da linguagem Java vistos em
nosso sexto captulo. Assim, transcreva o cdigo observando a utilizao das
clusulas para o tratamento de excees, ento ao fnal, execute o programa
para visualizar o resultado.
// Classe Excecao.java
public class Excecao{
public static void main(String[] args){
int a = 20;
int b = 0;
int c = 0;
try{
c = a/b;
}catch(ArithmeticException e){
System.out.println(Problemas na operao);
System.out.println(e);
}
QDOO\^
106 JAVA com Orientao a Objetos
6\VWHPRXWSULQWOQ2SHUDomRQDOL]DGD
}
}
}
No exemplo apresentado, foi criado um programa que contm um
problema matemtico, com a diviso por 0. Assim, obrigamos que a clusula
catch seja executada. Verifque que todas as informaes necessrias para
o entendimento do problema so disponibilizadas pela instncia da classe
ArithmeticException. Alm disso, a clusula fnally executada ao fnal do
programa com o lanamento da exceo.
Nos ltimos anos, vrias tecnologias tm contribudo para o avano da
tecnologia Java, tornando-a mais interessante em diversos aspectos, incluin-
do tambm o tratamento de excees. Um novo conceito que vem ganhando
espao a Programao Orientada a Aspectos. A orientao a aspectos um
paradigma de programao que vem sendo desenvolvido para somar valor
POO (Programao Orientada a Objetos) e assim, tornar todo o processo de
programao mais efciente. Fica a dica de uma leitura complementar sobre
a Programao Orientada a Aspectos, que algo facilmente encontrado na
Web.
Outro detalhe sobre o tratamento de excees que deve ser comentado
que a tecnologia Java permite outra forma de realizar o tratamento. Este
consiste na utilizao da clusula throws.
6.1.1 Trows
Assim como nas clusulas try/catch, a throws a responsvel por tra-
tar os possveis erros que venham a acontecer, porm a clusula throws exige
que sejam listadas as classes que tratam as possveis excees que podem ser
disparadas na assinatura de um mtodo. Para ter uma melhor compreenso,
vamos sintaxe da clusula throws.
...
tipoDeRetorno nomeDoMetodo() throws ClasseDeExcecao1,
ClasseDeExcecao2, ...{
// corpo do mtodo
}
...
Captulo 6 - Tratamento de excees e entrada de dados 107
Aqui, cabe dizer que a nica diferena entre as duas sintaxes apresen-
tadas que as clusulas try/catch defnem seu bloco de cdigo que ser tra-
tado, caso ocorra alguma exceo. A clusula throws, por sua vez, sempre
defnida para um mtodo de uma classe, logo, a qualquer momento dentro do
mtodo ao ocorrer um erro, as classes defnidas so executadas para trat-lo.
Vamos a um exemplo para o conceito apresentado.
// Classe ExcecaoThrows.java
public class ExcecaoThrows{
public static String divisao(int a, int b)throws
ArithmeticException{
return O valor da diviso + a/b;
}

public static void main(String[] args){
int a = 20;
int b = 0;
int c = 0;
divisao(a,b);
}
}
Bom, conforme mencionado, o mtodo de diviso da classe
ExcecaoTrows.java utiliza a palavra reservada throws para invocar a clas-
se ArithmeticException para realizar o tratamento do erro matemtico.
Com o conhecimento adquirido para o tratamento de erros, abrimos espao
para tambm apresentarmos uma nova maneira de obter os dados oriun-
dos do teclado, que por meio da utilizao das classes BuferedReader e
InputStream.
6.2 Entrada de dados
Conforme voc j deve ter percebido, o mtodo apresentado, e que
voc conhece desde o incio da leitura de nosso livro, no qual utilizamos ob-
jetos da classe Scanner, possui suas limitaes,.alm de ser instvel e invivel
para as grandes quantidades de dados digitados. Pois bem, agora iremos veri-
fcar uma nova forma de realizar a manipulao dos dados vindos do teclado.
108 JAVA com Orientao a Objetos
Como j foi mencionado no incio de nosso livro, a classe System res-
ponsvel por controlar todas as funes do sistema. E por meio de System.in,
estamos lidando diretamente com as entradas de dados. At aqui, nenhuma
novidade. Porm, existem outras classes que substituem a classe Scanner na
manipulao dos dados, no caso, InputStream e BuferedReader. A primeira
reponsvel pela leitura do fuxo de entrada. A segunda, pela manuteno no
bufer dos dados que foram digitados at que seja pressionada a tecla Enter.
Pois bem, para que voc possa compreender e verifcar o funcionamento des-
sa modalidade de entrada de dados, vamos a um exemplo.
// ManipulacaoDados.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ManipulacaoDados {
public static void main(String args[]){
String dados = new String();
BufferedReader entr = new BufferedReader(
new InputStreamReader(System.in));
try {
System.out.println(Entre com a sua frase:);
dados = entr.readLine();
System.out.println(A frase digitada foi:+dados);
} catch (IOException e){
System.out.println(Erro ao ler string);
e.printStackTrace();
}
}
}
Voc deve estar perguntando: Mas, por que isso no foi apresentado
antes? No caso, esta metodologia de entrada de dados no foi demonstrada
anterioremente, pois necessitava do tratamento de excees, uma vez que
estamos lidando com alguns elementos critcos, tais como, a manipulao de
streams, bufer, e isso nos fora a lidar com um tratamento prvio dos riscos
que podem ser impostos nossa aplicao.
Captulo 6 - Tratamento de excees e entrada de dados 109
Entendendo o que foi feito em nosso exemplo, verifque que inicial-
mente foi declarada uma varivel de dados do tipo String, que receber os
valores oriundos do teclado. Para isso, no entanto, foi necessria a utiliza-
o dos objetos da classe BuferedReader e InputStream. A primeira, como
mencionado, apenas armazena os dados oriundos do teclado, obtidos por
meio da InputStrem, que responsvel por recuperar os dados de entrada
do sistema, no caso, o teclado, por meio de System.in. O mtodo readLine( ),
do objeto da classe BuferedReader, faz com que o sistema passe a esperar a
entrada de dados e armazen-los na memria durante a execuo.
Encerrando este captulo, vale resaltar que as duas classes citadas nes-
ta seo tambm so teis para a manipulao de arquivos, caracterstica
essa que consideraremos em nosso prximo captulo.
Captulo 7
Manipulao de arquivos de texto
Bom pessoal, chegamos ao nosso ltimo captulo e para fnalizarmos
os conceitos e as tecnologias introdutrias da tecnologia Java, nada como
aprendermos a criar, realizar a entrada e a leitura de dados nos arquivos tex-
to. Os conceitos trabalhados at aqui nos demais captulos sero essenciais
para uma melhor compreenso dos conceitos relacionados ao trabalho com
arquivos, principalmente os referentes ao tratamento de excees, conside-
rados no captulo anterior.
Estudar a manipulao de arquivos de extrema importncia, pois
geralmente todas as aplicaes trabalham com algum tipo de persistncia
de dados, uma vez que todos os exemplos realizados e apresentados at aqui
somente fazem uso da memria voltil de seu computador. Ou seja, todos os
dados so perdidos assim que fnalizamos nossa aplicao, como voc j deve
ter percebido.
Diante de tais fatos, a maneira mais bsica e simples de realizar a per-
sistncia dos dados por meio da utilizao de arquivos. Isso possibilita que
as informaes das aplicaes possam ser recuperadas aps sua fnalizao,
abrindo novas possibilidades para seus programas. Obviamente, existem
formas mais profssionais de manter os dados, como, por exemplo, a utiliza-
o de Sistemas Gerenciadores de Banco de Dados (SGBD), mas, em diversos
momentos, a manipulao de arquivos til e interessante, mantendo, na
maioria das vezes, neutralidade dos dados. Neste primeiro livro, no iremos
abordar a manipulao do banco de dados, uma vez que o objetivo aqui
fazer com que este livro seja um referencial para as disciplinas introdutrias
de programao.
A tecnologia Java fornece diversas classes e com isso, formas para o
trabalho com arquivos, no caso, a criao, armazenamento e recuperao de
dados. Ento, vamos apreci-las.
7.1 Arquivos
A primeira coisa que devemos tratar sobre a manipulao de arquivos
112 JAVA com Orientao a Objetos
com Java a oferta de um pacote destinado a manipul-los, denominado
java.io. esse pacote que mantm a maioria das classes que podem ser utili-
zadas para o trabalho com arquivos.
Um detalhe importante que deve ser mencionado que, em sua maio-
ria, os programadores tratam a leitura e a escrita, respectivamente, como
operaes de entrada e sada de dados em um arquivo. Tal notao uma
formalizao do processo e tambm comum em outras linguagens de pro-
gramao, tais como C e C++. Alm disso, a notao apresentada demonstra
uma relao do ponto de vista da aplicao, na qual o arquivo a ser lido passa
ser uma fonte de entrada de dados a serem processados e depois, saindo da
aplicao, eles so escritos e mantidos novamente no arquivo.
O java.io um dos pacotes mais extensos da tecnologia Java, com mais
de 50 classes que fornecem suporte para o trabalho com arquivos, alm de
funcionalidades como, por exemplo, a compactao de arquivos, mas, em
sua maioria, tais classes so classifcadas nos dois grandes grupos j men-
cionados, no caso, a entrada e a sada de dados. importante mencionar que
as operaes iro depender do tratamento de excees para a realizao da
manipulao dos arquivos. Geralmente, para estes casos, utilizada a classe
IOException que tambm faz parte do pacote java.io e traz funcionalidades
que auxiliam na recuperao dos erros que possam vir a acontecer.
Outro importante detalhe a ser mencionado sobre o pacote java.io
o fato de que as classes oferecidas permitem tambm o trabalho com arqui-
vos especiais como binrios, de bufer, como vimos no captulo anterior, ou
mesmo stream de vdeo e som. Aqui, no iremos considerar tais classes, mas
uma boa gama deste material pode ser encontrada na Web. Diante de tantas
possibilidades, necessrio que faamos uma seleo das principais para que
concentremos nossos esforos. No caso, estaremos trabalhando com FileReader,
Scanner, PrintWriter, FileInputStream, FileOutputStream, RandomAccessFile e
IOException.
7.2 Entradas
Indo ao que realmente interessa, no caso, a leitura de dados em arqui-
vos, que considerada uma forma de entrada de dados para uma aplicao, a
linguagem Java fornece uma classe que possibilita este processo - a FileReader.
Sua utilizao no apresenta nada fora do normal das demais classes consi-
deradas at aqui. Assim, devemos realizar a criao de um objeto da FileReader
Captulo 7 - Manipulao de arquivos de texto 113
que fornece atributos e mtodos para manipulao do arquivo.
Entretanto, a classe FileReader necessita da utilizao de uma classe
j conhecida para realizar o acesso e a manipulao dos dados vindos do ar-
quivo. Essa classe consiste na Scanner, classe com a qual j trabalhamos no
incio de nosso livro. Pois bem, se voc lembra, a Scanner responsvel por
auxiliar na manipulao dos dados que vm do teclado, acessando o atributo
de entrada de dados da System.in. Em nosso caso, s mudaremos a fonte dos
dados, que antigamente consistia no teclado e agora, o arquivo.
Iremos, agora, utilizar a classe Scanner para realizar operaes no obje-
to da classe FileReader, que faz referncia ao local onde se encontra o arquivo
de texto. Nada como um bom exemplo para entender o processo. Transcreva
o cdigo abaixo e execute-o para verifcar seu funcionamento.
// LerArquivo.java
import java.io.IOException;
import java.io.FileReader;
import java.util.Scanner;
public class LerArquivo{
public static void main(String[] args) {
FileReader arq = null;
try {
arq = new FileReader(
"c:\\programas\\Arquivo.txt");
} catch (IOException e) {
e.printStackTrace();
}
Scanner leitor = new Scanner(arq);
while(leitor.hasNextLine()){
String linha = leitor.nextLine();

System.out.println(linha);
}
}
}
114 JAVA com Orientao a Objetos
bom mencionar que, para nosso programa funcionar, o arquivo ao
qual fzemos a referncia com o objeto da classe FileReader deve estar no
mesmo local onde a classe se encontra. Uma forma de resolver este problema
passando o caminho de referncia completo para o local no qual o arquivo
se encontra, no caso, C:\programas\Arquivo.txt. importante citar que foi
necessria a realizao do tratamento de exceo que possa vir a acontecer,
como, por exemplo, o fato do arquivo no ser localizado. Isso obviamente foi
realizado com a utilizao das clusulas try/catch, alm da classe IOException.
Ainda em nosso exemplo, um objeto da classe Scanner foi instanciado, sen-
do passada, como parmetro, a instncia da classe FileReader, denominada
arq, que defne o caminho do arquivo, como j analisado. Aps, utilizada
a estrutura de repetio while para a leitura linha a linha do arquivo e uma
posterior impresso do contedo.
Conforme vimos, a manipulao de arquivos no Java trata-se de uma
rotina simples, sem muitos segredos, isso graas ao suporte que a tecnolo-
gia fornece. Entretanto, vale ressaltar que tais funcionalidades dependem da
correta utilizao das classes do pacote java.oi. Apresentado o conceito de en-
trada de dados, ou seja, a leitura de um arquivo, vamos ao processo de criao
e escrita ou, conforme j de seu conhecimento, sada de dados utilizando
a classe PrintWriter do pacote java.io.
7.3 Sadas
Aps verifcarmos como funciona o processo de entrada de dados, ire-
mos trabalhar com a criao e a gravao de dados em um arquivo no for-
mato de texto, utilizando para isso, a classe PrintWriter. Tal classe fornece
atributos e mtodos para a manipulao de arquivos, entretanto, aqui tam-
bm necessria a utilizao da classe IOException para o tratamento das
excees, assim como feito para a leitura de dados. Mas aqui, trataremos os
erros que venham a ocorrer no processo de criao e escrita dos dados.
Vamos colocar a mo na massa e escrever mais um exemplo. Neste
caso, um no qual iremos criar um arquivo e escrever uma mensagem dentro
deste.
// EscreverArquivo.java
import java.io.IOException;
import java.io.PrintWriter;
Captulo 7 - Manipulao de arquivos de texto 115
public class EscreverArquivo{
public static void main(String[] args) {
PrintWriter arq = null;
try {
arq=new PrintWriter("dados.txt");
arq.println("Mensagem escrita");
arq.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Vrios detalhes devem ser mencionados sobre o processo de criao
e escrita em arquivos. Inicialmente, um importante detalhe a ser descrito, e
que voc deve levar em considerao sobre a criao e a escrita, que se seu
arquivo j existir, ele ser recriado e com isso, todos os dados existentes ante-
riormente sero perdidos. Outro detalhe que para que todos os dados sejam
persistidos em um arquivo, necessrio que sempre ao fnal do processo de
escrita, ou seja, ao fnal da utilizao da instncia da classe PrintWriter, seja
feita a invocao do mtodo close( ). Tal processo pode ser contemplado no
exemplo anterior. Finalmente, no programa anterior, note que foi utilizado
para a escrita do contedo, o mtodo println( ), tambm da classe PrintWriter.
Ento, vamos tornar nosso exemplo mais interessante. Para isso,
iremos, com a utilizao da classe Scanner, capturar os dados do teclado e
persisti-los em um arquivo. Este ser nomeado com o nome defnido pelo
usurio. Ento, transcreva o cdigo e execute-o para verifcar seu adequado
funcionamento.
// CriandoArquivo.java
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
public class CriandoArquivo{
public static void main(String[] args) {
116 JAVA com Orientao a Objetos
Scanner entrada=new Scanner(System.in);
PrintWriter arq = null;
System.out.println("Nome do arquivo");
String nome = entrada.nextLine();
System.out.println("Entre com os dados");
String dados = entrada.nextLine();
try {
arq = new PrintWriter(nome);
} catch (IOException e) {
e.printStackTrace();
}
arq.println(dados);
arq.close();
}
}
Note que no exemplo, por meio do operador new e o construtor da
classe PrintWriter, foi passado o nome do arquivo a ser criado. Entretanto,
esse arquivo s ser efetivamente criado aps a execuo do mtodo close( ),
ou seja, ao fnalizar o programa. Com isso, verifcamos o processo de criao
e escrita em arquivos, sendo algo bem mecnico.
7.4 Streams
Outra possibilidade de trabalhar com a manipulao de entrada e sada
de dados consiste na utilizao das classes FileInputStream e FileOutputStream.
Essas classes so extremamente teis, pois nem s de arquivos com texto
natural vivem nossos programas. Estas so teis para as manipulaes de
todos os tipos de arquivos. Assim como nas demais classes vistas at aqui,
a FileInputStream e a FileOutputStream so fornecidas pelo pacote java.io.
Elas so utilizadas para manipular fuxos de bytes, ou seja, possibilita uma
manipulao em um nvel mais baixo. Estes dados, na maioria das vezes, se
alterados, comprometem sua estrutura e possvel utilizao. Ou seja, para
uma manipulao mais segura e da qual dependemos de uma maior seguran-
a, as classes so recomendadas.
Como os prprios nomes sugerem, a FileInputStream utilizada
para a entrada de dados e a FileOutputStream, para a sada. Um aspecto
Captulo 7 - Manipulao de arquivos de texto 117
importante a ser colocado aqui o fato de que assim como nas classes
FileReader e PrintWriter, j vistas, para as classes que auxiliam na manipulao
de streams tambm necessria a utilizao do tratamento de exceo. Para
ter uma melhor compreenso do que foi considerado, veja o exemplo a seguir
e execute-o.
// Classe ExemploStream.java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExemploStream{
public static void main(String[] args) {
FileOutputStream saida = null;
FileInputStream entrada = null;

try {
saida = new FileOutputStream(dados.txt);
saida.write(1010);
entrada= new FileInputStream(dados.txt);
System.out.print(entrada.read());
} catch (IOException e) {
e.printStackTrace();
}
}
}
No exemplo anterior, foi criado um arquivo e escrita uma linha de
stream com a utilizao do mtodo write( ) da classe FileOutputStream. Logo
aps, realizada a leitura dos dados escritos e a impresso destes por meio
do mtodo read( ) da classe FileInputStream. Repare que o processo de cria- o processo de cria-
o dos objetos para a manipulao dos arquivos de stream semelhante aos
realizados at aqui com outras classes pertencentes ao pacote java.io.
118 JAVA com Orientao a Objetos
7.5 Acessos aleatrios em arquivos
Em todos os exemplos apresentados at aqui, toda a leitura realizada
de maneira sequencial, ou seja, do incio do arquivo at seu fm, sempre nessa
ordem. No entanto, em diversas situaes, assim como no caso dos vetores,
isso pode ser caro computacionalmente. Imagine que voc esteja buscando
uma informao em um arquivo extenso e essa informao esteja apenas no
fnal do arquivo. Pois bem, para que voc chegue a essa informao, deve
percorrer todo o arquivo. Isso muitas vezes complica todo o processo. No
caso, muito mais econmico computacionalmente realizar a leitura de uma
posio especifca no arquivo ou mesmo a escrita em determinado ponto.
Para isso, a tecnologia Java fornece a classe RandomAccessFile, que possibilita o
trabalho de acesso aleatrio a posies dentro dos arquivos. A RandomAccessFile
mais uma classe que tambm faz parte do pacote java.io.
Bom, neste caso, a vantagem de manipular seus arquivos com as ins-
tncias dessa classe ntida, indo pontualmente no local no qual se dese-
ja escrever ou ler. Para tanto, so utilizados mtodos para as operaes nos
arquivos, tais como seek( ), length( ), read( ) e write( ), entre os principais.
Aqui, oriento que o exemplo seja transcrito e executado.
// Aleatorio.java
import java.io.IOException;
import java.io.RandomAccessFile;
public class Aleatorio{
public static void main(String[] args) {
try {
5DQGRP$FFHVV)LOHOHQHZ5DQGRP$FFHVV)LOH
dados.txt,rw);
OHVHHN
6\VWHPRXWSULQWOHUHDG
} catch (IOException e) {
e.printStackTrace();
}
}
}
Captulo 7 - Manipulao de arquivos de texto 119
Alguns aspectos do cdigo anterior devem ter chamado a sua ateno.
No caso, a classe RandomAccessFile trabalha com o conceito de defnio do
tipo e acesso, sendo que tal defnio realizada no momento da instancia-
o do objeto com a utilizao de seu construtor. Obviamente, so utilizados
parmetros no momento da abertura do arquivo para a defnio das permis-
ses no arquivo. Os tipos de acesso que podem ser trabalhados consistem,
respectivamente, nos atributos r e rw, que indicam que o arquivo deve ser
aberto somente para a leitura e quando podem ser realizadas operaes tan-
to de leitura quanto de escrita, respectivamente.
Para o posicionamento do cursor no arquivo na posio na qual
se deseja realizar a escrita ou a leitura, necessria a utilizao do mtodo
seek( ). Para a leitura, continuamos a trabalhar com o mtodo read( ), con-
forme demonstrado no exemplo. Da mesma forma, podemos realizar a es-
crita, sendo que para isso, utilizamos o mtodo write( ) da prpria classe
RandomAccessFile.
Aqui, entretanto, importante mencionar que existem diversas ver-
tentes do mtodo write permitindo que sejam trabalhados vrios tipos de
dados disponibilizados pela tecnologia Java. Existem mtodos, tais como
writeInt( ), writeBoolean( ) e writeChars( ), que possibilitam o tratamento de
cada tipo de dado. Isso auxilia o desenvolvedor, pois evita que seja perdido
tempo realizando sua converso ou mesmo manipulao para persistir os da-
dos. Para visualizar o resultado destas operaes, altere o exemplo anterior
conforme demonstrado a seguir.
// Classe Aleatorio.java
import java.io.IOException;
import java.io.RandomAccessFile;
public class Aleatorio{
public static void main(String[] args) {
try {
5DQGRP$FFHVV)LOHOHQHZ5DQGRP$FFHVV)LOH
dados.txt,rw);
OHVHHN
6\VWHPRXWSULQWOHUHDG
OHZULWH&KDUV(VFULWR
OHFORVH
120 JAVA com Orientao a Objetos
} catch (IOException e) {
e.printStackTrace();
}
}
}
No caso em especfco, a estrutura continua a mesma e deve ser reali-
zado o tratamento de excees, j que sua manipulao pode acarretar pro-
blemas para a aplicao.
Caro amigo, assim fnalizamos nossa leitura. Espero que este manus-
crito tenha sido de proveito para que voc entenda os detalhes e os conceitos
bsicos da programao baseada na tecnologia Java, principalmente os vin-
culados ao paradigma da programao orientada a objetos. Obviamente que
a tecnologia no se restringe somente aos tpicos mencionados at aqui. Po-
deramos citar a criao de aplicaes desktop com a utilizao da API Swing,
alm do acesso ao banco de dados com a JDBC (Java Database Connection)
ou ainda a criao de programas para dispositivos mveis ou Web, tudo ba-
seado no Java.
Mas, obviamente que minha inteno at aqui sempre foi garantir que
fossem apresentados os elementos que possam subsidiar o conhecimento
dessas novas ferramentas que esto sua disposio. Sinceramente, desejo-
-lhe sucesso nos seus desafos e espero rev-lo em breve.
Referncias
Bibliogrfcas
BOENTE, Alfredo. Aprendendo a Programar em Java 2: Orientado a
Objetos. Rio de Janeiro: Brasport, 2003.
ANSELMO, Fernando. Aplicando Lgica Orientada a Objetos em Java.
2. ed. Florianpolis: Visual Books, 2005.
CARDOSO, Caque. Orientao a Objetos na Prtica: Aprendendo
Orientao a Objetos com Java. Rio de Janeiro: Cincia Moderna, 2006.
DEITEL, Harvey M. Java: Como Programar. 6 ed. So Paulo: Pearson
Prentice Hall, 2005.
SANTOS, Rafael. Introduo Programao Orientada a Objetos
Usando Java. Rio de Janeiro: Campus, 2003.
PUGA, Sandra; RISSETTI, Gerson. Lgica de Programao e Estrutu-
ras de Dados: com Aplicaes em Java. So Paulo: Pearson Prentice Hall,
2004.
Horstmann, Cay; Cornell, Gary. Core Java, Volume 1 Fundamentos. 8
Edio. So Paulo: Pearson, 2010.
Block, Joshua. Java Efetivo - 2 Edio. Rio de Janeiro: Alta Books, 2008.
Furgeri, Sergio. Java 7 - Ensino Didtico. So Paulo: Editora rica, 2010.
Sierra, Kathy; Bates, Bert. Use a Cabea Java. Rio de Janeiro: Alta Books,
2005.
Apndice I
Instalao do Sdk e Confgurao das Variveis de
Ambiente (Windows Xp)
Para o download do JDK, siga os seguintes passos:
1. Acesse por meio de um navegador o endereo: http://java.oracle.
com
2. Aps acessar o endereo, clique no link Java SE em Downloads
ou em Top downloads.
3. Logo em seguida, clique no boto Java Platform para selecionar
a verso Standard Edition da tecnologia.
4. Aps isso, aceite o termo e selecione o tipo de Sistema Operacional
no qual a tecnologia ser executada. No caso do Windows, selecio-
ne conforme apresentado a seguir.
124 JAVA com Orientao a Objetos
5. Caso tudo tenha ocorrido conforme o esperado, ser aberta a jane-
la para o download do arquivo.
6. Depois, basta seguir as orientaes do software no momento de
sua instalao.
Para as variveis de ambiente, siga os seguintes passos:
1. Selecione Iniciar > Painel de Controle > Sistema.
Apndice I 125
2. Selecione Avanado > Variveis de Ambiente.
3. Clique em Nova.
126 JAVA com Orientao a Objetos
4. Em Nome da Varivel, digite JAVA_HOME.
5. Em Valor da Varivel, digite o caminho onde foi instalado o
Java em seu computador. Copie o caminho literalmente como
exibido, por exemplo, no Explorer.
6. Clique em OK.
7. Procure a varivel PATH, selecione-a e escolha Editar.
Apndice I 127
8. Em Valor da Varivel, acrescente ao valor j existente em seu
fnal: ;%JAVA_HOME%\bin.
9. Clique em OK.
10. Selecione Avanado > Variveis de Ambiente > Nova, assim
como foi feito para a criao da varivel JAVA_HOME. Se estiver
em dvida, observe o processo feito anteriormente.
11. Em Nome da Varivel, digite CLASSPATH.
12. Em Valor da Varivel, digite .;%JAVA_HOME%\lib\tools.jar.
13. Clique em OK.
14. Clique novamente em OK.
Para que voc tenha certeza dos efeitos das mudanas, reinicie o
sistema.
Apndice II
JAVADOC
1. Inicialmente, necessrio realizar o comentrio de documentao
em sua classe defnindo e seguindo os elementos defnidos pela tecnologia
Java. Existem diversas tags especiais defnidas pela tecnologia, que auxiliam
na defnio de informaes importantes e na formatao padro, tais como,
@author, @see e @return. Veja o exemplo:
/**
&ODVVHTXHGHQHDHVWUXWXUDGHXPFDUUR
* @see java.lang.Object
* @author Alex Coelho
*/
public class Carro{
public String cor;
public String marca;
public String modelo;

/**
* Construtor Carro
* @param Carro
* @throws Sem Excees
*/
public Carro(Carro novo){
this.cor = novo.cor;
this.marca = novo.marca;
this.modelo = novo.modelo;
}
/**
* Mtodo andar que imprime
* o valor String na tela
* @see java.lang.String
130 JAVA com Orientao a Objetos
*/
protected void andar(){
ligar();
System.out.println(Carro andando);
}

/**
* Mtodo parar que imprime
* o valor String na tela
* @see java.lang.String
*/
protected void parar(){
System.out.println(Carro parado);
}

/**
* Mtodo ligar que imprime
* o valor String na tela
* @see java.lang.String
*/
private void ligar(){
System.out.println(Carro ligado);
}
}
2. Feitos os comentrios necessrios, digite o comando javadoc em seu
prompt de comando para sua classe, como segue o exemplo:
javadoc NomeDaClasse.java
Veja o funcionamento:
Apndice II 131
Se tudo correu conforme o esperado, voc deve ter acesso a uma pgi-
na html na mesma pasta onde se encontra sua classe, como demonstrado
a seguir.
importante mencionar que a maioria das IDEs disponveis no mer-
cado possui algum tipo de suporte para agilizar e garantir a documentao
com Javadoc.
Para obter maiores informaes, acesse:
http://www.oracle.com/technetwork/java/javase/documentation/
index.html.
venda nas melhores livrarias.
Java na Web
Autor: Antnio Neto
896 pginas
1 edio - 2011
Formato: 16 x 23
lSBN: 9788539901241
A complexidade e o crescimento da Internet fez com que surgissem vrios
modelos e propostas para a comunicao entre aplicaes e que esses fossem
apresentados como opes de computao distribuda.
Este livro aborda as principais tecnologias da plataforma Java 2 Enterprise
:-
: K
-

vm se tornando uma das mais bem sucedidas para desenvolvimento em am-


biente Web.
:^W ^ > :^d> : :
&
,:t
-
sentados.
Impresso e acabamento
*UiFD GD (GLWRUD &LrQFLD 0RGHUQD /WGD
Tel: (21) 2201-6662