Você está na página 1de 131

TUTORIAL:

A LINGUAGEM DE PROGRAMAO
JAVA

E
ORIENTAO A OBJETOS
Instituto de Computao
Julho 199!
Atuali"ado #$$9%
And&' Au(usto Cesta% aa)esta*+ahoo%)om
O&ientado&a, -&o.
a
/&
a
Ce)0lia 1a&+ 2is)he& Ru3i&a
INFORMAO SOBRE COPYRIGHT
Cop+&i(ht 1994 IC 4 5NICA1-%
Este te6to e do)umentos &ela)ionados so p&ote(idos po& )op+&i(ht%
Esta pu3li)ao ' ap&esentada )omo est7 sem (a&antia de e&&os e mudanas8 se9am nos ende&eos
:5R;<s= 8 te6to ou do )>di(o &eutili"ado nos p&o(&amas e6emplo%
-a&a o3te& a ?ltima @e&so deste te6to )onsulte http://www.ic.unicamp.br/~cmrubira/aacesta/
Marcas Registradas:
Sun8 o lo(otipo da Sun8 Sun 1i)&os+stems8 Sola&is8 AotJa@a e Ja@a so ma&)as &e(ist&adas de
Sun 1i)&os+stems8 In)% nos Estados 5nidos e em al(uns out&os pa0ses% O pe&sona(em B/uCeD '
ma&)a &e(ist&ada de Sun 1i)&os+stems% 5NIE ' ma&)a &e(ist&ada nos Estados 5nidos e out&os pa0ses8
e6)lusi@amente li)en)iada po& EFOpen Compan+8 ;td%% Nets)ape Na@i(ato& ' ma&)a &e(ist&ada de,
BNets)ape Communi)ations Co&po&ationD%
Pre!ci":
Este te6to .a" pa&te de um estudo )ompa&ati@o de lin(ua(ens de p&o(&amao o&ientadas a
o39etos% O )onte?do deste estudo tam3'm est7 dispon0@el na Ge3 so3 o ende&eo
http://www.ic.unicamp.br/~cmrubira/aacesta/ % Neste ende&eo8 @o)H pode )omplementa& seu
ap&endi"ado8 &odando e6e&)0)ios ite&ati@os8 a)essando BlinCsD pa&a out&os hipe&te6tos so3&e
lin(ua(ens de p&o(&amao8 @endo e6emplos de p&o(&amas e inte&a(indo )om apli)aIes pa&a a
Inte&net%
A di.e&ena ent&e este estudo e out&os te6tos Jue @o)H possa en)ont&a& so3&e o mesmo assunto '
o )a&7te& p&7ti)o% E6emplos )ompletos8 di)as de p&o(&amao8 e6pli)aIes so3&e detalhes
no&malmente i(no&ados em li@&os8 to&na&o seu ap&endi"ado mais .7)il8 p&in)ipalmente na se(unda
pa&te onde t&atamos da )onst&uo de apli)aIes pa&a a Inte&net%
No ini)io8 os e6emplos podem se& )onside&ados .7)eis8 mas eles @o se )ompli)ando )ada @e"
mais de modo Jue ' impo&tante Jue o leito& a)ompanhe o te6to .a"endo os e6e&)0)ios% 2o&ne)e&emos
uma s'&ie de id'ias de p&o(&amas simples pa&a Jue @o)H possa testa& seu )onhe)imento% Estes
p&o(&amas simples podem se& melho&ados at&a@'s do uso de inte&.a)es (&7.i)as8 assunto Jue no '
)o3e&to neste tuto&ial%
#$EM %E&ERIA 'ER ESTE T$TORIA'
KualJue& leito& Jue tenha e6pe&iHn)ia )om pelo menos uma lin(ua(em de p&o(&amao%
%IAGRAMAO %ESTE TE(TO
Apesa& de Java se& uma lin(ua(em Jue se&@e pa&a @7&ios p&op>sitos8 o seu su)esso atual :'po)a
do seu lanamento em 199= se de@e a possi3ilidade de ela3o&ao de apli)aIes pa&a a Inte&net%
/ada a impo&tLn)ia deste aspe)to da lin(ua(em8 este te6to est7 o&(ani"ado de manei&a semelhante as
p7(inas en)ont&adas na GGG8 .&eJuentemente @o)H en)ont&a&7 dia(&amas )omo o se(uinte,
T5TORIA;
http://www.dcc.unicamp.br/~cmrubira/aacesta
Estudo comparativo de linguagens de programao orientadas a objetos. Nesta
pgina voc encontrar tutoriais sobre diversas linguagens orientadas a objetos,
dentre elas: C, !odula"#, Java. $uanto a %ava, voc ter a oportunidade de ver
c&digo de programas e test"los, al'm de poder ad(uirir a verso mais nova deste
te)to. Encontrar tamb'm lin*s para sites sobre orientao a objetos.
Este dia(&ama &ep&esenta um hipe&te6to Jue pode se& a)essado de modo a )omplementa& seu
estudo% A pa&te es)&ita em let&a maio& ' o ende&eo8 o te6to em it7li)o .a" um &esumo do )onte?do
desta p7(ina% 5sando estes BlinCsD ou dia(&amas @o)H en)ont&a&7 uma manei&a o&denada de ap&ende&
sem se pe&de& no ma& de in.o&maIes da Inte&net%
5R;, +ni,orm -esource .ocator, ' o endereo de um computador na internet
O dia(&ama a)ima apa&e)e&7 toda @e" Jue int&odu"i&mos uma pala@&a no@a% Caso @o)H en)ont&e
al(uma pala@&a des)onhe)ida8 3asta usa& o 0ndi)e &emissi@o pa&a o3te& sua de.inio%
M impo&tante lem3&a& Jue os hipe&te6tos )itados neste tuto&ial8 no so de nossa
&esponsa3ilidade% Como eles esto su9eitos a mudanas8 )ontamos )om a sua a9uda pa&a e.etua&mos
atuali"aIes8 )onte @o)H tam3'm )om a nossa a9uda na inte&net%
Os p&o(&amas e6emplo deste te6to so ap&esentados em )ai6as &etan(ula&es8 e todo )>di(o '
es)&ito em .onte di.e&ente da usada neste te6to )omum% O t&e)hos de )>di(o Jue apa&e)em
desmem3&ados de seus a&Jui@os8 tem .undo )in"a )la&o% Todos os a&Jui@os p&esentes dent&o dos
&etLn(ulos8 so a&Jui@os Bte6t4onl+D8 JualJue& .o&matao :ne(&ito= tem apenas .uno did7ti)a%
Os &esultados dos p&o(&amas so indi)ados pelo dia(&ama ao lado,
%I&ISO %O T$TORIA'
Este tuto&ial )ont'm uma seJuHn)ia de t>pi)os Jue pe&mite ap&esenta& a lin(ua(em so3 a >ti)a
da teo&ia de o&ientao a o39etos% A ap&esentao do modelo de o39etos da lin(ua(em e )on)eitos
&ela)ionados tais )omo polimo&.ismo8 t&atamento de e6)eIes est7 em p&imei&o plano% Ao lon(o
dessa ap&esentao8 em se(undo plano8 @o)H ap&ende&7 os aspe)tos 37si)os da lin(ua(em tais )omo
BloopsD8 des@ios )ondi)ionais8 et)%
Estes t>pi)os so .&eJuentemente &etomados8 )ada @e" de manei&a mais ap&o.undada% Kuando
te&minamos o assunto m'todos8 @o)H 97 est7 p&onto pa&a sa3e& o Jue so )ont&uto&es8 e ' e6atamente
isto Jue ensinamos% -o&'m o assunto )ont&uto&es no ' es(otado8 @o)H ainda @ai ap&ende& a usa&
)onst&uto&es em )on9unto )om a(&e(ao e depois em )on9unto )om he&ana%
A maio&ia dos leito&es .i)a ansiosa pa&a ap&ende& )omo )&ia& apli)aIes pa&a a Inte&net8 mas
depois de satis.eita esta ansiedade @oltam pa&a o ponto onde ap&endem )omo p&o(&ama& na lin(ua(em
e no apenas e6pe&imenta& )om a )&iao de 3otIes8 )ai6as de di7lo(o8 ima(ens8 et)% Se esse ' o seu
)aso8 ' &e)omend7@el um Btou&D pela GGG antes de )omea& a p&o(&ama&8 um 3om BsiteD pa&a
)omea& a pesJuisa& )om um B3&oNse&D )ompat0@el )om Java :Nets)ape Na@i(ato& #%$ ou
supe&io&= ' ,
A--;ETS
http://java.sun.com/applets/
Links para vrios applets, divididos por categorias: games, sound, busines, animation...
Divirta-se...
/00.E12: 2o pe(uenos programas escritos em %ava (ue podem ser embebidos em
documentos 3ipete)tos. 2o e)emplos de applets: anima4es, imagens, bot4es, etc.
/pplets podem suportar e,eitos de multimidia como sons, itera4es com o usurio
5mouse, teclado6, imagens, anima4es, gr,icos, etc.
Ao lon(o do te6to8@o)H pe&)e3e&7 Jue Ja@a ' e6)elente pa&a desen@ol@e& apli)aIes
)ome&)iais e pa&a se& usada em uni@e&sidades% Ja@a pode se& @ista )omo uma .uso de @7&ias
t')nolo(ias Jue @Hm sendo desen@ol@idas na 7&ea de )omputao8 de modo Jue estudantes dessa
lin(ua(em tem a opo&tunidade de toma& )ontato )om @7&ios t>pi)os &e)entes, p&o(&amao
)on)o&&ente8 sitemas dist&i3u0dos8 o&ientao a o39etos8 p&oto)olos da inte&net8 3usiness intelli(en)e e
uma s'&ie de out&os assuntos .7)eis de p&ati)a& nessa lin(ua(em%
M )la&o Jue os &esultados depende&o de seu es.o&o8 po&tanto depois de le& esta int&oduo8
des)anse um pou)o8 tome um )a.e"inho
1
% -ois du&ante o &estante do te6to espe&amos Jue @o)H se
en@ol@a )om a lin(ua(em8 &euse p&o(&amas en)ont&ados na Ge38 se )omuniJue )om )ole(as
p&o(&amado&es8 pa&ti)ipe de listas de dis)ussIes8 neNs(&oups :)omp%lan(%Java O
alt%NNN%hotJava=8 e o mais impo&tante, -ROPRA1E8 -ROPRA1E8 RE4-ROPRA1EQ
1
5m dos s0m3olos da lin(ua(em ' uma 60)a&a de )a.' Jue apa&e)e em animaIes )om sua .umaa Juente t&emulando%
A%#$IRIN%O O SOFT)ARE NECESS*RIO+ P'ATAFORMAS S$PORTA%AS
5m am3iente de p&o(&amao Java ' no&malmente )omposto de um Cit de desen@ol@imento de
apli)aIes Java e um B3&oNse& )ompat0@el )om esta lin(ua(em :&e)omend7@el=% Se @o)H no tem
a)esso a esse am3iente de p&o(&amao8 tente estes ende&eos,
B/OGN;OA/D
JAVA
http://Java.sun.com
-ai7 do 3iperte)to montado pelos criadores da linguagem. 2ob este endereo voc
pode obter o compilador e outras ,erramentas de desenvolvimento de aplica4es Java
para a sua plata,orma de programao. 8i(ue atento9 :utros desenvolvedores esto
criando ambientes de programao %ava como Eclipse.
B/OGN;OA/D
BBROGSERSD
http://www.netscape.com
-ai7 do 3iperte)to montado pelos criadores do Netscape Navigator. 2ob este
endereo voc pode obter o bro;ser Java compatible da Netscape Comunications
<NC=.. :utros desenvolvedores esto lanando bro;sers compat>veis com Java.
B/OGN;OA/D
BBROGSERSD
http://www.microsoft.com
/ microso,t licenciou a tecnologia %ava e a incorporou em seu novo bro;ser:
<nternet E)plorer verso #.? ou superior.
@-:A2E-2: 2o uma categoria de programas (ue permitem voc visuali7ar um
documento criado em um certo padro, no caso 3tml 53iperte)t mar*up language6.
/tualmente os bro;sers tem se tornado comple)os devido a (uantidade de padr4es
e)istentes 5e). imagens .gi, .jpg, etc6. / linguagem %ava pode contribuir para
minimi7ar esta comple)idade.
CARACTER,STICAS %A 'ING$AGEM
Parecida c"- C+ C..:
Java tem a apa&Hn)ia de C ou de CRR8 em3o&a a .iloso.ia da lin(ua(em se9a di.e&ente% -o& este
moti@o esta&emos .&eJuentemente .a"endo )ompa&aIes )om al(uma destas lin(ua(ens% O leito& Jue
p&o(&ama em JualJue& uma delas8 ou em uma lin(ua(em o&ientada a o39etos8 se senti&7 mais a
@ontade e se to&na&7 um 3om p&o(&amado& Java em menos tempo%
Java tam3'm possui )a&a)te&0sti)as he&dadas de muitas out&as lin(ua(ens de p&o(&amao,
O39e)ti@e4C8 SmalltalC8 Ei..el8 1odula4S8 et)% 1uitas das )a&a)te&0sti)as desta lin(ua(em no so
totalmente no@as% Java ' uma .eli" unio de te)nolo(ias testadas po& @7&ios )ent&os de pesJuisa e
desen@ol@imento de so.tNa&e%
%isti/ta de 0a1ascri2t,
1uita (ente )on.unde Java )om JavaScript% As duas lin(ua(ens so semelhantes na sinta6e8
mas di.e&em no sistema de tipos8 o&ientao a o39e)tos e out&os aspe)tos% Ja@as)&ipt tem sido
)om3inada )om su)esso )om Ja@a e d+nami) AT1; &esultando em apli)aIes d+nami)as )onhe)idas
)omo AJAX ena3led appli)ationsD.
C"-2i3ada:
5m p&o(&ama em Java ' )ompilado pa&a o )hamado B3+te4)odeD8 Jue ' p&>6imo as inst&uIes
de m7Juina8 mas no de uma m7Juina &eal% O B3+te4)odeD ' um )>di(o de uma m7Juina @i&tual
ideali"ada pelos )&iado&es da lin(ua(em% -o& isso Java pode se& mais &7pida do Jue se .osse
simplesmente inte&p&etada%
P"rt!1e3:
Java .oi )&iada pa&a se& po&t7@el% O B3+te4)odeD (e&ado pelo )ompilado& pa&a a sua apli)ao
espe)0.i)a pode se& t&anspo&tado ent&e plata.o&mas distintas Jue supo&tam Java :Sola&is8 GindoNs8
1a)FOs et)=% No ' ne)ess7&io &e)ompila& um p&o(&ama pa&a Jue ele &ode numa m7Juina e sistema
di.e&ente8 ao )ont&7&io do Jue a)onte)e po& e6emplo )om p&o(&amas es)&itos em C e out&as
lin(ua(ens%
Esta po&ta3ilidade ' impo&tante pa&a a )&iao de apli)aIes pa&a a hete&o(Hnea Inte&net% 1uitos
dos p&o(&amas e6emplo deste tuto&ial .o&am es)&itos e )ompilados numa plata.o&ma GindoNs49T
em 199 e &oda&am pe&.eitamente Juando simplesmente )opiados pa&a uma plata.o&ma Sola&is. m
Java um intei&o po& e6emplo8 tem semp&e S# 3its8 independentemente da a&Juitetu&a% O p&>p&io
)ompilado& Java ' es)&ito em Java8 de modo Jue ele ' po&t7@el pa&a JualJue& sistema Jue possua o
inte&p&etado& de B3+te4)odesD% 5m e6emplo de p&o(&ama es)&ito em Java ' a apli)ao de .ile
sha&in( multi4plata.o&ma )hamada imewire
!
%
Orie/tada a O45et"s:
A po&ta3ilidade ' uma das )a&a)te&0sti)as Jue se in)lui nos o39eti@os alme9ados po& uma
lin(ua(em o&ientada a o39etos% Em Java ela .oi o3tida de manei&a ino@ado&a )om &elao ao (&upo
atual de lin(ua(ens o&ientadas a o39etos%
Java supo&ta he&ana8 mas no he&ana m?ltipla% A ausHn)ia de he&ana m?ltipla pode se&
)ompensada pelo uso de he&ana e inte&.a)es8 onde uma )lasse he&da o )ompo&tamento de sua
supe&)lasse al'm de o.e&e)e& uma implementao pa&a uma ou mais inte&.a)es%
Java pe&mite a )&iao de )lasses a3st&atas% Out&a )a&a)te&0sti)a impo&tante em lin(ua(ens
o&ientadas a o39etos ' a se(u&ana% /ada a sua impo&tLn)ia o t>pi)o .oi es)&ito a pa&te%
Seg6ra:
A p&esena de )oleta autom7ti)a de li6o8 e@ita e&&os )omuns Jue os p&o(&amado&es )ometem
Juando so o3&i(ados a (e&en)ia& di&etamente a mem>&ia :C 8 CRR8 -as)al =% A eliminao do uso de
pontei&os8 em .a@o& do uso de @eto&es8 o39etos e out&as est&utu&as su3stituti@as t&a" 3ene.0)ios em
te&mos de se(u&ana% O p&o(&amado& ' p&oi3ido de o3te& a)esso a mem>&ia Jue no pe&ten)e ao seu
p&o(&ama8 al'm de no te& )han)es de )omete& e&&os )omuns tais )omo B&e.e&en)e aliasin(D e uso
inde@ido de a&itm'ti)a de pontei&os% Estas medidas so pa&ti)ula&mente ?teis Juando pensa&mos em
apli)aIes )ome&)iais desen@ol@idas pa&a a inte&net%
Se& Bst&on(l+ t+pedD tam3'm ' uma @anta(em em te&mos de se(u&ana8 Jue est7 aliada a
eliminao de )on@e&sIes impl0)itas de tipos de CRR%
A p&esena de me)anismos de t&atamento de e6)eIes to&na as apli)aIes mais &o3ustas8 no
pe&mitindo Jue elas a3o&tem8 mesmo Juando &odando so3 )ondiIes ano&mais% O t&atamento de
e6)eIes se&7 ?til na se(unda pa&te pa&a modela& situaIes tais )omo .alhas de t&ansmisso e
#
M impo&tante da& e6emplos pa&a Jue o leito& )u&ioso possa )on.e&i& o BlooC and .eelD e Jualidade das apli)aIes% -a&a
mais apli)aIes es)&itas em Ja@a @isite, http,FF9a@a4sou&)e%netF%
.o&matos in)ompat0@eis de a&Jui@os%
S62"rta c"/c"rr7/cia:
A lin(ua(em pe&mite a )&iao de manei&a .7)il8 de @7&ios Bth&eadsD de e6e)uo% Este t>pi)o
se&7 ?til Juando @o)H estuda& animaIes8 e ' pa&ti)ula&mente pode&oso nos am3ientes em Jue
apli)aIes Java so supo&tadas8 am3ientes estes Jue (e&almente podem mapea& os th&eads da
lin(ua(em em p&o)essamento pa&alelo &eal em m7Juinas Jue o supo&tam a e6emplo das m7Juinas
multi4)o&e%
Eicie/te:
Como Java .oi )&iada pa&a se& usada em )omputado&es peJuenos8 ela e6i(e pou)o espao8
pou)a mem>&ia% Java ' muito mais e.i)iente Jue (&ande pa&te das lin(ua(ens de Bs)&iptin(D
e6istentes8 em3o&a se9a mais lenta Jue C% Com a e@oluo da lin(ua(em8 se&o )&iados (e&ado&es de
B3+te4)odesD )ada @e" mais otimi"ados Jue t&a&o as ma&)as de pe&.o&man)e da lin(ua(em mais
p&>6imas das de CRR e C% Al'm disso um dia Java pe&miti&7 a possi3ilidade de (e&a& )>di(o
e6e)ut7@el de uma pa&ti)ula& a&Juitetu&a Bon the .l+D8 tudo a pa&ti& do B3+te4)odeD%
S62"rte 2ara 2r"gra-a89" de siste-as distri46:d"s:
Java .o&ne)e .a)ilidades pa&a p&o(&amao )om so)Cets8 &emote method )all8 t)p4ip8 et)% Estes
t>pi)os no se&o a3o&dados neste te6to%
PROGRAMAO ORIENTA%A A OB0ETOS
NOTA AOS PROGRAMA%ORES C
A leitu&a deste hipe&te6to ' .o&temente &e)omendada pa&a os p&o(&amado&es Jue tem BCD ou DCR
RD )omo sua p&in)ipal lin(ua(em de p&o(&amao8 mesmo antes de ini)ia& a leitu&a deste tuto&ial,
B/OGN;OA/D
BBROGSERSD
http://www.cafeaulait.or"/javatutorial.html
@re;ing Java: / 1utorial, +m tutorial de Java (ue segue o estilo do livro inicial
sobre C, escrito por Bernig3an C -itc3ie DEF, ' a re,erncia bsica para este te)to.
Cobre principalmente sinta)e de loops e outros assuntos ,ceis no abordados a(ui.
Ini)ia&emos )om um pouJuinho de teo&ia so3&e o&ientao a o39etos% Se @o)H Juise& al(um
hipe&te6to pa&a ap&o.undamento ou pa&a le& em pa&alelo )om esta int&oduo so3&e )lasses e o39etos e
use,
BT5TORIAISD
http://java.sun.com/docs/boo#s/tutorial/java/concepts/
<ntroduo a orientao a objetos e %ava em ingls
C'ASSES E OB0ETOS
5ma )lasse ' um tipo de.inido pelo usu7&io Jue )ont'm o molde8 a espe)i.i)ao pa&a os
o39etos8 al(o mais ou menos )omo o tipo intei&o )ont'm o molde pa&a as @a&i7@eis de)la&adas )omo
intei&os% A )lasse en@ol@e8 asso)ia8 .unIes e dados8 )ont&olando o a)esso a estes8 de.in04la impli)a
em espe)i.i)a& os seus at&i3utos :dados= e seus m'todos :.unIes=%
5m p&o(&ama Jue utili"a uma inte&.a)e )ont&olado&a de um moto& el't&i)o p&o@a@elmente
de.ini&ia a )lasse motor% Os at&i3utos desta )lasse se&iam, tempe&atu&a8 @elo)idade8 tenso apli)ada%
Estes p&o@a@elmente se&iam &ep&esentados na )lasse po& tipos )omo int ou float% Os m'todos desta
)lasse se&iam .unIes pa&a alte&a& a @elo)idade8 le& a tempe&atu&a8 et)%
5m p&o(&ama edito& de te6tos de.ini&ia a )lasse pa&7(&a.o Jue te&ia )omo um de seus at&i3utos
uma Strin" ou um @eto& de Strin"s8 e )omo m'todos8 .unIes Jue ope&am so3&e estas st&in(s%
Kuando um no@o pa&7(&a.o ' di(itado no te6to8 o edito& )&ia a pa&ti& da )lasse $ar%"rafo um o39eto
)ontendo as in.o&maIes pa&ti)ula&es do no@o te6to% Isto se )hama instan)iao ou )&iao do o39eto%
ESPECIFICAN%O $MA C'ASSE
Suponha um p&o(&ama Jue )ont&ola um moto& el't&i)o at&a@'s de uma sa0da se&ial% A @elo)idade
do moto& ' p&opo&)ional a tenso apli)ada e esta p&opo&)ional aos 3its Jue @o pa&a sa0da se&ial e
passam po& um )on@e&so& di(ital anal>(i)o%
Uamos a3st&ai& todos estes detalhes po& enJuanto e modela& somente a inte&.a)e do moto& )omo
uma )lasse8 a pe&(unta ' Jue m'todos e Jue at&i3utos de@e te& nossa )lasse8 Jue a&(umentos e @alo&es
de &eto&no de@em te& os m'todosV
Re2rese/ta89" da 1e3"cidade:
A @elo)idade do moto& se&7 &ep&esentada po& um at&i3uto intei&o :int=% 5sa&emos a .ai6a de 3its
Jue p&e)isa&mos8 )aso o @alo& de 3its ne)ess7&io no possa se& .o&ne)ido pelo tipo 8 usa&emos ento o
tipo lon"8 isto depende do )on@e&so& di(ital anal>(i)o utili"ado%
Re2rese/ta89" da sa:da seria3:
O moto& p&e)isa )onhe)e& a sua sa0da se&ial8 a sua li(ao )om o Bmoto& do mundo &ealD%
Suponha uma &ep&esentao em he6ade)imal do at&i3uto ende&eo de po&ta se&ial8 um poss0@el nome
pa&a o at&i3uto: enderecomotor% No se p&eo)upe em sa3e& )omo usa& a &ep&esentao he6ade)imal%
A3tera89" d" 1a3"r da 1e3"cidade:
Inte&namente o usu7&io da )lasse motor pode dese9a& alte&a& a @elo)idade8 )&ia4se ento o
m'todo, public void setSpeed&int newSpeed'(% O )>di(o ante&io& )o&&esponde ao )a3ealho do
m'todo ele ' de.inido 9unto )om a )lasse motor8 asso)iado a ela% O @alo& de &eto&no da .uno Jue
BimplementaD o m'todo ' void8 pode&ia se& )&iado um @alo& de &eto&no :boolean= Jue indi)asse se o
@alo& de @elo)idade e&a pe&mitido e .oi alte&ado ou no e&a pe&mitido e po&tanto no .oi alte&ado%
O ato de in@o)a& um m'todo tam3'm ' )hamado de passa& uma mensa(em pa&a o o39eto Jue
est7 e6e)utando este m'todo%
No .a" sentido usa&8 )hama&8 este m'todo sepa&ado de uma @a&i7@el do tipo moto&8 mas ento
po&Jue na lista de a&(umentos da .uno no se en)ont&a um moto&V Este pensamento &e.lete a
manei&a de asso)ia& dados e )>di(o :.unIes= das lin(ua(ens p&o)edu&ais% Em lin(ua(ens o&ientadas a
o39etos o )>di(o e os dados so li(ados de .o&ma di.e&ente8 a p&>p&ia de)la&ao de um tipo de.inido
pelo usu7&io 97 en(lo3a as de)la&aIes das .unIes ine&entes a este tipo8 isto se&7 e6pli)ado em
BC;ASSESD% O o39eto ao Jual ' apli)ado o m'todo ' passado de out&a .o&ma%
Note Jue no .o&ne)emos o )>di(o do m'todo8 isto no ' impo&tante8 po& ho&a a p&eo)upao '
)om a inte&.a)e de.inida pela )lasse, seus )a3ealhos de m'todos e at&i3utos% Apenas pense Jue sua
inte&.a)e de@e se& .le60@el de modo a no ap&esenta& ent&a@es pa&a a )&iao do )>di(o Jue se&ia .eita
numa out&a etapa% Nesta etapa te&0amos Jue ima(ina& Jue o @alo& num'&i)o da @elo)idade de@e i& pa&a
o )on@e&so& onde i&7 se t&ans.o&ma& numa di.e&ena de poten)ial a se& apli)ada nos te&minais do
moto&8 et)%
$- diagra-a si-23iicad" da c3asse -"t"r c"- "s atri46t"s e -;t"d"s:
Este e out&os dia(&amas deste te6to .o&am ela3o&ados )om uma .e&&amenta )ase pa&a Bo39e)t
o&iented modelin( and desi(nD se(undo a metodolo(ia des)&ita em W1X
Acess"res de atri46t"s:
Uo)H pode se pe&(unta& po&Jue no usamos um m'todo de nome alteraVelocidade&nova
velocidade' en@'s de setSpeed&newspeed'8 uma @e" Jue estamos es)&e@endo o tuto&ial e tam3'm
o )>di(o em lin(ua po&tu(uesa% A &a"o ' um pad&o de p&o(&amao Ja@a )hamado B3eansD Jue
espe)i.i)a Jue JualJue& m'todo Jue alte&e somente o @alo& de um at&i3uto de nome E de@e se )hama&
setX e JualJue& m'todo Jue &eto&ne o @alo& de um at&i3uto de nome E de@e se )hama& "etX%
Em3o&a esse pad&o no se9a o3&i(at>&io ele ' usado pois Se&@lets8 Re.le6o8 JS2 e out&as A-Is .a"em
uso dele% Esses m'todos so )hamados em in(lHs de a)esso&s o& (ette&s and sette&s%
E<erc:ci"s:
=>
;em3&e4se de al(um p&o(&ama em Jue @o)H t&a3alhou8 )ite Jue tipos de )lasses se&iam )&iadas
se esse p&o(&ama .osse es)&ito em Java8 Jue at&i3utos e Jue m'todos esta&iam asso)iados aos o39etos
dessas )lassesV /esenhe o dia(&ama de )lasse pa&a as )ada )lasse de o39etos identi.i)ada%
E<e-23": BEu t&a3alhei em um p&o(&ama de )ontas a pa(a& e )ontas a &e)e3e&% Se esse
p&o(&ama .osse es)&ito em Java eu de.ini&ia a )lasse conta)ancaria% Os at&i3utos se&iam, saldo8
ta*a+eJuros8 limite+eSa,ue8 et)% 1inha opo se&ia po& &ep&esent74los )omo @a&i7@eis do tipo
double :no se p&eo)upe em usa& os tipos da lin(ua(em inda'D% B/ent&e os m'todos desta )lasse
esta&iam .unIes pa&a e.etua& saJues8 dep>sitos e )omputa& 9u&os%D
OB0ETOS EM JAVA
O39etos so instLn)ias de uma )lasse% Kuando um o39eto ' )&iado ele p&e)isa se& ini)iali"ado8 ou
se9a pa&a uma ?ni)a )lasse de nome -studante+e.raduacao podemos te& @7&ios o39etos ati@os em
mem>&ia du&ante a e6e)uo de um p&o(&ama%
Estudante de (&aduao Andre! Identi.i)ao /01234! Cu&so 5omputacao Y Estudante de
(&aduao ui6a 8 Identi.i)ao 4/7!0/8 Cu&so 8edicina%%% A )lasse &ep&esenta somente o molde
pa&a a )&iao dos o39etos8 estes sim )ont'm in.o&mao8 @e9a t>pi)o BC;ASSES E OBJETOSD%
O at&i3uto Identi.i)ao tem @alo& 9Z$[1\ pa&a a instLn)ia :o39eto= And&' da )lasse Estudantes
de P&aduao%
<N21/NC</2: +m objeto e)istente durante um momento da e)ecuo de um
programa ' uma instancia de uma classe.
5ma )lasse e suas instan)ias, Cada estudante :ou instan)ia= pode&ia se&
modelado8 desenhado )omo,
O39etos podem )onte& o39etos8 ou se9a os at&i3utos de um o39eto podem se& o39etos8 da mesma
)lasse ou no% O39etos podem se& passados pela &ede8 a&ma"enados em meio .0si)o% O39etos possuem
um estado e um )ompo&tamento% 1'todos podem &e)e3e& o39etos )omo a&(umentos8 podem de)la&a&
o39etos )omo @a&i7@eis lo)ais8 podem )hama& out&os m'todos% Uo)H pode )hama& um m'todo :manda&
uma mensa(em= pa&a o39etos em out&as m7Juinas at&a@'s de sua &ede%
5m o39eto pode se& @isto )omo um RECOR/ de -as)al ou St&ut de C8 s> Jue )om uma ta3ela
de .unIes Jue podem se& )hamadas pa&a ele% Na @e&dade esta de.inio no ' muito te>&i)a8 mas '
um 3om )omeo pa&a os p&o(&amado&es Jue esto a)ostumados )om lin(ua(ens p&o)edu&ais% Na
@e&dade podemos .a"e& )om o39etos muito mais do Jue .a"emos )om &e)o&ds e p&o)edimentos em
-as)al%
Em Java8 ao )ont&7&io de CRR e 1odula4S8 no e6istem .unIes des@in)uladas de )lasses8
.unIes isoladas% Isto impli)a Jue todo t&e)ho de )>di(o Jue .o& es)&ito de@e pe&ten)e& a uma )lasse8
mais p&e)isamente de@e se& um m'todo desta% O p&o(&ama mais simples em Java de@e )onte& pelo
menos uma )lasse e um m'todo de in0)io de p&o(&ama8 e ' este p&o(&ama Jue .a&emos a(o&a%
Esta .iloso.ia ' simples e semelhante a adotada em Ei..el8 tudo o Jue se pode .a"e& )om
p&o)edimentos8 .unIes isoladas e @a&i7@eis de p&o)edimentos8 tam3'm se pode .a"e& )om )lasses e
m'todos% CRR tinha Jue pe&miti& a )&iao de .unIes isoladas pa&a mante& a )ompati3ilidade )om
BCD8 mas Java no% Kuando neste te6to usa&mos o te&mo .uno no lu(a& de m'todos esta&emos
mais inte&essados em en.ati"a& a pa&te de implementao em det&imento da inte&.a)e8 @o)H pensa& Jue
em Java toda .uno implementa um m'todo de uma )lasse%
O leito& no a)ostumado )om o pa&adi(ma de o&ientao a o39etos8 pode a)ha& est&anhas as
a.i&maIes a)ima8 e a pe&(unta mais )omum neste momento ', B1as ento )omo @o)H sa3e aonde @ai
)omea& o p&o(&amaVD% Antes da &esposta a essa pe&(unta8 leia o p&imei&o p&o(&ama e6emplo8 Jue '
semelhante ao p&imei&o p&o(&ama em C8 BAello Go&ldD8 p&esente em W#X%
PROGRAMA HE''O INTERNET?
Este e6emplo @isa ap&esenta& um p&o(&ama simples pa&a imp&imi& uma mensa(em na tela8 este
p&o@a@elmente se&7 seu p&imei&o p&o(&ama em Ja@a%
COMPILANDO UM PRIMEIRO PROGRAMA:
=4Ce&ti.iJue4se de te& adi)ionado a sua lista de
path<s o path do )ompilado& e inte&p&etado& Java.
Javac e Java &espe)ti@amente%
@4C&ie o a&Jui@o ao lado em um di&et>&io JualJue&
:B.olde&D pa&a usu7&ios ma)= e sal@e )om o nome,
9ello:nternet.Java
A4Chame o )ompilado& Java pa&a este a&Jui@o,
javac 9ello:nternet.Java
B4Seu di&et>&io de@e te& &e)e3ido um no@o a&Jui@o
ap>s essa )ompilao, HelloInternet.class
C4Chame o inte&p&etado& Java pa&a este a&Jui@o
:omita a e6tenso %)lass de a&Jui@o=, Java
HelloInternet
D4O3se&@e o &esultado na tela, 9ello :nternet;
//5omentario de uma linha
public class HelloInternet <
public static void main &Strin" ar"s=>' <
S?stem.out.println&@9ello :nternet;@'(
A
A
Hello Internet!
Res"31e/d" "s e1e/t6ais 2r"43e-as:
Compile este p&o(&ama% Uo)H pode de)idi& po& no p&osse(ui& enJuanto no )ompil74lo% Se
@o)H .o& )omo eu8 e p&in)ipalmente se ti@e& di(itado tudo ao en@'s de usa& B)op+ and pasteD8 ' 3em
p&o@7@el Jue ele no )ompile8 se isto o)o&&e&8 leia atentamente o p&o(&ama% Uo)H no esJue)eu o
ponto e @0&(ulaV E as )ha@esV 9ellointernet )omea )om let&a mai?s)ula8 e isso .a" di.e&ena
S
8 @o)H
S
Identi.i)ado&es em let&as mai?s)ulas e min?s)ulas so di.e&entes8 a lin(ua(em ' B)ase4sensiti@eD%
.oi )oe&ente )om a )on@eno adotada de let&as mai?s)ulas e min?s)ulas pa&a seus identi.i)ado&esV
Uo)H esta@a no mesmo di&et>&io de 9ello:nternet.java Juando )hamou o )ompilado&V E Juando
)hamou o inte&p&etado&V Tam3'mV
Se ainda no de& )e&to8 no se desespe&e8 leia as e6pli)aIes passo a passo do p&o(&ama e depois
&e)o&&a a um usu7&io mais e6pe&iente% No&malmente a Java ' muito .7)il de se p&o(&ama&8 e @o)H
p&e)isa&7 de pou)a a9uda8 o seu inte&esse o .a&7 )ada @e" mais .amilia& )om esta lin(ua(em%
E<23ica89" 2ass" a 2ass" d" 2r"gra-a e<e-23":
//5omentario de uma linha
Coment7&ios em Java se(uem a mesma sinta6e de CRR8 BFFD ini)ia uma linha de )oment7&io8
todo o &estante da linha ' i(no&ado% E6iste tam3'm um out&o tipo de )oment7&io .o&mado po& /B
:nsira a,ui o te*to a ser i"norado B/ 8 este tipo de )oment7&io pode se& inte&)alado em uma linha de
)>di(o% Coment7&ios so t&atados )omo espaos em 3&an)o%
public class 9ello:nternet <
class ' a pala@&a &ese&@ada Jue ma&)a o ini)io da de)la&ao de uma )lasse% $ublic ' um
espe)i.i)ado&8 po& enJuanto (ua&de public class )omo o in0)io da de)la&ao de uma )lasse% Toda
)lasses se&o de)la&adas assim at' o t>pi)o BENCA-S5;A1ENTO /E ATRIB5TOS E 1MTO/OS
CO1 -AC]APESENCA-S5;A1ENTO /E C;ASSES CO1 -AC]APESD%
9ello:nternet
M o nome dado a esta )lasse% O Ba3&e )ha@esD ma&)a o in0)io das de)la&aIes da )lasse Jue
so os at&i3utos e m'todos% Esta )lasse s> possui uma de)la&ao8 a do m'todo main8 note Jue um
m'todo8 ao )ont&7&io de CRR8 s> pode se& de)la&ado ^inte&namente_ a )lasse a Jual pe&ten)e8 e@itando
as )on.usIes so3&e Bes)opoD% /esta .o&ma8 todo pedao de )>di(o em Java de@e pe&ten)e& ao a3&e
)ha@es8 .e)ha )ha@es da de.inio de uma )lasse%
public static void main &Strin" ar"s=>' <
S?stem.out.println&@9ello :nternet;@'(
A
public
M um Juali.i)ado& do m'todo Jue indi)a Jue este ' a)ess0@el e6te&namente a esta )lasse :pa&a
out&as )lasses Jue e@entualmente se&iam )&iadas=8 no se p&eo)upe )om ele a(o&a8 apenas de)la&e
todos os m'todos )omo public% Uolta&emos a este assunto em BENCA-S5;AN/O 1MTO/OS E
ATRIB5TOSD%
static
M um out&o Juali.i)ado& ou Bspe)i.ie&D8 Jue indi)a Jue o m'todo de@e se& )ompa&tilhado po&
todos os o39etos Jue so )&iados a pa&ti& desta )lasse% Os m'todos static podem se& in@o)ados8 mesmo
Juando no .oi )&iado nenhum o39eto pa&a a )lasse8 pa&a tal de@e4se se(ui& a sinta6e:
CDome5lasseE.CDomemetodoStaticE&ar"umentos'( ou se9a 9ello:nternet.main&ar"s'(.
Reto&na&emos a esta e6pli)ao mais ta&de8 po& ho&a @o)H p&e)isa sa3e& Jue pa&ti)ula&mente o m'todo
main p&e)isa te& essa Juali.i)ao po&Jue ele ' )hamado sem Jue se )&ie nenhum o39eto de sua )lasse
:a )lasse 9ello:nternet=%
C6ri"sidade:
Se @o)H (osta de pa&ado6os e 97 )onhe)e um pou)o de o&ientao a o39etos8 pense Jue se o
m'todo main ti@esse Jue se& )hamado pa&a um o39eto :o Jue no ' o )aso= este o39eto te&ia Jue te&
sido )&iado em al(um out&o lu(a& ento este lu(a& se&ia o in0)io do p&o(&ama e main
0
dei6a&ia de te&
esta .inalidade%
A lin(ua(em de p&o(&amao Ei..el adota uma t')ni)a di.e&ente pa&a &esol@e& este p&o3lema,
todo p&o(&ama )omea )om a )&iao de um o39eto :e no mais a )hamada autom7ti)a de main=8 este
o39eto ' )hamado ROOT8 ele pode )onte& at&i3utos Jue so ini)iali"ados e um m'todo de
ini)iali"ao8 )onst&uto& do o39eto8 Jue ' o in0)io do )>di(o do p&o(&ama%
void
Semelhante ao void CRR ou C8 ' o @alo& de &eto&no da .uno8 Juando a .uno no &eto&na
nenhum @alo& ela &eto&na void8 uma esp')ie de @alo& @a"io Jue tem Jue se& espe)i.i)ado%
main
Este ' um nome pa&ti)ula& de m'todo Jue indi)a pa&a o )ompilado& o in0)io do p&o(&ama8 '
dent&o deste m'todo e at&a@'s das ite&aIes ent&e os at&i3utos8 @a&i7@eis e a&(umentos @is0@eis nele
Jue o p&o(&ama se desen@ol@e%
&Strin" ar"s=>'
M o a&(umento de main e po& )onseJuHn)ia do p&o(&ama todo8 ele ' um @eto& de St&in(s Jue '
.o&mado Juando so passados ou no a&(umentos at&a@'s da in@o)ao do nome do p&o(&ama na
linha de )omando do sistema ope&a)ional8 e6emplo,
Java 9ello:nternet ar"umentote*to3 ar"umentote*to!
No nosso )aso8 i(no&amos a poss0@el passa(em de a&(umentos @ia linha de )omando8
&eto&na&emos a este assunto mais ta&de%
^ %%% _
BA3&e )ha@esD e B.e)ha )ha@esD% -a&a Juem no )onhe)e C ou CRR8 eles podem se& entendidos
)omo al(o semelhante ao )-.:D -D+ de -as)al ou 1odula4S8 ou se9a, delimitam um 3lo)o de
)>di(o% Os p&o(&amado&es -as)al nota&o Jue @a&i7@eis lo)ais dos m'todos podem se& de)la&adas em
JualJue& lo)al ent&e as )ha@es% 1as po& moti@os de )la&e"a do )>di(o de)la&a&emos todas no in0)io do
a3&e )ha@es%
S?stem.out.println&@9ello :nternet;@'(
Chamada do m'todo println pa&a o at&i3uto out da )lasse ou o39eto S?stem8 o a&(umento ' uma
)onstante do tipo Strin"% O println assim )omo writeln de -as)al8 imp&ime a Strin" na sa0da pad&o e
posi)iona o )u&so& na linha a3ai6o8 analo(amente print no a@ana linha% -o& ho&a @o)H pode
(ua&da& esta linha de )>di(o )omo o )omando pa&a imp&imi& mensa(ens na tela8 onde o a&(umento
Jue @em ent&e aspas ' a Strin" a se& imp&essa% O ! Bponto e @0&(ulaD sepa&a ope&aIes%
_
2inalmente o .e)ha )ha@es te&mina )om a de)la&ao da )lasse 9ello:nternet%
C"/c36s9":
Z
main8 do in(lHs, -&in)ipal%
No&malmente o @olume de )on)eitos p&esentes num p&imei&o p&o(&ama de uma lin(ua(em
o&ientada a o39etos )omo Java ou Ei..el ' (&ande se )ompa&ado )om o de um p&imei&o p&o(&ama em
C ou -as)al% Esses )on)eitos ainda se&o ap&o.undados e so )itados aJui apenas po& )u&iosidade8 '
no&mal Jue @o)H no tenha entendido tudo%
/e a(o&a em diante no e6pli)a&emos mais )omo )ompila& os p&o(&amas%
E<erc:ci"s:
=>
E6pe&imente .a"e& modi.i)aIes no p&o(&ama 9ello:nternet% Imp&ima out&as mensa(ens na tela8
adi)ione )oment7&ios%
ATRIB$TOS
No p&o(&ama ante&io&8 no o3se&@amos a )&iao de nenhum o39eto
T
8 apenas a de)la&ao da
)lasse 9ello:nternet Jue )ontinha o m'todo main% O nosso p&o(&ama .un)ionou8 po&Jue o m'todo
main no p&e)isa de um o39eto espe)0.i)o pa&a se& in@o)ado%
Este e6emplo de)la&a uma )lasse :5irculo= e em se(uida )&ia um o39eto deste tipo em main e
alte&a o )onte?do desta @a&i7@el% 5ma )lasse ' pa&e)ida )om um &e)o&d de -as)al8 a nossa &ep&esenta
um )0&)ulo )om os at&i3utos raio e * 8 ?8 Jue so )oo&denadas )a&tesianas% Note Jue este o39eto no
possui m'todos ainda%
A )lasse )0&)ulo ' espe)i.i)ada em um a&Jui@o sepa&ado do a&Jui@o da )lasse Jue )ont'm o
m'todo main :in0)io do p&o(&ama=8 um a&Jui@o neste te6to ' &ep&esentado pelo &etLn(ulo en@ol@endo
um t&e)ho de )>di(o8 at' o t>pi)o BENCA-S5;A1ENTO /E C;ASSES CO1 -AC]APESD )ada
)lasse se&7 espe)i.i)ada em um a&Jui@o%
M impo&tante entende& este e6emplo8 Juando @o)H estuda& inte&.a)es (&7.i)as8 pode&7 usa& a
)lasse )0&)ulo p&'4de.inida na lin(ua(em pa&a desenha& )0&)ulos Jue se mo@em na tela% Em3o&a no
tenhamos e6pli)ado )om detalhes os tipos 37si)os da lin(ua(em8 usa&emos neste e6emplo o tipo float
:&eal=8 e nas e6pli)aIes o tipo Strin" e o tipo int :intei&o=% No .inal deste t>pi)o .o&ne)e&emos uma
e6pli)ao detalhada so3&e tipos%
//5lasse circuloF ar,uivo 5irculo.Java
public class 5irculo <
//so atributos entre as chaves
public float raio !!atributo raio "o circulo
public float #
//posicoes em coordenadas cartesianas
public float $
A
//5lasse principalF Ar,uivo $rincipal.Java
T
Na @e&dade a st&in( delimitada po& aspas ' um @alo& lite&al )ompilado em um o39eto da )lasse Strin" de Ja@a%
public class $rincipal <
public static void main&Strin" ar"s=>' <
Circulo u%circ //declaracao de uma variavel circulo no metodo main.
u%circ & ne' Circulo() !!alocacao "e**a +aria+el
S?stem.out.println&@&@ G u%circ,# G @F@ G u%circ,$ G @F@ G u%circ,raio G @'@'(
u%circ,# & u%circ,# - ./
S?stem.out.println&@&@ G u%circ,# G @F@ G u%circ,$ G @F@ G u%circ,raio G @'@'(
A
A
&1F1F1'
&32F1F1'
P"rE6e "s -ate-!tic"s /9" g"sta- de C+ C..+ Ja+a e Basic:
A de)la&ao umcirc.* H umcirc.* G 32 p&esente em nosso p&o(&ama dei6a os matem7ti)os
doidos pois de @o)H su3t&ai& umcirc.* de )ada um dos lados da Bi(ualdadeD a e6p&esso se to&na 1 H
32% O)o&&e Jue ` no ' o ope&ado& de teste de i(ualdade e sim de at&i3uio8 ele tem a mesma .uno
do ,` de -as)al a Jual os matem7ti)os ado&am% O ope&ado& de teste de i(ualdade em Java ' , HH

Mais s"4re arE6i1"s:
Como pode se& o3se&@ado8 )ada a&Jui@o te6to do p&o(&ama est7 en@ol@ido em uma moldu&a
&etan(ula&% Neste )aso as duas )lasses )&iadas, 5irculo e $rincipal8 esto em a&Jui@os sepa&ados% A
seJuHn)ia de alte&aIes em seu di&et>&io ou .olde& ',
I/ici": A2Fs 0a+ac A*Dua*Junta*,Ja+a:

O )ompilado& de@e se& )hamado pa&a am3os a&Jui@os% Ou @o)H pode usa& os )hamados
BNild)a&dsD

javac B.java% Nesse )aso a shell e6pande a%9a@a em uma lista de st&in(s )ontento todos
os a&Jui@os %9a@a do di&et>&io e passa essa lista )omo a&(umentos pa&a o )ompilado& 9a@a)%
Se- I/c36des:
Se @o)H 97 p&o(&ama em al(uma out&a lin(ua(em p&o@a@elmente de@e esta& )om a se(uinte

Gild4Ca&d8 do in(lHs, Co&in(a 8 )a&ta de 3a&alho% O a su3stitui os nomes de todos os a&Jui@os8 assim )omo o )o&in(a
pode sus3titui& todas as )a&tas em 9o(os de 3a&alho%
d?@ida, BUo)Hs usa&am o nome da )lasse 5irculo na )lasse $rincipal8 am3as esto em a&Jui@os
sepa&ados8 )omo o )ompilado& sa3e em Jue di&et>&io est7 a )lasse 5irculoV No ' p&e)iso .a"e& uma
esp')ie de Bin)ludeD ou &e.e&Hn)ia pa&a pode& usa& a )lasse 5irculo em out&o a&Jui@oVD
A &esposta ' no% O )ompilado& sa3e a)ha& se ela esti@e& so3 o di&et>&io de seu p&o(&ama% Se
@o)H ti@e& Jue dei6a& esta )lasse em out&o di&et>&io ento ela de@e .a"e& pa&te de um pa)Ca(e e @o)H
te&7 Jue impo&ta& e6pli)itamente este pa)Ca(e8 @e&emos )omo .a"H4lo mais ta&de%
C3asse Circulo e dec3ara89" de atri46t"s:
O p&imei&o a&Jui@o deste e6emplo )ont'm o )>di(o da )lasse 5irculo8 esta )lasse )ont'm t&Hs
at&i3utos % A de)la&ao de at&i3utos se(ue sinta6e semelhante a de CRR :ha@e&o a)&'s)imos a esta
sinta6e=,
-specificador8odo+eAcesso DomeIipo DomeAtributo(
public float raio(
public float *(
public float ?(
Todos os at&i3utos pe&ten)entes a )lasse so do tipo float :-onto .lutuante S#43it IEEE[TZ8 @e9a
ta3ela de tipos 37si)os=% Esto espe)i.i)ados )omo public o Jue si(ni.i)a Jue podem se& modi.i)ados
a pa&ti& de uma )lasse Jue usa um o39eto 5irculo se9a )omo @a&i7@el de m'todo ou )omo at&i3uto
:este tipo de modi.i)ao se&7 e6empli.i)ado na )lasse $rincipal=%
E6istem out&os espe)i.i)ado&es Jue a3o&da&emos mais adiante8 po& ho&a todos os m'todos e
at&i3utos Jue )&ia&mos de@e&o se& public% Uale lem3&a& Jue na de)la&ao de @a&i7@eis simples em
m'todos8 no .a" sentido usa& o -specificador8odo+eAcesso. Esta )lasse 5irculo no possui
m'todos%
Como e6emplo de de)la&ao de @a&i7@eis simples tome a de)la&ao de uma @a&i7@el Ci&)ulo
no m'todo main% Se(uida de sua alo)ao, u%circ & ne' Circulo() !!alocacao "e**a
+aria+el, Sem a alo)ao a @a&i7@el no pode se& usada% Note Jue os at&i3utos so po& de.ault
ini)iali"ados pa&a "e&o%
C3asse Pri/ci2a3 dec3ara89" e i/icia3iGa89" de atri46t"s:
A )lasse $rincipal no possui at&i3utos8 po&Jue nenhum o39eto desta )lasse ' )&iado ainda8
apenas seu m'todo main ' )hamado% O m'todo main de)la&a uma &e.e&Hn)ia pa&a o39eto da )lasse
5irculo, 5irculo umcirc(% Note Jue di.e&entemente de CRR no so ne)ess7&ios Bin)ludesD ou
Bheade& .ilesD pa&a pode& de)la&a& essa @a&i7@el de um BtipoD de.inido pelo usu7&io e e6istente em
out&o a&Jui@o%
Antes da &e.e&Hn)ia ao o39eto se& usada8 este p&e)isa se& alo)ado na mem>&ia o Jue ' .eito
at&a@'s de umcirc H new 5irculo&'(. Se @o)H ti@esse de)la&ado um o39eto da )lasse Strin"8 97
de.inida na lin(ua(em8 e depois .i"esse sua alo)ao8 o )>di(o se&ia semelhante ao se(uinte,
Strin" umastrin"(
umastrin" H new Strin"&Valor inicialJ'(
A di.e&ena )om a alo)ao do o39eto 5irculo ' Jue ent&e os pa&Hnteses in)luem um a&(umento
BUalo& ini)ialD8 isto o)o&&e po&Jue a lin(ua(em pe&mite Jue @o)H ap&o@eite a alo)ao de um o39eto
pa&a ini)iali"a& al(uns de seus at&i3utos8 isto se&7 e6pli)ado em BCONSTR5TORESD% Neste nosso
p&o(&ama8 os at&i3utos )ontidos na 7&ea de mem>&ia alo)ada po& new8 so alte&ados de out&a .o&ma%
C"3eta a6t"-!tica de 3i<":
BColeta autom7ti)a de li6oD ' a &e)i)la(em de 7&eas de mem>&ia no mais ne)ess7&ias ao
p&o(&amaFso.tNa&e% A desalo)ao do o39eto ' .eita pela lin(ua(em8 :Bautomati) (a&3a(e
)olle)tionD=8 @o)H no p&e)isa se p&eo)upa& )om ela )omo em CRR% Ap>s o .e)ha )ha@es de main8 a
mem>&ia do o39eto umcirc 97 pode se& li3e&ada8 o Jue no&malmente no o)o&&e de imediato8 pois o
am3iente da lin(ua(em e6e)uta um Bt&eadD em 3ai6a p&io&idade Jue li3e&a de tempos em tempos os
espaos inutili"ados de mem>&ia8 ti&ando p&o@eito po& e6emplo de e@entuais pausas de ite&ao do
usu7&io )om o p&o(&ama%
13read: 0or e)ecutar em um tread entenda paralelamente ou (uase paralelamente,
voltaremos a este t&pico mais adiante em 13reads.
Acess" a"s atri46t"s e -;t"d"s e a3tera8Hes d"s atri46t"s:
O a)esso aos at&i3utos da @a&i7@el :o39eto= umcirc de@e se& .eito usando o nome do o39eto e o
nome do at&i3uto deste8 sepa&ados po& um ponto, umcirc.raio H 31.1( % Note Jue raio so"inho no .a"
sentido no p&o(&ama8 p&e)isa4se espe)i.i)a& de Jue o39eto se dese9a alte&a& ou o3te& o &aio%
A sinta6e de )hamadas de m'todos ' semelhante a sinta6e des)&ita a)ima8 s> Jue ao en@'s de
nome do at&i3uto temos o nome do m'todo se(uido dos pa&Hnteses Jue podem )onte& "e&o ou mais
a&(umentos% Uolte ao p&imei&o p&o(&ama :9ello:nternet= e @e&i.iJue a de)la&ao do m'todo mainF
onde )hamamos o m'todo println&' pa&a o o39eto S?stem.out .
I-2ri-i/d" 1ari!1eis d" ti2" 2"/t" 36t6a/te Ifloat) e i/teir" IintJ /a te3a:
S?stem.out.println&@&@ G umcirc.* G @F@ G umcirc.? G @F@ G umcirc.raio G @'@'(
O a&(umento de println Jue )onhe)emos ' uma ?ni)a @a&i7@el do tipo Strin"8 no entanto o
)>di(o a)ima mistu&a nos a&(umentos desse m'todo os se(uintes elementos, Strin"s: &8
ope&ado&es , G8 e @a&i7@eis float, umcirc.?% 2i)a muito .7)il de @o)H entende& po&Jue isto .un)iona se
pensa& Jue R ' tam3'm ope&ado& de )on)atenao de Strin"s e Jue os a&(umentos int ou float e de
out&os tipos 37si)os desse m'todo so )on@e&tidos pa&a Strin"s.
I-2"rta/te a"s E6e /9" 2r"gra-a- e- C "6 C..+ "s "2erad"res & e &&:
Em Java8 C8 e CRR o ope&ado& ` :i(ual= tem a .uno de at&i3uio e o ope&ado& HH :i(ual
i(ual= tem a .uno de )ompa&ao ent&e @alo&es8 &eto&nando o @alo& 3ooleano @e&dadei&o se estes
@alo&es .o&em idHnti)os% Al(uns podem no a)ha& esta es)olha de ope&ado&es sensata8 p&in)ipalmente
os matem7ti)os8 mas )om um pou)o de uso da lin(ua(em ela se to&na&7 autom7ti)a%
C$RIOSI%A%E IsF 2ara 2r"gra-ad"res C e C..J+ e3i-i/a89" d" 2r"43e-a E6e "c"rre e- C e
C.. c"- "s "2erad"res K e KK :
Em C8 CRR e tam3'm em Java ' pe&mitido es)&e@e&,
int iFjF#(
iH1(
jH#HiG7( //finalF j vale 7F # vale 7 e i continua valendo 1
Essas at&i3uiIes em )adeia pe&mitem es)&e@e& )>di(o mais )ompa)to8 elas .a"em sentido
po&Jue at&i3uiIes nessas lin(ua(ens possuem @alo&es8 assim #HiG7! no .inal tem o @alo& de # Jue '
i(ual a iG7% O @alo& de jH... %no nosso e6emplo ' des)a&tado8 i(no&ado pois no h7 nada a esJue&da
desta at&i3uio% Em C e CRR e6iste um p&o3lema (&a@e Jue ' .&eJuentemente uma )ilada pa&a os
p&o(&amado&es -as)al e out&os%
O p&o3lema ' Jue nessas duas lin(ua(ens :C e CRR= no e6iste o tipo 3oolean8 no lu(a& deste
tipo ' usado o tipo int :intei&o=8 onde 1 si(ni.i)a @e&dadei&o e $ .also% Assim em C e CRR :mas no em
Java= aHHa tem @alo& 3 )om o si(ni.i)ado dad" 2e3" 2r"gra-ad"r de t&ue ou @e&dadei&o8 mas
aH3G1( tam3'm tem )omo &esultado o @alo& 3F mas a(o&a )om o si(ni.i)ado intei&o8 num'&i)o% O
)ompilado& no sa3e distin(ui& ent&e os si(ni.i)ados num'&i)o e 3ooleano%
Essa am3i(uidade .a" )om Jue p&o(&amado&es :C ou CRR= no a)ostumados )om esta
)on@eno de ope&ado&es H e HHF in)o&&am no e&&o de es)&e@e& jH3 Juando na @e&dade Jue&iam di"e&
jHH38 mas pa&a o )ompilado& am3as as e6p&essIes tem @alo& intei&o de modo Jue se esse en(ano
o)o&&e& num teste de pa&ada de um loop8 pode o)o&&e& Jue ele nun)a pa&e8 pois 1 tem o mesmo @alo&
de t&ue%
Java elimina este tipo de e&&o int&odu"indo o tipo boolean )om os @alo&es true e false8 Jue
no tem nenhuma &elao )om o tipo int e JualJue& out&os tipos%
TIPOS B*SICOS O$ TIPOS PRIMITI&OS E CONSTANTES O$ &A'ORES 'ITERAIS
:pa&a nossa so&te os tipos 37si)os8 tam3'm )onhe)idos )omo tipos p&imiti@os8 so os mesmos pa&a
JualJue& am3iente de p&o(&amao Ja@a8 po&Jue a lin(ua(em ' po&t7@el=,
char Ca&a)te&e 5NICO/E 143it
O tipo char :)a&a)te&e 5NICO/E= ' &ep&esentado )om 143its sem sinal8 o Jue pe&mite
ende&ea& de $ a KLL7L% O o39eti@o desta opo ' pe&miti& inte&na)ionali"ao da lin(ua(em8 3em
)omo a pad&oni"ao% Constantes do tipo )a&a)te&e apa&e)em ent&e ap>st&o.es, ba<8 b1<8 bc<%
Ta4e3a de caracteres es2eciais:
:ao )ont&7&io de CFCRR8 no e6iste um )a&a)te&e espe)ial pa&a o som de 3eep ou 3ell =
Rep&esentao @isual, 2uno8 si(ni.i)ado,
Mn -ula linha8 line.eed
Mr Reto&no de )a&&o
Mb Ba)Cspa)e
Mt Ta3ulao
Mf 2o&m.eed
MN Ap>st&o.e
MJ Aspas
MM Ba&&a in@e&sa
Mu!!7d Ca&a)te&e uni)ode
M"fa O)tal
Mfff Ae6ade)imal

boolean Ualo& true ou false8 di.e&ente &ep&esentao de CRR8 sem )on@e&so em out&os tipos%
O tipo boolean no tem &elao nenhuma )om out&os tipos :)oe&o=% Eliminando p&o3lemas
Jue su&(i&am po& e6emplo em CRR Jue usa intei&os pa&a &ep&esenta& @alo&es 3ooleanos% Os poss0@eis
@alo&es so true e false Jue so os &esultado dos testes l>(i)os%
boolean pertenceAo5onjunto( //declara variavel
pertenceAo5onjunto H true( //e*emplo
b?te Intei&o \43it 8 )omplemento de #8 .ai6a,41#\ at' 1#[
short Intei&o 143it8 )omplemento de #8 .ai6a,4S#[\ at' S#[[
int Intei&o S#43it8 )omplemento de #8 .ai6a,4#1Z[Z\SZ\ at' #1Z[Z\SZ[
lon" Intei&o Z43it8 )ompl% de #8 .ai6a,49##SS[#$S\TZ[[T\$\ at' 9##SS[#$S\TZ[[T\$[
No e6istem espe)i.i)ado&es de tipos )omo unsi(ned8 todos os tipos Bintei&osD tem sinal%
&a3"res 3iterais, O Jue @o)H @H nem semp&e ' o Jue @o)H tem: 5m @alo& )omo !//2/!0L4 '
)onside&ado int )omo pad&o8 se @o)H Jue& at&i3ui& esta )onstante a um lon"8 .aa o Bt+pe )astD
e6pli)itamente,
lon" a(
a H &lon"'!//2/!0L4( //a recebe $:
Ou ento use uma te&minao em pa&a indi)a& Jue o n?me&o de@e se& &ep&esentado )omo lon",
lon" a H !//2/!0L4( //ou minusculo
-a&a indi)a& @alo&es o)tais ante)eda4os )om um "e&o, 1000 8 97 pa&a @alo&es he6ade)imais ante)eda4
os )om 1X ou 1*8 e6emplo, 1*)5+0
float -onto .lutuante S#43it IEEE[TZ
double -onto .lutuante Z43it IEEE[TZ
5m @alo& )omo 7.303L/!KL ' )onside&ado double )omo pad&o8 se @o)H Jue& at&i3ui& esta
)onstante a um float8 .aa o t+pe )ast e6pli)itamente,
float a(
a H &float'7.303L/!KL( //a recebe $:
Ou ento usa& uma te&minao em . pa&a indi)a& Jue o n?me&o de@e se& &ep&esentado )omo float,
float aH7.303L/!KLf //ou O maiusculo
E6poentes podem se& es)&itos usando o )a&a)te& e ou E, KF1!-!7 ou 3.741KL4eP!7 . Onde eP38
si(ni.i)a multipli)ado po& de" ele@ado a menos 1 ou B1.3% O sepa&ado& de )asas de)imais ' o ponto%
Apesa& de todas estas &e(&as pa&a uso de @alo&es lite&ais8 Juando dois n?me&os de tipo di.e&entes
)omo double e int so usados em um )7l)ulo do lado di&eito de uma at&i3uio8 @o)H no p&e)isa
.a"e& o Bt+pe )astD desses @alo&es% O )ompilado& p&omo@e o n?me&o do tipo mais .&a)o pa&a o tipo
mais .o&te antes de .a"e& o )7l)ulo :se&ia 3om se .un)ionasse assim em emp&esas tam3'm onde o
.un)ion7&io mais .&a)o se&ia p&omo@ido ao n0@el do mais .o&te no p&o9eto e ento eles t&a3alha&iam
9untos pa&a e6p&essa& seu t&a3alho=% Uo)H pode dese9a& .a"e& o t+pe )ast do &esultado8 pa&a at&i3ui& a
uma @a&i7@el lon" po& e6emplo%
E<erc:ci"s:
=>
Repita o mesmo e6emplo s> Jue a(o&a mo@a o )0&)ulo alte&ando as )omponentes * e ?% ColoJue
o )0&)ulo na posio :1%$8 1%$=8 at&a@'s de at&i3uiIes do tipo acirc.* H 3.1( % A)ompanhe todas as
modi.i)aIes do o39eto imp&imindo seus at&i3utos na tela%
@>
Simpli.iJue o p&o(&ama ante&io& &eti&ando o at&i3uto raio% Uo)H pode da& o nome de $onto ou
$onto.eometrico pa&a esta )lasse% No se esJuea de )ompila&8 use o )ompilado& )omo .e&&amenta
pa&a @e&i.i)a& se @o)H ap&endeu )o&&etamente a sinta6e da lin(ua(em% A(o&a es)&e@a a )lasse Ci&)ulo
)ontendo um ponto )hamado )ent&o%
A4
Rees)&e@a a )lasse 5irculo pa&a t&a3alha& )om at&i3utos do tipo int%
ATRIB$TOS E MLTO%OS
Os m'todos dete&minam o )ompo&tamento dos o39etos de um )lasse% Kuando um m'todo '
in@o)ado8 se di" Jue o o39eto est7 &e)e3endo uma mensa(em :pa&a e6e)uta& uma ao=% Como
e6emplo se meu )a&&o ' um o39eto e desli(a& o ala&me ' um m'todo pode&iamos es)&e@e& em Ja@a da
se(uinte .o&ma a )hamada pa&a desli(a& o ala&me, meu5arro.desli"arAlarme&'%
-&o(&amas )omple6os .o&mam )on9untos de o39etos Jue t&o)am mensa(ens ent&e si (e&en)iando
in)lusi@e os &e)u&sos do sistema%
O p&o(&ama a se(ui& e6empli.i)a )hamadas de m'todos8 pa&a tal de.ine um o39eto Jue se&@e
)omo )ontado&8 a implementao &ep&esenta a )onta(em no at&i3uto num Jue ' um n?me&o intei&o%
Os m'todos so simples, incrementa adi)iona um ao )ontado& em JualJue& estado e comeca
ini)iali"a a )onta(em em "e&o% +ecrementa .a" o oposto de incrementa%
//5lasse 5ontadorF ar,uivo 5ontador.Java
public class 5ontador <
public int num( //este Q o atributo
//numero do contador
public +oi" incre%enta() 1
nu% & nu% - . !!ace**o ao atributo
2
public +oi" "ecre%enta() 1
nu% & nu% 3 .
2
public +oi" co%eca(int n)
!!co%eca a contar
1
nu% & n
2
A
//5lasse principalF Ar,uivo $rinc.Java
public class $rincipal <
public static void main&Strin" ar"s=>' <
5ontador umcont(
//declaracao de atributo contador
umcont H new 5ontador&'(
//alocacao
u%cont,co%eca(4)
S?stem.out.println&umcont.num'(
u%cont,incre%enta()
S?stem.out.println&umcont.num'(
A
A
1
3
E<erc:ci"s:
=>
/e.ina um m'todo )hamado mostra pa&a a )lasse )ontado&% Este m'todo de@e imp&imi& o estado
do )ontado& na tela% A implementao deste m'todo depende de onde @o)H est7 imp&imindo o estado
do )ontado&V -ense em p&o(&amas de inte&.a)es (&7.i)as e de linha de )omando%
@>
C&ie uma )lasse )ontado& )0)li)o8 e6emplo o )ontado& de minutos de &el>(ios di(itais,
$818#8%%%8T[8T\8T98$818#8%%% % A ope&ao modulo ou &esto da di@iso intei&a8 tem sinta6e semelhante a de
CRR, a R b HH aP&&int'a/b'Bb. No tente usa& a est&utu&a de de)iso if ainda%
M!E6i/as de estad"s:
Olhando pa&a o desenho )ontido no )anto di&eito supe&io& do a&Jui@o da Classe )ontado&8 @o)H
)onse(ue ima(ina& este )ontado& )omo uma m7Juina de estadoV O uso de o39etos )omo m7Juinas de
estados ' um dos )on)eitos Jue e6empli.i)a&emos deste te6to%
Si/ta<e de dec3ara89" de -;t"d"s:
A sinta6e simpli.i)ada pa&a a de)la&ao de m'todos de uma )lasse ',
especificadordeacesso tipoderetorno nomedometodo&lista+eAr"umentos' < /Bcodi"o B/ A.
5ma di.e&ena do uso de .unIes )omuns em lin(ua(ens no o&ientadas a o39etos e do uso de
m'todos ' Jue )omo o m'todo est7 de.inido na )lasse8 ele (anha a)esso di&eto aos at&i3utos8 sem
p&e)isa& usa& o BpontoD8 e6emplo umSobjeto.atributo(. ;em3&e4se Jue as )hamadas de m'todos em
um p&o(&ama 97 se &e.e&em a um o39eto espe)0.i)o8 em3o&a os m'todos se9am de.inidos de uma .o&ma
(e&al e pa&amet&i"ada pa&a toda a )lasse% Uolte a(o&a ao m'todo main e @e&i.iJue sua sinta6e%
t5i*6
this ' uma pala@&a )ha@e usada num m'todo )omo &e.e&Hn)ia pa&a o o39eto )o&&ente8 ela tem o
si(ni.i)ado de, Bo o39eto pa&a o Jual este t&e)ho de )>di(o est7 sendo e6e)utadoD%
Suponha uma )lasse Jue possui a se(uinte de)la&ao de at&i3uto, public int ,ual,uer( % Se
Juise&mos em um m'todo desta )lasse alte&a& o at&i3uto ,ual,uer pa&a o @alo& 78 3asta es)&e@e&
,ual,uer H 7( 8 mas este )>di(o es)&ito dent&o de um m'todo da )lasse Jue de)la&a ,ual,uer8 '
totalmente eJui@alente a this.,ual,uer H 7( 8 sendo o ?ltimo uma opo mais )la&a e )apa" de
elimina& am3i(uidades ent&e os nomes dos at&i3utos de uma )lasse e os nomes dos a&(umentos de um
dos m'todos desta :Juando estes nomes .o&em i(uais=% O uso de this tam3'm ' @7lido .a"e& pa&a
)hamadas de m'todos pa&a o o39eto )o&&ente%
Si/ta<e de cMa-ada "6 acess" a -;t"d"s:
A sinta6e de )hamada ou a)esso d m'todos ' semelhante a sinta6e de a)esso aos at&i3utos8 )om
e6)eo dos pa&Hnteses Jue )ont'm a lista de a&(umentos da .uno Jue implementa o m'todo8
mesmo Jue a lista se9a @a"ia eles de@em esta& p&esentes, umcontador.incrementa&'(. -&imei&o
inse&e4se o nome do o39eto e depois a )hamada da .uno8 estes so sepa&ados po& um ponto%
Cuidado pa&a no esJue)e& os pa&Hnteses em p&o(&amas .utu&os8 este ' um e&&o 3astante )omum%
N"1a 1ers9" d" 2r"gra-a Circulo:
A(o&a &eap&esenta&emos o p&o(&ama 5irculo 3aseado no e6emplo a)ima8 po&'m um pou)o mais
)ompli)ado,
M;t"d" %o+e:
O m'todo move alte&a as )oo&denadas do o39eto% O o39eto tem suas )oo&denadas * e ? somadas
)om os a&(umentos dessa .uno% Note Jue este m'todo &ep&esenta uma manei&a mais se(u&a8 )la&a8
ele(ante de alte&a& as )oo&denadas do o39eto do Jue a)ess74las di&etamente da se(uinte .o&ma, ac.*
GH d*(. ac.? GH d?(. ;em3&e4se Jue ac.* GH d* ' uma a3&e@iao pa&a ac.* H ac.*Gd*(.
M;t"d" %o*tra:
O m'todo most&a imp&ime na tela8 de .o&ma )ompa)ta8 os at&i3utos do o39eto%
//5lasse circulo
public class 5irculo <
public float raio(
public float *(
//posicoes em coordenadas cartesianas
public float ?(
2643ic 1"id -"1eI3"at d<+3"at dNJ O !!%o+e o circulo "e lu7ar



t5i*,# -& "#
$ -& "$
2
public +oi" %o*tra()
!!i%pri%e na tela e*ta"o "o ob0eto
1
8$*te%,out,println(9(9 - # - 9:9 - $ - 9:9 - raio - 9)9)
2
A //fim da declaracao da classe
//5lasse principalF Ar,uivo $rincipal.Java
class $rincipal <
public static void main&Strin" ar"s=>' <
5irculo umcirc(
//declaracao de atributo circulo
umcirc H new 5irculo&'(
umcirc.* H 1(
umcirc.? H 1(
umcirc.raio H 3!(
u%circ,%o*tra()
u%circ,%o+e(.4:.4)
u%circ,%o*tra()
umcirc.* H 311(
u%circ,%o*tra()
A
A
&1F1F3!'
&31F31F3!'
&311F31F3!'
C"-" 6/ci"/a- /" c"-2i3ad"r as cMa-adas de -;t"d"s:
M poss0@el ima(ina& Jue as de.iniIes de m'todos o)upam um (&ande espao na &ep&esentao
inte&na dos o39etos8 mas lem3&e4se Jue elas so todas i(uais pa&a uma )lasse ento 3asta mante& pa&a
)ada )lasse uma ta3ela de m'todos Jue ' )onsultada no momento da )hamada% Os o39etos s>
p&e)isam te& uma &e.e&Hn)ia pa&a esta ta3ela%
E<erc:ci"s:
=>
2aa as se(uintes modi.i)aIes no p&o(&ama 9ello:nternet,
Adi)ione a de)la&ao e ini)iali"ao de @a&i7@el Strin" lo(o ap>s o a3&e )ha@es do m'todo main,
Strin" nome,ual,uer(
nome,ual,uer H new Strin"&Tma constante do tipo strin"J'(
1odi.iJue o a&(umento de println pa&a nome,ual,uer% No use aspas em nome,ual,uer8
temos uma @a&i7@el a(o&a% E6e)ute o p&o(&ama8 Jual o &esultadoV
@>
No p&o(&ama deste e6emplo8 )&ie um m'todo )hamado iniciali6a pa&a a )lasse 5irculo% Este
m'todo de@e te& )omo a&(umentos um @alo& pa&a *8 um pa&a ? e out&o pa&a o raio8 e de@e alte&a& os
at&i3utos ini)iali"ando4os )om os @alo&es passados% Uo)H pode a3st&ai& o uso desse m'todo )omo uma
manei&a de ini)iali"a& o o39eto de uma s> @e" em3o&a isto se9a .eito seJeen)ialmente% Comente as
@anta(ens desta a3o&da(em8 )ompa&ando )om as out&as opIes8 tenha semp&e em mente a Juesto de
se(u&ana e )onsistHn)ia de dados Juando a@alia& t')ni)as di.e&entes de p&o(&amao%
A>
No p&o(&ama ante&io&8 @e&i.iJue Jue nada impede Jue @o)H a)esse di&etamente os @alo&es de * 8
? e raio e os modi.iJue8 )omo ali7s .oi .eito nos e6emplos ante&io&es% Como se pode )&ia& um
n?me&o eno&me de m'todos , alteraX&float a'( moveUaio&float dr'( se&ia dese97@el Jue somente
essas m'todos pudessem modi.i)a& *8 ? e raio (a&antindo Jue as ope&aIes e6e)utadas no
)o&&ompem o estado do o39eto% Uo)H @e&7 Jue isso ' poss0@el em en)apsulamento% -o& ho&a8 )&ie
esses m'todos se p&eo)upando em pe&miti& at&a@'s )hamadas a eles tudo o Jue .o& poss0@el .a"e& )om
a)esso di&eto aos at&i3utos% Comente tam3'm as duas opIes eJui@alentes de implementao a3ai6o
:os nomes so auto e6pli)ati@os=8 tenha em mente o n?me&o de m'todos a se&em )&iados pa&a (a&anti&
.le6i3ilidade a )lasse,
umcirculo.multiplicaAtributoX&31'(
ou
umcirculo.setX&umcirculo."etX&' B 31'(
//chamadas aninhadas de metodos
//o resultado de uma chamada compoe o ar"umento da outra
B3
Teste o m'todo move )om a&(umentos ne(ati@os8 e6emplo ac.move&P3.1FP3.L'(. O &esultado '
)oe&enteV
C>
BA7 uma tendHn)ia em de.ini& o maio& n?me&o de m'todos em uma )lasse8 po&Jue nun)a se
pode p&e@e& e6atamente o seu uso em p&o(&amas .utu&osD% Comente esta .&ase8 tendo em @ista o
)on)eito de po&ta3ilidade% Uo)H 97 ' )apa" de )ita& out&as medidas Jue to&nem suas )lasses mais
po&t7@eis8 .le60@eis e (en'&i)asV ;eia o e6e&)0)io ante&io& e o e6e&)0)io S%
MLTO%OS #$E RETORNAM &A'ORESP
At' a(o&a s> ha@0amos @isto m'todos )om @alo& de &eto&no i(ual a void% 5m m'todo8 assim
)omo uma .uno )omum8 pode &eto&na& um ?ni)o elemento de JualJue& tipo8 in)lusi@e os de.inidos
pelo usu7&io ou se9a, o39etos% Sendo assim8 sua )hamada no p&o(&ama se apli)a a JualJue& lu(a&
onde se espe&a um tipo i(ual ou eJui@alente ao tipo do seu @alo& de &eto&no8 se9a numa lista de
a&(umentos de out&o m'todo8 numa at&i3uio ou num ope&ado& R em S?stem.out.println& variavel
- chamadaSdeSmetodoS,ueSretornaSvalor'(
C3asse tra1a:
O estado da t&a@a ' &ep&esentado no at&i3uto public boolean travado( e pode se& o3tido at&a@'s
de uma )hamada ao m'todo estado&'% Este e6emplo ' 3astante simples e no tem a p&etenso de se&
uma implementao )ompleta de uma )lasse Jue modele uma t&a@a Jue possa se& usada pa&a e@ita& o
a)esso a um a&Jui@o8 po& e6emplo%
public class Irava <
public Strin" ,uem( //,uem travou ou destravou por ultimo
public boolean travado(
public void trave&Strin" ,'
<
this.travado H true(
this.,uem H ,(
A
public void destrave&Strin" ,'
<
this.travado H false(
this.,uem H ,(
A
public boolean estado&'
//estado&true/false' do objeto
<
return travado(
A
A

//5lasse principalF Ar,uivo $rincipal.Java
public class $rincipal <
public static void main&Strin" ar"s=>' <
Irava umatrava(

umatravaHnew Irava&'(
umatrava.trave&@$ro"rama$rincipal@'(
S?stem.out.println&umatrava.estado&''(
umatrava.destrave&@$ro"rama$rincipal@'(
S?stem.out.println&umatrava.estado&''(
A
A
true
false
//COMEN;ARIO8
A )lasse t&a@a ' demasiadamente simples8 mas se no o .osse no esta&ia na pa&te int&odut>&ia
deste tuto&ial% Esta )lasse a)a3a tendo a .un)ionalidade de uma @a&i7@el 3ooleana e o )usto de um
o39eto8 mas neste ponto )a3e a @o)H melho&a& este modelo pa&a &ep&esenta& uma t&a@a de a&Jui@o
:a&ma"ena o nome e BpathD deste= ou uma t&a@a de um o39eto8 e@itando Jue este se9a alte&ado%
E<erc:ci"s:
=>
1elho&e a )lasse 5ontador de BATRIB5TOS E 1MTO/OSD8 de.ina um m'todo Jue imp&ime o
)ontado& na tela% Se @o)H esti@esse .a"endo um p&o(&ama pa&a .un)iona& em uma inte&.a)e (&7.i)a
)om o usu7&io este m'todo pa&a imp&imi& na tela se&ia o mesmoV /e.ini& um m'todo Jue &eto&na uma
)>pia do @alo& atual do )ontado& (a&ante maio& po&ta3ilidadeV -o& JuHV -a&a ap&ende& a &eto&na&
@alo&es )onsulte este t>pi)o%
@>
Insi&a um no@o m'todo na )lasse Irava Jue tenha a .uno de alte&na& ent&e os estados do
o39eto8 independente do estado atual :t&a@ado ou dest&a@ado=% No use a est&utu&a de)iso if ainda8 use
o ope&ado& not Jue se&@e pa&a ne(a& um @alo& 3ooleano, a H ;valorbooleano( // ;trueHHfalse ou
true HH ;false.
A3
Implemente a )he)a(em do estado de o@e&.loN no e6emplo do )ontado&8 )onside&e o uso de um
m'todo &eto&nando um @alo& do tipo boolean. Conside&e a adio de um at&i3uto%
COMPARAO COM $M PROGRAMA EM PASCA'
Este e6emplo de p&o(&ama em Java ' semelhante ao e6emplo da )lasse 5irculo de B
ATRIB5TOSD8 ele se&7 )ompa&ado )om um p&o(&ama es)&ito em -as)al8 al'm disso int&odu"imos um
no@o m'todo )hamado iniciali6a e m'todos public float "etUaio&void'( e void setUaio&float a'.
iniciali6a )olo)a o ponto nas )oo&denadas passadas )omo seus a&(umentos% A int&oduo deste
m'todo p&epa&a a e6pli)ao so3&e )onst&uto&es dada no p&>6imo t>pi)o% -a&a melho& entendimento
leia os e6emplos ante&io&es )om a )lasse 5irculo%
Ja+a: -&o(&ama e6emplo )0&)ulo8 3aseado no e6emplo de ATRIB5TOS:
//5lasse circulo
public class 5irculo <

public float raioF*F?(
public +oi" iniciali<a(float a#:float a$:float ar)
!!7arante o e*ta"o "o ob0eto
1
t5i*,# & a# t5i*,$ & a$ t5i*,raio & ar
2
public +oi" *etRaio(float a)
1
t5i*,raio & a
2
public float 7etRaio()
1
return t5i*,raio
2
public void move&float d*Ffloat d?' <
this.* GH d*( this.? GH d?(
A
public void mostra&'
<
S?stem.out.println&@&@ G this.* G @F@ G this.? G @F@ G this."etUaio&'G@'@'(
A
A
//5lasse principalF Ar,uivo $rincipal.Java
public class $rincipal <
public static void main&Strin" ar"s=>' <
5irculo ac(
ac H new 5irculo&'(
ac.iniciali6a&1F1F31'(
ac.mostra&'(
ac.move&3F3'(
ac.mostra&'(
ac.* H 311(
ac.setUaio&3!'(
ac.mostra&'(
A
A
%is2"si89" d"s -;t"d"s e atri46t"s /a dec3ara89" de 6-a c3asse:
Em uma de)la&ao de uma )lasse no&malmente se )olo)a a de)la&ao de m'todos depois da
de)la&ao dos at&i3utos8 po&'m podemos .a"e& inte&)alaIes ou adota& JualJue& o&dem Jue nos
)on@enha%
5ma 3oa t')ni)a de p&o(&amao8 Jue a)onselhamos @o)H adota& em seus p&o(&amas ' usa&
linhas de )oment7&ios pa&a delimita& uma 7&ea do )>di(o de suas )lasses Jue en(lo3e tudo o Jue
inte&essa a um usu7&io desta% Nestes p&o(&amas e6emplos p&ati)amente tudo ' de inte&esse de um
usu7&io :)liente= de sua )lasse8 mas nos e6emplos mais a@anados isto no se&7 @e&dade%
C"-e/t!ri"s:
O3se&@e Jue o m'todo mostra )hama o m'todo public float "etUaio&' Jue ' da mesma )lasse%
2i)a )la&o da de.inio de mostra Jue this."etUaio&' se apli)a ao mesmo o39eto instan)iado Jue
&e)e3eu a )hamada de mostra. Isto .oi .eito somente pa&a &e@ela& Jue )hamadas aninhadas de
m'todos tam3'm so pe&mitidas8 pois nesse )aso esta )hamada de m'todo pode&ia se& su3stitu0da pelo
p&>p&io at&i3uto raio8 o Jue se&ia mais e.i)iente%
Pr"gra-a89" "rie/tada a "45et"s e i/teraces gr!icas c"- " 6s6!ri":
E6istem Bli3&a&iesD de )lasses Jue pe&mitem o p&o(&amado& CRR desen@ol@e& apli)aIes pa&a
am3ientes )omo o 1i)&oso.t GindoNsf de uma manei&a 3astante a3st&ata8 este ' um e6emplo )la&o
de &euso de )>di(o8 a.inal no ' p&e)iso sa3e& de detalhes da inte&.a)e pa&a p&o(&ama& nela%
Na se(unda pa&te .ala&emos so3&e a BJava Apli)ation -&o(&ammin( Inte&.a)eD Jue pe&mite
p&o(&ama& de manei&a 3astante a3st&ata sistemas de inte&.a)es (&7.i)as )om o usu7&io se9a pa&a
apli)aIes pa&a a Inte&net :&odando em 3&oNse&s= ou pa&a sistemas )omo o GindoNs ou 1a)FOs e E4
GindoNs %
&1F1F31'
&3F3F31'
&311F3F3!'
Pascal:
5m p&o(&ama pa&e)ido s> Jue em Pascal:
$UV.UA8 5omparacao(
<5V8$AUA5AV 5V8 T8 $UV.UA8A JavaA
IW$- 5irculoHU-5VU+
*:real(
<5VVU+-DA+AS X - WA
?:real(
r:real(
<somente dadosA
-D+(
var ac:circulo(
leitura:inte"er(
$UV5-+TU- :niciali6a&var altereme:5irculo(a*Fb?Fcr:real'(
<5VV5A V 5:U5TV -8 +-I-U8:DA+A $VS:5AVA
)-.:D
altereme.*:Ha*(
altereme.?:Hb?(
altereme.r:Hcr(
-D+(
$UV5-+TU- AlteraSUaio&var altereme:5irculo(ar:real'(
<AI-UA V UA:V +V 5:U5TVA
)-.:D
altereme.r:Har(
-D+(
OTD5I:VD UetornaSUaio&copieme:5irculo':real(
)-.:D
UetornaSUaio:Hcopieme.r(
-D+(
$UV5-+TU- 8ove&var altereme:5irculo(d*Fd?:real'(
<8V+- AS 5VVU+-DA+AS X - W A5U-S5-DIAD+V +X - +WA
)-.:D
altereme.*:Haltereme.*Gd*(
altereme.?:Haltereme.?Gd?(
-D+(
$UV5-+TU- 8ostra&copieme:5irculo'(
<8VSIUA V 5:U5TV DA I-AA
)-.:D
writeln&XX:XFcopieme.*FX W:XFcopieme.?FX U:XFcopieme.r'(
-D+(
)-.:D
<I-SI-SA
:niciali6a&acF1.1F1.1F31.1'(
8ostra&ac'(
8ove&acF3.1F3.1'(
8ostra&ac'(
ac.*:H311.1(
AlteraSUaio&acF3!.1'(
8ostra&ac'(
read&leitura'(
-D+.
X: 1.1111111111-G11 W: 1.1111111111-G11 U: 3.1111111111-G13
X: 3.1111111111-G11 W: 3.1111111111-G11 U: 3.1111111111-G13
X: 3.1111111111-G1! W: 3.1111111111-G11 U: 3.!111111111-G13
!!COMEN;ARIO8 JAVA6
As )lasses em Java so )ompostas de at&i3utos e m'todos% -a&a e6e)uta& uma ao so3&e o
o39eto ou &elati@a a este 3asta )hama& um m'todo , ac.mostra&'( O m'todo no p&e)isa de muitos
a&(umentos8 po&Jue ' p&>p&io da )lasse e po&tanto (anha a)esso aos at&i3utos do o39eto pa&a ao Jual
ela .oi asso)iado,
public float "etUaio&void'
< return raio( //tenho acesso direto a raio. A
{ COMEntArios Pascal: }
Em -as)al os p&o)edimentos e os dados so )&iados de .o&ma sepa&ada8 mesmo Jue s> tenham
sentido 9untos% A 9uno ent&e os dados e p&o)edimentos se d7 at&a@'s de passa(em de pa&Lmet&os% No
)aso de uma lin(ua(em p&o)edu&al8 o Jue no&malmente ' .eito se assemelha ao )>di(o se(uinte,
8ove&acF 3.1F3.1'(. Nesse )aso A5 ' um B&e)o&dD8 al(o semelhante ao st&u)t de C :no CRR=%
8ove8 a)essa os dados do B&e)o&dD alte&ando os )ampos% O pa&Lmet&o ' passado po& &e.e&Hn)ia e o
p&o)edimento ' de.inido a pa&te do &e(ist&o8 em3o&a s> si&@a pa&a a)eita& a&(umentos do tipo 5irculo
e mo@e& suas )oo&denadas%
Seg6ra/8a:
Em am3os p&o(&amas :-as)al8 Java= o p&o(&amado& pode o3te& a)esso di&eto aos dados do tipo
de.inido pelo usu7&io, ac.* 6H 311.1( :-as)al= ou ac.* H 311.1( :Java=%
Ue&emos em BENCA-S5;A1ENTOD manei&as de p&oi3i& este tipo de a)esso di&eto ao at&i3uto8
dei6ando este se& modi.i)ado somente pelos m'todos% Isto nos (a&ante maio& se(u&ana e li3e&dade
pois podemos pe&miti& ou no o a)esso pa&a )ada at&i3uto de a)o&do )om nossa @ontade%
Eici7/cia:
Al(u'm pode a&(umenta& Jue p&o(&amas Jue usam 3astante )hamadas de m'todos podem se
to&na& pou)o e.i)ientes e Jue pode&ia se& melho& o3te& a)esso di&eto aos dados de um tipo de.inido
pelo usu7&io ao en@'s de passa& po& todo o t&a3alho de )>pia de a&(umentos8 inse&o de .uno na
pilha8 et)%
Em @e&dade no se pe&de muito em e.i)iHn)ia8 po& Jue tal metodolo(ia de p&o(&amao nos le@a
a o&(ani"a& o )>di(o de manei&a mais )ompa)ta% E al'm disso muitas @e"es no se dese9a pe&miti&
semp&e o a)esso di&eto aos dados de um tipo de.inido pelo usu7&io po& &a"Ies de se(u&ana%
E<erc:ci"s:
=>
Implemente out&os m'todos do estilo public void setUaio&float a' e float "etUaio&= pa&a os
at&i3utos X e W% 1as le@e o se(uinte pad&o de p&o(&amao Ja@a em )onta% -a&a uma data @a&i7@el
ou att&i3uto E os m'todos alte&a e &eto&na de@em se& )hamados na @e&dade de setX&' and "etX&'%
Ue9a o t>pi)o ante&io& )hamado BA)esso&es de at&i3utosD pa&a detalhes so3&e esse pad&o ou
)on@eno%
@>
2aa um p&o(&ama simples pa&a testa& uma )lasse Jue &ep&esenta um mouse e Jue .o&ne)e a
posio na tela8 os indi)ado&es de estado dos 3otIes e os m'todos, clicaSbotao& '( move&float d*F
float d?'(. No ' p&e)iso .a"e& a li(ao do o39eto )om o mouse &eal8 em3o&a o leito& inte&essado
possa en)ont&a& na se(unda pa&te su3s0dios pa&a esta ta&e.a%
Seu mouse de@e se& )apa" de )aminha& pa&a JualJue& lu(a& da tela at&a@'s de )hamadas de
m'todos8 no de@e ult&apassa& os limites esta3ele)idos8 de@e indi)a& o 3oto est7 p&essionado ou no
at&a@'s de um m'todo semelhante ao mostra& ' deste e6emplo% O mouse "e+e te& de 1 3oto% Uo)H
pode su3stitui& m'todo move&float d*F float d?' po& )om3inaIes de moveS*&float d*'( e
moveS?&float d?'(
Uo)H pode a)ha& o .ato de o mouse se& o3&i(ado a te& um 3oto um tanto est&anho8 mas no '% Os
mouses dos ma)hintoshes tHm um 3oto8 al(uns mouses de p)<s tHm dois 3otIes e mouses de
No&Cstations tHm t&Hs 3otIes% -a&a seu p&o(&ama se& po&t7@el ele de@e )onta& apenas )om a e6istHn)ia
de um 3oto e isso @ale a pena Juando se .ala em po&ta3ilidade% O Jue tem sido usado em )asos
e6t&emos ' a )om3inao de p&essionamento dos 3otIes e p&essionamento de te)las pa&a di.e&en)ia&
)e&tas aIes%
A>
Ue&i.iJue Jue em main&' @o)H pode modi.i)a& o at&i3uto * do o39eto da )lasse 5irculo da
se(uinte .o&ma, a.* H 3!.!( % Isto pode no se& muito ?til8 ima(ine4se )&iando uma li3&a&+ :em Java
pa)Ca(e= Jue implementa a )lasse 5irculo e uma s'&ie de m'todos &ela)ionados8 po& )e&tas &a"Ies
@o)H (osta&ia Jue o usu7&io se limitasse ao uso da inte&.a)e do o39eto8 )omo .a"H4lo se&7 e6pli)ado em
en)apsulamento% -o& ho&a8 apenas )&ie m'todos Jue si&@am )omo alte&nati@as a este tipo de a)esso
di&eto%
CONSTR$TORES
Const&uto&es so m'todos espe)iais )hamados pelo sistema no momento da )&iao de um
o39eto% Eles no possuem @alo& de &eto&no8 po&Jue @o)H no pode )hama& um )onst&uto& pa&a um
o39eto8 @o)H s> usa o )onst&uto& no momento da ini)iali"ao do o39eto% Const&uto&es &ep&esentam
uma opo&tunidade de ini)iali"a& seus dados de .o&ma o&(ani"ada8 ima(ine se @o)H esJue)e de
ini)iali"a& )o&&etamente ou o .a" duas @e"es8 et)%
5m )onst&uto& tem semp&e o mesmo nome da )lasse a Jual pe&ten)e% -a&a a )lasse Strin"F p&'4
de.inida na lin(ua(em o )onst&uto& tem a .o&ma Strin"&5onstante do tipo Strin"J'( )om o
a&(umento ent&e aspas Jue ' espe)i.i)ado pelo p&o(&amado& )omo um @alo& lite&al de st&in(% Ele se&ia
)hamado automati)amente no momento da )&iao8 de)la&ao de uma Strin"F sem ne)essidade de
uso do nome do )onst&uto& )omo m'todo8 apenas dos a&(umentos,
Strin" a(
aHnew Strin"&Ie*toJ'( //alocacao e iniciali6acao atraves do construtor
a.mostra&'( //mostra so pode ser chamada depois do construtor
Nos e6emplos ante&io&es tam3'm us7@amos )onst&uto&es no momento de ini)iali"a& nossos
o39etos8 s> Jue eles no possu0am a&(umentos%
E6istem @a&iaIes so3&e o tema Jue @e&emos mais ta&de, so3&e)a&(a de )onst&uto&8 B)op+
)onst&u)to&D8 )onst&uto& de )o&po @a"io% O e6emplo a se(ui& ' simples8 semelhante aos ante&io&es8
p&este ateno no m'todo )om o mesmo nome Jue a )lasse8 este ' o )onst&uto&,
//5lasse ponto
public class Ponto <
public float *F?(
public Ponto&float a*Ffloat a?' // sempre o%ita o valor de retorno;
//"arante o estado do objeto
<
this.* H a*( this.? H a?(
A
public void move&float d*Ffloat d?'
<
this.* GH d*( this.? GH d?(
A
public void mostra&'
<
S?stem.out.println&@&@ G this.* G @F@ G this.? G @'@'(
A
A
//5lasse principalF Ar,uivo $rincipal.java
public class $rincipal <
public static void main&Strin" ar"s=>' <
$onto ap(
ap H new Ponto((float)4,4: (float)4,4)
ap.mostra&'(
ap.move&3F3'(
ap.mostra&'(
ap.* H 311(
ap.mostra&'(
A
A
&1F1'
&3F3'
&311F3'
!!COMEN;ARIO86
Note Jue )om a de.inio do )onst&uto&8 @o)H ' o3&i(ado a passa& os a&(umentos deste no
momento da alo)ao do o39eto% Se @o)H p&e)isa te& a opo de no passa& esses @alo&es ou passa&
out&os8 as poss0@eis soluIes se&o dadas em B-O;I1OR2IS1O8 C;ASSES ABSTRATASD%
&float'1.1 indi)a Jue ' pa&a se& .eita a )on@e&so de 3.1 pa&a ponto .lutuante% 3.1 so"inho '
)onside&ado double% &int'3.1 ' i(ual a 3. &int' !.7 ' i(ual a dois. Esta ope&ao indi)ada po&
&nometipo'tipoSaSserSconvertido ' tam3'm )hamada de Bt+pe )astD%
A o)o&&Hn)ia de &otinas de )&iao de o39etos em di@e&sos lo)ais de um p&o(&ama ' muito
)omum% O39etos podem se& )&iados dent&o de est&utu&as )ondi)ionais8 a&ma"enados em a&Jui@os8
passados )omo pa&Lmet&os8 inse&idos em est&utu&as dinLmi)as dent&o de out&os o39etos8 et)%
E<erc:ci"s:
=>
5m m'todo pode )hama& out&o m'todo da mesma )lasse% -a&ta do e6emplo de e )&ie um
)onst&uto& Jue )hama o anti(o m'todo iniciali6a&float aFfloat b' &epassando os a&(umentos do
)onst&uto&,
ponto&float aF float b'
< iniciali6a&aFb'( A
Na )hamada de iniciali6a&' .i)a impl0)ito Jue ela se apli)a ao o39eto )u9o )onst&uto& .oi
)hamado% Isto ' @7lido tam3'm pa&a out&os m'todos Jue )hamam m'todos8 ou se9a8 no ' ne)ess7&io
o ope&ado& identificador.iniciali6a&aFb'( 8 @e9a o uso de this%
Este e6e&)0)io ' ?til pa&a most&a& out&o &e)u&so de Java8 o pontei&o this% this ' uma pala@&a
&ese&@ada e dent&o de JualJue& m'todo this ' um Bpontei&oD pa&a o o39eto em Juesto8 ento o )>di(o
des)&ito a)ima pode&ia tam3'm assumi& a se(uinte .o&ma eJui@alente,
ponto&float aF float b'
< this.iniciali6a&aFb'( A //Verifi,ue;
M l>(i)o Jue neste e6emplo this no tem muita utilidade8 mas e6istem )asos onde um o39eto
p&e)isa passa& seu Bpontei&oD pa&a al(uma .uno Jue o modi.i)a8 ou .i)a possuindo uma &e.e&Hn)ia
pa&a ele8 ento usa4se this% Ue&emos out&as apli)aIes mais adiante%
@>
Int&odu"a mensa(ens no )onst&uto& tipo, S?stem.out.println&Vbjeto instanciadoJ'( int&odu"a
t&e)hos pa&e)idos em out&os pontos de seu p&o(&ama% O o39eti@o ' a)ompanha& @isualmente a
seJeHn)ia de )&iao e modi.i)ao dos o39etos%
A>
Esta )lasse $onto pode se& adaptada pa&a .un)iona& )omo &ep&esentao de @eto&es em duas
dimensIes8 pa&a tal .o&nea out&os m'todos ?teis, m'todos pa&a to&na& o @eto& unit7&io8 &eto&na& o
m>dulo do @eto&8 a )omponente * e ?% -a&a tal @o)H te&7 Jue .a"e& uso de 8ath.cos&double a'(
8ath.sin&double a'( e 8ath.s,rt&double a'( 8 &espe)ti@amente o )osseno8 o seno e a &ai" Juad&ada
de um ponto .lutuante de dupla p&e)iso% No ' ne)ess7&io .a"e& nada semelhante a um in)lude de CR
R pa&a usa& esses m'todos8 3asta adi)ion74los ao seu )>di(o8 out&o m'todo ?til ' 8ath.ma*&aFb'( Jue
&eto&na o maio& @alo& ent&e a e b &floatF doubleF int. lon"F etc=% 5se Bt+pe )astD e6pli)ado nos
)oment7&ios deste e6emplo%
B>
C&ie uma )lasse reta Jue tem )omo at&i3utos dois o39etos da )lasse ponto% /i)a, N9" 6se
c"/str6t"res8 use .unIes do tipo iniciali6a&'F 97 ap&esentadas% Kuando seu p&o(&ama .i)a& p&onto
a)&es)ente m'todos pa&a esta &eta tais )omo in)linao8 )oe.i)iente linea&8 et)% -a&a a)&es)enta&
)onst&uto&es leia mais adiante% E6istem manei&as mais e.i)ientes e )ompa)tas de &ep&esenta& uma
&eta8 po&'m .aa )omo .oi su(e&ido8 neste )aso o o39eti@o no ' e.i)iHn)ia%
CONSTR$TORES E AGREGAO
Este e6emplo ' o &esultado do e6e&)0)io ante&io& :e6e&)0)io Z t>pi)o BCONSTR5TORESD=8 ele
)&ia uma )lasse Ueta )om dois at&i3utos da )lasse $onto% Ou se9a @o)H esta&7 &eutili"ando a )lasse
$onto na )lasse Jue &ep&esenta uma Ueta8 a .o&ma )omo essa &eutili"ao de )>di(o o)o&&e '
)hamada de agrega89"%
O nome &eutili"ao de )>di(o ' 3astante ap&op&iado8 pois a )lasse Ueta esta&7 utili"ando todos
os m'todos es)&itos pa&a a )lasse $onto% Em )asos )omo este ' )omum di"e& Jue a )lasse Ueta '
)liente da )lasse $onto em uma analo(ia )om as &elaIes )ome&)iais%
Este p&o(&ama 3us)a )hama& sua ateno pa&a o .ato de Jue o39etos so alo)ados dinami)amente
e Jue )aso @o)H se esJuea de alo)74los8 eles .i)am possuindo o @alo& null% O3te& a)esso a uma
@a&i7@el )om @alo& null ' um e&&o Jue (e&almente ' @e&i.i)ado em tempo de e6e)uo%
Nos p&o(&amas ante&io&es alo)a& os o39etos e&a .7)il8 mas a(o&a Jue temos o39etos .un)ionando
dent&o de out&os o39etos h7 ne)essidade de adota& t')ni)as melho&es% Ue&emos a se(ui& duas
alte&nati@as pa&a alo)a& os at&i3utos $onto p&esentes na )lasse Ueta,
A3ter/ati1a =:
-&imei&o alo)a4se o o39eto da )lasse Ueta8 depois )hama4se pa&a )ada at&i3uto da )lasse $onto a
&otina de alo)ao,
Ueta r3(
r3 H new Ueta&'(
r3.ponto3 H new $onto&&float'3.1F &float'!.1'(
r3.ponto! H new $onto&&float'7.1F &float'0.1'(
Esta alte&nati@a ' em muitos )asos pio& Jue a se(uinte%
A3ter/ati1a @:
-assamos pa&a o )onst&uto& da )lasse Ueta a ta&e.a de alo)a& e ini)iali"a& os at&i3utos de .o&ma
)oe&ente% Os a&(umentos do )onst&uto& da )lasse Ueta passam a )onte& @alo&es ?teis pa&a a )hamada
dos )onst&uto&es de seus at&i3utos% Esta alte&nati@a ' e6e)utada pelo p&o(&ama a se(ui&,
//Ueutili6e o ar,uivo da classe $onto definida anteriormente.
//5lasse Ueta
class Ueta <
public Ponto aFb(
public Ueta&float a*F float a?F float b*F float b?' //construtor com ar"umentos
<
a & ne' Ponto(a#: a$) !!c5a%a"a* "o* contrutore* "a cla**e Ponto
b & ne' Ponto(b#: b$)
A
public void mostra&'
<
a.mostra&'(
b.mostra&'(
A
A
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
public static void main&Strin" ar"s=>' <
Ueta ar(
ar&ne' Reta((float)4,4:(float)4,4:(float).,4:(float).,4)
ar.mostra&'(
A
A
Al(uns podem a&(umenta& Jue esta manei&a de &ep&esenta& uma &eta no ' muito e.i)iente8 mas
no ' do es)opo deste te6to t&ata& de p&o3lemas dessa natu&e"a8 o Jue ali7s )ompli)a&ia muito o
)>di(o8 des@iando4nos do o39eti@o p&in)ipal, simpli)idade na ap&esentao de )on)eitos de o&ientao
a o39etos% O leito& de@e amplia& os modelos aJui su(e&idos em apli)aIes na sua 7&ea de inte&esse%
Como ainda .altam )on)eitos impo&tantes pa&a se&em ap&esentados este tipo de apli)ao de@e se&
.eita em pa&alelo )om a leitu&a%
E<erc:ci"s:
=>
Implemente um p&o(&ama Jue use a mesma l>(i)a do e6emplo ante&io& pa&a )&ia& uma )lasse
)omposta de out&as % Uo)H esta&7 usando a(&e(ao% -o& e6emplo um t&iLn(ulo p&e)isa de t&Hs pontos
pa&a se& de.inido ou uma pessoa possui um ende&eo &esiden)ial%
@>
5ma implementao mais e.i)iente da )lasse Ueta se&ia .eita a&ma"enando apenas um
)oe.i)iente an(ula& e um linea&8 mas esta &eta de@e&ia p&o@e& tam3'm um )onst&uto& Jue a)eitasse dois
pontos )omo a&(umentos% Como @o)H no ap&endeu so3&e)a&(a de )onst&uto&es :de.ini& @7&ios
)onst&uto&es=8 use s> um )onst&uto& Jue tem )oe.i)iente an(ula& e linea& )omo a&(umentos e
implemente esta no@a )lasse &eta :sem usa& a(&e(ao a(o&a=%
A>
/e.ina um m'todo pa&a a )lasse Ueta Jue &eto&na o ponto de inte&)esso )om out&a &eta, public
$onto intercessao&Ueta a'(. No se esJuea de t&ata& os )asos de(ene&ados8 tais )omo &etas
pa&alelas e )oin)identes8 use po& e6emplo mensa(ens de e&&o ou @alo& de &eto&no i(ual a null%
Ue&i.iJue Jue um m'todo de uma &eta &e)e3e out&a &eta :mesmo tipo= )omo a&(umento% /ent&o do
m'todo os at&i3utos do a&(umento a de@em se& a)essados do se(uinte modo,
ap3.*(
1ais ta&de8 em t&atamento de e6)eIes8 @e&emos manei&as melho&es de lida& )om esses )asos
de(ene&ados%
B>
/e.ina um m'todo )hamado move pa&a a )lasse Ueta8 lem3&e4se de mo@e& os dois pontos
9untos :a in)linao no de@e muda&=%
C>
/e.ina um m'todo public void "ira&tipo* an"ulo'( pa&a a )lasse Ueta% Este m'todo &e)e3e um
Ln(ulo )omo a&(umento8 @o)H pode opta& po& &ep&esenta& o Ln(ulo em &adianos :float= ou )&ia& a
)lasse Ln(ulo :(&aus8 minutos8 se(undos=% Resol@a tam3'm o p&o3lema da es)olha do ponto em to&no
do Jual a &eta de@e se& (i&ada :@o)H pode usa& mais de um a&(umento=% 5se .unIes matem7ti)as
:seno )osseno= e out&as des)&itas no e6e&)0)io S ante&io&%
%ESTR$TORES O$ finali<er*
A p&esena de )oleta autom7ti)a de li6o to&na o )on)eito de dest&uto&es um pou)o di.e&ente de
seus eJui@alentes em out&as lin(ua(ens o&ientadas a o39etos% Em Java dest&uto&es so m'todos
)hamados pelo sistema Juando a mem>&ia de um o39eto est7 pa&a se& li3e&ada pelo )oleto& autom7ti)o
de li6o :no Juando est7 pa&a se& )oletada=%
A sinta6e dos dest&uto&es ' a se(uinte,
protected void finali6e&' <
//codi"o para arrumar a casaF antes ,ue o objeto seja apa"ado
A
Note Jue o Jue )a&a)te&i"a o )onst&uto& ' te& o mesmo nome da )lasse8 97 o dest&uto& '
)a&a)te&i"ado po& possui& o nome finali6e. Uo)H pode )hama& o dest&uto&8 mas isso no impli)a Jue o
o39eto se&7 deletado% Ao )ont&7&io dos )onst&uto&es8 os dest&uto&es no tem a&(umentos8 mas possuem
@alo& de &eto&no Jue ' i(ual a void%
Os dest&uto&es so muito ?teis pa&a Blimpa& a )asaD Juando um o39eto dei6a de se& usado% 5m
e6emplo 3astante )omum do uso de dest&uto&es ' o de um o39eto Jue lida )om a&Jui@os Jue de@em
se& .e)hados Juando o o39eto .o& dest&u0do% E6istem out&os )asos onde um o39eto de@e )omuni)a& aos
out&os o39etos Jue se&7 inutili"ado8 dest&u0do8 ou se9a , sai&7 do p&o(&ama%
Em Java8 Jue possui )oleta autom7ti)a de li6o8 um o39eto passa a
no e6isti& mais no p&o(&ama Juando nenhuma @a&i7@el .a" &e.e&Hn)ia a
ele% Nesse ponto8 ele ' a&ma"enado no )oleto& autom7ti)o de li6o8 onde
&e)e3e&7 o t&atamento adeJuado% 5m n> de uma lista li(ada pode se&
apa(ado simplesmente .a"endo o n> ante&io& aponta& pa&a o poste&io& a
ele% Os p&o(&amado&es no a)ostumados )om esse )on)eito p&e)isam
ou@i& a se(uinte .&ase, BUo)H no ' o3&i(ado a li3e&a& e6pli)itamente a
mem>&ia de um o39eto )omo ' .eito em CRR e out&as lin(ua(ensD%
Se esti@'ssemos po& e6emplo em CRR8 Jue no possui )oleta autom7ti)a de li6o8 o dest&uto&
se&ia )hamado semp&e Jue a mem>&ia de um o39eto .osse desalo)ada8 o Jue ' .eito pelo p&o(&amado&
at&a@'s de uma )hamada a delete nomedoobjeto&'( .
Em Java a li3e&ao de mem>&ia Jue ' .eita pelo )oleto& autom7ti)o de li6o Jue ' e6e)utado de
modo ass0n)&ono )om o &estante do p&o(&ama8 ou se9a @o)H no pode )onta& )om o .ato de Jue o
dest&uto& se&7 )hamado imediatamente ap>s o momento em Jue seu o39eto sai de es)opo8 a no se&
Jue o p&o(&ama se9a e6e)utado )om o modo ass0n)&ono do )oleto& autom7ti)o de li6o desli(ado :java
Pnoas?nc"c Dome$ro"rama=%
PONTEIROS+ POINTERS+ REFERQNCIAS E OB0ETOS
Al(u'm pode te& a)hado est&anho Jue no .o&am dis)utidos pontei&os em Java8 o)o&&e Jue eles
no e6istem nessa lin(ua(em% E6istem estudos Jue a.i&mam Jue e&&os )om pontei&os so um dos
p&in)ipais (e&ado&es de B3u(sD em p&o(&amas8 al'm disso )om todos os &e)u&sos Jue temos no
p&e)isa&emos deles%
Os p&o(&amado&es a)ostumados ao uso de pontei&os :e aos e&&os de)o&&entes desse uso=8 a)ha&o
muito natu&al e se(u&a a t&ansio pa&a Java onde passa&o a usa& p&in)ipalmente @eto&es e )lasses% A
est&utu&ao de seu )>di(o de@e&7 a(o&a se& .eita em um modelo Jue se 3aseia no uso de o39etos
:@eto&es e Strin"s tam3'm so o39etos=% O39etos supe&am a &ep&esentati@idade o3tida )om &e)o&ds8
.unIes isoladas e pontei&os%
/e )e&to modo @o)H esta&7 usando &e.e&Hn)ias8 mas de .o&ma impl0)ita% -o& e6emplo, o39etos so
alo)ados dinami)amente )om new8 eles so &e.e&Hn)ias ou pontei&os pa&a posiIes na mem>&ia8 mas
a lin(ua(em mas)a&a este .ato po& &a"Ies de se(u&ana% Como o39etos so pontei&os :s> Jue
t&anspa&entes pa&a @o)H=8 nos depa&a&emos )om o p&o3lema de &e.e&en)e aliasin( Juando dis)uti&mos
)>pia de o39etos )om out&os o39etos )omo at&i3utos%
PASSAGEM POR REFERQNCIA
;in(ua(ens )omo -as)al ou C )&iam meios de passa& pa&Lmet&os po& @alo& ou po& &e.e&Hn)ia%
Como Java no possui pontei&os8 a passa(em po& &e.e&Hn)ia de@e se& .eita at&a@'s de o39etos% Se o
pa&Lmet&o 97 ' um o39eto8 ento a passa(em dele ' o3&i(ato&iamente po& &e.e&Hn)ia%
No )aso de tipos simples8 podemos pass74los dent&o de @eto&es Jue so o39etos8 ou ento )&ia&
)lasses pa&a em3ala&8 empa)ota& estes tipos% /ada a ne)essidade destas )lasses8 elas 97 .o&am
de.inidas na lin(ua(em% So )lasses de.inidas pa&a )onte& )ada tipo 37si)os e pe&miti& )e&tas
)on@e&sIes ent&e eles8 .ala&emos destas )lasses )on.o&me ne)essita&mos de seu uso% As @e"es estas
)lasses so )hamadas de BN&appe&sD%
E<erc:ci"s,
=>
class X <
public void troca&X valores'
<
int a(
a H val(
val H valores.val(
valores.val H a(
A
//imprima os atributos de um objeto V)J da classe X
//chame o metodo troca de outro objetoF usando V)J como ar"umeto
//verifi,ue a alteracao nos atributos desse ar"umento
O )>di(o a)ima most&a )omo de.ini& um m'todo Jue usa a e6istHn)ia impl0)ita de pontei&os na
lin(ua(em pa&a )&ia& um m'todo Jue t&o)a os at&i3utos de dois o39etos da mesma )lasse% Implemente
este m'todo e .aa os testes su(e&idos nos )oment7&ios desse )>di(o%
&ETORES E MATRIRES
Ueto&es so o39etos8 eles possuem papel impo&tante no estilo de p&o(&amao desta lin(ua(em
Jue e6)lui pontei&os% -o& se&em o39etos8 @eto&es so o3&i(ato&iamente alo)ados de manei&a dinLmi)a%
O e6emplo a se(ui& alo)a um @eto& de intei&os )om t&Hs posiIes8 se(uindo uma sinta6e semelhante a
de alo)ao de o39etos,
class VetorIest <
public static void main &Strin" ar"s=>' <
int +etor=> & ne' int=?>
+etor=4> & 4 //inde*acao semelhante a 5 F 5GG
+etor=.> & .4
+etor=@> & @4
8$*te%,out,println(+etor=4> - 9 9 - +etor=.> - 9 9 - +etor=@> - 9 9)
A
A
$ 1$ #$
Res6-" da si/ta<e de 1et"res:
int a=>( //declara vetor de inteiros a
a H new int=31>( //aloca vetor a com de6 posicoes
//as duas linhas anteriores podem ser abreviadas por:
int a=> H new int=31>(
//alem disso se voce ,uiser iniciali6ar o vetor aF jaN na declaracao:
int a=7> H <1F31F!1A(
O an7lo(o pa&a mat&i"es ',
int a=>=>( //declara matri6 de inteiros a
a H new int=7>=7>( //aloca matri6 7*7F / celulas
//as duas linhas anteriores podem ser abreviadas por:
int a=> H new int=7>=7>(
//alem disso se voce ,uiser iniciali6ar a matri6 a ja na declaracao:
int a=7>=7> H <<1F31F!1AF<71F01FL1AF<K1F21F41AA(
Em m'todos8 a&(umentos e @alo&es de &eto&no Jue so @eto&es8 so es)&itos da se(uinte .o&ma,
intWX 8 ou tipoWX nomeda@a&ia@el FFno )aso de a&(umentos%
/ia(&ama do @eto&,
-e&)e3a Jue a .ai6a ?til do @eto& @ai de $ at' :n41= onde n ' o @alo& dado )omo tamanho do
@eto& no momento de sua )&iao8 no nosso )aso S% O mesmo o)o&&e )om mat&i"es% Esta )on@eno
pode )on.undi& p&o(&amado&es -as)al onde a inde6ao @ai de 1 at' n%
Java )he)a se @o)H usa )o&&etamente os 0ndi)es do @eto&% Se o)o&&e& um a)esso ao vetor=i>
onde i ' um 0ndi)e in@7lido :.o&a da .ai6a de @alo&es pe&mitidos=8 @o)H &e)e3e&7 uma mensa(em
pa&e)ida )om, java%lan"%Arra?:nde*VutVf)ounds-*ception, g% Reto&na&emos ao assunto desta
mensa(em mais adiante8 ela ' uma e6)eo (e&ada pelo )>di(o Jue a)ompanha a lin(ua(em%
E6iste um at&i3uto muito ?til Juando se t&a3alha em um @eto& de dados,
a.len"th( //arma6ena o numero de elementos do vetor a
/e)la&a& um @eto& de o39etos8 po& e6emplo o39etos da )lasse $onto8 no impli)a Jue os
o39etos de )ada posio do @eto& 97 esta&o ini)iali"ados8 pa&a ini)iali"a& os elementos8 si(a se(uinte
sinta6e,
$onto a=>( //declaracaoF todas as posicoes com null
a H new $onto=7>( //alocacao
for &int i H 1( i C a.len"th&'( iGG' < a=i> H new $onto&1F1'( A //iniciali6acao
:o )>di(o a)ima &ep&esenta um dos usos de @eto&es no lu(a& de pontei&os=
E<erc:ci"s:
=>
Es)&e@a um p&o(&ama simples Jue toma um @eto& de p&eos e um de des)ontos :T$h`%T=8 e
alte&a o @eto& de p&eos de modo Jue estes p&odutos 97 in)luam os des)ontos no seu @alo& de @enda%
E6emplo,
-&eos , Z$8T S$8S 1#8 1$$
/es)ontos, %T %S %# %T
Ueto& )al)ulado, #$%#T 9%$9 #%T# T$
A lin(ua(em Java se&7 muito usada no )om'&)io da inte&net8 ta3elinhas assim8 usadas pa&a
)7l)ulos de p&eos de p&odutos 97 esto se to&nando )omuns% Os nomes Jue @o)H pode da& as )lasses e
m'todos so,
5lasse: Iabela$recos
Atributo: boolean 5om+esconto(
Atributo: double=> $recos(
8Qtodo: void Aplica+escontos&int=> descontos'(
COPIA + COMPARAO E %ETERMINAO %A C'ASSE EM OB0ETOS
O39etos so impli)itamente &e.e&Hn)ias8 po&tanto sua )>pia :at&a@'s do ope&ado& `= est7 su9eita
ao p&o3lema de B&e.e&en)e aliasin(D e e.eitos )olate&ais% A )ompa&ao de o39etos at&a@'s do ope&ado&
HH tem o si(ni.i)ado da )ompa&ao de &e.e&Hn)ias8 ou se9a ela @e&i.i)a se os o39etos
[
)ompa&tilham o
mesmo espao alo)ado na mem>&ia%
O3se&@e Jue )om as ope&aIes )onhe)idas at' a(o&a8 no )onse(uimos )ompa&a& dois o39etos
Juanto ao )onte?do a no se& Jue )ompa&emos at&i3uto po& at&i3uto8 o mesmo @ale pa&a a )>pia%
Se&ia ?til dispo& de um )on9unto de ope&aIes de i(ualdade8 desi(ualdade e )opia Jue se
apli)asse ao )onte?do dos o39etos e no ao ende&eo de mem>&ia de suas @a&i7@eis% 5ma out&a
ne)essidade se&ia @e&i.i)a& a )lasse de um o39eto em tempo de e6e)uo% Antes de @e& a soluo
p&o)u&e senti& o p&o3lema no e6emplo a se(ui&,
5sa&emos o a&Jui@o da )lasse $onto8 97 ap&esentado em BCONSTR5TORESD8 mas )om uma
modi.i)ao no m'todo mostra% No lu(a& de mostra )&ia&emos um m'todo )hamado public Strin"
toStrin"&'. Este m'todo ' pad&o em muitas )lasses e de@e se& de.inido de modo a &eto&na& uma
Strin" des)&iti@a do o39eto% 2a"endo isto @o)H pode )on)atena& uma @a&i7@el $onto )om uma Strin"
no a&(umento do m'todo S?stem.out.println&meu$onto3 G Da vi6inhanca de G
meu$onto!'(% Esta de)iso de implementao ' )e&tamente mais (en'&i)a Jue mostra8 @isto Jue
nem semp&e esta&emos imp&imindo at&a@'s de S?stem.out.println&'8 po& e6emplo na se(unda pa&te
o)o&&e&o )asos em Jue temos Jue Bpinta&D Strin"s em 7&eas espe)iais na tela%
Ap&esentao do p&o3lema
//5lasse ponto
class $onto <
public float *F?(
public $onto&float a*Ffloat a?' < //omita o valor de retorno; "arante o estado do objeto
this.* H a*( this.? H a?(
A
public void move&float d*Ffloat d?' <
this.* GH d*( this.? GH d?(
A
public 8trin7 to8trin7() 1
return 9(9 - t5i*,# - 9:9 - t5i*,$ - 9)9 !!(#:$)
2
A
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
[
St&in(s e @eto&es so o39etos de )lasses p&' de.inidas na lin(ua(em8 po&tanto as a.i&maIes .eitas aJui se apli)am a eles
tam3'm%
public static void main&Strin" ar"s=>' <
!!preparacao "a* +aria+ei* copia "e ob0eto*
$onto pVri"inalF pAliasF p5opia(
pVri"inal H new $onto&&float'1.1F1.1f'( //&float'1.1 ou 1.1f( 1.1 eh double
pAlias H pVri"inal( //copiando atraves de atribuica
p5opia H new $onto&pVri"inal.*F pVri"inal.?'( //copiando atributo por atributo
//resultados
S?stem.out.println&@Vri"inal:@ G pVri"inal'(
S?stem.out.println&@Alias:@ G pVri"inal'(
S?stem.out.println&@8odificando Alias.* para !@'(
pAlias.* H !.1f(
S?stem.out.println&@Veja como o ori"inal ficou:@ G pVri"inal'(
S?stem.out.println&@p5opia nao se modifica:@ G p5opia'(
!!co%paracao "e ob0eto*
S?stem.out.println&@Vri"inalHHAlias:@ G &pVri"inal HH pAlias' '(
S?stem.out.println&@5opiaHHVri"inal:@ G &p5opia HH pVri"inal' '(
S?stem.out.println&@+ei*ando atributos de 5opia i"uais aos de Vri"inal@'(
p5opia.* H !(
S?stem.out.println&@5opiaHHVri"inal:@ G &p5opia HH pVri"inal' '(
S?stem.out.println&@Vri"inal.*HH5opia.*:@ G &p5opia.* HH pVri"inal.*' '(
S?stem.out.println&@Vri"inal.?HH5opia.?:@ G &p5opia.? HH pVri"inal.?' '(
A
Vri"inal:&1F1'
Alias:&1F1'
8odificando Alias.* para !
Veja como o ori"inal ficou:&!F1'
p5opia nao se modifica:&1F1'
Vri"inalHHAlis:true
5opiaHHVri"inal:false
+ei*ando atributos de copia i"uais aos de Vri"inal
5opiaHHVri"inal:false
Vri"inal.*HH5opia.*:true
Vri"inal.?HH5opia.?:true
!!COMEN;ARIO8
!!preparacao "a* +aria+ei*: copia "e ob0eto*6
pAlias e uma &e.e&Hn)ia pa&a o mesmo lo)al de mem>&ia Jue pVri"inal8 po& este moti@o
Juando pAlias ' alte&ado8 pVri"inal se alte&a po& Be.eito )olate&alD8 eles )ompa&tilham o mesmo
o39eto pois a at&i3uio pAlias H pVri"inal8 )opia o ende&eo de pVri"inal%
J7 p5opia8 ' o &esultado de uma no@a alo)ao de mem>&ia8 po&tanto um no@o ende&eo8 um
o39eto independente dos out&os%
!!co%paracao "e ob0eto*6
pVri"inal HH pAlias e out&as )ompa&aIes eJui@alentes tHm o si(ni.i)ado de )ompa&ao do
ende&eo de mem>&ia e no do )onte?do%
pVri"inal.* HH p5opia.* tem o si(ni.i)ado de )ompa&ao do @alo& desses at&i3utos8 assim
)omo uma )ompa&ao ent&e intei&os% Se esses at&i3utos po& sua @e" .ossem o39etos :tipo :nte"er ao
en@'s de int=8 esta ope&ao te&ia o si(ni.i)ado de )ompa&ao ent&e ende&eos de mem>&ia dos
o39etos%
As poss0@eis soluIes8 )omentadas in)luindo @e&i.i)ao da )lasse dos o39etos
//5lasse $onto
class $onto <
public float *F?(
public $onto&float a*Ffloat a?' < //omita o valor de retorno;
//"arante o estado do objeto
this.* H a*( this.? H a?(
A
public void move&float d*Ffloat d?' <
this.* GH d*( this.? GH d?(
A
public Strin" toStrin"&' <
return @&@ G this.* G @F@ G this.? G @'@( //&*F?'
A
public boolean eAual*(Ponto outro) 1 !!eAual* *i7nifica i7ual
return ((outro,# && t5i*,#) BB (outro,$ && t5i*,$)) !!t5i*&&outroC
2

public +oi" cop$(Ponto outro) 1
t5i*,# & outro,#
t5i*,$ & outro,$
2
public Ponto clone() 1
Ponto clone" & ne' Ponto(t5i*,#: t5i*,$)
return clone"
2
A
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
public static void main&Strin" ar"s=>' <
//preparacao das variaveis
$onto pVri"inalF p5opia3F p5opia!(
pVri"inal H new $onto&&float'1.1F1.1f'( //&float'1.1 ou 1.1f( 1.1 eh double
p5opia3 H new $onto&1.1fF1.1f'(
pCopia.,cop$(pOri7inal) !!pCopia. copia conteu"o "e pOri7inal nele %e*%o
pCopia@ & (Ponto) pOri7inal,clone()
//copia de objetos
S?stem.out.println&@Vri"inal:@ G pVri"inal'(
S?stem.out.println&@5opia3:@ G p5opia3'(
S?stem.out.println&@5opia!:@Gp5opia!'(
S?stem.out.println&@8odificando 5opia3.* para !@'(
p5opia3.*H!.1f(
S?stem.out.println&@Veja como o ori"inal ficou:@GpVri"inal'(
S?stem.out.println&@5opia! nao se modifica:@Gp5opia!'(
//comparacao de objetos
S?stem.out.println&@Vri"inalHH5opia!:@G&pVri"inalHHp5opia!' '(
S?stem.out.println&@Vri"inal.i"ual&5opia!':@ G pOri7inal,eAual*(pCopia@) '(
S?stem.out.println&@+ei*ando atributos de 5opia i"uais aos de Vri"inal@'(

//verificacao da classe dos objetos
S?stem.out.println&@Vbtendo a classe dos objetos@'(
S?stem.out.println&pVri"inal."et5lass&'."etDame&''(
S?stem.out.print&@Vri"inal e da classe $ontoY@'(
boolean re*ult & (pOri7inal in*tanceof Ponto)
S?stem.out.println&result'(
A
A
Vri"inal:&1.1F1.1'
5opia3:&1.1F1.1'
5opia!:&1.1F1.1'
8odificando 5opia3.* para !
Veja como o ori"inal ficou:&1.1F1.1'
5opia! nao se modifica:&1.1F1.1'
Vri"inalHH5opia!:false
Vri"inal.i"ual&5opia!':true
+ei*ando atributos de 5opia i"uais aos de Vri"inal
Vbtendo a classe dos objetos
$onto
Vri"inal e da classe $ontoYtrue
Com o seu )onhe)imento dos t>pi)os ante&io&es ' poss0@el entende& pe&.eitamente o Jue .a" esse
p&o(&ama% E ap>s entende& @o)H te&7 p&ati)ado t&Hs )on)eitos impo&tantes em o&ientao a o39etos, 1%
teste de i(ualdade ent&e o39etos :eJuals method=! #% )>pia de o39etos :)op+ mehod=! S% )lone de
o39etos :)lone method=%
boolean result H &pVri"inal instanceof $onto'(
Este ' seu p&imei&o )ontato )om o ope&ado& instanceof Jue le@a do lado esJue&do uma
instLn)ia de o39eto e do lado di&eito o nome de uma )lasse e &eto&na true se o o39eto
pe&ten)e d essa )lasse e false )aso )ont&7&io%
OBTEN%O &A'ORES %O $S$*RIO
Este t>pi)o .oi int&odu"ido po&Jue os p&o(&amas se(uintes so mais )omple6os e p&e)isam se&
testados ite&ati@amente% 1esmo Jue @o)H s> @7 .a"e& p&o(&amas em inte&.a)es (&7.i)as ' inte&essante
sa3e& )omo testa& )e&tas )lasses @ia te)lado ou linha de )omando8 sem )onta& Jue sem o )onte?do
deste t>pi)o os p&o(&amas se(uintes no se&o poss0@eis% Al'm do Jue @o)H pode dese9a& .a"e& al(um
p&o(&ama de linha de )omando :3at)h= em Java8 po& e6emplo um p&o(&ama de )omuni)ao ent&e as
di@e&sas m7Juinas de uma &ede ou um p&o(&ama Jue &e)e3a a&(umentos @ia linha de )omando%
'EN%O %O TEC'A%O
Este t>pi)o )ont'm dois e6emplos Jue ensinam )omo le& Strin"s do te)lado8 )omo )on@e&tH4las
pa&a n?me&os8 e )omo )ont&ola& melho& a ent&ada e sa0da de dados%
'EIT$RA %E 8;RING8 $SAN%O $M &ETOR %E BYTESP
Em Java ' p&ati)amente um pad&o le& dados em 3+tes8 se9a do te)lado8 da &ede8 do dis)o ou de
JualJue& out&o lu(a&% -o& este moti@o o p&imei&o e6emplo lH em um @eto& de 3+tes% Como sa3emos
Jue @o)H Jue& mais do Jue isso: e6% le& out&os tipos da lin(ua(em =8 o se(undo e6emplo t&ata&7 desse
)aso%
3
!
7
0
L
K
2
4
/
31
33
3!
37
30
3L
import java.io.B(
class -ntra+ados <
public static void main &Strin" ar"s=>'
<

b$te +etorte#to=> & ne' b$te=@44> !!"eclaracao "e u% +etor "e b$te*
int b$te*li"o* & 4
S?stem.out.println&@-screva al"o:@'(
tr? <
b$te*li"o* & 8$*te%,in,rea"(+etorte#to)
S?stem.out.print&@Voce escreveu:@'(
3K
32
34
3/
!1
!3
!!
8$*te%,out,'rite(+etorte#to:4:b$te*li"o*)
A
catch &:V-*ception e' <
// Al"uma acao de recuperacao da falha
A
A
A
-screva al"o:
5omo assim escreva al"oY
Voce escreveu:5omo assim escreva al"oY
!!COMEN;ARIO86
Este p&o(&ama usa o m'todo S?stem.in.read&vetorte*to'( pa&a le& do te)lado% Este m'todo
p&e)isa de um @eto& de 3+tes )omo a&(umento:onde se&o lidos os )a&a)te&es= e al'm disso &eto&na o
n?me&o de 3+tes lidos8 pa&a Jue @o)H possa usa& o @eto& )o&&etamente%
-a&a des)a&&e(a& o @eto& no @0deo use o m'todo S?stem.out.write&vetorte*toF1Fb?teslidos'(
Jue imp&ime na tela as posiIes de $ at' b?teslidos do @eto& de 3+tes passado )omo o p&imei&o
a&(umento%
Uo)H de@e esta& se pe&(untando Jual a .uno dos 3lo)os de )>di(o tr? <A catch <A deste
p&o(&ama e6emplo% Eles so impo&tantes no t&atamento de e6)eIes8 t>pi)o Jue se&7 a3o&dado no
.inal deste te6to% -o& enJuanto apenas @e9a estes 3lo)os de )>di(o )omo ne)ess7&ios pa&a es)&e@e&
dent&o do 3lo)o tr?<A as ope&aIes de leitu&a de te)lado8 Jue so ope&aIes Jue podem (e&a& e6)eIes%
$MA &ISO GERA' SOBRE PACSAGES E 8;REAM8
A manei&a ensinada nos t>pi)os ante&io&es :leitu&a de 3+tes= ' su.i)iente pa&a Jue @o)H leia do
te)lado8 mas ap&o@eita&emos a(o&a Jue @o)H 97 est7 mais e6pe&iente pa&a ensina& uma out&a manei&a
ele(ante Jue se&@e pa&a le& do te)lado8 de um a&Jui@o ou de uma )one6o da &ede Jue a)eita po&
e6emplo a leitu&a di&eta pa&a uma Strin" e out&os tipos desta lin(ua(em e no s> pa&a um @eto& de
3+tes%
Nestes e6emplos usa&emos um )on)eitos Jue somente se&o e6pli)ados a .undo nos p&>6imos
t>pi)os8 so os )on)eito de pa)Ca(es e St&eams% -a)Ca(es so )on9untos de )lasses% At' a(o&a s>
t0nhamos utili"ados elementos da pa)Ca(e java.lan" Jue ' impo&tada impli)itamente em todos os
p&o(&amas8 pe&mitindo po& e6emplo es)&e@e& na tela :S?stem.out ' uma )lasse p&esente em
java.lan"=%
A pa)Ca(e java.io .o&ne)e a a3st&ao de st&eams pa&a lida& )om a )omple6idade de ent&ada e
sa0da de dados% Esta a3st&ao ' pode&osa e se&7 utili"ada aJui pa&a le& do te)lado% 5m st&eam ' )omo
um )ano po& onde passam os 3+tes8 a @anta(em deste )ano ' Jue no p&e)isamos nos p&eo)upa& de
onde @em esses 3+tes8 pa&a n>s eles @em do )ano% -a&a Juem es)&e@e no st&eam tam3'm @ale a
mesma id'ia do Jue a(o&a do out&o lado8 empu&&ando os 3+tes pa&a dent&o%
Neste e6emplo usamos um st&eam pa&a le& do te)lado8 esta pode&osa a3st&ao se&7 estendida
mais ta&de pa&a t&ata& a ent&ada e sa0da de dados at&a@'s de po&tas de )omuni)ao e p&o(&amao
)liente se&@ido&8 e6plo&ando as )apa)idades de BnetNo&Cin(D da lin(ua(em8 al'm da leitu&a e es)&ita
em a&Jui@os8 no t>pi)o adeJuado%
Este p&o(&ama simplesmente lH uma linha do te)lado e a imp&ime no@amente%
3
!
7
0
L
K
2
4
/
31
33
3!
37
30
3L
3K
32
34
3/
!1
!3
!!
!7
!0
!L
i%port 0a+a,io,DataInput8trea% !!cla**e DataInput8trea% para a entra"a "e "a"o*
public class UeadStrin" <
public static void main&Strin" ar"s=>' <
Strin" linhaH@@(
DataInput8trea% %euDataInput8trea%
meu+ata:nputStream H new +ata:nputStream&S?stem.in'(
tr?<
linha H meu+ata:nputStream.readine&'(
A
catch &-*ception erro' < S?stem.out.println&-rro de leituraJ'( A
//antes de imprimir ou arma6enar a strin"F eN obvio ,ue voce poderia e*ecutar al"um
//processamentoF mas nao estudamos a classe strin" aindaF por isso tenha paciencia.
S?stem.out.println&linha'(

A /
A
Voce pode andar rapido com paciencia
Voce pode andar rapido com paciencia
//COMEN;ARIO8
O )ano de nosso e6emplo ' mais pa&e)ido )om uma man(uei&a de 9a&dim8 n>s .i)amos )om a
ponta de onde sai a 7(ua%
1,Nesta linha di"emos Jue dese9amos usa&8 impo&ta&8 um st&eam de ent&ada de dados de nome
+ata:nputStream p&esente na pa)Ca(e java.io
\, Nesta linha de)la&amos o Jue se&ia o 3alde pa&a &e)olhe& a 7(ua da man(uei&a :5ma Strin"=%
O 3alde )omea @a"io :J=%
1$,Esta linha di" pa&a pe(a& a man(uei&a :+ata:nputStream= do dep>sito :pa)Ca(e java.io=%
1#,Esta linha )one)ta a out&a ponta da man(uei&a na to&nei&a :S?stem.in ' a to&nei&a8 Jue
si(ni.i)a te)lado em Juase todos os )omputado&es=%
1T,En)ha o 3alde )om o Jue sai& da to&nei&a at' ha@e& uma inte&&upo no .o&ne)imento% :;eia o
Jue pude& do st&eam at' en)ont&a& um )a&a)te&e de no@a linha ZMnN% /a0 o nome readline Jue si(ni.i)a
leia linha=%
#$,Es@a"ie o 3alde no )ano de sa0da :Copie o @alo& da Strin" lida na ent&ada do st&eam
S?stem.out8 Jue si(ni.i)a @0deo na maio&ia das m7Juinas=%
As linhas 1Z81T e 1[ so ne)ess7&ias pa&a es)&e@e& line H m?+ata:nputStream.readine&'(.
Essas linhas pe&mitem aIes de &e)upe&ao de .alhas Jue possam o)o&&e& no p&o)esso de leitu&a8
a3o&da&emos este t>pi)o 3em mais adiante8 de modo Jue aJui apenas da&emos uma @iso (e&al s> a
t0tulo de )u&iosidade,
No 3lo)o tr? < A8 de@e4se inse&i& as ope&aIes pass0@eis de .alhas% Este 3lo)o de@e se& se(uido
po& catch &-*ception erro' < /B nao faco nada B/ A. No lu(a& de /B nao faco nada B/ de@e&iam
esta& as poss0@eis aIes de &e)upe&ao de .alhas )omo no )aso adotamos, S?stem.out.println&-rro
de leituraJ'(%
line H m?+ata:nputStream.readine&'( ' o m'todo Jue .a" )om Jue o Stream leia da ent&ada
de dados em Jue .oi asso)iado uma linha% Este m'todo o3@iamente 3loJueia a e6e)uo do p&o(&ama
at' Jue se di(ite B)a&&ia(e &etu&nD8 o Jue no ' p&o3lem7ti)o pois isto pode&ia se& .eito pa&alelamente8
usando Bth&eadsD%
C"-" c"/1erter 8trin7* 2ara i/teir"s:
Se @o)H inse&i& o se(uinte m'todo na nossa )lasse UeadStrin"8 pode&7 le& @alo&es intei&os do
te)lado%
static int le:nteiro&' <

Strin" line(

+ata:nputStream in H new +ata:nputStream&S?stem.in'(
tr? <
line H in.readine&'(
int i H :nte"er.valueVf&line'.intValue&'(
return i(
A
catch &-*ception e' <
return P3(
A

A
int i H :nte"er.valueVf&line'.intValue&'(
M um e6emplo de )hamadas )onse)uti@as ou aninhadas de m'todos% Olhe da esJue&da pa&a a
di&eita% -&imei&o o m'todo valueVf&line' ' )hamado pa&a a )lasse
\
:nte"er &eto&nando um o39eto da
)lasse :nte"er% /epois o o39eto da )lasse :nte"er tem seu m'todo intValue&' in@o)ado &eto&nando um
@alo& do tipo int Jue ' )o&&espondente a Strin" line%
Uo)H se lem3&a Jue n>s .alamos Jue a lin(ua(em .o&ne)e uma au6ilia&:BN&appe&D= pa&a )ada
tipo 37si)o da lin(ua(emV A )lasse Inte(e& ' uma )lasse Jue mapeia em te&mos de o39etos o tipo
37si)o int de S# 3its% A(o&a Jue @o)H 97 )onhe)e o nome da )lasse8 pesJuise mais so3&e ela na JAUA
A-I%
E<erc:ci"s:
=>
Uolta&emos a .ala& so3&e Strin"s8 po&'m po& ho&a8 @o)H 97 tem )ondiIes de le& as
3i3lio(&a.ias adi)ionais so3&e eles%
ARG$MENTOS %E 'INHA %E COMAN%O
Na se(unda pa&te @e&emos Jue os p&o(&amas Java Jue &odam em3e3idos em hipe&te6tos
podem &e)e3e& pa&Lmet&os ini)iais de .un)ionamento do hipe&te6to% Os p&o(&amas Jue estamos
des)&e@endo nesta pa&te so apli)aIes e6e)utadas @ia linha de )omando% /e modo an7lo(o8 essas
apli)aIes podem &e)e3e& a&(umentos de linha de )omando%
E6emplo de passa(em de t&Hs a&(umentos de linha de )omando pa&a um p&o(&ama Java,
java teste Ie*toJ ! Dome
Inte&&ompa sua leitu&a a(o&a e e6pe&imente passa& a&(umentos pa&a um dos p&o(&amas )&iados
ante&io&mente8 os a&(umentos o3@iamente se&o i(no&ados pelo p&o(&ama e este se )ompo&ta&7 da
mesma .o&ma Jue antes%
O @eto& de Strin"s ' o a&(umento do m'todo main Jue no&malmente )ham7@amos de Strin"
ar"s=>,
public static void main (8trin7 ar7*=>) ...
class 8ostraAr"umentos <
public static void main&Strin" ar"s=>' <
for &int iH1( i C ar"s.len"th( iGG' <
S?stem.out.println&@Ar"umento@ G iG@: @G ar"s=i>'(
A
A
A
Resultado do p&o(&ama pa&a a )hamada, java 8ostraAr"umentos $assando 7 ar"umento sJ
Ar"umento1: $assando
Ar"umento3: 7
Ar"umento!: ar"umento s
ar"s.len"th( Reto&na o )omp&imento do @eto& de Strin"s8 este @alo& ' usado pa&a ite&a& so3&e
\
M poss0@el )&ia& m'todos pa&a se&em )hamados pa&a )lasses e no s> pa&a o39etos8 so os )hamados B)lass methodsD em
)ont&aposio a Binstan)e methodsD%
os a&(umentos Jue so Strin"s a&ma"enadas em ar"s=i>% -e&)e3a Jue as aspas .a"em )om Jue nomes
sepa&ados po& espaos se9am )onside&ados s> um a&(umento%
Os a&(umentos passados pa&a seu p&o(&ama so (&a@ados em um @eto& de St&in(s8 pa&a usa& o
a&(umento S Jue .i)ou (ua&dado )omo Strin"8 na .o&ma de intei&o8 ' p&e)iso p&imei&o )on@e&tH4lo
pa&a intei&o% Isto pode se& .eito no )aso do nosso e6emplo at&a@'s de uma )hamada a,
:nte"er.parse:nt&ar"s=3>'(
A )lasse Inte(e& usada no )>di(o a)ima ' um dos BN&appe&sD Jue des)&e@emos em % A ope&ao
)ont&7&ia a Jue .oi .eita ' :nte"er.toStrin"&int a'(. O m'todo parse:nt a)eita tam3'm um se(undo
a&(umento Jue ' a 3ase em Jue o n?me&o est7 &ep&esentado na Strin".
E<erc:ci"s:
=>
1ude o p&imei&o p&o(&ama em Java :9ello:nternet= pa&a imp&imi& 9elloJ se(uido do p&imei&o
a&(umento de linha de )omando :se e6isti&, ar"s.len"thE1 =%
#4
Const&ua um p&o(&ama simples Jue &e)e3e a&(umentos da linha de )omando e os imp&ime
at&a@'s de cout% No&malmente ' isso Jue de@e se& .eito antes de usa& um &e)u&so da lin(ua(em pela
p&imei&a @e"8 e6pe&iment74lo em p&o(&amas simples%
ENCAPS$'AMENTO COM PRIVA;E: PUDLIC: EPACFAGEG e PRO;EC;ED
En)apsulamento8 Bdata hidin(D ' um )on)eito 3astante impo&tante em o&ientao a o39etos%
Neste t>pi)o @amos .ala& das manei&as de &est&in(i& o a)esso as de)la&aIes de uma )lasse e a p&>p&ia
)lasse8 isto ' .eito at&a@'s do uso das pala@&as &ese&@adas publicF private e protected
/

31
Jue so
Juali.i)ado&es%
Al(u'm pode esta& se pe&(untando o po&JuH de se &est&in(i& o a)esso a )e&tas pa&tes de uma
)lasse% A id'ia ' simples8 de@emos .o&ne)e& ao usu7&io8 )liente de uma )lasse8 o ne)ess7&io e somente
o ne)ess7&io pa&a Jue ele ti&e p&o@eito da .un)ionalidade desta )lasse% Os detalhes de@em se&
omitidos8 somente a lista de ope&aIes a Jual uma )lasse de@e atende& .i)a @is0@el%
Os 3ene.0)ios so muitos, )la&e"a do )>di(o8 minimi"ao de e&&os8 .a)ilidade de e6tenso%
Tal@e" a .a)ilidade de modi.i)ao se9a o mais impo&tante dos 3ene.0)ios% Como a )lasse ' )onhe)ida
pela sua inte&.a)e8 ' muito .7)il muda& a &ep&esentao inte&na sem Jue o )liente8 usu7&io8 pe&)e3a a
di.e&ena Esta&emos p&eo)upados em sepa&a& desi(n de implementao8 Java ' uma lin(ua(em 3oa
de se p&o(&ama& em te&mos de desi(n e em te&mos de implementao%
-&o(&ama& tendo em @ista o desi(n ' tam3'm )hamado de Bp&o(&ammin( in the la&(eD8 enJuanto
Jue p&o(&ama& tendo em @ista implementao8 )odi.i)ao ' )hamado de Bp&o(&ammin( in the
smallD% Al(uns p&o(&amado&es e6pe&ientes a.i&mam Jue Java se pa&e)e )om C Juando estamos
p&eo)upados )om )odi.i)ao8 mas Juando estamos p&eo)upados )om desi(n8 Java se assemelha a
SmalltalC%
Com en)apsulamento @o)H se&7 )apa" de )&ia& )omponentes de so.tNa&e &eutili"7@eis8 se(u&os8
.7)eis de modi.i)a&%
9
$rotected se&7 e6pli)ada 9untamente )om he&ana na seo #%
1$
-AC]APE se&7 e6pli)ado 9untamente )om pa)Ca(es%
ENCAPS$'AN%O MLTO%OS E ATRIB$TOS
At' a(o&a no nos p&eo)up7@amos )om o modo de a)esso de de)la&aIes de uma )lasse pois8
mesmo sem sa3e& po&Jue8 @o)H .oi a@isado pa&a Juali.i)a& todos os at&i3utos e m'todos de suas
)lasses )omo public o Jue si(ni.i)a Jue eles so a)ess0@eis8 @is0@eis8 em JualJue& lo)al de seu )>di(o%
-o& @is0@el entenda o se(uinte, se o at&i3uto * do o39eto Tm$onto no ' @is0@el po& e6emplo .o&a de
sua )lasse8 ento no .a" sentido es)&e@e& em main, Tm$onto.*H1( %
1as ento )omo )ont&ola& o a)esso de at&i3utos e m'todos em uma )lasseV Simples8 at&a@'s das
pala@&as &ese&@adas privateF public e protected )u9os si(ni.i)ados Juando Juali.i)ando m'todos e
at&i3utos :private e public podem tam3'm Juali.i)a& )lasses= so des)&itos a3ai6o,
public Estes at&i3utos e m'todos so semp&e a)ess0@eis em todos os m'todos de todas as
)lasses% Este ' o n0@el menos &0(ido de en)apsulamento8 Jue eJui@ale a no
en)apsula&%
private Estes at&i3utos e m'todos so a)ess0@eis somente nos m'todos:todos= da p&>p&ia
)lasse% Este ' o n0@el mais &0(ido de en)apsulamento%
protected Estes at&i3utos e m'todos so a)ess0@eis nos m'todos da p&>p&ia )lasse e suas
su3)lasses8 o Jue se&7 @isto em Ae&ana %
Nada espe)i.i)ado8
eJui@ale Bpa)Ca(eD
ou B.&iendl+D
Estes at&i3utos e m'todos so a)ess0@eis somente nos m'todos das )lasses Jue
pe&ten)em ao Bpa)Ca(eD em Jue .o&am )&iados% Este modo de a)esso ' tam3'm
)hamado de B.&iendl+D%
:e6istem out&os Juali.i)ado&es8 no &ela)ionados )om en)apsulamento Jue se&o e6pli)ados depois=
0ac*age e ,riendlG: /parecem entre aspas por(ue no so palavras reservadas da
linguagem, so apenas nomes dados para o tipo de encapsulamento padro 5de,ault6,
(ue ocorre (uando no e)iste um especi,icador. 2o nomes ,ceis de memori7ar.
8riendlG signi,ica amigvel, no sentido de (ue as classes (ue permitem este tipo de
acesso possuem um encapsulamento mais rela)ado com relao as classes do mesmo
pac*age 5amigas6. 0ac*age ' um grupo de classes relacionadas.
$rotected se&7 e6pli)ada em pois est7 &ela)ionada )om he&ana8 po& ho&a @amos .o)ali"a&
nossa ateno em private e public Jue Juali.i)am os at&i3utos e m'todos de uma )lasse Juanto ao
tipo de a)esso :onde eles so @is0@eis= % $ublic8 private e protected podem se& @istos )omo
Juali.i)ado&es ou Bspe)i.ie&sD%
-a&a .a)ilita& a e6pli)ao suponha a se(uinte de)la&ao de uma )lasse,
1=
class $onto <
private float *
private float ?
public void iniciali6a&float aFfloat b' <*Ha( ?Hb(A(
public void move &float d*Ffloat d?'(
A
2i)a .7)il entende& essas de)la&aIes se @o)H pensa& no se(uinte, esses Juali.i)ado&es se apli)am
aos m'todos e at&i3utos Jue @em imediatamente ap>s eles% Os elementos da )lasse Juali.i)ados )omo
i&ea private%
private apa&e)em )om .undo )in"a es)u&o indi)ando Jue sua B@isi3ilidadeD ' mais limitada Jue os
at&i3utos Juali.i)ados )omo public :)in"a )la&o=%
A(o&a @amos entende& o Jue ' private e o Jue ' public% Uamos supo& Jue @o)H instan)iou
:)&iou= um o39eto do tipo $onto em seu p&o(&ama,
$onto meu( //instanciacao
meuHnew $onto&'(
Se(undo o uso da de.inio da )lasse $onto dada a)ima @o)H /9" pode es)&e@e& no seu
p&o(&ama,
meu.*H&float'L.1( //erro !
8)omo .a"0amos nos e6emplos ante&io&es8 a no se& Jue * .osse de)la&ado )omo public na de.inio
da )lasse o Jue no o)o&&e aJui% 1as @o)H pode es)&e@e& *HL.1( na implementao :dent&o= de um
m'todo po&Jue enJuanto no .o& .eito uso de he&ana8 pode4se di"e& Jue um m'todo tem a)esso a
tudo Jue ' de sua )lasse8 @e9a o p&o(&ama se(uinte%
Uo)H pode es)&e@e&: meu.move&L.1FL.1'( 8po&Jue sua de)la&ao &move' est7 )omo public na
)lasse8 em JualJue& lu(a& se pode es)&e@e& meu.move&L.1FL.1'(%
Uisi3ilidade das de)la&aIes de uma )lasse8 .o&a dela 8de sua hie&a&Juia e de seu -5B;IC
pa)Ca(e% Ue9a Jue s> a pa&te pu3li) ' @is0@el neste )aso, -RIUATE
-ROTECTE/
B-AC]APED
Uisi3ilidade das de)la&aIes de uma )lasse8 dent&o dela mesma, -5B;IC
-RIUATE
-ROTECTE/
B-AC]APED
ATRIB$TOS PRIVA;E+ MLTO%OS PUDLIC
Apli)ando en)apsulamento a )lasse ponto de.inida ante&io&mente8 dei6ando os at&i3utos
en)apsulados e de.inindo a inte&.a)e pu3li)a da )lasse somente at&a@'s de m'todos%
//5lasse ponto
public class $onto <
pri+ate float *F?( //atributos private
public $onto&float a*Ffloat a?' //omita o valor de retorno;
//"arante o estado do objeto
<
this.*Ha*( this.?Ha?(
A
public void move&float d*Ffloat d?'
<
this.*GHd*( this.?GHd?(
A
public float retornaS*&'
<
return *(
A
public void mostra&'
<
S?stem.out.println& @&@ G this.* G @F@ G this.? G @'@ '(
A
A
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
public static void main&Strin" ar"s=>' <
$onto ap(
apHnew $onto&&float'1.1F&float'1.1'(
ap.mostra&'(
A
A
&1F1'
!!COMEN;ARIO86
Este p&o(&ama no dei6a @o)H ti&a& o ponto de &1F1' a no se& Jue se9a )hamada iniciali6a
no@amente% 2i)a )la&o Jue a(o&a8 en)apsulando * e ? p&e)isamos de mais m'todos pa&a Jue a )lasse
no tenha sua .un)ionalidade limitada% No@amente, es)&e@e& ap.*H31( em main ' um e&&oQ -ois *
est7 Juali.i)ada )omo private% Semp&e leia os e6e&)0)ios8 mesmo Jue no @7 .a"e4los% O Jue o)o&&e
em )lasses mais )ompli)adas8 ' Jue ao de.ini& mais m'todos na inte&.a)e da )lasse8 estamos
pe&mitindo Jue a &ep&esentao inte&na possa se& mudada sem Jue os usu7&ios tomem )onhe)imento
disto%
E<erc:ci"s:
=>
Implemente os m'todos public void alteraS*&float a' F public float retornaS*&void'F public
void move &float d*Ffloat d? '( %Implemente out&os m'todos Jue a)ha& impo&tantes e6emplo public
void distancia&ponto a' < return dist&XFWFa.XFa.W'( AF onde dist &ep&esenta o )on9unto de ope&aIes
matem7ti)as ne)ess7&ias pa&a o3te& a distLn)ia ent&e :E8j= :a%E8a%j=% Uo)H p&o@a@elmente usa&7 a
.uno 8ath.s,rt&' Jue de.ine a &ai" Juad&ada de um double8 no ' p&e)iso .a"e& nenhum import
pa&a usa& 8ath.s,rt&'8 mas ' p&e)iso )on@e&te& os a&(umentos de float pa&a double e o @alo& de
&eto&no de double pa&a float.
Ue9a Jue no m'todo distancia8 podemos o3te& a)esso aos at&i3utos private X e W do
a&(umento a8 isto ' pe&mitido po&Jue distancia ' um m'todo da mesma )lasse de a8 em3o&a no do
mesmo o39eto8 uma manei&a de p&o@e& este tipo de a)esso pa&a out&as )lasses :distan)ia de &eta a
ponto= ' dota& a )lasse $onto de m'todos do tipo float retornaS*&void'(%
@>
Es)olha um p&o(&ama implementado ante&io&mente e apliJue en)apsulamento8 analise a
.un)ionalidade de sua )lasse% Uo)H te@e Jue implementa& mais m'todosV KuaisV
$M ATRIB$TO L PUDLIC
Neste t>pi)o pedimos Jue o leito& .aa uma @a&iante do p&o(&ama ante&io&8 a ?ni)a di.e&ena '
Jue W de@e se& )olo)ado na pa&te public da de.inio da )lasse podendo se& a)essado di&etamente%
-a&a es)&e@e& a @a&iante8 tome o )>di(o do p&o(&ama ante&io& e su3stitua
pri+ate float *F?(
po&
pri+ate float *(
public float ?( //? pode ser acessado
C"-e/t!ri"s:
O3se&@e Jue a(o&a nada impede Jue @o)H a)esse di&etamente +, ap.?H311.1F po&'m
ap.*H31.11 ' um e&&o% O3se&@e em Jue pa&te :7&ea= da )lasse )ada um desses at&i3utos .oi de)la&ado%
E<erc:ci"s:
=>
C&ie os m'todos float retornaS*&void'F void alteraS*&float a'( Jue de@em se&@i& pa&a &eto&na&
o @alo& a&ma"enado em * e pa&a alte&a& o @alo& a&ma"enado em * &espe)ti@amente% C&ie tam3'm os
&espe)ti@os m'todos retorna e altera pa&a o at&i3uto ?%
@>
Kual das se(uintes de)la&aIes pe&mite Jue se a)esse em main s"-e/te os m'todos move e
iniciali6a8 en)apsulando todos os out&os elementos da )lasseV O3s%, A o&dem das de)la&aIes private
e public pode esta& in@e&tida )om &elao aos e6emplos ante&io&es%
a=
public class $onto 1
public float *(
public float ?(
public void iniciali6a&float aF float b' <*Ha( ?Hb(A(
public void move&float d*F float d?' ( <*GHd*( ?GHd?( A(
2(
3=
public class $onto 1
public void iniciali6a&float aF float b' <*Ha( ?Hb(A(
public void move&float d*F float d?' ( <*GHd*( ?GHd?( A(
pri+ate float *(
pri+ate float ?(
2(
)=
public class $onto 1
public void iniciali6a&float aF float b' <*Ha( ?Hb(A(
pri+ate void move&float d*F float d?' ( <*GHd*( ?GHd?( A(
public float *(
pri+ate float ?(
2(
ENCAPS$'AMENTO E PACSAGES
Neste t>pi)o e6pli)a&emos o &e)u&so de pa)Ca(es )om Hn.ase nas opIes de en)apsulamento
&ela)ionadas 8 em he&ana e6pli)a&emos este &e)u&so )om Hn.ase no &euso de )>di(o das pa)Ca(es
o.e&e)idas )om a lin(ua(em% -a)Ca(es so )on9untos de )lasses &ela)ionadas8 estes )on9untos so
dete&minados in)luindo uma linha no topo de )ada a&Jui@o indi)ando a Jual pa)Ca(e pe&ten)em as
)lasses ali de)la&adas% Se nenhuma linha ' inse&ida assume4se Jue todas as )lasses pe&ten)em a uma
pa)Ca(e s>%
ENCAPS$'AMENTO %E ATRIB$TOS E MLTO%OS COM PACSAGES
O en)apsulamento de at&i3utos e m'todos atin(ido )om o uso de pa)Ca(es ' muito semelhante
ao en)apsulamento )om private e public8 s> Jue a(o&a o Blimite de @isi3ilidadeD ' mais amplo do Jue
a )lasse% A Juesto aJui le@antada ' se a )lasse ' @is0@el .o&a do Bpa)Ca(eD ou no% S> pa&a lem3&a&8 a
Juesto Jue do item ante&io&, 8 e&a se os m'todos e at&i3utos e&am @is0@eis .o&a da )lasse ou no%
Uisi3ilidade das de)la&aIes de uma )lasse8 dent&o de seu pa)Ca(e, -5B;IC
-RIUATE
-ROTECTE/
B-AC]APED
Kuando e6pli)a&mos protected .o&ne)e&emos um dia(&ama )ompleto dos modos de
en)apsulamento de m'todos e at&i3utos8 este dia(&ama ' muito ?til pa&a a memo&i"ao%
B-a)Ca(esD ' um &e)u&so da lin(ua(em Jue pe&mite .o&ma& (&upos de )lasses &ela)ionadas ent&e
si de .o&ma Jue elas o.e&eam .a)ilidades umas as out&as% 2a)ilidades estas Jue nem semp&e so
o.e&e)idas ao usu7&io% Uamos monta& uma pa)Ca(e de nome .eometria )ontendo )lasses Jue
&ep&esentam elementos (&7.i)os tais )omo &etas8 )0&)ulos e pontos% A est&utu&a de di&et>&io a3ai6o
des)&e@e a disposio dos a&Jui@os deste e6emplo,
I/ici": A2Fs Ja+ac:
Note Jue a pa)Ca(e .eometria est7 toda so3 um di&et>&io ou .olde& de mesmo nome8 isto
o)o&&e po&Jue a est&utu&a de pa)Ca(es de@e se& mapeada em uma est&utu&a de di&et>&ios pa&a Jue suas
)lasses possam se& a)hadas% Assim a )lasse java.awt.5olor est7 dois n0@eis8 po&tanto dois di&et>&ios
a3ai6o na hie&a&Juia de pa)Ca(es .o&ne)ida )om a lin(ua(em%
//5lasse ponto
pacHa7e Geo%etria
public class $onto <
float *F?( //nenhu especificadorF defaultHpac#a"e
public $onto&float a*Ffloat a?' //omita o valor de retorno;
//"arante o estado do objeto
<
this.*Ha*( this.?Ha?(
A
public float retornaX&'
<
return *(
A
public void move&float d*Ffloat d?'
<
this.*GHd*( this.?GHd?(
A
public void mostra&'
<
S?stem.out.println&@&@Gthis.*G@F@Gthis.?G@'@'(
A
A
//5lasse circulo
pacHa7e Geo%etria
public class 5irculo <
float raioF*F?( //nenhum especificadorF defaulHpac#a"e
public 5irculo&float a*Ffloat a?Ffloat ar'
//"arante o estado do objeto
<
this.*Ha*( this.?Ha?( this.raioHar(
A
public void alteraSraio&float a'
<
this.raioHa(
A
public float retornaSraio&'
<
return this.raio(
A
public void move&float d*Ffloat d?'
<
this.*GHd*( this.?GHd?(
A
public float "i*tancia(Ponto ap)
1
float "cp !!"i*tancia "o centro "o circulo ao ponto
"cp&(float)Mat5,*Art(("ouble) ((#3ap,#)I(#3ap,#)-($3ap,$)I($3ap,$)) ) !!ace**o "ireto
!!ao* atributo* "e ap: i*to porAue a* cla**e* pertence% ao %e*%o pacHa7e
if ("cpJraio) 1return raio3"cp 2
el*e 1return "cp3raio 2
2
public void mostra&'
<
S?stem.out.println&@&@Gthis.*G@F@Gthis.?G@F@Gthis.raioG@'@'(
A
A
//Ar,uivo Ueta.java
//5lasse Ueta
pacHa7e Geo%etria
public class Ueta <
$onto aFb( //idem F sao encapsulados como pac#a"e
public Ueta&float a*Ffloat a?Ffloat b*Ffloat b?'
<
aHnew $onto&a*Fa?'(
bHnew $onto&b*Fb?'(
A
public float "i*tancia(Ponto ap)
1
!!%eto"o nao i%ple%enta"o
!!ace**e li+re%ente o* atributo* "o ar7u%ento Ponto
!!"e %o"o a calcular *ua "i*tancia a e*ta reta: e# copia&ap,#
return 4,4f
2
public void mostra&'
<
a.mostra&'(
b.mostra&'(
A
A
//5lasse principalF Ar,uivo $rincipal.java
i%port Geo%etria,I
public class $rincipal <
public static void main&Strin" ar"s=>' <
5irculo acirc(
!!acirc,#&(float).4,4 erro! atributo encap*ula"o (%o"o pacHa7e)
$onto apto(
acircHnew 5irculo&&float'1.1F&float'1.1F&float'3.1'(
acirc.mostra&'(
aptoHnew $onto&&float'0.1F&float'7.1'(
apto.mostra&'(
8$*te%,out,println(9Di*t69 - acirc,"i*tancia(apto))
A
A
&1F1F3'
&0F7'
+ist:0
As de)la&aIes em ne(&ito dos a&Jui@os a)ima, pacHa7e Geo%etria,I e i%port
Geo%etria,I de@em se& inse&idas lo(o no in0)io do a&Jui@o8 s> podendo se& p&e)edidas po&
)oment7&ios%
E6iste uma Juantidade (&ande de Bpa)Ca(esD8 97 de.inidas na lin(ua(em8 as Juais a3o&da&emos
na se(unda pa&te% -o& ho&a 3asta sa3e& Jue 97 estamos usando de)la&aIes da Bpa)Ca(eD java.lan" 8
mesmo sem espe)i.i)a& import java.lan".B! no in0)io de nossos a&Jui@os% Isto o)o&&e po&Jue este
pa)Ca(e ' impo&tado impli)itamente em todos os p&o(&ama Java%
O .B usado em impo&t .eometria.B! tem o si(ni.i)ado de todas as )lasses da pa)Ca(e
.eometria8 o aste&is)o ' usado )omo um )o&in(a8 um @alo& Jue pode su3stitui& todos os demais8
assim )omo em al(uns sistemas ope&a)ionais%
Em3o&a de .7)il utili"ao8 este )on)eito )onstitui uma ino@ao )om &elao a CRR% Em
1odula4S pode4se o3te& um e.eito semelhante utili"ando de)la&aIes de )lasses :tipos o39etos= no
mesmo m>dulo e inte&.a)es Jue no e6po&tam tudo o Jue e6iste no m>dulo8 assim as )lasses
de)la&adas no mesmo m>dulo o.e&e)em .a)ilidades umas as out&as%
O modo de a)esso de at&i3utos e m'todos )hamado B.&iendl+D ou pa)Ca(e ' p&opo&)ionado pelo
uso de Bpa)Ca(esD e pe&mite p&o(&ama& de manei&a e.i)iente :sem muitas )hamadas de m'todos= e
se(u&a :)om en)apsulamento=%
Se os t&i3utos da )lasse $onto .o&em espe)i.i)ados )omo B.&iendl+D ou pa)Ca(e :eJui@ale a
nenhum espe)i.i)ado&=8 eles pode&o se& a)essados direta-e/te :sem )hamadas do tipo
ap.retornaS*&'( = pela )lasse Ueta Jue pe&ten)e a mesma Bpa)Ca(eD8 mas )ontinuam en)apsulados
pa&a as )lasses e6te&nas ao Bpa)Ca(eD ou se9a pa&a o usu7&io% En.ati"amos o te&mo Bdi&etamenteD
po&Jue o3te& a)esso a um at&i3uto @ia m'todo ' 3em mais )ustoso do Jue a)ess74lo di&etamente8 mas
se @o)H p&o(&ama& usando pa)Ca(es8 (anha&7 o 3ene.i)io da e.i)iHn)ia sem pe&de& o do
en)apsulamento%
ENCAPS$'AMENTO %E C'ASSES COM PACSAGES
At' a(o&a8 t0nhamos de)la&ado todas as )lasses )omo public :public class Domeclasse <A=8
em3o&a sem e6pli)a& e6atamente po&Jue% Este t>pi)o t&ata da possi3ilidade de o p&o(&amado& dese9a&
)&ia& uma )lasse pa&a seu uso p&>p&io e no .o&ne)H4la pa&a o usu7&io%
O Jue a lin(ua(em Java pe&mite neste sentido ',
14 A )&iao de )lasses Jue s> podem se& usadas dent&o de pa)Ca(es8 ou se9a8 @o)H no pode
de)la&a& um o39eto desta )lasse e6te&namente ao pa)Ca(e%
#4 A )&iao de )lasses Jue podem se& usadas somente pelas )lasses p&esentes no mesmo
a&Jui@o8 em3o&a no tenhamos most&ado8 um a&Jui@o pode )onte& a de)la&ao de mais de uma )lasse
desde Jue somente uma delas se9a public%
O en)apsulamento de )lasses se(ue uma sinta6e semelhante ao en)apsulamento de m'todos e
at&i3utos8 ou se9a, at&a@'s de Juali.i)ado&es ou modi.i)ado&es,
[ualificador+a5lasse class Dome+a5lasse < /BAtributos e metodos B/ A
Os Juali.i)ado&es so,
public Estas )lasses so semp&e a)ess0@eis em todos os pa)Ca(es do seu )>di(o% Somente
uma )lasse pu3li)a ' pe&mitida po& a&Jui@o8 e o a&Jui@o de@e te& o mesmo nome da
)lasse%
private Estas )lasses so a)ess0@eis somente pelas )lasses de)la&adas no mesmo a&Jui@o%
5m a&Jui@o pode possui& @7&ias )lasses private8 mas uma ?ni)a )lasse public%
Nada espe)i.i)ado
Bpa)Ca(eD
Estas )lasses podem se& a)essadas no pa)Ca(e Jue elas pe&ten)em8 se nenhum
pa)Ca(e ' espe)i.i)ado8 elas pe&ten)em ao p&o(&ama%
:e6istem out&os Juali.i)ado&es8 /9" &ela)ionados )om en)apsulamento Jue se&o e6pli)ados depois=
Seus p&o(&amas no p&e)isam ne)essa&iamente .a"e& uso destes &e)u&sos de en)apsulamento8
mas todo )>di(o es)&ito pa&a te&)ei&os de@e utili"74los intensamente%
Uo)H te@e te& notado Jue semp&e de.inimos uma )lasse po& a&Jui@o8 isto ' .eito po&Jue a
lin(ua(em s> pe&mite uma )lasse public po& a&Jui@o8 as out&as tem Jue se& private ou pac#a"e%
5m e6emplo de utili"ao, ao )&ia& uma )lasse lista li(ada al(u'm pode a)ha& )on@eniente
de.ini& uma )lasse n> pa&a se& usada somente pela )lasse listali"ada% 5ma opo ' de.ini& a )lasse n>
)om modo de en)apsulamento, pa)Ca(e% O )liente de sua )lasse lista li(ada no p&e)isa sa3e& Jue esta
)lasse se 3aseia em uma )lasse Do% Uamos implementa& esta id'ia no e6emplo a se(ui&8 toma&ei o
)uidado de .a"H4lo 3em simples pois estamos no )omeo do tuto&ial,
I/ici": A2Fs Ja+ac:
pac#a"e listas(
//classe istaF classe Do ar,uivo ista.java
class Do < //sem especificador de modo de acesso na classe
private char info( //se eu ja tivesse ensinado protected usaria em lu"ar de private
private Do pro*( //@ponteiro@ para o pro*imo no
Do&char iFDo p' //construtor
<
infoHi(
pro*Hp(
A
char retornaSinfo&'
//retorna valor do campo
<
return info(
A
void alteraSinfo&char i'
//altera valor do campo
<
infoHi(
A
void alteraSpro*&Do p'
//altera valor do pro*imo no
<
pro*Hp(
A
Do retornaSpro*&'
//retorna referencia ao pro*imo no
<
return pro*(
A
A
public class ista <
private Do cabeca( //inicio da lista
private int elementos( //numero de nos na lista
public ista&'
//construtor
<
cabecaHnull(
elementosH1(
A
public void insere&char a'
< //reali6ada em muitos mais pacos para facilitar apredi6ado
elementosGG(
Do temp(
if &cabecaHHnull' cabecaHnew Do&aFnull'(
else<
tempHnew Do&aFnull'(
temp.alteraSpro*&cabeca'(
cabecaHtemp(
A

//se cabeca HH null tambem funciona
A
public char remove&'
<
Do removido(
if &cabecaHHnull' return X1X( //elementosHH1
else
<
elementosPP(
removidoHcabeca(
cabecaHcabeca.retornaSpro*&'(
return removido.retornaSinfo&'(
A
A
public int retornaSelementos&'
<
return elementos(
A
public void mostra&' //nao deveria estar a,uiF e so para debu"ar
<
Do tempHcabeca(
while &temp;Hnull'
<
S?stem.out.print& @=@ G temp.retornaSinfo&' G @>P@ '(
tempHtemp.retornaSpro*&'(
A
S?stem.out.print&@null@'(
S?stem.out.println&'(
A
A
A(o&a @o)H pode es)olhe& ent&e duas @e&sIes do p&o(&ama p&in)ipal8 a @e&so da esJue&da
implementa um loop de ent&adas do te)lado Jue pe&mite testa& ite&ati@amente a )lasse ista8 no
e6pli)a&emos ainda detalhes deste loop8 apenas )omo us74lo% /H uma olhada no )>di(o desta @e&so
de p&o(&ama p&in)ipal8 se @o)H a)ha4lo )ompli)ado pode usa& a se(unda @e&so p&esente a di&eita
deste a&Jui@o e em uma se(unda leitu&a &eto&na& a @e&so da esJue&da%
Na @e&so )om o loop :14esJue&da= a let&a KiL indi)a o )omando inse&o8 se @o)H di(ita&
iCenterE inse&i&7 o )a&a)te&e CenterE na sua lista8 o Jue no&malmente no ' dese9ado8 di(ite
icCenterE pa&a inse&i& o )a&a)te&e c% KrL indi)a remoo8 e K%L indi)a Jue a lista de@e se& -ost&ada na
tela% -elo &esultado do p&o(&ama @o)H entende&7 melho& esses )omandos &udimenta&es de teste% Uo)H
pode a)ha& &udimenta& p&o(&ama& assim8 mas ' um 3om m'todo8 @e&7 )omo esta mesma lista depois
de testada assim pode .i)a& 3onita se inse&ida em um applet e most&ada (&a.i)amente%
Es)olha uma implementao pa&a entende& e )ompila&,
//5lasse principalF Ar,uivo $rincipal.java versao 3
import java.io.+ata:nputStream(
import listas.B(
class $rincipal <
public static void main&Strin" ar"s=>' <
ista mlHnew ista&'( //mlHminhalista
char oFe( //oHopcaoF eHtemporario
+ata:nputStream meu+ata:nputStream
Hnew +ata:nputStream&S?stem.in'(
tr?<
do
<
o H&char'meu+ata:nputStream.read&'(
switch &o' <
case XiX:
eH&char'meu+ata:nputStream.read&'(
ml.insere&e'(
brea#(
case XrX:
eHml.remove&'(
S?stem.out.println&e'(
//S?stem.out.flush&'(
brea#(
case XmX:
ml.mostra&'(
S?stem.out.println&'(
//S?stem.out.flush&'(
brea#(
default: (
A

A while &o;HX,X'(A
catch &-*ception erro' < /B nao faco nada B/ A
A
A
//5lasse principalF Ar,uivo $rincipal.java versao !
import java.io.+ata:nputStream(
import listas.B(
class $rincipal <
public static void main&Strin" ar"s=>' <
char e(
ista mlHnew ista&'( //mlHminhalista
ml.insere&XaX'(
//mesma se,uencia da versao com menu
//de pro"rama principal
ml.mostra&'(

ml.insere&XvX'(
ml.insere&XaX'(
ml.insere&XjX'(
ml.mostra&'(

eHml.remove&'(
S?stem.out.println&e'(
ml.mostra&'(
ml.remove&'( //embora o metodo
//remove retorne um valor
ml.remove&'( //nestas chamadasF
//este valor de retorno eX
ml.remove&'( //i"norado
ml.mostra&'(

A
A
ia
m
=a>3null
iviaij
m
=0>3=a>3=+>3=a>3null
r
=a>Pnull
=j>P=a>P=v>P=a>Pnull
j
=a>P=v>P=a>Pnull
null
j
m
=a>3=+>3=a>3null
r
a
r
+
r
a
m
null
,
//COMEN;ARIO8
Os p&o(&amado&es Jue no esto a)ostumados )om )oleta autom7ti)a de li6o podem a)ha&
est&anho Jue &eti&amos o p&imei&o elemento da lista simplesmente pe&dendo p&opositalmente a
&e.e&Hn)ia pa&a ele ao emenda& o n> )a3ea )om o &estante,
No se p&eo)upem8 a lin(ua(em )uida da desalo)ao%
TIPO ABSTRATO %E %A%OS

Tipo a3st&ato de dados8 TA/8 se p&eo)upa em p&opo&)iona& uma a3st&ao so3&e uma est&utu&a
de dados em te&mos de uma inte&.a)e 3em de.inida% O en)apsulamento mant'm a inte(&idade do
o39eto e@itando a)essos inespe&ados% O .ato de o )>di(o esta& a&ma"enado em um s> lu(a& )&ia um
p&o(&ama modi.i)7@el8 le(0@el8 )oeso%
A id'ia ' )&ia& )lasses Jue o)ultem a sua &ep&esentao inte&na as Juais podem (e&almente se&
modeladas at&a@'s de Bshoppin( list app&oa)hD% -o& Bshoppin( list app&oa)hD entenda Jue @o)H pode
modela& sua )lasse at&a@'s das ope&aIes Jue ela supo&ta8 ou se9a8 antes de )omea& a implementa& '
&e)omend7@el Jue se .aa uma lista :semelhante a uma lista de )omp&as= das ope&aIes dese9adas
pa&a a )lasse e depois se es)olha a &ep&esentao inte&na adeJuada% Completando este )on)eito amplo
podemos di"e& Jue uma )lasse implementa um tipo a3st&ato de dados%
So e6emplos de tipos a3st&atos de dados,
5ma 7&@o&e 3in7&ia )om as ope&aIes usuais de inse&o8 &emoo8 3us)a %%%
5ma &ep&esentao pa&a n?me&os &a)ionais :nume&ado&8 denominado&= Jue possua as
ope&aIes a&itm'ti)as 37si)as e out&as de )on@e&so de tipos%
5ma &ep&esentao pa&a Ln(ulos na .o&ma :P&aus8 1inutos8 Se(undos=% Tam3'm )om as
ope&aIes &ela)ionadas8 3em )omo as ope&aIes pa&a )on@e&te& pa&a &adianos8 ent&e out&as%
Tipo a3st&ato de dados ' um )on)eito muito impo&tante em p&o(&amao o&ientada a o39etos e
po& este moti@o ' lo(o ap&esentado neste tuto&ial% Os e6emplos se(uintes so simples po& no
pode&mos usa& todos os &e)u&sos da lin(ua(em ainda% /ada esta impo&tLn)ia8 a medida em Jue
.o&mos int&odu"indo no@os )on)eitos e6empli.i)a&emos )om apli)aIes na implementao tipos
a3st&atos de dados%
E<erc:ci"s:
=>
5se a est&at'(ia da lista de )omp&as :Bshoppin( list app&oa)hD= pa&a modela& a inte&.a)e do tipo
a3st&ato de dados $onto8 tente pensa& nas ope&aIes Jue (e&almente se apli)am a pontos em
(eomet&ia8 tais )omo distLn)ia a out&os elementos8 &otao em to&no de out&o ponto% Reimplemente
este TA/ adi)ionando as in?me&as alte&aIes%
TA% FRAO
Neste e6emplo implementa&emos o tipo a3st&ato de dados .&ao% Baseado no )on)eito de
n?me&o &a)ional do )ampo da matem7ti)a% Al(umas ope&aIes no .o&am implementadas po& se&em
semelhantes ds e6istentes%
5ma apli)ao deste TA/s )onsiste em al(uns )7l)ulos onde pode o)o&&e& muita pe&da de
p&e)iso ao lon(o do p&o(&ama de@ido ao uso de a&itm'ti)a de ponto .lutuante% -o& e6emplo, .aa
e6atamente o se(uinte em sua )al)ulado&a, L / 7 B 7 F Jual ' o &esultadoV Ao te&mina& este p&o(&ama
teste a se(uinte ope&ao )om .&aIes &L/7'B&7/3'8 Jual se&7 o &esultadoV
RES$MO %AS OPERATES MATEM*TICAS EN&O'&I%AS:
Simpli.i)ao de .&ao, &a/b'H& &a/mdc&aFb'' / &b/mdc&aFb'' '
Onde mdc&aFb' &eto&na o m76imo di@iso& )omum de a3%
Soma de .&ao, &a/b'G&c/d'H& &a.dGc.b' / b.d ' simpli.i)ada%
1ultipli)ao de .&ao, &a/b' B &c/d'H & &aBc' / &bBd' ' simpli.i)ada%
I(ualdade, &a/b'HH &c/d' se aBd HH bBc.
No i(ualdade, &a/b' ;H &c/d' se aBd ;H bBc
1aio& ou i(ual Jue, &a/b'&c/d' se aBd bBc
SHOPPING 'IST APPROACH PARA O TA% FRAO:
:O )on9unto de ope&aIes implementadas esta ma&)ado )om % A .inali"ao dessa shoppin( list
3em )omo do p&o(&ama ' dei6ada )omo e6e&)0)io8 o Jual no de@e se& di.0)il pois @endo a
implementao da soma8 o leito& o3t'm Juase Jue de manei&a di&eta a implementao da su3t&ao8 o
mesmo o)o&&e pa&a as demais ope&aIes=,
Const&uto& :&e)e3e dois a&(umentos num'&i)os intei&os=
Simpli.i)ao da .&ao :di@iso do nume&ado& e denominado& po& m76imo di@iso& )omum=
Soma de .&ao :m'todo &e)e3endo a&(umento do p&>p&io tipo .&ao=
Su3t&ao de .&ao
1ultipli)ao
/i@iso
Teste de i(ualdade
Teste de desi(ualdade
Teste de maio& ou i(ual Jue
Teste de meno& ou i(ual Jue
Teste de maio& Jue
Teste de meno& Jue
Imp&esso na tela
Rotina de )&iao )om ent&ada de nume&ado& e denominado& pelo te)lado
Con@e&so pa&a double
Con@e&so pa&a lon"
Ope&ao de alte&ao do nume&ado&
Ope&ao de alte&ao do denominado&
Reto&no do @alo& do nume&ado& e denominado&
Out&as ope&aIes Jue o leito& 9ul(a& ne)ess7&ias
TUPICOS ABOR%A%OS:
Const&uto&es em (e&al8 )&iao de m'todos de )on@e&so de tipos8 )hamadas de m'todos do
mesmo o39eto8 ope&ado& h Jue &eto&na o &esto da di@iso de dois intei&os%
CONSI%ERATES %E PRO0ETO:
A &ep&esentao es)olhida pa&a o nume&ado& e o denominado& da .&ao se&7 3aseada no tipo
int%
O .o&mato es)olhido pa&a os m'todos Jue implementam as ope&aIes ',
Iipo+oValor+eUetorno DomedaVperacao&Iipo+oVperando Valor+oVperando'(
Nesse .o&mato um dos ope&andos ' a p&>p&ia .&ao Jue est7 &e)e3endo a )hamada de m'todo o
out&o ' passado )omo a&(umento% Out&os .o&matos eJui@alentes pode&iam te& sido adotados% 5m dos
poss0@eis .o&matos .a" )om Jue os dois ope&andos se9am passados )omo a&(umentos e a .&ao Jue
est7 &e)e3endo a )hamada de m'todo e6e)uta a ope&ao pa&a esses a&(umentos &eto&nando o @alo&%
Uolta&emos a dis)uti& essas alte&nati@as de implementao%
Se du&ante o p&o)esso de )onst&uo de seu p&o(&ama8 o)o&&e& a &epetio de um )e&to t&e)ho
de )>di(o nos di@e&sos m'todos :&epetio da &otina de simpli.i)ao nos m'todos de soma8
su3t&ao=8 )onside&e a opo de de.ini& este t&e)ho de )>di(o )omo um m'todo em sepa&ado% Se este
m'todo no .o& um m'todo Jue de@a )ompo&8 pa&ti)ipa&8 da inte&.a)e8 mas Jue ainda assim tem seu
pad&o muito &epetido8 )onside&e a possi3ilidade de de.ini4lo )omo private :m'todo md)=%
No e6iste uma &e(&a de ou&o Jue di(a e6atamente )omo p&o9eta& as suas )lasses pa&a Jue elas
p&een)ham &eJuisitos de po&ta3ilidade8 &o3uste"8 .le6i3ilidade% Toda@ia uma &e)omendaIes
impo&tantes podem se& .eitas pa&a e@ita& &e.o&mulaIes du&ante o p&o)esso de p&o(&amao, BNo
e)onomi"e tempo na .ase de p&o9eto% -&o)u&e antes de p&o(&ama&8 simula& o uso de uma )lasse8 se9a
mentalmente ou at&a@'s de um p&ot>tipo%D
O )7l)ulo do m76imo di@iso& )omum :mdc= de dois intei&os no tem nada a @e& )om as
ope&aIes a se&em o.e&e)idas po& .&aIes8 te&ia a @e& )om as ope&aIes o.e&e)idas po& um o39eto
.a)ilidades de )7l)ulos :mdc&aFb' F fatorial&b' F fibonaci&*'F combinacoes&nF#' =% No entanto a
)lasse .&ao p&e)isa da ope&ao mdc% O)o&&e Jue 97 estudamos uma manei&a de implementa& um
m'todo em uma )lasse e no o.e&e)H4lo at&a@'s da inte&.a)e8 ' o Juali.i)ado& private% Em CRR
p&o@a@elmente o p&o(&amado& implementa&ia mdc )omo uma .uno isolada%
IMP'EMENTAO:
//IA+ fracao.
//Oile Oracao.java
class Oracao <
private int numFden( //numeradorF denominador
pri+ate int mdc&int nFint d' //metodo private ma*imo divisor comum
//metodo de -uclides GP 711 anos A5.
<
if &nC1' nHPn(
if &dC1' dHPd(
while &d;H1' <
int rHn R d( //RH8V+HUesto da divisao inteira.
nHd(
dHr(
A
return n(
A
public Oracao&int tFint m' //construtor comum
<
numHt(
denHm(
this.simplifica&'( //chamada para o mesmo objeto.
A
public void simplifica&' //divide num e den pelo mdc&numFden'
<
int commd(
commdHmdc&numFden'( //divisor comum
numHnum/commd(
denHden/commd(
if &denC1' < denHPden( numHPnum(A( //move sinal para cima
A
//operacoes matematicas basicas
public Oracao soma &Oracao j'
<
Oracao "(
"Hnew Oracao&&numBj.den'G&j.numBden'FdenBj.den'(
return "(
A
public Oracao multiplicacao&Oracao j'
<
Oracao "(
"Hnew Oracao&numBj.numFdenBj.den'(
return "(
A
//operacoes de comparacao
public boolean i"ual&Oracao t'
< return &&numBt.den'HH&denBt.num''( A
public boolean diferente&Oracao t'
< return &&numBt.den';H&denBt.num''( A
public boolean maioroui"ual&Oracao t'
< return &&numBt.den'EH&t.numBden''( A
//operacoes de input output
public void mostra&' //e*ibe fracao no video
< S?stem.out.println&@&@ G num G @/@ G den G @'@'( A
//operacoes de conversao de tipos
public double convertedbl&' //converte para double
<
double dbl(
dblH&&double'num/&double'den'(
return dbl(
A
public int converteint&' //converte para int
<
int itn"(
itn"Hnum/den(
return itn"(
A
public void alteraSnum&int nn'
< numHnn( A
public void alteraSden&int nd'
< denHnd( A
public int retornaSnum&'
< return num( A
public int retornaSden&'
< return den( A
A
class $rincipal <
public static void main&Strin" ar"s=>'
<
Oracao aFbFc(
aHnew Oracao&LF7'(
bHnew Oracao&!FK'(
S?stem.out.print&@-sta eX a fracao a: @'(
a.mostra&'(
S?stem.out.print&@-sta eX a fracao b: @'(
b.mostra&'(
cHa.soma&b'(
S?stem.out.print&@c de aGb: @'( //c&aGb'
c.mostra&'(
S?stem.out.print&@aBb: @'(
cHa.multiplicacao&b'(
c.mostra&'(
S?stem.out.print&@aGb: @'(
cHa.soma&b'(
c.mostra&'(
S?stem.out.print&@aEHb: @'(
S?stem.out.println&a.maioroui"ual&b''(
S?stem.out.print&@aHHb: @'(
S?stem.out.println&a.i"ual&b''(
S?stem.out.print&@a;Hb: @'(
S?stem.out.println&a.diferente&b''(
S?stem.out.print&@&int'a @'(
S?stem.out.println&a.converteint&''(
S?stem.out.print&@&double'a @'(
S?stem.out.println& a.convertedbl&''(

A
A
-sta eN a fracao a: &L/7'
-sta eN a fracao b: &3/7'
c de aGb: &!/3'
aBb: &L//'
aGb: &!/3'
aEHb: true
aHHb: false
a;Hb: true
&int'a 3
&double'a 3.KKKK2
!!COMEN;ARIO86
5ma implementao )ompleta do tipo de dados .&ao tem Jue )he)a& po& Bo@e&.loND do
nume&ado& e denominado& o Jue o)o&&e .&eJuentemente Juando se t&a3alha )om n?me&os p&imos
ent&e si :no podem se& simpli.i)ados=8 uma poss0@el soluo pa&a este p&o3lema ' .a"e& uma
ap&o6imao eFou alte&a& a &ep&esentao inte&na da .&ao pa&a um tipo )om maio& nume&o de 3its
:de int pa&a lon"=% /e JualJue& .o&ma estas e6tensIes so e6e&)0)ios a@anados pois a ?ltima delas
en@ol@e uso de he&ana%
E<erc:ci"s:
=>
Complete o tipo .&ao )om os m'todos .altantes da Bshoppin( list app&oa)hD
lon" retornaSden&void' <return den(A
lon" alteraSden&int a' <denHa(A
Conside&ando Jue os at&i3utos de)la&ados em private no so a)ess0@eis .o&a da )lasse8
des)&e@a a utilidade desses m'todos% Eles so ?teis se usados pelos p&>p&ios m'todos de .&aoV
11
@>
Implemente o tipo a3st&ato de dados n?me&o )omple6o )om as ope&aIes matem7ti)as ine&entes%
2aa antes um p&o9eto dos m'todos Jue se&o implementados8 des)&e@a :detalhadamente= as
ope&aIes matem7ti)as ne)ess7&ias% Kue .o&ma de &ep&esentao @o)H es)olhe&7, )oo&denadas pola&es
11
Estes e6e&)0)ios so )onside&ados di.0)eis% M &e)omend7@el somente es3oa& o p&o9eto deles e depois8 a implementao
pode se& dei6ada )omo e6e&)0)io das p&>6imas seIes%
ou &etan(ula&esV
A>
-esJuise so3&e mat&i"es em Java: % C&ie um tipo a3st&ato de dados mat&i" Jue supo&te
at&i3uiIes e leitu&as de )'lulas )ontendo elementos do tipo float% C&ie out&os m'todos pa&a este tipo
a3st&ato de dados )omo multipli)ao po& uma )onstante%
B>
Implemente o tipo a3st&ato de dados &el>(io8 pesJuise as ope&aIes no&malmente o.e&e)idas po&
&el>(ios &eais8 o ?ni)o o39eti@o ' ma&)a& as ho&as% Se @o)H p&e)isa& de inspi&ao pa&a este
e6e&)0)io8 )onsulte o e6emplo da )lasse 5ontador e seus e6e&)0)ios%
8;RING8+ $M MO%E'O %E C'ASSE
A(o&a Jue 97 estamos p&o(&amando al(uns tipos a3st&atos de dados8 est7 na ho&a de
ap&esenta& um e6emplo Jue most&e )omo )ompo&tamento ' impo&tante pa&a um TA/% S> Jue desta
@e" .i)a&emos do lado do )liente8 do usu7&io desse tipo a3st&ato de dados e no do lado do
p&o(&amado&% Estuda&emos a )lasse Strin" o.e&e)ida pela lin(ua(em%
Nos tuto&iais desta s'&ie8 .eitos pa&a out&as lin(ua(ens :CRR8 1odula4S=8 &e)omend7@amos
)omo e6e&)0)io a implementao do tipo a3st&ato de dados st&in(8 Jue de@e&ia supo&ta& ope&aIes de
)on)atenao8 su3st&in(8 a)esso a elemento8 et)% Este e6e&)0)io no .a" sentido em Java po&Jue o tipo
Strin"8 ' .o&ne)ido )om a lin(ua(em )omo uma )lasse da pa)Ca(e java.lan" Jue ' impo&tada
impli)itamente em todos os p&o(&amas al'm disso a sua implementao desta )lasse ' 3astante
)ompleta%
A de)la&ao de Strin"s se d7 da mesma .o&ma Jue os out&os o39etos, Strin" minhaStrin"( %
O )ompilado& o.e&e)e uma .a)ilidade sint7ti)a pa&a a ini)iali"ao )om @alo&es lite&ais,
Strin" testeHVla meu ami"oJ( //objeto instanciado com valor Vla meu ami"o
-a&a )on)atena& Strin"s use o ope&ado& R% Os ope&andos podem no se& Strin"s8 nesse )aso
se&o )on@e&tidos pa&a o39etos desta )lasse8 po& e6emplo se um dos a&(umentos .o& um intei&o8 o
o39eto Strin" )o&&espondente )onte&7 o @alo& lite&al deste intei&o%
S?stem.out.println&teste G Andre;J'( //Vla meu ami"o Andre;
testeGH Andre;J( //atalho para concatenacao se"uida de atribuicao: testeHtesteGJ Andre;J
S?stem.out.println&teste'( //totalmente e,uivalente a primeira
-a&a o3te& o )omp&imento em n?me&o de )a&a)te&es de uma Strin"8 )hame o m'todo len"th&'
pa&a a Strin" em Juesto% -a&a o3te& o )a&a)te&e p&esente na posio da Strin"8 )hame o m'todo
charAt&'( % Note Jue o p&imei&o )a&a)te&e da Strin" est7 na posio "e&o,
char um5harHteste.charAt&K'( //um char recebe ZuN
-a&a o3te& uma su3st&in(8 )hame o m'todo substrin"&int aFint b'( onde o p&imei&o a&(umento
' o 0ndi)e do in0)io da su3st&in( e o se(undo ' o 0ndi)e do .im da su3st&in(s8 os )a&a)te&es em a e 3
tam3'm so in)lu0dos,
Strin" aStrHteste.substrin"&1F!'( //aStr recebe ola
-a&a t&ans.o&ma& todos os )a&a)te&es de uma Strin" em let&as mai?s)ulas 3asta )hama& o
m'todo toTpper5ase&'(
testeHteste.toTpper5ase&'( //teste fica i"ual a VA 8-T A8:.V
5m m'todo inte&essante pa&a usa& em )he)a(em de pad&Ies em te6to ' inde*Vf&Strin"
bus,ue'( % Este m'todo &eto&na o 0ndi)e posio ini)ial de o)o&&Hn)ia de 3usJue na Strin" pa&a a Jual
.oi )hamado o m'todo,
teste.inde*Vf&8-TJ'( //retorna 0
Analo(amente8 last:nde*Vf&Strin" bus,ue'8 &eto&na o 0ndi)e de o)o&&Hn)ia da su3st&in(8 s>
Jue a(o&a do p&o)u&ando do .im pa&a o )omeo%
teste.inde*Vf&8J'( //resulta em / &lo"o a se"uir do ultimo A ,ue esta na posicao 4'
-a&a )ompa&ao de i(ualdade use,
test.e,uals&VA 8-T A8:.VJ'( //retorna valor booleano
Al'm disso8 a )lasse Strin" de.ine m'todos pa&a )on@e&so dos tipos 37si)os pa&a seus @alo&es
na .o&ma de Strin"F @o)H pode a)ha& esses m'todos um pou)o est&anhos8 pois eles tem todos os
mesmos nomes e no p&e)isam de um o39eto pa&a se&em )hamados8 eles so )hamados pa&a a )lasse,
Strin".valueVf&7'( //ar"umento e naturalmente um inteiroF retorna 7J
Strin".valueVf&7.303L'( //ar"umento e doubleF retorna 7.303LJ
Os m'todos de nome valueVf so uma pad&oni"ao de m'todos de )on@e&so ent&e tipos
en)ont&ados em al(umas das )lasses p&'4de.inidas na lin(ua(em8 p&in)ipalmente nas )lasses
BN&appe&sD Jue .o&am e6empli.i)adas )om a )lasse :nte"er%
class Strin"Iest <
public static void main &Strin" ar"s=>' <
Strin" testeH@Vla meu ami"o@(
S?stem.out.println&teste G @ Andre;@'( //Vla meu ami"o Andre;
testeGH@ Andre;@( //atalho para concatenacao se"uida de atribuicao
S?stem.out.println&teste'( //totalmente e,uivalente a primeira
char um5harHteste.charAt&L'( //um char receber ZeN
S?stem.out.println&@Andre @Gum5harGteste.substrin"&7F37''(
testeHteste.toTpper5ase&'( //teste fica i"ual a VA 8-T A8:.V AD+U-;
for &int iH1(iCteste.len"th&'(iGG' //imprimindo caracteres um a um
<
S?stem.out.print&teste.charAt&i''(
A
S?stem.out.println&'( //pula uma linha
S?stem.out.println&teste.inde*Vf&@A8:.V@''( //retorna 4
S?stem.out.println&teste.inde*Vf&@biba@''( //nao achaF retorna P3
S?stem.out.println&teste.last:nde*Vf&@A8:.V@''( //retorna 4

S?stem.out.println&Strin".valueVf&7.303Lf''( //8etodo chamado para a classe
A
A
Vla meu ami"o Andre;
Vla meu ami"o Andre;
Andre e meu ami"o
VA 8-T A8:.V AD+U-;
4
P3
4
7.303L
!!COMEN;ARIO8
O )>di(o .onte dispon0@el )om o )ompilado& )onstitui uma >tima .onte de ap&endi"ado so3&e
)omo )onst&ui& )omponentes de so.tNa&e &eutili"7@eis no estilo de p&o(&amao o&ientada a o39etos8
leia4o semp&e Jue esti@e& dispon0@el e Juando no esti@e&8 p&este ateno na sua inte&.a)e%
Uo)H de@e te& notado Jue e6)eto pelo m'todo toTpper5ase&' a )lasse Strin" no pe&mite
alte&aIes no seu estado depois de te& sido )&iada% Isto de)o&&e da de)iso do BJava teamD de
implementa& duas )lasses pa&a (a&anti& a .un)ionalidade e se(u&ana no uso de st&in(s8 so elas,
Strin" e Strin")uffer% Strin")uffer pe&mite se& modi.i)ada8 a3ai6o ap&esentamos uma ta3ela de seus
p&in)ipais m'todos8 pa&a maio&es in.o&maIes )onsulte a do)umentao de java.lan"%a
Ta4e3a de -;t"d"s da c3asse 8trin7Duffer
Strin")uffer enderecoHhttp://www.java.comJ( //-rro; -sta facilidade para instancia\]o n]o Q
permitida para a classe Strin")ufferF ao envQs disso use o construtor descrito abai*o.
Strin")uffer enderecoHnew Strin")uffer&http://www.java.comJ'( //a"ora sim estaN correto
endereco.append&@/fim.html@'( //concatena e atribuiF forma: http://www.java.com/fim.htmlJ
endereco.charAt&L'( //retorna o caractere Z/N
S?stem.out.println&endereco G J/outro.htmlJ'( //o operadorG tambem funciona para Strin")uffer
endereco.insert&3LF@soft@'( //forma http://www.javasoft.com/fim.htmlJ
endereco.set5harAt&!LFNVN'( //forma http://www.javasoft.com/fVm.htmlJ
S?stem.out.println&endereco.toStrin"&''( //retorna objeto Strin" e,uivalente
E<erc:ci"s,
=>
1elho&e um dos e6e&)0)ios ante&io&es int&odu"indo um nome pa&a o o39eto% Este nome pode i&
nas sa0das de tela e6e)utadas pelo o39eto e ' o nome dado pa&a o )onst&uto& )omo uma Strin"% No
se esJuea de p&o@e& m'todos )omo Strin" "etSname&'%
V@>
Este ' um e6e&)0)io a@anado% Bus)a de pad&Ies em te6to ' uma ope&ao 3astante )omum em
edito&es% A 3us)a de in.o&maIes na inte&net Juando .eita po& pala@&as )ha@e8 ' e6e)utada po&
apli)ati@os Jue podem te& )omo est&at'(ia a )onta(em do n?me&o de o)o&&Hn)ias de )e&tas pala@&as nos
te6tos )adast&ados%
Neste e6e&)0)io @o)H .a&7 pa&te desse t&a3alho de 3us)a de in.o&maIes8 eu @ou te o&ienta&
)omo, C&ie um m'todo Jue a)eita )omo a&(umento uma Strin" (&ande Jue pode te& @indo de @7&ias
.ontes :no impo&ta Juais=% Este m'todo pode pe&ten)e& a uma )lasse de nome -statisticas+eIe*to e
de@e Jue3&a& o a&(umento Strin" em pala@&as sepa&adas po& espaos :@o)H 97 pode .a"e& isso )om os
m'todos )onhe)idos8 mas tal@e" Juei&a usa& a )lasse StreamIo#eni6er=% -a&a )ada uma destas
pala@&as este m'todo .a" uma 3us)a na est&utu&a de a&ma"enamento de pala@&as da )lasse8 se a pala@&a
no )onsta&8 de@e se& in)lu0da )om multipli)idade 18 )aso ela )onste na est&utu&a8 apenas sua
multipli)idade de@e se& in)&ementada%
5m p&o3lema pode su&(i&% A est&utu&a de@e se& )apa" de )&es)e& de tamanho du&ante as @7&ias
)hamadas de m'todos )om St&in(s pa&a se&em p&o)essadas% Se @o)H usa& @eto& uma opo ' &ealo)a& o
@eto& )om o do3&o de espaos% Out&a opo ' usa& uma lista li(ada%
A>
C&ie uma )lasse Jue a(&e(a um stream de ent&ada de dados li(ado ao te)lado% ColoJue esta
)lasse )omo inte&medi7&ia na &e)epo dos dados de modo Jue ela testa pa&a todo )a&a)te&e lido se
ele ' i(ual ao )a&a)te&e bkn<% Se o )a&a)te&e lido .o& i(ual a bkn< ele de@e se& &eti&ado da Strin" lida :use
os m'todos su3st&in( e )on)atenao ensinados=%
2aa )om Jue a )hamada do m'todo readline de sua )lasse dispa&e o a )hamada do m'todo
readline do stream a(&e(ado nela%
Resumindo , sua )lasse atua&7 )omo um .ilt&o de dados do te)lado% 1antendo a analo(ia do
e6emplo int&odut>&io so3&e Streams8 esta&emos lidando )om )one6Ies ent&e )anos8 ou se9a pa&a os
dados )he(a&em do te)lado ao seu p&o(&ama eles de@em passa& pela sua )lasse .ilt&o%
TA% E A'OCAO %INWMICAP
Este e6emplo )&ia um tipo a3st&ato de dados mat&i" 3idimensional de intei&os &int'% O leito&
pode a)ha& est&anho Jue pa&a &ep&esenta& esta mat&i" usamos um @eto&8 mas ' Jue isto t&a" al(umas
@anta(ens,
Re2rese/ta89" 3i/ear de 6-a -atriG:
-ode4se &ep&esenta& uma mat&i" de JualJue& dimenso em um @eto&% Ue9a o e6emplo de uma
mat&i" 3idimensional de intei&os most&ada no .o&mato indiceinear:valorArma6enado. Os 0ndi)es
linea&es @o de 3 at' n
!
.
1at&i",
1,S #,S# S,1
Z,#S T,9$ ,1#
[,#1 \,$\ 9,S#
Ueto& eJui@alente,
1,S #,S# S,1 Z,#S T,9$ ,1# [,#1 \,$\ 9,S#
Uanta(em da &ep&esentao linea& :@eto&=, pa&a &e.e&en)ia& uma posio (asta4se somente um
intei&o )ont&a dois da &ep&esentao mat&i"% -ode4se )onside&a& posiIes Jue apontam pa&a out&as
posiIes8 3asta inte&p&eta& o )onte?do do @eto& )omo um 0ndi)e linea&% Este tipo de )onst&uo pode
se& ?til em Java8 pois a lin(ua(em no possui pontei&os este ' um dos moti@os de esta&mos ensinando
esta t')ni)a%
/es@anta(em da &ep&esentao linea& :@eto&=, ' ne)ess7&io )&ia& .unIes de )on@e&so de
0ndi)e na .o&ma :linha8)oluna= pa&a :0ndi)e linea&= e de :0ndi)e linea&= pa&a :)oluna= ou :linha=% So as
.unIes lin e col e linear deste e6emplo% Em uma p&imei&a leitu&a8 no ' p&e)iso entende& os )7l)ulos
)om 0ndi)es8 apenas o uso dos m'todos Jue o.e&e)em estes )7l)ulos%
-a&a n>s8 )lientes da )lasse 8atri6!+:ntF os elementos se&o inde6ados de 3 at' m :a&3it&7&io=
em te&mos de 0ndi)e linea&% Em te&mos de linhas e )olunas8 eles se&o inde6ados de :18lma6= e de
:18)ma6=% O .ato da lin(ua(em adota& 0ndi)es de 1 at' mP3 pa&a mat&i"es e @eto&es no impo&ta8 n>s
)onst&u0mos em @olta dessa &ep&esentao pa&a Jue nosso o39eto .o&nea8 t&a3alhe na )on@eno mais
natu&al de inde6ao pa&a humanos, 3 atQ m% Kuanto as ope&aIes de 0ndi)es8 apenas @e&i.iJue a
@e&a)idade pa&a @alo&es a&3it&7&ios de uma mat&i" )omo a desenhada ante&io&mente tenta& entendH4las
le@a tempo e eu sei Jue @o)H ' )apa" de p&o(&ama4las%
/ent&e os o39eti@os de um p&o(&amado& de uma lin(ua(em o&ientada a o39etos podemos )ita&,
es)&e@e& pou)o )>di(o8 es)&e@e& )>di(o )o&&eto8 to&na& o seu )>di(o &eutili"7@el% A )&iao de
)omponentes de so.tNa&e &eutili"7@eis8 ' eno&memente .a)ilitada pela po&ta3ilidade da lin(ua(em
Java% -&o(&amas e6emplo poste&io&es :se(unda pa&te= most&a&o )omo &eutili"a& esta )lasse mat&i"
pa&a a )&iao de um 9o(o de Jue3&a )a3ea de Juad&adinhos desli"antes% Os Juad&adinhos de@em se&
mo@idos na moldu&a de modo a .o&ma& uma ima(em onde um dos Juad&ados ' @a"io%
SHOPPING 'IST APPROACH PARA O TA% MATRIR@%I/t:
:As ope&aIes implementadas esto ma&)adas )om % As ope&aIes ma&)adas )om de@em se&
implementadas )omo e6e&)0)io a@anado )u9o o39eti@o ' )ompleta& um de seus p&imei&os )omponentes
de so.tNa&e &eutili"7@el8 estamos in)luindo desta @e" os at&i3utos tam3'm=%
private int linhas( //numero de linhas da matri6
private int colunas( //numero de colunas da matri6
private int tam( //HlinhasBcolunas
private int lc=>( //Hnew int=linhasBcolunas>Hvetor=1..&tamP3'>H~matri6=l>=c>
Const&uto& :&e)e3e dois a&(umentos num'&i)os intei&os8 n?me&o de linhas e de )olunas=
Con@e&so de linha e )oluna pa&a 0ndi)e linea&
Con@e&so de 0ndi)e linea& pa&a )oluna%
Con@e&so de 0ndi)e linea& pa&a linha%
Ope&ao de t&o)a de elementos da mat&i" )om dois a&(umentos do tipo 0ndi)e linea&%
Ope&ao de t&o)a de elementos da mat&i" )om a&(umentos do tipo :linha e )oluna=%
Ope&ao de at&i3uio a elemento da mat&i" indi)ado po& 0ndi)e linea&%
Ope&ao de at&i3uio a elemento da mat&i" indi)ado po& linha e )oluna%
Ope&ao de &eto&no do )onte?do de posio da mat&i" indi)ada po& um 0ndi)e linea&%
Ope&ao de &eto&no do )onte?do de posio da mat&i" indi)ada po& linha e )oluna%
Rep&esentao do n?me&o de )olunas8 pe&mitindo a)esso de leitu&a ao )liente%
Rep&esentao do n?me&o de linhas8 pe&mitindo a)esso de leitu&a ao )liente%
-&o(&ama e6emplo da )lasse 1at&i"#/Int%
class 8atri6!+:nt <
private int linhas( //numero de linhas da matri6
private int colunas( //numero de colunas da matri6
private int tam( //HlinhasBcolunas
private int lc=>( //Hnew int=linhasBcolunas>Hvetor=1..&tamP3'>H~matri6=l>=c>
public 8atri6!+:nt&int lFint c'
//cria matri6 *5
<
lcHnew int=lBc>( //lFc dimensoes ( lc vetor=lBc>
linhasHl(
colunasHc(
tamHlinhasBcolunas(
A
//,ual,uer uma das funcoes abai*o retorna int ne"ativo se nao obteve sucesso
public int linear&int alinFint acol'
//ind linear a partir de linha e coluna
//nao modifica nenhum atributo
<
int result( //valor de retorno para todos os metodos ...
if & &1Calin' ^^ &alinCHlinhas' ^^ &1Cacol' ^^ &acolCHcolunas' '
< resultH&alinP3'BcolunasGacol( A
else
< resultHP3( A
return result(
A
public int col&int indlin'
//coluna a partir do indice linear
//nao modifica nenhum atributo da classe
<
int result(
if & &1Cindlin' ^^ &indlinCHtam' '
< resultH&indlin R colunas'(
if &resultHH1'
< resultHcolunas( A
A
else
< resultHP3( A
return result(
A

public int lin&int indlin'
//linha a partir do indice linear
//nao modifica nenhum atributo da classe
<
int result(
if & &1Cindlin' ^^ &indlinCHtam' '
< resultH&int'& & &indlinP3'/colunas 'G3 '( A
else
< resultHP3( A
return result(
A

public boolean trocaindlin&int iFint j'
//ar"umentos: ! indices lineares
// retorna se conse"uiuFou nao conse"uiu&false'
<
int au*( //au*iliar na troca
if & &1Ci' ^^ &iCHtam' ^^ &1Cj' ^^ &jCHtam' '
<
au*Hlc=iP3>( //efetua a troca
lc=iP3>Hlc=jP3>( //embora para usuario a matri6 vai de 3 ate lBc
lc=jP3>Hau*( //para mim vai de o ate lBcP3
return true( //sucesso
A
else
< return false( A //falhou
A

public boolean atribuiindlin&int iFint v'
//atribui v ao indice i
//retorna true se conse"uiuF false nao conse"uiu
<
if & &1Ci' ^^ &iCHtam' '
<
lc=iP3>Hv( //efetua a atribuicao
return true(
A
else
< return false( A //falhou
A
public int retornaindlin&int indlin'
//retorna conteudo do indice i
//retorna P3 se nao conse"uiu
<
int result(
if & &1Cindlin' ^^ &indlinCHtam' '
< resultHlc=indlinP3>( A
else
< resultHP3( A
return result(
A

public int "etl&'
//retorna numero de linhas
<
return linhas(
A
public int "etc&'
//retorna numero de colunas
<
return colunas(
A
public int "ett&'
//retorna tamanho
<
return tam(
A
A
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
public static void main&Strin" ar"s=>' <
8atri6!+:nt teste(
testeHnew 8atri6!+:nt&LF31'( //L linhas 31 colunas
for&int iH3(iCteste."ett&'(iGG' <teste.atribuiindlin&iF1'( A
S?stem.out.println&@linear&LFL'H@G teste.linear&LFL' '(
S?stem.out.println&@Atribuindo ! a posicao &LFL'@'(
teste.atribuiindlin&teste.linear&LFL'F!'(
S?stem.out.println&@Atribuindo 0 a posicao &0F!'@'(
teste.atribuiindlin&teste.linear&0F!'F0'(
S?stem.out.println&@Irocando estas posicoes@'(
teste.trocaindlin&teste.linear&LFL'Fteste.linear&0F!''(
S?stem.out.println&@5onteudo da posicao &LFL':@Gteste.retornaindlin&teste.linear&LFL'''(

A
A
linear&LFL'H0L
Atribuindo ! a posicao &LFL'
Atribuindo 0 a posicao &0F!'
Irocando estas posicoes
5onteudo da posicao &LFL':0
MatriGes dei/idas /a 3i/g6age-:
As mat&i"es de.inidas pela lin(ua(em se(uem uma sinta6e de de)la&ao e uso semelhante a
sinta6e de @eto&es,
int custos=>=>Hnew int =!1F71>( //vinte por trintaF nao importa ,ual e linha ,ual e coluna
custos=1>=1>H30L(
int aHcustos=1>=1>(
C6ri"sidade:
Aou@e um )aso de @0&us na inte&net Jue se 3asea@a no a)esso a 0ndi)es .o&a de um @eto& pa&a
(&a@a& po& )ima de inst&uIes do sistema ope&a)ional o )>di(o Jue (a&antisse a sua multipli)ao%
No po& a)aso8 Java8 impede o a)esso a posiIes .o&a do @eto&%
%ica de 2r"gra-a89":
Sai3a Jue uma p&7ti)a 3astante ?til na .ase de testes de um p&o(&ama ' int&odu"i& mensa(ens
in.o&mati@as em pontos )on@enientes% Kuando t&a3alhando )om o39etos tal p&7ti)a pode se& usada de
@7&ios modos8 po& e6emplo pode4se inse&i& uma mensa(em no )onst&uto& de uma )lasse pa&a @e&i.i)a&
Juando os o39etos so )&iados e se so )&iados )o&&etamente%
E<erc:ci"s:
14
1elho&e a )lasse mat&i" pa&a a)eita& nas suas .unIes a&(umentos do tipo :linha8)oluna= e no s>
0ndi)es linea&es%
@>
Note Jue no .o&am impostas &est&iIes pa&a 0ndi)es in@7lidos da mat&i" de modo Jue nosso
)omponente de so.tNa&e .alha se no usado )o&&etamente% Adote uma est&at'(ia de dete)o de
0ndi)es in@7lidos e use4a de modo a e@ita& o t&a@amento do p&o(&ama% Ue&emos )omo .a"e& esta
)he)a(em de 0ndi)es de .o&ma se(u&a e uni.o&me em B E6)eption handlin(D%
A>
Implemente um m'todo )hamado o&dena pa&a o tipo a3st&ato de dados mat&i" de.inido a)ima%
5se JualJue& al(o&itmo de o&denao pa&a dei6a& a mat&i" o&denada )omo um @eto& Jue3&ado em
@7&ias linhas% /e Jue .o&ma a .a)ilidade Jue a inte&.a)e o.e&e)e de en6e&(a& a mat&i" )omo um @eto&
.a)ilita este p&o)essoV
Se&7 Jue este m'todo o&dena ' &ealmente imp&es)ind0@el pa&a esta )lasseV Os m'todos )&iados
at' o momento 97 no .o&mam um modelo )omputa)ional su.i)iente pa&a Jue o )liente desta )lasse
possa de.ini& em seu )>di(o os m'todos de o&denao de mat&i"es Jue dese9a&V A d?@ida so3&e a
ne)essidade ou no de um m'todo em uma )lasse ' 3astante .&eJuente%
Pua&dadas as de@idas p&opo&Ies8 p&o(&amao o&ientada a o39etos ' )omo 3&in)a& )om
3lo)os de en)ai6a&8 ou le(os% E6istem 3lo)os Jue no se en)ai6am8 e6istem 3lo)os Jue podem se&
)onst&u0dos at&a@'s de out&os meno&es8 mas Jue ainda sim e6istem po&Jue so 3astante usados8 e a
ta&e.a de )ompo4los a pa&ti& de out&os 3lo)os to&na4se in)on@eniente% E6istem 3lo)os sem os Juais
no se pode )onst&ui& p&ati)amente nada%
B>
C&ie um m'todo de nome preenche8 Jue ini)iali"a todas as posiIes da mat&i" )om o @alo& de
um de seus a&(umentos% Este m'todo pode se& )omposto pelos m'todos 97 implementadosV
VC>
/e.ina um p&o(&ama )hamado (&andes Jue implementa o tipo a3st&ato de dados n?me&os
(&andes e intei&os8 este tipo de@e usa& um @eto& do tipo num'&i)o Jue @o)H a)ha& )on@eniente pa&a
&ep&esenta& os al(a&ismos% Tal@e" estuda& )i&)uitos l>(i)os :somado&es8 multipli)ado&es= o a9ude a
implementa& as Juat&o ope&aIes matem7ti)as 37si)as pa&a estes tipo em te&mos de BlooC ahead
)a&&ie&D e out&as t')ni)as de pe&.o&man)e de implementao de ope&aIes% Se sua p&eo)upao ' )om
e.i)iHn)ia e espao8 @o)H pode usa& )ada posio do @eto& pa&a &ep&esenta& mais de um d0(ito8 mas
ha@e&7 muito t&a3alho em te&mos de t&ata& o@e&.loN e unde&.loNs%
D>
Note Jue na alo)ao da mat&i",
public 8atri6!+:nt&int lFint c'
8 no ' )he)ado se os @alo&es passados so maio&es Jue $8 .aa este teste%
Kuando e6pli)a&mos Be6)eption handlin(D @o)H te&7 m'todos melho&es de lida& )om esses Be&&osD%
HERANA
E6iste uma @iso um pou)o ta)anha de o&ientao a o39etos )omo uma simples manei&a de
o&(ani"a& melho& o seu )>di(o% Essa @iso ' .a)ilmente desmentida pelos )on)eitos de
en)apsulamento8 inte&.a)es8 pa)Ca(es e out&os 97 ap&esentados% Neste t>pi)o ap&esenta&emos o
)on)eito de he&ana8 .undamental pa&a p&o(&amao o&ientada a o39etos e um dos .ato&es de su)esso
desta )omo muito mais Jue uma simples manei&a de o&(ani"a& melho& seu )>di(o%
5m dos aspe)tos Jue distin(uem o39etos de p&o)edimentos e .unIes ' Jue o tempo de
e6istHn)ia de um o39eto pode se& maio& do Jue o do o39eto Jue o )&iou% Isto pe&mite Jue em sistemas
dist&i3u0dos o39etos )&iados em um lo)al8 se9am passados at&a@'s da &ede pa&a out&o lo)al e
a&ma"enados l7 Juem sa3e na mem>&ia ou mesmo em um 3an)o de dados%
C6ri"sidade:
E6istem )lasses Jue podem se& o3tidas na Inte&net pa&a .a"e& inte&.a)e )om 3an)os de dados
SK;8 se&@indo p&in)ipalmente pa&a .a)ilita& esta .a)eta da p&o(&amao na inte&net Jue ' 3astante
limitada pelas &est&iIes de se(u&ana da lin(ua(em%
HIERAR#$IAS %E TIPOS
Neste t>pi)o most&a&emos )omo )onst&ui& hie&a&Juias de tipo po& (ene&ali"ao F
espe)iali"ao% -a&a entende& o Jue ' (ene&ali"ao espe)iali"ao e as &e(&as de at&i3uio ent&e
elementos dessas hie&a&Juias8 a)ompanhe a se(uinte )ompa&ao,
Se @o)H @ai a um &estau&ante e pede o p&ato de .&utos do ma&8 ' natu&al Jue @o)H a)eite uma
la(osta )om )atupi&+8 ou ento .il' de 3ade9o% 1as se o (a&om lhe se&@e uma salada de tomates isto
no se en)ai6a no pedido% -o& out&o lado8 se o seu pedido .o& pei6e8 uma la(osta )om )atupi&+8
em3o&a muito sa3o&osa no se&@e mais
1#
8 assim )omo a salada% Note Jue pei6e e la(osta so
espe)iali"aIes de .&utos do ma&%
Pene&ali"ao e Espe)iali"ao so .e&&amentas pa&a lida& )om )omple6idade8 elas so
a3st&aIes% Os sistemas do mundo &eal ap&esentam )omple6idade muito maio& Jue o&dena& um p&ato
listado em um )a&d7pio% O uso de (ene&ali"ao e espe)iali"ao pe&mite )ont&ola& a Juantidade de
detalhes p&esente nos seus modelos do mundo &eal8 pe&mite )aptu&a& as )a&a)te&0sti)as essen)iais dos
o39etos e t&ata& os detalhes de .o&ma muito mais o&(ani"ada e (&adual%
E6iste muito mais pa&a .ala& so3&e he&ana8 p&in)ipalmente no Jue di" &espeito a polimo&.ismo
de in)luso e a)oplamento dinLmi)o de mensa(ens8 t>pi)os estes Jue se&o a3o&dados em sepa&ado%
$MA HIERAR#$IA SIMP'ESP
Const&ui&emos uma hie&a&Juia de tipos simples pa&a demonst&a& he&ana p?3li)a em Java%
1#
la(osta ' )&ust7)eo no pei6e%
C"-e/t!ri"s:
O dia(&ama a)ima &ep&esenta a hie&a&Juia de )lasses implementada neste e6emplo e .oi o3tido
a pa&ti& da 9anela de edio de uma .e&&amenta )ase pa&a p&o(&amao o&ientada a o39etos%
A )lasse ponto Jue est7 no topo da hie&a&Juia ' )hamada de )lasse 3ase8 enJuanto Jue as
)lasses pontoSreflete e pontoSmove so )hamadas )lasses .ilhas ou he&dei&as% As )lasses da
hie&a&Juia so simples8 pontoSmove ap&esenta o m'todo move8 97 a3o&dado neste tuto&ial em 8
pontoSreflete ap&esenta o m'todo :reflete= Jue in@e&te o sinal das )oo&denadas%
/ada a simpli)idade das )lasses o leito& pode&ia se pe&(unta&8 po&Jue no 9unta& as t&Hs em
uma s>% A pe&(unta .a" sentido8 mas e se Juis'ssemos )&ia& uma )lasse $onto Jue no se mo@esse8
apenas &e.letisse e out&a Jue s> se mo@esseV E se Juis'ssemos p&o9eta& nosso p&o(&ama se(undo uma
hie&a&Juia de espe)iali"ao F (ene&ali"ao da )lasse $ontoV O e6emplo most&a )omo .a"H4lo%
Na he&ana as )lasses .ilhas passam a atende& pelos mesmos m'todos e at&i3utos public da
)lasse pai8 as )lasses .ilhas podem a)&es)enta& m'todos8 at&i3utos e at' &ede.ini& m'todos he&dados
:@e&emos mais ta&de=% -o& isso ' Jue se di" Jue as )lasses su3)lasses (a&antem pelo menos o
)ompo&tamento B3eha@iou&D das supe&)lasses8 podendo a)&es)enta& mais )a&a)te&0sti)as% Os at&i3utos
en)apsulados :private= da )lasse pai no so a)ess0@eis di&etamente na )lasse .ilha a no se& Jue
se9am Juali.i)ados )omo protected ou public8 @e9a %
/ia(&ama de a)esso8 @isi3ilidade8 dos elementos da )lasse pai pa&a uma )lasse .ilha ou -5B;IC
he&dei&a% Os at&i3utos e m'todos da )lasse pai so )lassi.i)ados Juanto ao -RIUATE
en)apsulamento% A pa&te som3&eada si(ni.i)a no @is0@el8 en)apsulado% -ROTECTE/
aAs duas so )onside&adas )omo sendo do mesmo pa)Ca(e% B-AC]APEDa
C"/str6t"res e Mera/8a:
No )onst&uto& de uma )lasse .ilha o p&o(&amado& pode in)lui& a )hamada do )onst&uto& da
)lasse pai e6istente nela% -a&a &e.e&en)ia& a )lasse pai use a BCe+No&d B super de modo analo(o a
this &objeto corrente'%
Aie&a&Juia de (ene&ali"ao e espe)iali"ao%
//5lasse $onto
class $onto <
pri+ate float *F?(

public $onto&float a*Ffloat a?' //omita o valor de retorno;
//"arante o estado do objeto
<
this.*Ha*( this.?Ha?(
A
public void iniciali6a&float aFfloat b'
<
this.*Ha( this.?Hb(
A
public float retornaS*&'
<
return *(
A
public float retornaS?&'
<
return ?(
A
public void alteraS*&float a'
<
this.*Ha(
A
public void alteraS?&float b'
<
this.?Hb(
A
public void mostra&'
<
S?stem.out.println& @&@ G this.* G @F@ G this.? G @'@ '(
A
A
//5lasse $to8ove
class $to8ove e*tends $onto <
//adicione al"um atributo private se ,uiser
public $to8ove&float aFfloat b'
<
*uper(a:b) !!c5a%a"a "o con*trutor "a cla**e pai
A
public void move&float d*Ffloat d?'
<
t5i*,alteraM#(retornaM#()-"#)
t5i*,alteraM$(retornaM$()-"$)
A
A
//5lasse $toUeflete
class $toUeflete e*tends $onto <
//adicione al"um atributo private se ,uiser
public $toUeflete&float aF float b'
//construtor
<
*uper(a:b) !!c5a%a"a "e con*trutor "a cla**e pai ou *upercla**e
A
void reflete&'
//troca o sinal das coordenadas
<
t5i*,alteraM#(3retornaM#())
t5i*,alteraM$(3retornaM$())
A
A
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
public static void main&Strin" ar"s=>' <
$toUeflete p3Hnew $toUeflete&7.30fF!.2!f'(
S?stem.out.println&@5riando $ontoUeflete em 7.30F!.2!@'(
p3.reflete&'(
S?stem.out.println&@Uefletindo este ponto.@'(
p3.mostra&'(
$to8ove p!Hnew $to8ove&3.1fF3.1f'(
S?stem.out.println&@5riando $onto8ove em 3.1F3.1@'(
p!.move&.LfF.Lf'(
S?stem.out.println&@8ovendo este ponto de 1.LF1.L@'(
p!.mostra&'(
A
A
5riando $ontoUeflete em 7.30F!.2!
Uefletindo este ponto.
&P7.30FP!.2!'
5riando $onto8ove em 3.1F3.1
8ovendo este ponto de 1.LF1.L
&3.LF3.L'
!!COMEN;ARIO8
Os at&i3utos * e ? da )lasse $onto esto de)la&ados )omo private% -elo dia(&ama ante&io& ao
p&o(&ama8 at&i3utos private no so @is0@eis aos des)endentes na hie&a&Juia% E de .ato n>s alte&amos
esses at&i3utos :&e.lete e mo@e= at&a@'s de )hamadas a m'todos public da )lasse pai8 )hamadas de
m'todos Jue impliJuem em a)esso indi&eto a at&i3utos da mesma )lasse pa&e)em se& um pou)o
ine.i)ientes% ;em3&e4se Jue os m'todos public semp&e so @is0@eis%
N"ta a"s 2r"gra-ad"res C..:
Java no pe&mite he&ana private8 a )lausula e*tends eJui@ale a he&ana p?3li)a de CRR e s>%
-a&a o3te& o e.eito de he&ana private use a(&e(ao%
E<erc:ci"s:
=>
-&o(&ame e teste a hie&a&Juia &ep&esentada a3ai6o,
A )lasse .o&ma no tem um si(ni.i)ado p&7ti)o8 ' uma a3st&ao8 @o)H no pode desenha&
:most&a&= uma .o&ma8 no entanto neste p&o(&ama @o)H pode&7 instan)i74la% Esta )lasse est7 na
hie&a&Juia8 somente pa&a )aptu&a& as )a&a)te&0sti)as )omuns a $onto e Uetan"ulo% Em
ap&ende&emos )omo de.ini& estas )lasses a3st&atas de .o&ma mais )ondi"ente )om o pa&adi(ma de
o&ientao a o39etos%
O m'todo mostra de@e imp&imi& na tela os at&i3utos destas )lasses%
PRO;EC;ED
Kuando @imos o t>pi)o en)apsulamento8 .oi men)ionado Jue private e&a o modo de
en)apsulamento mais &est&iti@o8 se(uido de protected8 pac#a"e e depois public :o mais a3e&to=%
NaJuele t>pi)o most&amos um e6emplo pa&a )ada tipo de en)apsulamento8 e6)eto protected Jue
depende da e6istHn)ia de uma hie&a&Juia pa&a se& demonst&ado%
I(ual ao e6emplo ante&io&8 mas a(o&a to&nando os at&i3utos da )lasse pai a)ess0@eis pa&a as
)lasses .ilhas at&a@'s do uso de protected. $rotected dei6a os at&i3utos da )lasse pai @is0@eis8
a)ess0@eis Bhie&a&Juia a3ai6oD% 1as pa&a o &estante do p&o(&ama tem o mesmo e.eito Jue private%
Out&a .&ase so3&e p&ote)ted, BA he&ana pe&mite Jue uma su3)lasse (anhe a)esso a
de)la&aIes protected de sua supe&)lasse8 mas o usu7&io no pe&)e3e isso8 pa&a o usu7&io :uma )lasse
e6te&na= o Jue )ontinua e6istindo ' o Jue ' publicD%
/ia(&amas de a)esso8 @isi3ilidade8 de at&i3utos e m'todos de uma )lasse pai pa&a uma )lasse
.ilha ou he&dei&a,
-a&a uma )lasse .ilha em out&o pa)Ca(e :@o)H he&dando de uma )lasse p&onta em
Ja@a=
-RIUATE
-ROTECTE/
B-AC]APED
-5B;IC
O Jue o &estante do p&o(&ama @H das de)la&aIes da )lasse pai na )lasse .ilha% -RIUATE
:po& &estante do p&o(&ama entenda, out&os pa)Ca(es e out&as hie&a&Juias= -ROTECTE/
B-AC]APED
-5B;IC
O mesmo e6emplo s> Jue usando protectedP
//5lasse $onto
class $onto <
protecte" float *F?(

public $onto&float a*Ffloat a?' //omita o valor de retorno;
//"arante o estado do objeto
<
this.*Ha*( this.?Ha?(
A
public void iniciali6a&float aFfloat b'
<
this.*Ha( this.?Hb(
A
public float retornaS*&'
<
return *(
A
public float retornaS?&'
<
return ?(
A
public void alteraS*&float a'
<
this.*Ha(
A
public void alteraS?&float b'
<
this.?Hb(
A
public void mostra&'
<
S?stem.out.println& @&@ G this.* G @F@ G this.? G @'@ '(
A
A
//5lasse $to8ove
class $to8ove e*tends $onto <
//adicione al"um atributo private se ,uiser
public $to8ove&float aFfloat b'
<
*uper(a:b)
A
public void move&float d*Ffloat d?'
<
#&#-"# !!aAui continua% ace**i+ei*: e% %ain nao
$&$-"$ !!ace**o "ireto: *e% pa**ar por %eto"o
A
A
//5lasse $toUeflete
class $toUeflete e*tends $onto <
//adicione al"um atributo private se ,uiser
public $toUeflete&float aF float b'
<
super&aFb'( //chamando o construtor da classe pai
A
void reflete&'
<
*HP*(
?HP?(
A
A
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
public static void main&Strin" ar"s=>' <
$toUeflete p3Hnew $toUeflete&7.30fF!.2!f'(
S?stem.out.println&@5riando $ontoUeflete em 7.30F!.2!@'(
p3.reflete&'(
S?stem.out.println&@Uefletindo este ponto.@'(
p3.mostra&'(
$to8ove p!Hnew $to8ove&3.1fF3.1f'(
S?stem.out.println&@5riando $onto8ove em 3.1F3.1@'(
p!.move&.LfF.Lf'(
S?stem.out.println&@8ovendo este ponto de 1.LF1.L@'(
p!.mostra&'(
A
A
5riando $ontoUeflete em 7.30F!.2!
Uefletindo este ponto.
&P7.30FP!.2!'
5riando $onto8ove em 3.1F3.1
8ovendo este ponto de 1.LF1.L
&3.LF3.L'
O Juali.i)ado& protected te&mina )om os modos de en)apsulamento de at&i3utos e m'todos8 po&tanto
.a&emos uma &e@iso .inal8 utili"e os n?me&os dessa ta3ela pa&a )he)a& @isualmente o tipo de
en)apsulamento no dia(&ama a se(ui&% Uo)H @ai ap&ende& a olha& pa&a este dia(&ama e en6e&(a& tudo o
Jue ap&endemos nesse assunto8 os at&i3utos e m'todos Jue estamos p&eo)upados em en)apsula& so os
da )lasse mais es)u&a,
MO%O REPRESENTAO 'IMITE %E &ISIBI'I%A%E
Z=private Rep&esentao no dia(&ama, a
p&>p&ia )lasse es)u&a%
Este ' o n0@el de en)apsulamento mais &est&iti@o% A
@isi3ilidade das de)la&aIes limita4se ao en@olt>&io
da )lasse%
7' protected Rep&esentao no dia(&ama,
a hie&a&Juia a3ai6o da )lasse es)u&a%
A @isi3ilidade das de)la&aIes se limita p&>p&ia
)lasse e as )lasses he&dei&as dela%
#=Nada
espe)i.i)ado
Bpa)Ca(eD

Rep&esentao no dia(&ama,
&etLn(ulo en@ol@endo as )lasses
pintadas%
A @isi3ilidade das de)la&aIes se limita a p&>p&ia
)lasse e as )lasses do mesmo pa)Ca(e8 mas no ds
)lasses he&dei&as8 % Classes he&dei&as no p&e)isam
se& do mesmo pa)Ca(e%
3 'public Rep&esentao no dia(&ama,
todas as )lasses%
Estas de)la&aIes so semp&e a)ess0@eis%
O dia(&ama a)ima most&a as 7&eas de @isi3ilidade de )ada tipo de modi.i)ado& apli)ado aos
at&i3utos da )lasse desta)ada% Os &etLn(ulos (&andes8 &ep&esentam os pa)Ca(es8 optamos po& )onst&ui&
a hie&a&Juia da esJue&da dent&o do mesmo pa)Ca(e o Jue nem semp&e ' .eito% No&malmente Juando
@o)H estende uma )lasse das pa)Ca(es Jue @em )om a lin(ua(em8 sua )lasse he&dei&a no pe&ten)e a
aJuela pa)Ca(e8 mas pe&ten)e a hie&a&Juia8 saindo .o&a dos &etLn(ulos maio&es )omo na hie&a&Juia da
di&eita% Suponha Jue todas as )lasses so de)la&adas )omo public% E6istem al(umas de)la&aIes de
Juali.i)ado&es de at&i3utos Jue no .a"em sentido )om )lasses private e so e&&os de )ompilao.
RE%EFINIO %E MLTO%OS HER%A%OS
5ma )lasse .ilha pode .o&ne)e& uma out&a implementao pa&a um m'todo he&dado8
)a&a)te&i"ando uma &ede.inio Bo@e&&idin(D de m'todo% Impo&tante, o m'todo de@e te& a mesma
assinatu&a :nome8 a&(umentos e @alo& de &eto&no=8 seno no se t&ata de uma &ede.inio e sim
so3&e)a&(a Bo@e&loadin(D% A &ede.inio (a&ante Jue o m'todo te&7 o mesmo )ompo&tamento Jue o
ante&io& isto .a" )om Jue as su3)lasses possam se& at&i3u0das a @a&i7@eis da supe&)lasse pois atendem
a todas as ope&aIes desta%
Este e6emplo ' i(ual ao e6emplo ante&io&8 mas a(o&a &ede.inindo o m'todo mostra pa&a a
)lasse .ilha $toUeflete% Na @e&dade este e6emplo de@e&ia pe&ten)e& ao t>pi)o de polimo&.ismo8
)ontudo8 nos e6emplos se(uintes usa&emos tam3'm &ede.iniIes de m'todos8 po&tanto .a"4se
ne)ess7&io int&odu"i4lo a(o&a% Te&emos mais e6pli)aIes so3&e o assunto%
No nosso e6emplo a )lasse $toUeflete &ede.ine o m'todo mostra da )lasse pai8 enJuanto Jue
a )lasse he&dei&a $to8ove a)eita a de.inio do m'todo mostra dada pela )lasse $onto Jue ' sua
)lasse pai%
//:nsira a,ui o ar,uivo da classe $onto do e*emplo anterior: $UVI-5I-+
//:nsira a,ui o ar,uivo da classe $to8ove do e*emplo anterior: $UVI-5I-+
//5lasse $toUeflete
class $toUeflete e*tends $onto <
//adicione al"um atributo private se ,uiser
public $toUeflete&float aF float b'
<
super&aFb'( //chamando o construtor da classe pai
A
public +oi" %o*tra()
1
8$*te%,out,println( 9N69 - t5i*,# - 9 O69 - t5i*,$ )
2
void reflete&'
<
*HP*(
?HP?(
A
A
//:nsira a,ui o ar,uivo da classe $rincipal do e*emplo anterior: $UVI-5I-+
!!COMEN;ARIO8
No )aso de &ede.inio de m'todos8 a 3us)a da implementao do m'todo a se& e6e)utado
o)o&&e de 3ai6o pa&a )ima na hie&a&Juia% E6emplo, se @o)H tem um o39eto $toUeflete e )hama o
m'todo retornaS*&' pa&a eleF p&imei&o o )ompilado& p&o)u&a se $toUeflete possui ou no uma
implementao pa&a este m'todo8 no )aso no possui8 ento a 3us)a ' .eita nos m'todos public da
supe&)lasse8 onde a implementao de retornaS*&' ' a)hada%
E<erc:ci"s:
=>
Teste &ede.inio de m'todos )olo)ando BS+stem%out<sD em m'todos da hie&a&Juia8 tais )omo,
S?stem.out.println&8etodo redefinido na classe XF chamado.J' (
INTERFACES+ $MA A'TERNATI&A PARA HERANA MX'TIP'A
Ae&ana m?ltipla,
Ae&ana m?ltipla ' a )apa)idade de uma )lasse he&da& de duas ou mais
)lasses8 po& e6emplo a )lasse &adio4&el>(io he&da& da )lasse &7dio e da
)lasse &el>(io% CRR ap&esenta he&ana m?ltipla8 e tam3'm manei&as de
t&ata& os p&o3lemas de)o&&entes de seu uso% 5m dos p&o3lemas Jue
podem su&(i& ' o )on.lito de nomes de at&i3utos ou m'todos he&dados
desse tipo de he&ana% 5ma das est&at'(ias adotadas pa&a &esol@e& estes
)on.litos ' o B&enamin(D ou &enomeamento desses nomes i(uais
p&esentes nas supe&)lasses%
Tendo o se(uinte si(ni.i)ado, A )lasse he&dei&a tem )ompo&tamento8
B3eha@iou&D8 semelhante ao das duas )lasses pais% 5m out&o e6emplo de
inte&.a)e se&ia a )lasse audio4@0deo Jue he&da da )lasse audio e da )lasse
@0deo%
Java po& moti@os de simpli)idade8 a3andona a id'ia de he&ana m?ltipla8 )edendo lu(a& ao uso
de inte&.a)es% Inte&.a)es so um )on9unto de m'todos e )onstantes :no )ont'm at&i3utos=% Os
m'todos de.inidos na inte&.a)e so Bo)osD ou desp&o@idos de implementao% Classes podem di"e&
Jue implementam uma inte&.a)e8 esta3ele)endo um )omp&omisso8 uma esp')ie de )ont&ato8 )om seus
)lientes no Jue se &e.e&e a p&o@e& uma implementao pa&a )ada m'todo da &e.e&ida inte&.a)e%% Ao
)liente8 pode se& dada a de.inio da inte&.a)e8 ele a)a3a no sa3endo o Jue a )lasse '8 mas sa3e o Jue
.a"% Kuem p&o(&ama em O39e)ti@e C8 de@e @e& as inte&.a)es )omo al(o semelhante ao )on)eito de
p&oto)olos%
Neste e6emplo usa&emos uma inte&.a)e de nome imp&im0@el pa&a )aptu&a& as )a&a)te&0sti)as
)omuns as )lasse Jue podem se& imp&imidas em al(um dispositi@o de sa0da de dados%
Inte&.a)es
public interface I%pri%i+el < //alem das classesF so interfaces pode ocupar um ar,uivo
final char nlinHXMnX( //nova linha
public Strin" toStrin"&'(
//forma preferida para impressao na tela
public void toS?stemVut&'(
A
public class $roduto i%ple%ent* I%pri%i+el <
//um produto comercial ,ual,uer
protected Strin" descricao(
protected int ,uantidade(
public $roduto&Strin" dFint ,'
<
descricaoHd(
,uantidadeH,(
A
public Strin" toStrin"&'
<
return new Strin"&@ @GdescricaoG@ @G,uantidade'(
A
//forma preferida para impressao na tela
public void toS?stemVut&'
<
S?stem.out.print&descricao G ,uantidade'(
A
A
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
public static void main&Strin" ar"s=>' <
$roduto umpHnew $roduto&@macarrao@F 311'(
ump.toS?stemVut&'(
S?stem.out.println&'(
S?stem.out.println&ump.toStrin"&''(
A
A
macarrao311
macarrao 311

!!COMEN;ARIO8
O pa&adi(ma de o&ientao a o39etos est7 &e.letido na )apa)idade de he&ana e
en)apsulamento das inte&.a)es% No )aso deste e6emplo8 a inte&.a)e .oi de)la&ada )omo public8 mas se
nada .osse espe)i.i)ado ela pe&ten)e&ia ao pa)Ca(e dela8 ou se9a os modos de en)apsulamentos so
semelhantes aos de )lasses%
5ma i/terace pode&ia este/der a i/terace :mprimivel,
interface :mprimivel! e*tends :mprimivel <
A
Inte&.a)es tem sido &ep&esentadas po& &etLn(ulos de 3o&das a&&edondadas li(adas as )lasses Jue
as implementam po& linhas t&a)e9adas%
1uitos )on.undem inte&.a)es )om )lasses e o ato de implementa& uma inte&.a)e )om o ato de
estende& ou he&da& uma )lasse% -o& isso a &elao ent&e inte&.a)es e he&ana se&7 e6pli)ada s> a(o&a8
depois Jue @o)H 97 pensou no assunto%
5ma )lasse $roduto! he&da da )lasse $roduto:nosso e6emplo= Jue implementa a inte&.a)e
:mprimivel% A )lasse p&oduto 97 .e" a pa&te di.0)il Jue ' implementa& a inte&.a)e8 a(o&a a )lasse
$roduto! pode opta& po& a)eita& ou &ede.ini& os m'todos he&dados8 ou se9a, BA inte&.a)e ' um dos
0tems Jue ' he&dado de uma )lasse8 assim )omo os at&i3utos e m'todosD%
E<erc:ci"s:
=>
/e.ina uma inte&.a)e pa&a um )on9unto de )lasses Jue &ep&esentam .i(u&as (eom't&i)as Jue
podem se& desenhadas na tela%
PO'IMORFISMO+ C'ASSES ABSTRATAS
E6istem @7&ias )lassi.i)aIes e tipos de polimo&.ismo% CRR ap&esenta @7&ios tipos de
polimo&.ismo % Java ap&esenta um )on9unto mais &edu"ido e@itando p&in)ipalmente polimo&.ismos
ad4ho)%
-olimo&.ismo8 do (&e(o, muitas .o&mas% -olimo&.ismo ' a )apa)idade de um ope&ado&
e6e)uta& a ao ap&op&iada dependendo do tipo do ope&ando% AJui ope&ando e ope&ado& esto
de.inidos num sentido mais (e&al, ope&ando pode si(ni.i)a& a&(umentos atuais de um p&o)edimento e
ope&ado& o p&o)edimento8 ope&ando pode si(ni.i)a& um o39eto e ope&ado& um m'todo8 ope&ando pode
si(ni.i)a& um tipo e ope&ado& um o39eto deste tipo%
RE%EFINIO %E MLTO%OS PARA $MA C'ASSE HER%EIRA
Este e6emplo 97 .oi ap&esentado em % Tam3'm t&ata4se de um polimo&.ismo8 pode se&
)lassi.i)ado )omo polimo&.ismo de in)luso% 5m m'todo ' uma &ede.inio de um m'todo he&dado8
Juando est7 de.inido em uma )lasse )onst&u0da at&a@'s de he&ana e possui o mesmo nome8 @alo& de
&eto&no e a&(umentos de um m'todo he&dado da )lasse pai% A assinatu&a do m'todo tem Jue se&
idHnti)a8 ou se9a8 te&emos &ede.inio Juando uma )lasse .ilha .o&ne)e apenas uma no@a
implementao pa&a o m'todo he&dado e no um no@o m'todo%
Se a )lasse .ilha .o&ne)e& um m'todo de )a3ealho ou assinatu&a pa&e)ida )om a do m'todo
he&dado :di.e&e ou no n?me&o ou no tipo dos a&(umentos8 ou ento no tipo do @alo& de &eto&no= ento
no se t&ata mais de &ede.inio8 t&ata4se de uma so3&e)a&(a8 pois )&iou4se um no@o m'todo% 5ma
)hamada ao m'todo he&dado no mais ' inte&)eptada po& esse no@o m'todo de mesmo nome% O
m'todo tem o mesmo nome8 mas ' li(ei&amente di.e&ente na sua assinatu&a :o )o&po ou 3lo)o de
)>di(o ^_ no impo&ta=8 o Jue 97 impli)a Jue no p&opo&)iona o mesmo )ompo&tamento :3eha@iou&=
do m'todo da supe&)lasse%
SOBRECARGA I MLTO%OS E OPERA%ORESJ
Este tipo de polimo&.ismo pe&mite a e6istHn)ia de @7&ios m'todos de mesmo nome8 po&'m
)om assinatu&as le@emente di.e&entes ou se9a @a&iando no n?me&o e tipo de a&(umentos e no @alo& de
&eto&no% 2i)a&ia a )a&(o do )ompilado& es)olhe& de a)o&do )om as listas de a&(umentos os
p&o)edimentos ou m'todos a se&em e6e)utados%
SOBRECARGA %E MLTO%OS+ COPY CONSTR$CTOR
No e6emplo a se(ui& @amos so3&e)a&&e(a& o )onst&uto& de uma )lasse8 esta )lasse passa&7 a te&
duas @e&sIes de )onst&uto&es8 @ale lem3&a& Jue assim )omo o )onst&uto& se&7 so3&e)a&&e(ado8
JualJue& out&o m'todo pode&ia se&% O )ompilado& sa3e&7 Jual m'todo )hama& no mais pelo nome8
mas pelos a&(umentos%
O m'todo $onto&$onto ap'( ' um B)op+ )onst&u)to&DF pois tem o mesmo nome Jue
$onto&float d*Ffloat d?'(. Tal dupli)ao de nomes pode pa&e)e& est&anhaF po&'m Java pe&mite Jue
eles )oe6istam 2ara 6-a -es-a c3asse po&Jue no tem a mesma assinatu&a :nomeRa&(umentos=%
Isto se )hama so3&e)a&(a de m'todo8 o )ompilado& sa3e distin(ui& ent&e esses dois )onst&uto&es%
Out&os m'todos8 no s> )onst&uto&es pode&o se& so3&e)a&&e(ados pa&a @7&ios a&(umentos di.e&entes8
esse &e)u&so ' um polimo&.ismo do tipo Bad4ho)D%
O Jue ' inte&essante pa&a n>s ' o .ato de o a&(umento do )onst&uto& Ponto&Ponto ap'( se& da
mesma )lasse pa&a Jual o )onst&uto& .oi implementado8 o Jue )a&a)te&i"a um B)op+ )onst&u)to&D '
Jue ini)iali"a um o39eto a pa&ti& de out&o da mesma )lasse% Out&os m'todos semelhantes se&iam,
5irculo&5irculo a'( 8ouse&8ouse d'( . Implementa& )op+ )onst&u)to& pode se& muito impo&tante8
lem3&e4se dos p&o3lemas )om )>pias de o39etos ap&esentados em %
-o& JuestIes de espao8 3asea&emos nosso e6emplo no tipo a3st&ato de dados .&ao8
ap&esentado em % Uo)H de@e modi.i)a& a )lasse Oracao pa&a Jue ela tenha dois )onst&uto&es8 o Jue
esta em ne(&ito de@e&7 se& a)&es)entado ao )>di(o o&i(inal,
public Pracao(int u%*o) !!*obrecar7a "o con*trutor ori7inal
1
nu%&u%*o
"en&. !!*ubenten"i"o
2
public Pracao(Pracao copie%e) !!e**e eL u% cop$ con*tructor e u%a *obrecar7a
1
nu%&copie%e,retornaMnu%()
"e%&copie%e,retornaM"en()
2
public Oracao&int tFint m' //construtor ori"inal
<
numHt(
denHm(
this.simplifica&'( //chamada para o mesmo objeto.
A
//V pro"rama principalF sobre a modificacao em ne"rito
class $rincipal <
public static void main&Strin" ar"s=>'
<
Oracao aFbFc(
a&ne' Pracao(Q) !!eli%ine o *e7un"o ar7u%ento
bHnew Oracao&!FK'(
S?stem.out.print&@-sta eX a fracao a: @'(
a.mostra&'(
S?stem.out.print&@-sta eX a fracao b: @'(
b.mostra&'(
cHa.soma&b'(
S?stem.out.print& @c de aGb: @'( //c&aGb'
c.mostra&'(
S?stem.out.print&@aBb: @'(
cHa.multiplicacao&b'(
c.mostra&'(
S?stem.out.print&@aGb: @'(
cHa.soma&b'(
c.mostra&'(
S?stem.out.print&@aEHb: @'(
S?stem.out.println&a.maioroui"ual&b''(
S?stem.out.print&@aHHb: @'(
S?stem.out.println&a.i"ual&b''(
S?stem.out.print&@a;Hb: @'(
S?stem.out.println&a.diferente&b''(
S?stem.out.print&@&int'a @'(
S?stem.out.println&a.converteint&''(
S?stem.out.print&@&double'a @'(
S?stem.out.println& a.convertedbl&''(

A
A
-sta eX a fracao a: &L/3'
-sta eX a fracao b: &3/7'
c de aGb: &3K/7'
aBb: &L/7'
aGb: &3K/7'
aEHb: true
aHHb: false
a;Hb: true
&int'a L
&double'a L
Teste o B)op+ )onst&u)to&D pa&a o tipo a3st&ato de dados .&ao ap&esentado a)ima% Kuando um
s> n?me&o .o& passado pa&a o )onst&uto& desta )lasse8 su3entende4se Jue o )onst&uto& )hamado ' o de
um s> a&(umento intei&o e Jue po&tanto o denominado& se&7 i(ual a 1%
A(o&a @amos .ala& do B)op+ )onst&u)to&D8 Jue em3o&a implementado8 no .oi testado em main&'
% Esse m'todo8 pe&ten)e a out&o o39eto Jue no o a&(umento copieme8 ento pa&a distin(ui& o
at&i3uto num deste o39eto8 do at&i3uto num de copieme usamos copieme.num e simplesmente
num pa&a o o39eto lo)al8 o39eto em Juesto8 ou o39eto dono do m'todo )hamado%
E<erc:ci"s:
=>
2aa um B)op+ )onst&u)to&D pa&a uma das )lasses 97 implementadas neste te6to%
@>
So3&e)a&&e(ue o m'todo move da )lasse $onto pa&a a)eita& um $onto )omo a&(umento8
su3entende4se Jue de@emos mo@e& a distLn)ia * e a distLn)ia ? daJuele ponto a o&i(em%
A>
C&ie um m'todo de nome unitari6ado pa&a a )lasse $onto% Este m'todo de@e inte&p&eta& o
$onto )omo um @eto& e &eto&na& um no@o $onto Jue )ont'm as )oo&denadas do @eto& unita&i"ado%
5nita&i"a& ' di@idi& )ada )oo&denada pelo m>dulo do @eto&% O m>dulo ' a &ai" Juad&ada da soma dos
Juad&ados das )omponentes%
SOBRECARGA %E OPERA%OR
Java no .o&ne)e &e)u&sos pa&a so3&e)a&(a de ope&ado&8 o Jue ' pe&.eitamente )ondi"ente )om
a .iloso.ia da lin(ua(em% Seus )&iado&es Jue a)&edita@am Jue a lin(ua(em de@e&ia se& peJuena8
simples8 se(u&a de se p&o(&ama& e de se usa& :simple8 small8 sa.e and se)u&e=%
A ausHn)ia de so3&e)a&(a de ope&ado&es pode se& )onto&nada de.inindo ap&op&iadamente )lasses
e m'todos%
C'ASSES ABSTRATAS E CONCRETAS
Em um dos e6e&)0)ios ante&io&es :no t>pi)o so3&e he&ana= ped0amos Jue @o)H de.inisse uma
hie&a&Juia )omposta de t&Hs )lasses% A )lasse pai tinha o nome de Oorma8 e as )lasses he&dei&as desta
e&am $onto e Uetan"ulo. Em3o&a a )lasse .o&ma no possu0sse sentido p&7ti)o8 ela pe&mitia )e&tas
ope&aIes )omo moveF alteraS*&int n*'8 ent&e out&as :&eto&ne a este e6e&)0)io=%
Na @e&dade o Jue dese97@amos e&a Jue esta )lasse Oorma se )ompo&tasse )omo um esJueleto
pa&a as suas )lasses .ilhas8 n>s no Jue&0amos instan)i74la% Classes a3st&atas pe&mitem e6atamente
isto pois no podem se& instan)iadas em3o&a possam se& usadas de out&as manei&as%
Classes a3st&atas so pode&osas8 elas pe&mitem, )&iao de listas hete&o(Hneas8 o)o&&Hn)ia de
Bd+nami) 3indin(D e maio& )la&e"a no p&o9eto de sistemas% Os pa)Ca(es Jue @em )om a lin(ua(em
esto &epletos de e6emplos de )lasses a3st&atas%
1'todos a3st&atos8 o3&i(ato&iamente pe&ten)em a )lasses a3st&atas8 e so m'todos desp&o@idos
de implementao8 so apenas de.iniIes Jue se&o ap&o@eitadas po& out&as )lasses da hie&a&Juia%
Uoltando ao e6emplo da hie&a&Juia OormaF $onto e Uetan"ulo% O m'todo mostra pode&ia te& sido
de.inido na )lasse 3ase a3st&ata :Oorma= )omo um m'todo a3st&ato%
Classes a3st&atas
//5lasse Oorma
ab*tract class Oorma <
protected float *F?( //visivel hierar,uia abai*o
public void move&float d*Ffloat d?'
<
this.*GHd*( this.?GHd?(
A
ab*tract public void mostra&'( //metodo abstrato
A
//5lasse ponto
class $onto e*tends Oorma <
public $onto&float a*Ffloat a?' //omita o valor de retorno;
//"arante o estado do objeto
<
this.*Ha*( this.?Ha?(
A
//move nao precisa ser redefinido
public void mostra&'
<
S?stem.out.println&@&@Gthis.*G@F@Gthis.?G@'@'(
A
A
//5lasse Uetan"ulo
class Uetan"ulo e*tends Oorma <
protected float d*Fd?( //delta * e delta ?
//protected acaba sendo menos infle*ivel e mais eficiente ,ue private
public Uetan"ulo&float a*Ffloat a?Ffloat d*Ffloat d?'
//"arante o estado do objeto
<
*Ha*( ?Ha?(
this.d*Hd*( this.d?Hd?( //this usado para eliminar ambi"uidade
A
//metodo move precisa ser redefinido
public void move&float d*Ffloat d?'
<
this.*GHd*( this.?GHd?(
this.d*GHd*( this.d?GHd?( //this distin"ue o ar"umento do atributo de mesmo nome
A
public void mostra&'
<
S?stem.out.println&@&@Gthis.*G@F@Gthis.?G@'&@Gd*G@F@Gd?G@'@'(
A
A
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
public static void main&Strin" ar"s=>' <
Uetan"ulo arHnew Uetan"ulo&1F1F37F30'(
ar.mostra&'(
ar.move&3F3'(
ar.mostra&'(
A
A
&1F1'&37F30'
&3F3'&30F3L'
//COMEN;ARIO8:
O3se&@e Jue a )lasse Oorma Jue ' a3st&ata8 no possui um )onst&uto&8 po&Jue no pode se&
instan)iada% A(o&a tam3'm temos um no@o Juali.i)ado& de )lasse e de m'todos, abstract.
C3asses a4stratas N I/teraces:
Uo)H de@e esta& a)hando Jue )lasses a3st&atas e inte&.a)es so )on)eitos pa&e)idos e Jue
podem se& usados )om o39eti@os semelhantes% CuidadoQ 5ma )lasse pode estende& uma ?ni)a )lasse
:Jue pode se& a3st&ata ou no=8 mas pode implementa& @7&ias inte&.a)es% Al'm disso8 inte&.a)es no
pe&mitem de)la&ao de at&i3utos8 enJuanto Jue )lasses a3st&atas pe&mitem% Inte&.a)es esto mais
li(adas a )ompo&tamento8 enJuanto Jue )lasses a3st&atas esto mais li(adas a implementao%
E<erc:ci"s,
14
/e.ina uma )lasse a3st&ata tipo num'&i)o Jue de@e se&@i& )omo )lasse 3ase pa&a a monta(em de
)lasses )omo a )lasse .&ao ou a )lasse n?me&o )omple6o% 5ma 3oa medida da Jualidade de sua
implementao ' a Juantidade de mudanas ne)ess7&ias pa&a po& e6emplo t&o)a& a )lasse .&ao usada
em um al(o&itmo de )7l)ulo num'&i)o pela )lasse n?me&o )omple6o% M 3em @e&dade Jue e6istem
ope&aIes Jue se apli)am a uma dessas )lasses8 mas no a out&a8 mas essas dispa&idades de@e&o se&
mantidas .o&a da )lasse 3ase a3st&ata%
C'ASSE ABSTRATA ITERA%OR
Neste e6emplo i&emos )&ia& uma )lasse 3ase a3st&ata ite&ado&8 Jue se&@i&7 )omo topo de uma
hie&a&Juia pa&a ite&ado&es de est&utu&as de dados )omo listas8 @eto&es e 7&@o&es% O ite&ado& de @eto& '
de.inido po& he&ana da )lasse 3ase a3st&ata de ite&ado&es%
-e&)e3a Jue al(uns m'todos da )lasse 3ase so desp&o@idos de implementao8 po&'m nada
impede Jue @o)H )oloJue )omo )>di(o desses m'todos uma mensa(em de e&&o do tipo BE&&o8 m'todo
de@e&ia te& sido &ede.inidoD8 mas a(o&a o )ompilado& no pode mais te lem3&a& de &ede.ini4los%
SHOPPING 'IST APPROACH PARA A C'ASSE ABSTRATA ITERA%OR
:As ope&aIes implementadas esto ma&)adas )om 8 e6istem out&as ope&aIes ?teis8 no men)ionadas
po& moti@os de espao% Esta )lasse 3ase a3st&ata no tem a .un)ionalidade de uma )lasse Jue possa
esta& instan)iada8 pe&)e3a a ausHn)ia de um m'todo pa&a a@ana& na ite&ao=%
1'todo de ini)iali"ao da ite&ao
Reto&no do )onte?do da atual posio na ite&ao
At&i3uio de @alo& a atual posio da ite&ao
1'todo Jue @e&i.i)a se a ite&ao no )he(ou ao .im
SHOPPING 'IST APPROACH PARA A C'ASSE ABSTRATA ITERA%OR &ETOR
:5ma ta&e.a desa(&ad7@el Juando ite&ando so3&e @eto&es ' mante& os 0ndi)es das ite&aIes atuali"ados du&ante a@anos e
&et&o)essos% Note Jue &et&o)essos no .a&iam sentido em uma lista simplesmente li(ada8 po& isso essa ope&ao somente '
de.inida neste n0@el da hie&a&Juia%=
Reto&no do @alo& num'&i)o ou 0ndi)e da atual posio da ite&ao
Ret&o)esso na ite&ao
A@ano na ite&ao
A@ano e &et&o)esso )om saltos :in)lusi@e ' mais (en'&i)o Jue os dois ante&io&es=%
//5lasse :terador:
ab*tract class :terador: <
ab*tract public void comeca&'(
ab*tract public int retorna&'( //metodos abstrato
ab*tract public void atribui&int a'(
ab*tract public boolean fim&'(
A
//5lasse :teradorVetor:
class :teradorVetor: e*tends :terador: <
protected int=> vet( //itero sobre ele
private int conta( //posicao atual da iteracao
public :teradorVetor:&int=> itereme'
<
vetHitereme(
contaH1(
A
public void comeca&'
<
contaH1(
A
public void comeca&int p'
<
contaH&pRvet.len"th'(
A
public void atribui&int novo'
<
vet=conta>Hnovo(
A
public int retorna&'
<
return vet=conta>(
A
public boolean fim&'
<
return contaHHvet.len"thP3(
A
public int retornaSconta&'
<
return conta(
A
public void avanca&'
<
if &contaC&vet.len"thP3'' contaGG(
A
public void retrocede&'
<
if &contaE1' contaPP(
A
A
import java.io.+ata:nputStream(
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
public static void main&Strin" ar"s=>' <
int=> vetHnew int=K>(
vet=1>H1( vet=3>H3( vet=!>H!( vet=7>H7( vet=0>H0( vet=L>HL(
:teradorVetor: mitHnew :teradorVetor:&vet'(
char o( //oHopcaoF
int e( //temporario
Strin" line( //linha a ser lida do teclado
+ata:nputStream meu+ata:nputStreamHnew +ata:nputStream&S?stem.in'(
tr?<
do
<
do < oHmeu+ata:nputStream.readine&'.charAt&1'( A
while &oHHXMnX'(
switch &o' <
case XaX: //atribui
lineHmeu+ata:nputStream.readine&'(
tr? <
eH:nte"er.valueVf&line'.intValue&'(
mit.atribui&e'(
A
catch &-*ception erro' <
S?stem.out.println&@-ntrada invalida;@'(
A
brea#(
case XrX: //retorna
eHmit.retorna&'(
S?stem.out.println&e'(
brea#(
case XfX: //frente
mit.avanca&'(
brea#(
case XtX: //tras
mit.retrocede&'(
brea#(
case XcX: //comeca iteracaoY
mit.comeca&'(
brea#(
case XeX: //fim da iteracaoY
S?stem.out.println&mit.fim&''(
brea#(
case XvX: //valor atual
S?stem.out.println&@V:@Gmit.retornaSconta&''(
brea#(
case XmX: //mostra vetor
for&int jH1(jCvet.len"th(jGG'
< S?stem.out.print&@=@Gvet=j>G@>@'( A
S?stem.out.println&'(
brea#(
default: (
A //switch

A while &o;HX,X'(
A //tr? bloc#
catch &-*ception erro' < /B nao faco nada B/ A
A //main method
A //class $rincipal
m
=1>=3>=!>=7>=0>=L>
a
/
m
=/>=3>=!>=7>=0>=L>
f
f
f
a
77
t
a
!!
m
=/>=3>=!!>=77>=0>=L>
c
v
V:1
,
E<erc:ci"s,
14
/e.ina uma )lasse de nome Arra?Services Jue .o&ne)e se&@ios pa&a @eto&es% Implemente os
Bse&@iosD de, o&denao de su3@eto& :@eto& inte&no meno& ou i(ual ao @eto& em Juesto= 8 3us)a8 t&o)a
de posiIes8 et)% Esta )lasse ope&a so3&e os @eto&es passados )omo a&(umentos de seus m'todos
:passa(em impl0)ita do pontei&o pa&a o @eto&=% Os @eto&es de@em se& de tipos num'&i)os de.inidos na
lin(ua(em :)onte )om a e6istHn)ia de ope&ado&es G P C HH8 et)=%
Uo)H te&7 Jue de.ini& uma @e&so desta )lasse pa&a )ada tipo da lin(ua(em :b?teF float8 et)=% Na
@e&dade isto no ' t&a3alhoso8 3asta @o)H de.ini& pa&a um tipo8 depois alte&a& s> as pa&tes ne)ess7&ias e
&e)ompila& pa&a os demais%
-ense )omo .a"e& a )lasse Arra?Services t&a3alha& em )on9unto )om a )lasse Ite&ado& @eto&%
No )on.unda estas duas )lasses8 elas e6e)utam ta&e.as distintas%

ACOP'AMENTO %INWMICO %E MENSAGENS
-o& a)oplamento entenda a es)olha )e&ta de um m'todo a se& e6e)utado pa&a uma @a&i7@el
de)la&ada )omo de uma )lasse8 mas podendo )onte& um o39eto de uma su3)lasse desta% -o& dinLmi)o
entenda em tempo de e6e)uo%
J7 dissemos Jue um o39eto de uma )lasse .ilha (a&ante no m0nimo o )ompo&tamento
B3eha@iou&D de seu pai% -o& este moti@o podemos at&i3ui& um o39eto da )lasse .ilha a uma @a&i7@el da
)lasse pai8 mas no o )ont&7&io%
A)oplamento dinLmi)o most&a&7 Jue ' poss0@el .a"e& )om Jue o )ompilado& e6e)ute a
implementao dese9ada de um m'todo &ede.inido pa&a )lasses he&dei&as8 mesmo no )aso de )hamada
de m'todo o)o&&e& pa&a uma @a&i7@el de supe&)lasse :)lasse pai= )ontendo um o39eto de uma su3)lasse
:)lasse .ilha=% Isto nos pe&miti&7 )onst&ui& listas hete&o(Hneas %
2a"endo uma )ompa&ao )om lin(ua(ens p&o)edu&ais,
O t&a3alho do d+nami) 3indin( no&malmente ' .eito desta .o&ma em lin(ua(ens p&o)edu&ais,
FF5omputa5onta)ancaria
if t?pe&a'HH5onta5orrente then 5omputa5onta5orrente&a'(
else if t?pe&a'HH$oupanca then 5omputa$oupanca&a'( //chamadas de procedimentos
J7 em lin(ua(ens o&ientadas a o39etos )omo Java temos o se(uinte,
5onta 5ontVetHnew conta=7>( //Vetor de objetos da classe conta
5ontVet=1>Hnew $oupanca&3111F.31'( //toda $oupanca Q uma 5onta
5ontVet=3>Hnew 5onta5orrente&3111F.31F1'( //toda 5onta5orrente Q uma 5onta
5ontVet=!>Hnew $oupanca&3171F.3L'(
5ontVet=*>.computa&'( //nao importa para ,ue classe da hierar,uia de contasF computa
//computa definida e o compilador acopla dinamicamenteF em tempo de e*ecucao a
//mensa"em
%iagra-a das c3asses:
A )lasse .ilha (a&ante no m0nimo o mesmo )ompo&tamento8 B3eha@iou&D da )lasse pai8 podendo
a)&es)enta& ou &ede.ini& pa&te do Jue .oi he&dado% -o& este moti@o8 uma @a&i7@el da )lasse pai pode
&e)e3e& um o39eto da )lasse .ilha8 o )ompo&tamento da )lasse pai .i)a (a&antido e o &estante :o Jue a
)lasse .ilha a)&es)entou= ' pe&dido% J7 uma @a&i7@el da )lasse .ilha no pode &e)e3e& um o39eto da
)lasse pai8 po&Jue os m'todos de.inidos pa&a @a&i7@eis desta )lasse passam a no .a"e& sentido pa&a o
o39eto )ontido nesta @a&i7@el%
O dia(&ama &e.lete o aspe)to das )a&a)te&0sti)as a)&es)entadas pela )lasse .ilha a )lasse pai8 mas
no o .ato de uma @a&i7@el da )lasse pai pode& &e)e3e& um elemento da )lasse .ilha8 isto po&Jue )omo
no desenho o pai ' desenhado meno& Jue o .ilho8 o leito& tem a tendHn)ia de in.e&i& Jue o pai )a3e no
.ilho o Jue ' 9ustamente o )ont&7&io do Jue a)onte)e em te&mos de @a&i7@eis%
$M E(EMP'O ESC'ARECE%OR
O e6emplo a se(ui& )&ia dois o39etos :pai e .ilho= e .a" at&i3uiIes e )hamadas de m'todos ent&e
eles%
//5lasse Super5lasse
class Super5lasse <
public void nome&'
<
S?stem.out.println&@8etodo da superclasse@'(
A
A
//5lasse Sub5lasse
class Sub5lasse e*tends Super5lasse <
public int novoatributo(
public void nome&' //redefinicao
<
S?stem.out.println&@8etodo da subclasse@'(
A
public void novometodo&'
<
S?stem.out.println&@Dovo metodo:@Gnovoatributo'(
A
A
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
public static void main&Strin" ar"s=>' <

Sub5lasse esub3Hnew Sub5lasse&'(
Super5lasse esuper3Hnew Super5lasse&'( //poderia ter alocado uma Sub5lasse a,ui
esub3.nome&'(
esub3.novoatributoH31(
esuper3.nome&'(
esuper3Hesub3(
esuper3.nome&'(
A //main method
A //class $rincipal
8etodo da subclasse
8etodo da superclasse
8etodo da subclasse
!!COMEN;ARIO86
Note Jue o m'todo ' es)olhida de a)o&do )om o )onte?do da @a&i7@el e no de a)o&do )om a
)lasse desta%
O #$E ACONTECE COM O #$E FOI ACRESCENTA%O
/epois do p&o(&ama ante&io&8 @o)H de@e esta& se pe&(untando o Jue a)onte)e )om o Jue .oi
a)&es)entado pela )lasse .ilha Juando um o39eto desta )lasse ' at&i3u0do a )lasse pai%
//:nsira a,ui o ar,uivo da Super5lasse do e*emplo anterior
//:nsira a,ui o ar,uivo da Sub5lasse do e*emplo anterior
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
public static void main&Strin" ar"s=>' <

Sub5lasse esub3Hnew Sub5lasse&'(
Super5lasse esuper3Hnew Super5lasse&'( //poderia ter alocado uma Sub5lasse a,ui
esub3.nome&'(
esub3.novoatributoH31(
esuper3.nome&'(
esuper3Hesub3(
esuper3.nome&'(
esub3H&Sub5lasse'esuper3( //cast
esub3.nome&'(
esub3.novometodo&'(
A //main method
A //class $rincipal
8etodo da subclasse
8etodo da superclasse
8etodo da subclasse
8etodo da subclasse
Dovo metodo:31
YYCOMEN;ARIO8
Em3o&a @o)H se9a )apa" de &e)upe&a& os m'todos e at&i3utos a)&es)entados at&a@'s do t+pe
)astin(8 enJuanto isto no .o& .eito8 estes m'todos e at&i3utos esto ina)ess0@eis%
E<erc:ci"s:
14
Implemente em suas )lasses m'todos Jue imp&imem uma .&ase identi.i)ando o tipo da )lasse8
po& e6emplo, BEu sou a )lasse )onta )o&&ente8 espe)iali"ao de )onta 3an)a&ia%D
#4
1odele e implemente uma hie&a&Juia de CONTAS BANCiRIAS8 use os &e)u&sos Jue a)ha&
)on@eniente, )lasses a3st&atas8 inte&.a)es8 @a&i7@eis stati)% Uo)H de@e de.ini& )lasses semelhantes as
)ontas 3an)7&ias )omo poupana8 )onta )o&&ente8 et)% Os m'todos de@em te& nomes )omo deposita8
sa)a8 )omputa8 et)%
'ISTA HETEROGQNEA %E FORMAS Ige"-;tricasJ
Este e6emplo lida )om um @eto& de o39etos da )lasse .o&ma de.inida em C;ASSES
ABSTRATAS E CONCRETAS 8 estes o39etos so &etLn(ulos8 pontos8 et)% O o39eti@o ' most&a&,
su3)lasses )ontidas em @a&i7@eis :posiIes de @eto&= da supe&)lasse e a)oplamento dinLmi)o de
mensa(ens%
O nosso @eto& de .o&mas )onte&7 o39etos (&7.i)os de )lasses hete&o(Hneas% T&ata&emos todos de
manei&a uni.o&me8 )hamando os m'todos mostra e move% Uo)H 97 @iu nos e6emplos ante&io&es )omo
&e)upe&a& o o39eto em uma @a&i7@el de sua p&>p&ia )lasse e no supe&)lasse%
Re)ompile )om esse no@o m'todo main,
//:nsira a,ui a definicao da classe Oorma dada em 5ASS-S A)SIUAIAS - 5VD5U-IAS
//:nsira a,ui a definicao da classe $onto dada em 5ASS-S A)SIUAIAS - 5VD5U-IAS
//:nsira a,ui a definicao da classe Uetan"ulo dada em 5ASS-S A)SIUAIAS -
5VD5U-IAS
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
public static void main&Strin" ar"s=>' <
Oorma vetor"rafico=>Hnew Oorma=0>(
vetor"rafico=1>Hnew Uetan"ulo&1F1F!1F31'(
vetor"rafico=3>Hnew $onto&1F3'(
vetor"rafico=!>Hnew Uetan"ulo&311F311F!1F!1'( //lados i"uais
vetor"rafico=7>Hnew $onto&!F3'(
for&int iH1(iC0(iGG'
<
vetor"rafico=i>.mostra&'(
A
for&int jH1(jC0(jGG'
<
vetor"rafico=j>.move&3!.1fF3!.1f'(
vetor"rafico=j>.mostra&'(
A
A
A
&1F1'&!1F31'
&1F3'
&311F311'&!1F!1'
&!F3'
&3!F3!'&!1F31'
&3!F37'
&33!F33!'&!1F!1'
&30F37'
FFCOMEN;ARIO8,
O3se&@e Jue a implementao )o&&eta do m'todo mostra ' es)olhida em tempo de e6e)uo de
a)o&do )om a )lasse do o39eto Jue est7 naJuela posio do @eto&%
E<erc:ci"s:
1
Conside&e as se(uintes de)la&aIes em Java,
public class I
<
public void f&void' < S?stem.out.println& -stou em IJ'(A
A(
public class S e*tends I
<
public void f&void' < S?stem.out.println&-stou em SJ'(A
A(
I *H new I&'(
S ?Hnew S&'(
I pHnew I&'(
e as se(uintes in@o)aIes de ope&aIes,
p.f&'( //primeira
pH?(
p.f&'( //se"unda
*.f&'( //terceira
?.f&'( //,uarta
*H?(
*.f&' //,uinta
Responda Jual ' o &esultado na tela de )ada uma destas )hamadas%
CONCEITOS A&ANA%OS
Neste t>pi)o ap&esenta&emos )on)eitos a@anados da lin(ua(em8 estes )on)eitos so
impo&tantes se @o)H dese9a )&ia& so.tNa&es &elati@amente (&andes em Java%
ATRIB$TOS 8;A;IC
At' o momento s> ha@0amos ap&endido )omo de.ini& at&i3utos de instLn)ia% Cada o39eto tinha
seus p&>p&ios at&i3utos e uma modi.i)ao nos at&i3utos de um o39eto no a.eta@a os at&i3utos de out&os
o39etos%
Neste t>pi)o i&emos ap&eende& )omo de.ini& at&i3utos de )lasse% Esses at&i3utos so os mesmos
pa&a todos os o39etos8 eles so )ompa&tilhados% 5ma mudana em um destes at&i3utos ' @is0@el po&
todos os o39etos instan)iados% At&i3utos de )lasse tam3'm so )hamados de at&i3utos static%
Neste e6emplo de.ini&emos uma )lasse robo Jue usa at&i3utos static pa&a sa3e& Juantos robos
.o&am )&iados :instan)iados=% 5m out&o uso de at&i3utos static se&ia usa& uma est&utu&a de dados Jue
pe&mitisse Jue um robo sa3e& a posio:)oo&denadas= dos demais o39etos de sua )lasse%
//5lasse Uobo
class Uobo <
public int *(
public int ?(
public *tatic int Auanto* !!Auanto* fora% in*tancia"o*
public Uobo&int a*Fint a?'
<
*Ha*( ?Ha?(
Auanto*--
A
A
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
public static void main&Strin" ar"s=>' <
Robo,Auanto*&4 !!iniciali<an"o a +aria+el *tatic
Uobo cncFcnc!(
S?stem.out.println&Uobo.,uantos'(
cncHnew Uobo&31F3!'(
S?stem.out.println&Uobo.,uantos'(
cnc!Hnew Uobo&33F3!'(
S?stem.out.println&Uobo.,uantos'(
A //main method
A //class $rincipal
1
3
!
FFCOMEN;ARIO8,
Kuando de.inimos at&i3uto static8 est7@amos nos &e.e&indo ao sentido (e&al de at&i3uto% Apesa&
de te&mos e6empli.i)ado )om um intei&o8 @o)H pode&ia te& usado uma )lasse no lu(a& desse at&i3uto8
tomando o )uidado de )hama& new antes de us74lo%
MLTO%OS STATIC
1'todos static tam3'm so )hamados de m'todos de )lasses% Estes m'todos s> podem ope&a&
so3&e at&i3utos de )lasses% Nos 97 @0nhamos usando estes m'todos% E6istem e6emplos de )hamadas de
m'todos static em nossos p&o(&amas ante&io&es po&Jue as pa)Ca(es da lin(ua(em so &epletas de
e6emplos de m'todos static% -o& este moti@o eu es)olhi uma das de.iniIes de m'todos static da Java
A-I :Sun 1i)&os+stems= pa&a t&ans)&e@e&,

abs5double6. 2tatic met3od in class java.lang.!at3
-eturns t3e absolute double value o, a.
Neste t>pi)o no most&a&emos um e6emplo p&op&iamente dito8 apenas most&a&emos )omo
de.ini& um m'todo static8 po&tanto ' impo&tante Jue @o)H .aa os e6e&)0)ios%
1'todos static so de.inidos assim )omo at&i3utos static,
public static int 8+5&int aFint b' < //ma*imo divisor comum de a e b
A
No e6emplo da )lasse Oracao :TA/ 2RAO=8 ti@emos Jue lida& )om o m'todo mdc% Este
m'todo no .a"ia muito sentido pa&a o usu7&io desta )lasse8 em3o&a .osse ne)ess7&io pa&a .a"e& )e&tas
ope&aIes Jue en@ol@iam simpli.i)ao de .&ao% NaJuele momento nossa opo .oi po&
implementa& o m'todo )omo private na p&>p&ia )lasse Oracao% Al(u'm &i(o&oso pode&ia te& dito,
BUo)H est7 e&&ado8 mdc no tem nada a @e& )om Oracao e eu @ou implement74lo em uma )lasse
sepa&ada )hamada Servicos8atematicosD% A minha &esposta a esta a.i&mao se&ia, BA)ho sua id'ia
3oa8 mas sem o uso de m'todos static na )lasse Servicos8atematicos8 @o)H @ai te& Jue de)la&a& um
o39eto da )lasse Servicos8atematicos dent&o de )ada Oracao pa&a pode& usa& o m'todo mdc%D
E<erc:ci"s,
=4
/e.ina uma )lasse )om m'todos static Jue pe&mite )7l)ulos matem7ti)os )omo 1/C8
2ATORIA;8 CO1BINAlES:n8C=8 -ER15TAlES8 et)%
V@4
E6iste uma lin(ua(em de p&o(&amao )hamada ;o(o Jue ' muito usada no B&asil em es)olas
de p&imei&o e se(undo (&au% Nesta lin(ua(em @o)H pode p&o(&ama& os mo@imentos na tela de uma
ta&ta&u(uinha ou )u&so&% Este )u&so& des)&e@e mo@imentos &is)ando ou no a tela8 dent&e os
mo@imentos des)&itos esto )0&)ulos8 Juad&ados e seJuHn)ias &epetiti@as :loops=% 1odi.iJue seu
o39eto &o3o pa&a ap&esenta& al(uns desses &e)u&sos% C&ie ento um p&o(&ama Jue lH de um a&Jui@o
te6to inst&uIes pa&a este o39eto &o3o e6e)uta& mo@imentos na tela%
;o(o .oi )&iada po& um )ientista de )omputao do 1IT%
S4
Uo)H pode dese9a& a&ma"ena& as in.o&maIes da )lasse Uobot em out&a )lasse8 Jue )omputa
out&os )7l)ulos8 neste )aso temos pelo menos duas alte&nati@as a se(ui&,
a=C&ie uma )lasse au6ilia& e6te&na de a&ma"ena(em e pa&a todos o39etos robo instan)iados
passe o pontei&o desta )lasse au6ilia& )omo a&(umento do )onst&uto& % Assim esses o39etos pode&o
manda& mensa(ens pa&a esta )lasse de a&ma"ena(em% Essas mensa(ens8 )hamadas de m'todos8
podem te& @7&ios si(ni.i)ados8 num sentido .i(u&ado podemos te& al(o pa&e)ido )om, BClasse au6ilia&8
a&ma"ene essa in.o&mao pa&a mimD% BClasse au6ilia&8 me mande uma mensa(em daJui a )in)o
se(undos8 estou passando o pontei&o pa&a mim mesmo :this=D 8 et)% As mensa(ens @istas desse
modo .i)am mais inte&essantes8 @o)H pode at' a)ha& en(&aado8 mas ' muito p&7ti)o pensa& assim%
Z4
Em al(uma )lasse Jue @o)H )&iou ante&io&mente de.ina @a&i7@eis static )om o se(uinte o39eti@o,
Conta&8 .a"e& estat0sti)as das )hamadas de m'todos da )lasse%
T4
5se o Jue .oi ap&endido so3&e Bstatic @a&ia3lesD no p&o(&ama )ontas8 o o39eti@o ' a&ma"ena&
in.o&maIes so3&e os mo@imentos de todas as )ontas num o39eto static% -a&a Jue a modi.i)ao .iJue
a )ontento @o)H pode p&e)isa& to&na& o e6emplo mais p&>6imo da &ealidade8 adi)ionando no )onst&uto&
de )ontas um a&(umento, n?me&o de )onta% Comente se @o)H usa&ia alo)ao dinLmi)a pa&a essa
)lasse de a&ma"ena(em a(&e(ada em )onta8 ou no% Tenha em mente a Juesto do tamanho em 3+tes
do o39eto%
TRATAMENTO %E E(CETES
Se os )on)eitos de o&ientao a o39etos dados at' a(o&a .ossem su.i)ientes pa&a modela&
JualJue& ati@idade ou o39eto do mundo &eal8 todos os p&o3lemas de p&o(&amao esta&iam &esol@idos%
O)o&&e Jue o mundo &eal ' 3em mais )omple6o Jue seu p&o(&ama pode se&% Nem todos os o39etos e
ite&aIes ent&e eles podem se& modelados ou p&e@istos% Os me)anismos de t&atamento de e6)eIes se
en)ai6am 9ustamente nessa la)una%
O modelo de t&atamento de e6)eIes adotado po& Java ' muito semelhante ao de CRR% Se @o)H
97 te@e al(uma e6pe&iHn)ia )om t&atamento de e6)eIes8 este t>pi)o se&7 3astante .7)il%
TRATAN%O AS E(CETES GERA%AS POR TERCEIROS
T&atamento de e6)eIes pe&mite lida& )om as )ondiIes ano&mais de .un)ionamento de seu
p&o(&ama% 2a"e& uso deste &e)u&so to&na&7 seu so.tNa&e mais &o3usto8 se(u&o e 3em est&utu&ado% So
e6emplos de )ondiIes ano&mais, a)esso a um 0ndi)e in@7lido de um @eto&8 tentati@a de uso de um
o39eto no ini)iali"ado8 .alha na t&ans.e&Hn)ia de uma in.o&mao8 uma .alha no p&e@ista8 et)%
Sem as .a)ilidades o.e&e)idas pela lin(ua(em se&ia muito di.0)il lida& )om essas )ondiIes
ano&mais8 isto pode se& o3se&@ado nos de.i)ientes meios de t&atamento de e&&os usados em lin(ua(ens
Jue no .o&ne)em Be6)eption handlin(D%
Java ' uma lin(ua(em Jue .a" .o&te uso do )on)eito de t&atamento de e6)eIes% Em al(umas
lin(ua(ens Jue implementam t&atamento ' pe&.eitamente poss0@el p&o(&ama& sem usa& esse &e)u&so8
mas em Java no% Isto pode se& )omp&o@ado pela ne)essidade de al(uns 3lo)os de )>di(o tr? <A catch
<A em p&o(&amas ante&io&es%
5m dos moti@os de o p&o(&amado& Java te& Jue sa3e& t&atamento de e6)eIes ' Jue os m'todos
de )lasses de.inidas na lin(ua(em podem (e&a& e6)eIes e na maio&ia das @e"es o )ompilado& nos
o3&i(a a es)&e@e& t&atado&es :3lo)os tr?<A catch<A= pa&a )hamadas destes m'todos%
Kuando @o)H .o& est&utu&a& seu )>di(o dessa .o&ma8 ha@e&o duas aIes 37si)as Jue de@em se&
tomadas, le@anta& :9o(a&= uma e6)eo e t&ata& uma e6)eo% 5ma e6)eo se&7 le@antada Juando .o&
@e&i.i)ada uma )ondio ano&mal de .un)ionamento do p&o(&ama8 ento o m'todo Jue esta sendo
e6e)utado ' imediatamente te&minado e o )ont&ole passa pa&a o m'todo Jue o )hamou8 onde pode
o)o&&e& um t&atado& da e6)eo ou no% Se o)o&&e& um t&atado&8 na maio&ia dos )asos a e6)eo pa&a de
se p&opa(a& ali mesmo% Se no o)o&&e& um t&atado& out&as )hamadas de m'todos so Bdes.eitasD8
en)e&&adas8 podendo )ulmina& no t'&mino do p&o(&ama se toda a )adeia de )hamada de m'todos .o&
des.eita at' )he(a& em main sem Jue se a)he um t&atado& pa&a esta e6)eo% E6istem @7&ios modelos de
t&atamento de e6)eIes8 o modelo adotado po& Java &e)e3e o nome de, Bte&mination modelD8
9ustamente po& essas te&minaIes de m'todos%
1as o Jue ' uma 9o(a& uma e6)eoV M suspende& a e6e)uo do m'todo atual e passa& um
o39eto pa&a o 3lo)o catch mais p&>6imo na )adeia de )hamadas de m'todos atual% Isto ' .eito at&a@'s
da de)la&ao,
throw nomedoobjeto( //ou throw new nomedaclassedoobjeto&ar"umentos do
construtor'
throw ' )omo um brea# pa&a m'todos%
Como e6)eIes so o39etos8 @o)H pode de.ini& hie&a&Juias de )lasses de e6)eIes8 Jue
mapeiem em te&mos de in.o&maIes as )ondiIes ano&mais de seu p&o(&ama )ontendo as mensa(ens
de e&&o e as poss0@eis soluIes
As e6)eIes (e&adas pela lin(ua(em pe&ten)em a uma hie&a&Juia )u9o topo ' a )lasse
Ihrowable8 imediatamente estendida po& -rror e -*ception% Neste e6emplo @o)H @e&7 Jue os
t&atado&es de e6)eo so es)olhidos )ompa&ando a )lasse da e6)eo 9o(ada e a )lasse de e6)eIes
Jue o t&atado& di" t&ata&% Assim sendo o t&atado&,
tr?< /Bal"o ,ue possa "erar uma e*cecaoB/A
catch &E#ception erro' < /B acoes de tratamento do erro com possivelmente nova tentativa de
e*ecucao dos metodos chamadosB/ A
Se&ia )apa" de t&ata& todas as e6)eIes Jue este9am a3ai6o de -*ception :na hie&a&Juia= (e&adas
em tr? < _% /ispondo mais de um t&atado& :3lo)o )at)h= em seJeHn)ia onde os p&imei&os s> t&atam as
)lasses e6)eIes mais 3ai6as da hie&a&Juia8 ' poss0@el es)olhe& Jue )>di(o de t&atamento usa& )om
)ada tipo de e6)eo (e&ada%
-o& so&te8 das e6)eIes le@antadas pela lin(ua(em8 @o)H )omo p&o(&amado& s> p&e)isa&7 t&ata&
as da hie&a&Juia de -*ception. Neste e6emplo i&emos .o&a& o a)onte)imento da e6)eo
Arra?:nde*VutVf)ounds-*ceptionF at&a@'s de uma tentati@a de a)esso a um 0ndi)e in@7lido de um
@eto&,
A)esso a 0ndi)e in@7lido do @eto& sem )o&&ompe& o sistema8 p&o(&amado&es C pasmemQ
//5lasse principalF Ar,uivo $rincipal.java
class $rincipal <
public static void main&Strin" ar"s=>' <
int a=>Hnew int=0>(
tr? <
a=0>H31(
//linha acima "era e*cecaoF os indices validos sao ,uatro:1F3F!F7
//,ual,uer codi"o escrito a,ui &depois de a=0>H31('
//nunca sera e*ecutado
A
catch&-*ception ae' <
//refa6 a per"unta do indice a alterar ao usuario
//e descrobre ,ue ele ,ueria alterar o valor no indice 7F escrevendo 3!
a=7>H3!(
A

S?stem.out.println&a=7>'(
A
A
3!
//COMEN;ARIO8:
O .ato do )>di(o imediatamente ap>s o ponto onde .oi (e&ada a e6)eo no se& e6e)utado te
p&eo)upaV Uo)H (osta&ia po& e6emplo de te& uma )han)e de li3e&a& &e)u&sos do sistema :e6%%,.e)ha&
um a&Jui@o= antes do m'todo se& te&minadoV M pa&a isso Jue e6iste em Java o 3lo)o tr?< A catch<A
finall?<A Jue no e6iste em CRR8 mas e6iste po& e6emplo em 1odula4S%
A )l7usula finall?< A ' op)ional8 seu )>di(o @ai se& e6e)utado o)o&&a ou no o)o&&a uma e6)eo
no 3lo)o tr?<A %
E6emplo )l7ssi)o de uso do 3lo)o tr?<A catch<A finall? <A:
tr$ 1
//abre um ar,uivo
//"era uma e*cecao com ar,uivos
2
catc5 (E#cecaoArAui+o e)1
//tenta recuperar a,uivo e informacoes perdidas
2
finall$ 1
ar,uivo.close&'(
2
finall? tem sido usado pa&a .e)ha& a&Jui@os8 pa&a& threads e des)a&ta& 9anelas%
E<erc:ci"s:
3P
Em @7&ios dos p&o(&amas ante&io&es men)ionamos Jue ha@e&ia uma manei&a melho& de t&ata&
situaIes ano&mais% 5m desses p&o(&amas e&a o do tipo a3st&ato de dados matri6% ;eia este p&o(&ama
e adi)ione t&atamento de e6)eIes pa&a as )ondiIes ano&mais Jue podem su&(i&8 tais )omo a)esso a
0ndi)es in@7lidos% Complemente este e6e&)0)io ap>s te& lido os t>pi)os se(uintes%
GERAN%O S$AS PRUPRIAS E(CETES
O e6emplo a se(ui& ensina )omo t&a3alha& )om throw8 a pala@&a )ha@e usada pa&a le@anta&
e6)eIes% Este e6emplo se 3aseia na )lasse Oracao de TA/ 2RAO% Nossa e6)eo se&7 (e&ada
Juando nas ope&aIes de .&aIes o)o&&e& uma di@iso po& "e&o%
Em Java8 e6)eIes so instLn)ias de )lasses Jue pe&ten)em a hie&a&Juia Jue ' ini)iada8
en)a3eada8 pela )lasse Ihrowable% Neste e6emplo )onst&ui&emos nossa e6)eo he&dando de
-*ception Jue po& sua @e" he&da de Ihrowable%
public class +ivisao$or_ero e#ten"* E#ception
<
public Strin" info(
public +ivisao$or_ero&Strin" i'
<
infoHi(
A
A
Uo)H de@e modi.i)a& a )lasse Oracao ap&esentada ante&io&mente na p7(ina 8 pa&a a)eita& o
se(uinte m'todo,
public Oracao divisao&Oracao j' t5ro'* Di+i*aoPorRero
<
Oracao "(
if &j.denHH1' t5ro' ne' Di+i*aoPorRero(9Na cla**e Pracao9)
//se for 6ero a e*ecucao nao che"a a,ui
"Hnew Oracao&numBj.denFdenBj.num'(
return "(
A
class $rincipal <
public static void main&Strin" ar"s=>'
<
Oracao aFbFc(
aHnew Oracao&LF7'(
bHnew Oracao&!F1'(
S?stem.out.print&@-sta eX a fracao a: @'(
a.mostra&'(
S?stem.out.print&@-sta eX a fracao b: @'(
b.mostra&'(
tr$ 1
cHa.divisao&b'(
c.mostra&'(
2
catc5(Di+i*aoPorRero %in5ae#cecao)
1
S?stem.out.println&@Dao posso dividir por 6ero@'(
2

A
A
-sta eX a fracao a: &L/7'
-sta eX a fracao b: &3/1'
Dao posso dividir por 6ero
//COMEN;ARIO8
N>s no ap&esentamos um e6emplo de uma e6)eo p&opa(ando em uma )adeia lon(a de
)hamadas de m'todos% 1as )om os )onhe)imentos dados8 @o)H pode .a"e& isso%
Out&o .ato impo&tante ' Jue um 3lo)o catch tam3'm pode (e&a& e6)eIes8 assim se @o)H pe(ou
uma e6)eo e &esol@eu Jue no )onse(ue t&at74la @o)H pode .a"e& um throw dela mesma ou muda& a
)lasse da e6)eo e )ontinua& p&opa(ando :throw de out&a e6)eo=8 ou .a"e& o Jue @o)H pode pa&a
&epa&a& o e&&o e 9o(a& uma e6)eo pa&a Jue o Jue @o)H .e" se9a )ompletado po& out&os m'todos%
;em3&e4se Jue se @o)H pe(ou uma e6)eo8 ela pa&a de p&opa(a&%
E<erc:ci"s:
14
Implemente8 t&atamento de e6)eIes )ompleto pa&a o e6emplo de TA/ 2RAO% Antes .aa
um le@antamento das e6)eIes Jue podem se& (e&adas8 lem3&e das &est&iIes matem7ti)as pa&a o
denominado& em uma di@iso% ;e@e em )onta tam3'm o o@e&.loN de @a&i7@eis int Jue so uma
&ep&esentao )om n?me&o de 3its .inito da seJuHn)ia dos n?me&os intei&os :)on9unto m da
matem7ti)a=% Compa&e este t&atamento )om o de out&os p&o(&amas po& e6emplo na di@iso po& "e&o8
Juais as @anta(ens Jue @o)H pode aponta& e as des@anta(ensV
;HREAD8
th&eads so .lu6os de e6e)uo Jue &odam dent&o de um p&o)esso :apli)ao=% No&malmente os
th&eads )ompa&tilham &e(iIes de mem>&ia8 mas no ne)essa&iamente% ;em3&e4se de en)apsulamento%
-&o)essos8 os a@>s dos th&eads pe&mitem Jue o seu sistema ope&a)ional e6e)ute mais de uma
apli)ao ao mesmo tempo enJuanto Jue th&eads pe&mitem Jue sua apli)ao e6e)ute mais de um
m'todo ao mesmo tempo%
Todos os p&o(&amas Jue .i"emos at' a(o&a s> tinham um ?ni)o )aminho8 .io8 .lu6o8 de
e6e)uo% Nenhum deles e6e)uta@a duas )oisas :dois pedaos de )>di(o= simultaneamente% P&ande
pa&te do so.tNa&e de Jualidade es)&ito ho9e .a" uso de mais de uma linha de e6e)uo8 mais de um
th&ead% So os )hamados p&o(&amas multith&eaded%
O seu 3&oNse& de hipe&te6to )onse(ue .a"e& o doNnload de @7&ios a&Jui@os ao mesmo tempo8
(e&en)iando as di.e&entes @elo)idades de )ada se&@ido& e ainda assim pe&mite Jue @o)H )ontinue
inte&a(indo8 mudando de p7(ina no hipe&te6to enJuanto o a&Jui@o nem .oi )a&&e(ado totalmenteV Isto
no se&ia poss0@el sem o uso de th&eads%
O seu edito& de te6tos pe&mite Jue @o)H @7 editando o )omeo do a&Jui@o8 enJuanto ele est7
sendo )a&&e(ado do dis)oV Edita& e )a&&e(a& do dis)o so ati@idades Jue no podem se& inte&)aladas
de manei&a simples em um pedao de )>di(o% Seu edito& est7 usando th&eads8 essas ati@idades esto
sendo .eitas em pa&alelo%
Se sua m7Juina s> possui um p&o)essado&8 esse pa&alelismo ' um .also pa&alelismo% O
p&o)essado& tem seu tempo di@idido em peJuenos inte&@alos8 em )ada inte&@alo ele e6e)uta uma das
ati@idades e @o)H tem a sensao de Jue tudo est7 .un)ionando ao mesmo tempo8 simultaneamente%
Se @o)H ' um .eli"a&do e sua m7Juina tHm mais de um p&o)essado&8 ento seu am3iente se&7 )apa" de
mapea& seus th&eads em ha&dNa&e e @o)H te&7 &ealmente p&o)essamento pa&alelo%
Se @o)H olha& a t&aduo de th&eads no di)ion7&io ' at' )apa" Jue @o)H en)ont&e um desenho de
um )a&&etel de linha ou da &os)a de um pa&a.uso8 este nome ' 3astante .eli"% Ima(ine Jue seu
p&o(&ama ' )omposto po& @7&ias linhas de e6e)uo Jue .un)ionam em pa&alelo :al(umas @e"es estas
linhas podem se 9unta&8 out&as se di@idi&=% Cada linha de e6e)uo )uida de uma ta&e.a, t&ans.e&i& um
a&Jui@o8 t&ata& a ent&ada do usu7&io8 most&a& sua 9anela na tela8 et)%
threads ' uma in@eno &e)ente se )ompa&ada )om o &estante da lin(ua(em% Al(umas out&as
lin(ua(ens :3em pou)as= .o&ne)em .a)ilidades pa&a lida& )om th&eads8 e6emplo, 1odula4S%Tam3'm
)onhe)idos )omo li(htNei(ht p&o)esses8 th&eads so um &e)u&so e6t&emamente di.0)il de se
implementa&8 de modo Jue ' poss0@el di"e& Jue ou seu am3iente de p&o(&amao o.e&e)e .a)ilidades
pa&a lida& )om eles8 ou @o)H no @ai Jue&e& implement74losFus74los%
CRIAN%O THREA%S $SAN%O INTERFACES O$ HERANA
E6istem duas manei&as 37si)as de )&ia& th&eads em Java8 usando inte&.a)es e usando he&ana%
5sando he&ana8 sua )lasse 97 ' um th&ead :is a &elationship=8 Jue Juando ti@e& seu m'todo start:=
)hamado @ai e6e)uta& tudo o Jue esti@e& no m'todo run:= em pa&alelo%
5sando inte&.a)es8 @o)H de.ine uma )lasse )u9o m'todo run:= @ai se& e6e)utado po& um th&ead%
HERANA $SA%A PARA CRIAR THREA%S
Se @o)H Jue& te& uma id'ia do Jue @ai a)onte)e& no p&o(&aminha a3ai6o8 @e9a
o desenho ao lado% N>s .a&emos uma )o&&ida de Th&eads, A e B% Eles se&o
ini)iados depois Jue o p&o(&ama p&in)ipal :main= )omea&% A sai )om al(uma
@anta(em pois ' ini)iado p&imei&o8 depois sai B% A )ada loop estes Th&eads so
o3&i(ados a .a"e& uma pausa po& um inte&@alo aleat>&io at' )ompleta&em Z
loops, $818#8S8Z%
No .inal8 pedimos ao p&o(&ama p&in)ipal Jue espe&e os Th&eads te&mina&em
seus )i)los pa&a se 9unta& a eles :m'todo join:= da )lasse th&ead=%O m'todo join
no &eto&na enJuanto o seu th&eads no te&mina&%
E6istem uma s'&ie de out&as p&imiti@as pa&a lida& )om Th&eads, pausa%
pa&ada8 &eto&no a e6e)uo8 et)% No e6pli)a&emos todas aJui% Uo)H de@e .a"e&
leitu&as )omplementa&es8 ' isso Jue temos a)onselhado% A(o&a estas leitu&as
podem se& mais t')ni)as8 tipo (uias de &e.e&Hn)ia8 uma @e" Jue n>s 97 .i"emos a
int&oduo do assunto%
Al(uns assuntos8 a e6emplo de Th&eads e6i(em um )onhe)imento te>&i)o
.o&te8 de modo Jue tam3'm a)onselhamos Jue @o)H adJui&a um li@&o so3&e
p&o(&amao )on)o&&ente%
public class 8euIhread e#ten"* ;5rea" <
public 8euIhread&Strin" nome'
<
super&nome'(
A
public void run&' // o metodo ,ue vai ser e*ecutado no thread tem sempre nome run
<
for &int iH1( iCL( iGG' <
S?stem.out.println&"etDame&'G @ na etapa:@Gi'(
tr? <
sleep&&int'&8ath.random&' B !111''( //milise"undos
A catch &:nterrupted-*ception e' <A
A
S?stem.out.println&@5orrida de threads terminada:@ G "etDame&''(
A
A
class 5orridaIhreads
<
public static void main &Strin" ar"s=>'
<
Meu;5rea" a:b
a&ne' Meu;5rea"(9Leonar"o Na+ier Ro**i9)
a,*tart()
b&ne' Meu;5rea"(9An"re Au7u*to Ce*ta9)
b,*tart()
tr? <a,0oin() A catch &:nterrupted-*ception i"norada' <A
tr? <b,0oin() A catch &:nterrupted-*ception i"norada' <A
A
A
t5rea" A
thread )
Leonar"o Na+ier Ro**i na etapa64
Andre Au"usto 5esta na etapa:1
Andre Au"usto 5esta na etapa:3
Leonar"o Na+ier Ro**i na etapa6.
Andre Au"usto 5esta na etapa:!
Leonar"o Na+ier Ro**i na etapa6@
Leonar"o Na+ier Ro**i na etapa6?
Andre Au"usto 5esta na etapa:7
Andre Au"usto 5esta na etapa:0
5orrida de threads terminada:Andre Au"usto 5esta
Leonar"o Na+ier Ro**i na etapa6S
Corri"a "e t5rea"* ter%ina"a6Leonar"o Na+ier Ro**i
INTERFACES $SA%AS PARA CRIAR THREA%S
Colo)a& sua )lasse a3ai6o da )lasse Th&eads em uma hie&a&Juia8 as @e"es ' um p&eo muito
(&ande pa&a te& um m'todo dela &odando em um Th&ead% M po& isso Jue Th&eads pode se& )&iados
usando inte&.a)es% Uo)H s> tem Jue di"e& Jue implementa a inte&.a)e Uunnable8 Jue ' )omposta do
m'todo run&'. Kuando um Ihread ' )onst&u0do usando )omo a&(umento uma )lasse Jue implementa
a inte&.a)e Uunnable8 )hama& o m'todo start pa&a este thread .a" )om Jue o m'todo run:= de nossa
)lasse )ome)e a se& e6e)utado neste th&ead pa&alelo%
public class Uodeme-mTmIhread i%ple%ent* Runnable <
public Strin" str( //nome do objeto ,ue vai ter o metodo run rodado em um
//thread
public Uodeme-mTmIhread&Strin" nome'
<
strHnome(
A
public void run&'
<
for &int iH1( iCL( iGG' <
S?stem.out.println&strG @ na etapa:@Gi'(
A
//As mensa"ens de corrida terminada poderiam se postas a,ui.
A
A
class IhreadsUodadores
<
public static void main &Strin" ar"s=>'
<
;5rea" a:b
Ro"e%eE%U%;5rea" leo:an"re
leo&ne' Ro"e%eE%U%;5rea"(9Leonar"o Na+ier Ro**i9)
an"re&ne' Ro"e%eE%U%;5rea"(9An"re Au7u*to Ce*ta9)
a&ne' ;5rea"(leo)
a,*tart()
b&ne' ;5rea"(an"re)
b,*tart()
tr? < a,0oin() A catch &:nterrupted-*ception i"norada' < A
//espera thread terminar seu metodo run
tr? < b,0oin() A catch &:nterrupted-*ception i"norada' < A
A
A
thread A
t5rea" D
eonardo Xavier Uossi na etapa:1
An"re Au7u*to Ce*ta na etapa64
An"re Au7u*to Ce*ta na etapa6.
eonardo Xavier Uossi na etapa:3
An"re Au7u*to Ce*ta na etapa6@
eonardo Xavier Uossi na etapa:!
eonardo Xavier Uossi na etapa:7
An"re Au7u*to Ce*ta na etapa6?
eonardo Xavier Uossi na etapa:0
An"re Au7u*to Ce*ta na etapa6S
E<erc:ci"s:
=>
As ta&e.as de t&anspo& uma mat&i" ou .a"e& o BespelhoD de uma ima(em :Jue pode se&
&ep&esentada po& uma mat&i"= so e6emplos .7)eis de ta&e.as Jue podem se& di@ididas em dois ou
mais Th&eads% M l>(i)o Jue aJui esta&emos 3us)ando ti&a& @anta(em da poss0@el e6istHn)ia de mais de
um p&o)essado& e tam3'm 3us)ando li3e&a& o Th&ead p&in)ipal dessa )omputao8 pa&a Jue ele possa
.a"e& out&as ati@idades antes do join&'.
Es)olha uma dessas ta&e.as e implemente4as usando Th&eads% /i)a, os Th&eads de@em se&
)onst&u0dos de modo a )onte& a &e.e&Hn)ia pa&a a mat&i" Jue @ai a&ma"ena& o &esultado8 a &e.e&Hn)ia
pa&a a mat&i" o&i(inal e os @alo&es Jue indi)am em Jue 7&ea da mat&i" este Th&ead de@e t&a3alha&% -o&
e6emplo, no )aso da in@e&so da ima(em um Th&ead t&a3alha&ia em uma metade e o out&o na out&a
metade%
Se&ia inte&essante imp&imi& na tela os instantLneos da mat&i" &esultado pa&a @o)H @e& o t&a3alho
sendo .eito em pa&alelo%
PENSAN%O M$'TITHREA%E%
Este t>pi)o dis)ute al(uns dos p&o3lemas Jue podem su&(i& Juando lidando )om th&eads e
ap&esenta al(umas das soluIes da lin(ua(em% No nos ap&o.unda&emos muito em th&eads%
E6iste um e6emplo )l7ssi)o dos p&o3lemas Jue podem a)onte)e& Juando @o)H est7 usando
)on)o&&Hn)ia% Ima(ine Jue @o)H tem um p&o(&ama Jue lH dados em 3+tes de al(um lu(a&
:te)ladoFdis)o= e os t&ansmite @ia &ede% Uo)H de)idiu usa& th&eads po&Jue no Jue& .i)a& )om um
p&o(&ama de um ?ni)o .lu6o de e6e)uo 3loJueado po&Jue est7 espe&ando o te)lado ou o dis)o
enJuanto pode&ia esta& tentando t&ansmiti& pa&te de seu 3u..e& pela &ede%
-a&a tal @o)H di@idiu o seu p&o(&ama em dois th&eads Jue .i)am &epetindo o mesmo )on9unto de
aIes,
Th&ead A8 En.ilei&ando @alo&es do te)lado :;eitu&a=,
14;H @alo& do .onte%
#4Consulta o n?me&o de elementos da .ila%
S4Soma um a esse n?me&o%
Z4En.ile&a o @alo& lido%
Th&ead B8 /esen.ilei&ando os @alo&es :E es)&e@endo4os na sa0da=,
14Consulta o tamanho da .ila se .o& maio& Jue "e&o e6e)uta p&>6imo passo
#4Reti&a elemento da .ila%
S4/e)&ementa )ontado& de elementos%
Os seus th&eads podem no &oda& em inte&@alos de.inidos8 &e(ula&es de tempo% Al(uns
p&o3lemas podem su&(i& pois a mesma &e(io de mem>&ia ' a)essada po& dois .lu6os de e6e)uo
distintos Jue podem te& e6e)utados apenas al(uns de seus BpasssosD,
public class IhreadA <
//eitura
while &;fimeitura'
<
-nfileraTm&'(
A
A
public class Ihread) <
//-scrita
while &;fim-scrita'
<
-screve&+esenfileraTm&''(
A
A
Th&ead A At&i3uto N
o
elementos 2ila, Th&ead B
S n4W/X4WRX4WOX4n %
=4Consulta N
o
elementos44444 S n4W/X4WRX4WOX4n %
@4In)&ementa N
o
elementos44 Z n4W/X4WRX4WOX4n
% Z n4W/X4WRX4WOX4n 44444Consulta tamanho da .ila4
A
% Z n4W/X4WRX4n 44444444444Reti&a um elemento4B
% S n4W/X4WRX4n 444/e)&ementa N
o
elementos4C
% S n4W/X4WRX4n %
A seJuHn)ia de ope&aIes =+@+A+B+C )o&&ompe o estado de sua est&utu&a de dados% Se um s>
th&ead esti@esse e6e)utando so3&e a mesma est&utu&a8 ainda assim pode&iam tam3'm ha@e& momentos
em Jue o at&i3uto n?me&o de elementos no &e.lete e6atamente Juantos esto na .ila8 mas isso lo(o
se&ia )onse&tado% S> Jue )om dois th&eads8 um out&o th&ead pode usa& essa in.o&mao in)onsistente
sem Jue ha9a tempo pa&a ela se& &epa&ada% Seu p&o(&ama pode .alha& Juando @o)H tenta& &eti&a& um
elemento de uma .ila @a"ia%
Al(uns dos passos dos p&o(&amas a)ima podem se& di@ididos em passos meno&es8 mas o Jue
impo&ta nesse e6emplo ' Jue sem o uso dos &e)u&sos espe)0.i)os da lin(ua(em ' imposs0@el to&na&
este p&o(&ama se(u&o% O ideal pa&a este nosso e6emplo se&ia Jue um Ihread ti@esse Jue espe&a& um
)i)lo do out&o Ihread te&mina& pa&a ini)ia& o seu p&>6imo )i)lo e @i)e @e&sa8 ou se9a os )i)los te&iam
Jue se& sin)&oni"ados8 o)o&&e& um ap>s o out&o8 podendo inte&)ala& )i)los do Ihread A )om )i)los do
Ihread B8 mas no pedaos desses )i)los% Em )asos assim 8 )ostuma di"e& Jue )ada )i)lo )ompIe um
)on9unto de aIes indi@is0@el%
A(o&a Jue @o)H 97 sa3e a soluo8 3asta sa3e& )omo implement74la% Os m'todos -nfileraTm:=!
e +esenfileraTm:=! de@em se& espe)i.i)ados )omo sin)&oni"ados% E@ite espe)i.i)a& m'todos muito
(&andes )omo sin)&oni"ados8 pois out&os Ihreads te&o Jue espe&a& muito tempo pa&a )omea& a
e6e)uta&%
public s?nchroni6ed void -nfileraTm&b?te a' <
//esta parte voce ja sabe
A
public s?nchroni6ed )?te +esenfileraTm&' <
//)?te e uma classe wrapperF ela e i"ual a null se nao ha elementos
//o restante voce ja sabe
A
A(o&a sua )lasse ' se(u&a% Uo)H s> de@e se p&eo)upa& )om a sin)&oni"ao dos m'todos do seu
p&o(&ama% Os m'todos e as )lasses da lin(ua(em 97 so es)&itos pa&a se&em BTh&ead sa.eD8 o Jue
(e&ou muito t&a3alho pa&a os p&o(&amado&es do BJa@a teamD%
!!COMEN;ARIO8
A)a3amos a(o&a o t>pi)o so3&e th&eads e tam3'm o tuto&ial% Antes de @o)H )omea& a estuda&
out&os te6tos8 um )oment7&io .inal, Se @o)H Juise& &oda& um m'todo de uma )lasse 97 p&onta em um
th&ead8 lem3&e4se de )olo)74lo :a sua )hamada= dent&o de um m'todo )om o nome run:=%
O #$E &OCQ PO%E EST$%AR A PARTIR %E AGORA $SAN%O 0A&A
As opIes so muitas, p&o(&amao )on)o&&ente8 inte&.a)es (&7.i)as8 sistemas dist&i3u0dos8 et)%
O impo&tante ' Jue pa&a todos estes assuntos8 @o)H @ai te& Jue sa3e& as t')ni)as ensinadas neste te6to%
,/dice re-issi1":
C"/teZd":
Bi43i"graia:
Al(uns dos tuto&iais aJui men)ionados se to&na&o li@&os8 de modo Jue ' impo&tante Jue @o)H
.aa uma 3us)a pelos nomes dos auto&es tam3'm%
W1XRum3au(h8 Blaha 1%8 -&eme&lani G%8 Edd+ 2% O ;o&ensen G% 8VbjectPVriented 8odelin" and
+esi"nJ. -&enti)e Aall8 1991%

W#X]e&ni(ham B&ian G% 8 Rit)hie /ennis 1% 8 BThe C -&o(&ammin( ;an(ua(eD 8 En(leNood Cli..s8
N%J%,-&enti)e4Aall In)8 19[\
WSXRu3i&a8 C%1%2% BSt&u)tu&in( 2ault4Tole&ant O39e)t O&iented S+stems 5sin( Inhe&itan)e and
/ele(ationD8 -h%/% Thesis8 /epa&tment o. Computin( S)ien)e8 5ni@e&sit+ o. NeN)astle upon
T+ne8 O)to3e& 199Z8 see Chapte& #%
WZX;ema+ ;au&a8 -e&Cins Cha&les ;%8 BTea)h jou&sel. JAUA in #1 da+sD8 samsnet8 199
WTX@an Ao.. A%8 Shaio S%8 Sta&3u)C O%8 Sun 1i)&os+stems In)8 BAooCed on Ja@aD8 Addison4Gesle+8
199
WXAa&old Elliotte Rust+8 BB&eNin( Ja@a, A Tuto&ialD8 http,FFsunsite%un)%eduF9a@a.aJF9a@atuto&ial%html
W[XCampione 1a&+8 Gal&ath ]ath+8 BThe Ja@a Tuto&ialQ8 O39e)t4O&iented -&o(&ammin( .o& the
Inte&netD8 http,FFNNN%aN%)om%F)pF9a@ase&ies%html

Você também pode gostar