Sei sulla pagina 1di 119

TUTORIAL:

A LINGUAGEM DE PROGRAMAO

JAVA

ORIENTAO A OBJETOS Instituto de Computao janeiro, 1 Andr! Au"usto Cesta# aa$esta%d$$#uni$amp#&r Orientadora' (ro)a *ra Ce$+,ia -ar. /is$0er Ru&ira

INDCE
1. CLASSES E OBJETOS...................................................................................................................................................9 1#1# ES(ECI/ICAN*O 1-A C2ASSE######################################################################################################################### 3 1#4# OBJETOS E- JA5A########################################################################################################################################### 11 1.2.1. PROGRAMA HELLO INTERNET!........................................................................................................................11 1.2.2. ATRIBUTOS...........................................................................................................................................................14 1.2.3. ATRIBUTOS E MTODOS....................................................................................................................................20 1.2.4. MTODOS QUE RETORNAM VALORES............................................................................................................25 1.2.5. COMPARAO COM UM PROGRAMA EM PASCAL.......................................................................................2 1.2.!. CONSTRUTORES..................................................................................................................................................32 1.2. . CONSTRUTORES E AGREGAO......................................................................................................................34 1.2.". DESTRUTORES OU #$%&'(%)*+,-.........................................................................................................................3! 1#6# (ONTEIROS, 7(OINTERS8, RE/ER9NCIAS E OBJETOS#################################################################################6: 1.3.1. PASSAGEM POR RE.ER/NCIA..........................................................................................................................3 1.3.2. VETORES E MATRI0ES........................................................................................................................................3" 1.3.3. COPIA 1 COMPARAO E DETERMINAO DA CLASSE EM OB2ETOS.....................................................33 1# # OBTEN*O 5A2ORES *O 1S1;RIO################################################################################################################# 6 1.4.1. LENDO DO TECLADO.........................................................................................................................................43
1# #1#1# 2EIT1RA *E STRIN<S 1SAN*O 1- 5ETOR *E B=TES####################################################################################### 6 1# #1#4# 1-A 5ISO <ERA2 SOBRE (AC>A<ES E STREA-S###########################################################################################

1.4.2. ARGUMENTOS DE LINHA DE COMANDO.......................................................................................................4 1#?# ENCA(S12A-ENTO CO- (RI5ATE, (1B2IC, 7(AC>A<E8 E (ROTECTE*############################################### @ 1.5.1. ENCAPSULANDO MTODOS E ATRIBUTOS....................................................................................................4" 1.5.2. ENCAPSULAMENTO E #PAC4AGES-...............................................................................................................52
1#?#1#1# ATRIB1TOS (RI5ATE, -ATO*OS (1B2IC ##############################################################################################################?B 1#?#1#4# 1- ATRIB1TO A (1B2IC###########################################################################################################################################?1 1#?#4#1# ENCA(S12A-ENTO *E ATRIB1TOS E -ATO*OS CO- (AC>A<ES################################################################?6 1#?#4#4# ENCA(S12A-ENTO *E C2ASSES CO- (AC>A<ES##############################################################################################?:

1#C# TI(O ABSTRATO *E *A*OS############################################################################################################################ C1 1.!.1. TAD .RAO.......................................................................................................................................................!2 1.!.2. STRINGS1 UM MODELO DE CLASSE................................................................................................................! 1.!.3. TAD E ALOCAO DIN5MICA......................................................................................................................... 0 2. HERANA......................................................................................................................................................................76 4#1# DIERARE1IAS *E TI(OS ################################################################################################################################# :C 2.1.1. UMA HIERARQUIA SIMPLES. ........................................................................................................................... ! 2.1.2. PROTECTED........................................................................................................................................................"0 2.1.3. REDE.INIO DE MTODOS HERDADOS....................................................................................................."4 4#4# INTER/ACES, 1-A A2TERNATI5A (ARA DERANA -F2TI(2A##############################################################@? 3. POLIMORFISMO, CLASSES ABSTRATAS.............................................................................................................88 6#1# RE*E/INIO *E -ATO*OS (ARA 1-A C2ASSE DER*EIRA###################################################################@@ 6#4# SOBRECAR<A G -ATO*OS E O(ERA*ORESH################################################################################################ @@ 3.2.1. SOBRECARGA DE MTODOS1 #COP6 CONSTRUCTOR-.............................................................................."" 3.2.2. SOBRECARGA DE OPERADOR........................................................................................................................31 6#6# C2ASSES ABSTRATAS E CONCRETAS########################################################################################################### 31 3.3.1. CLASSE ABSTRATA ITERADOR..........................................................................................................................33 3.3.2. ACOPLAMENTO DIN5MICO DE MENSAGENS................................................................................................3
6#6#4#1# 1- EIE-(2O ESC2ARECE*OR################################################################################################################################3@ 6#6#4#4# O E1E ACONTECE CO- O E1E /OI ACRESCENTA*O########################################################################################1BB

3.3.3. LISTA HETEROG/NEA DE .ORMAS 78*9:;<+%=',>.......................................................................................101 4. CONCEITOS AVANADOS......................................................................................................................................1 3 #1# ATRIB1TOS STATIC######################################################################################################################################## 1B6 #4# -ATO*OS STATIC######################################################################################################################################### 1B #6# TRATA-ENTO *E EICEJES###################################################################################################################### 1B? 4.3.1. TRATANDO AS E?CE@ES GERADAS POR TERCEIROS.............................................................................105 4.3.2. GERANDO SUAS PRAPRIAS E?CE@ES........................................................................................................10" # # TDREA*S############################################################################################################################################################# 1B3 4.4.1. CRIANDO THREADS USANDO INTER.ACES OU HERANA......................................................................110
# #1#1# DERANA 1SA*A (ARA CRIAR TDREA*S############################################################################################################11B # #1#4# INTER/ACES 1SA*AS (ARA CRIAR TDREA*S#####################################################################################################111

4.4.2. PENSANDO MULTITHREADED.......................................................................................................................113

INFORMA!O SOBRE "COP#RI$HT%


Cop.ri"0t 133CK IC K 1NICA-(# Este teLto e do$umentos re,a$ionados so prote"idos por $op.ri"0t# Esta pu&,i$ao ! apresentada $omo estM sem "arantia de erros e mudanas, sejam nos endereos G1R2NsH , teLto ou do $Odi"o reuti,iPado nos pro"ramas eLemp,o# (ara o&ter a Q,tima Rerso deste teLto $onsu,te http://www.dcc.unicamp.br/~aacesta ou http://www.dcc.unicamp.br M&'(&) R*+,)-'&.&)/ Sun, o ,o"otipo da Sun, Sun -i$ros.stems, So,aris, DotJaRa e JaRa so mar$as re"istradas de Sun -i$ros.stems, In$# nos Estados 1nidos e em a,"uns outros pa+ses# O persona"em 7*uSe8 ! mar$a re"istrada de Sun -i$ros.stems# 1NII ! mar$a re"istrada nos Estados 1nidos e outros pa+ses, eL$,usiRamente ,i$en$iada por ITOpen Conpan., 2td## Nets$ape NaRi"ator ! mar$a re"istrada de' 7Nets$apeE''01 I2.,(&.0' 230 .*4,2,.0. Communi$ations Corporation8#

P'*45(,0/
Este teLto )aP parte de um estudo $omparatiRo de ,in"ua"ens de pro"ramao orientadas a o&jetos# O $onteQdo deste estudo tam&!m estM dispon+Re, na 7Uor,d Uide Ue&8, Mrea mu,t+midia da internet, so& o endereo http://www.dcc.unicamp.br/~aacesta # Neste endereo, Ro$V pode $omp,ementar seu aprendiPado, rodando eLer$+$ios iteratiRos, a$essando 7,inSs8 para outros 0iperteLtos so&re ,in"ua"ens de pro"ramao, Rendo eLemp,os de pro"ramas e intera"indo $om ap,i$aWes para a internet# A di)erena entre este estudo e outros teLtos Xue Ro$V possa en$ontrar so&re o mesmo assunto ! o $arMter prMti$o# ELemp,os $omp,etos, di$as de pro"ramao, eLp,i$aWes so&re deta,0es norma,mente i"norados em ,iRros, tornaro seu aprendiPado mais )M$i,, prin$ipa,mente na se"unda parte onde tratamos da $onstruo de ap,i$aWes para a internet# No ini$io, os eLemp,os podem ser $onsiderados )M$eis, mas e,es Ro se $omp,i$ando $ada ReP mais de modo Xue ! importante Xue o ,eitor a$ompan0e o teLto )aPendo os eLer$+$ios# /orne$eremos uma s!rie de id!ias de pro"ramas simp,es para Xue Ro$V possa testar seu $on0e$imento# Estes pro"ramas simp,es podem ser me,0orados atraR!s do uso de inter)a$es "rM)i$as, assunto Xue no ! $o&erto neste tutoria,# 67EM DEVERIA LER ESTE T7TORIAL Eua,Xuer ,eitor Xue ten0a eLperiVn$ia $om pe,o menos uma ,in"ua"em de pro"ramao# DIA$RAMA!O DESTE TE8TO Apesar de Java ser uma ,in"ua"em Xue serRe para RMrios propOsitos, o seu su$esso atua, G!po$a do seu ,anamentoH se deRe a possi&i,idade de e,a&orao de ap,i$aWes para a internet# *ada a importYn$ia deste aspe$to da ,in"ua"em, este teLto estM or"aniPado de maneira seme,0ante as pM"inas en$ontradas na UUU, )reXuentemente Ro$V en$ontrarM dia"ramas $omo o se"uinte' http://www.dcc.unicamp.br/~aacesta T1TORIA2
#E,<BC9 =9:D'+'<%E9 C* (%&8B'8*&, C* D+98+':'FG9 9+%*&<'C', ' 9HI*<9,-. N*,<' DJ8%&' E9=K *&=9&<+'+J <B<9+%'%, ,9H+* C%E*+,', (%&8B'8*&, 9+%*&<'C', ' 9HI*<9,1 C*&<+* *(',L CMM1 M9CB('N31 Java. QB'&<9 ' 2'E'1 E9=K <*+J ' 9D9+<B&%C'C* C* E*+ =OC%89 C* D+98+':', * <*,<JN(9,1 '(;: C* D9C*+ 'CPB%+%+ ' E*+,G9 :'%, &9E' C*,<* <*Q<9.E&=9&<+'+J <':H;: (%&R, D'+' ,%<*, ,9H+* 9+%*&<'FG9 ' 9HI*<9,.

Este dia"rama representa um 0iperteLto Xue pode ser a$essado de modo a $omp,ementar seu estudo# A parte es$rita em ,etra maior ! o endereo, o teLto em itM,i$o )aP um resumo do $onteQdo desta pM"ina# 1sando estes 7,inSs8 ou dia"ramas Ro$V en$ontrarM uma maneira ordenada de aprender sem se perder no mar de in)ormaWes da internet# 1R2' #U&%$9+: R*,9B+=* L9='<9+-1 ; 9 *&C*+*F9 C* B: =9:DB<'C9+ &' %&<*+&*< O dia"rama a$ima apare$erM toda ReP Xue introduPirmos uma pa,aRra noRa# Caso Ro$V en$ontre a,"uma pa,aRra des$on0e$ida, &asta usar o +ndi$e remissiRo para o&ter sua de)inio# A importante ,em&rar Xue os 0iperteLtos $itados neste tutoria,, no so de nossa responsa&i,idade# Como e,es esto sujeitos a mudanas, $ontamos $om a sua ajuda para e)etuarmos atua,iPaWes, $onte Ro$V tam&!m $om a nossa ajuda na internet# Os pro"ramas eLemp,o deste teLto so apresentados em $aiLas retan"u,ares, e todo $Odi"o ! es$rito em )onte di)erente da usada neste teLto $omum# O tre$0os de $Odi"o Xue apare$em desmem&rados de seus arXuiRos, tem )undo $inPa $,aro# Todos os arXuiRos presentes dentro dos retYn"u,os, so arXuiRos 7teLtKon,.8, Xua,Xuer )ormatao Gne"ritoH tem apenas )uno didMti$a#

Os resu,tados dos pro"ramas so indi$ados pe,o dia"rama ao ,ado'

DIVIS!O DO T7TORIAL Este tutoria, $ont!m uma seXuVn$ia de tOpi$os Xue permite apresentar a ,in"ua"em so& a Oti$a da teoria de orientao a o&jetos# A apresentao do mode,o de o&jetos da ,in"ua"em e $on$eitos re,a$ionados tais $omo po,imor)ismo, tratamento de eL$eWes estM em primeiro p,ano# Ao ,on"o dessa apresentao, em se"undo p,ano, Ro$V aprenderM os aspe$tos &Msi$os da ,in"ua"em tais $omo 7,oops8, desRios $ondi$ionais, et$# Estes tOpi$os so )reXuentemente retomados, $ada ReP de maneira mais apro)undada# Euando terminamos o assunto m!todos, Ro$V jM estM pronto para sa&er o Xue so $ontrutores, e ! eLatamente isto Xue ensinamos# (or!m o assunto $ontrutores no ! es"otado, Ro$V ainda Rai aprender a usar $onstrutores em $onjunto $om a"re"ao e depois em $onjunto $om 0erana# A maioria dos ,eitores )i$a ansiosa para aprender $omo $riar ap,i$aWes para a internet, mas depois de satis)eita esta ansiedade Ro,tam para o ponto onde aprendem $omo pro"ramar na ,in"ua"em e no apenas eLperimentar $om a $riao de &otWes, $aiLas de diM,o"o, ima"ens, et$# Se esse ! o seu $aso, ! re$omendMRe, um 7tour8 pe,a UUU antes de $omear a pro"ramar, um &om 7site8 para $omear a pesXuisar $om um 7&roZser8 $ompat+Re, $om Java GNets$ape NaRi"ator 4#B ou superiorH ! ' http://www.Javasoft.com/applets A((2ETS
Links para vrios applets, divididos por categorias: games, sound, busines, animation... Divirtase...

APPLETSL SG9 D*PB*&9, D+98+':', *,=+%<9, *: 2'E' PB* D9C*: ,*+ *:H*H%C9, *: C9=B:*&<9,
S%D*<*Q<9,. SG9 *Q*:D(9, C* 'DD(*<,L '&%:'FT*,1 %:'8*&,1 H9<T*,1 *<=. ADD(*<, D9C*: ,BD9+<'+ *$*%<9, C* :B(<%:%C%' =9:9 ,9&,1 %<*+'FT*, =9: 9 B,BJ+%9 7:9B,*1 <*=('C9>1 %:'8*&,1 '&%:'FT*,1 8+J$%=9,1 *<=.

Ao ,on"o do teLto,Ro$V per$e&erM Xue JaRa ! eL$e,ente para desenRo,Rer ap,i$aWes $omer$iais e para ser usada em uniRersidades# JaRa pode ser Rista $omo uma )uso de RMrias t!$no,o"ias Xue RVm sendo desenRo,Ridas na Mrea de $omputao, de modo Xue estudantes dessa ,in"ua"em tem a oportunidade de tomar $ontato $om RMrios tOpi$os re$entes' pro"ramao $on$orrente, sitemas distri&u+dos, orientao a o&jetos, proto$o,os da internet, e uma s!rie de outros assuntos )M$eis de prati$ar nessa ,in"ua"em# A $,aro Xue os resu,tados dependero de seu es)oro, portanto depois de ,er esta introduo, des$anse um pou$o, tome um $a)ePin0o1# (ois durante o restante do teLto esperaremos Xue Ro$V se enRo,Ra $om a ,in"ua"em, reuse pro"ramas en$ontrados na U#U#U, se $omuniXue $om $o,e"as pro"ramadores, parti$ipe de ,istas de dis$ussWes, neZs"roups G$omp#,an"#Java [ a,t#ZZZ#0ot JavaH, e o mais importante' (RO<RA-E, (RO<RA-E, REK(RO<RA-E\ AD67IRINDO O SOFT9ARE NECESS:RIO, PLATAFORMAS S7PORTADAS 1m am&iente de pro"ramao Java ! norma,mente $omposto de um Sit de desenRo,Rimento de ap,i$aWes Java e um 7&roZser $ompat+Re, $om esta ,in"ua"em Gre$omendMRe,H# Se Ro$V no tem a$esso a esse am&iente de pro"ramao, tente estes endereos' http://Java.sun.com . R'%) C9 S%D*+<*Q<9 :9&<'C9 D*(9, =+%'C9+*, C' (%&8B'8*:. S9H *,<* *&C*+*F9 E9=K D9C* 9H<*+ 9
1

1m dos s+m&o,os da ,in"ua"em ! uma L+$ara de $a)! Xue apare$e em animaWes $om sua )umaa Xuente tremu,ando# 6

7*OUN2OA* 8

JA A

=9:D%('C9+ * 9B<+', $*++':*&<', C* C*,*&E9(E%:*&<9 C* 'D(%='FT*, Java D'+' ' ,B' D('<'$9+:' C* D+98+':'FG9. .%PB* '<*&<9! OB<+9, C*,*&E9(E*C9+*, *,<G9 =+%'&C9 ':H%*&<*, C* D+98+':'FG9 2'E'.

http://www.netscape.com
7*OUN2OA* 8 7BROUSERS8

R'%) C9 S%D*+<*Q<9 :9&<'C9 D*(9, =+%'C9+*, C9 N*<,='D* N'E%8'<9+ . S9H *,<* *&C*+*F9 E9=K D9C* 9H<*+ 9 H+9U,*+ #Java =9:D'<%H(*- C' #N*<,='D* C9:B&%='<%9&, INCV.. OB<+9, C*,*&E9(E*C9+*, *,<G9 ('&F'&C9 #H+9U,*+,- =9:D'<WE*%, =9: Java.

http://www.microsoft.com
7*OUN2OA* 8 7BROUSERS8

A :%=+9,9$< (%=*&=%9B ' <*=&9(98%' 2'E' * ' %&=9+D9+9B *: ,*B &9E9 H+9U,*+L I&<*+&*< EQD(9+*+ E*+,G9 3.0 9B ,BD*+%9+.

BROXSERSL SG9 B:' ='<*89+%' C* D+98+':', PB* D*+:%<*: E9=K E%,B'(%)'+ B: C9=B:*&<9 =+%'C9
*: B: =*+<9 D'C+G91 &9 =',9 S<:( 7S%D*+<*Q< :'+RBD ('&8B'8*>. A<B'(:*&<* 9, H+9U,*+, <*: ,* <9+&'C9 =9:D(*Q9, C*E%C9 ' PB'&<%C'C* C* D'C+T*, *Q%,<*&<*, 7*Q. %:'8*&, .8%$ .ID81 *<=>. A (%&8B'8*: 2'E' D9C* =9&<+%HB%+ D'+' :%&%:%)'+ *,<' =9:D(*Q%C'C*.

CARACTERSTICAS DA LIN$7A$EM P&'*(,.& (0; C, C<</ Java tem a aparVn$ia de C ou de C]], em&ora a )i,oso)ia da ,in"ua"em seja di)erente# (or este motiRo estaremos )reXuentemente )aPendo $omparaWes a,"uma destas ,in"ua"ens# O ,eitor Xue pro"rama em Xua,Xuer uma de,as, ou em uma ,in"ua"em orientada a o&jetos, se sentirM mais a Rontade e se tornarM um &om pro"ramador Java em menos tempo# Java tam&!m possui $ara$ter+sti$as 0erdadas de muitas outras ,in"ua"ens de pro"ramao' O&je$tiReKC, Sma,,ta,S, Ei))e,, -odu,aK6, et$# -uitas das $ara$ter+sti$as desta ,in"ua"em no so tota,mente noRas# Java ! uma )e,iP unio de te$no,o"ias testadas por RMrios $entros de pesXuisa e desenRo,Rimento de so)tZare# C0;=,>&.&/ 1m pro"rama em Java ! $ompi,ado para o $0amado 7&.teK$ode8, Xue ! prOLimo as instruWes de mMXuina, mas no de uma mMXuina rea,# O 7&.teK$ode8 ! um $Odi"o de uma mMXuina Rirtua, idea,iPada pe,os $riadores da ,in"ua"em# (or isso Java pode ser mais rMpida do Xue se )osse simp,esmente interpretada# P0'-5?*>/ Java )oi $riada para ser portMRe,# O 7&.teK$ode8 "erado pe,o $ompi,ador para a sua ap,i$ao espe$+)i$a pode ser transportado entre p,ata)ormas distintas Xue suportam Java GSo,aris 4#6, UindoZsKNT, UindoZsK3?, -a$TOs et$H# No ! ne$essMrio re$ompi,ar um pro"rama para Xue e,e rode numa mMXuina e sistema di)erente, ao $ontrMrio do Xue a$onte$e por eLemp,o $om pro"ramas es$ritos em C e outras ,in"ua"ens# Esta porta&i,idade ! importante para a $riao de ap,i$aWes para a 0etero"Vnea internet# -uitos d os pro"ramas eLemp,o deste tutoria, )oram es$ritos e $ompi,ados numa p,ata)orma UindoZsK3? e rodaram per)eitamente Xuando simp,esmente $opiados para uma p,ata)orma So,aris 4#6# Em Java um inteiro por eLemp,o, tem sempre 64 &its, independentemente da arXuitetura# O prOprio $ompi,ador Java ! es$rito em Java, de modo Xue e,e ! portMRe, para Xua,Xuer sistema Xue possua o interpretador de 7&.teK$odes8# 1m eLemp,o de pro"rama es$rito em Java ! o &roZser hot!ava#
"

O',*2-&.& & O@A*-0)/ A porta&i,idade ! uma das $ara$ter+sti$as Xue se in$,ui nos o&jetiRos a,mejados por uma ,in"ua"em orientada a o&jetos# Em Java e,a )oi o&tida de maneira inoRadora $om re,ao ao "rupo atua, de ,in"ua"ens orientadas a o&jetos# Java suporta 0erana, mas no 0erana mQ,tip,a# A ausVn$ia de 0erana mQ,tip,a pode ser $ompensada pe,o uso de 0erana e inter)a$es, onde uma $,asse 0erda o $omportamento de sua super$,asse a,!m de o)ere$er uma imp,ementao para uma ou mais inter)a$es# Java permite a $riao de $,asses a&stratas# Outra $ara$ter+sti$a importante em ,in"ua"ens orientadas a o&jetos ! a se"urana# *ada a sua importYn$ia o tOpi$o )oi es$rito a parte# S*+B'&/ A presena de $o,eta automMti$a de ,iLo, eRita erros $omuns Xue os pro"ramadores $ometem Xuando so o&ri"ados a "eren$iar diretamente a memOria GC , C]], (as$a, H# A e,iminao do uso de ponteiros, em )aRor do uso de Retores, o&jetos e outras estruturas su&stitutiRas traP &ene)+$ios em termos de se"urana# O pro"ramador ! proi&ido de o&ter a$esso a memOria Xue no perten$e ao seu pro"rama, a,!m de no ter $0an$es de $ometer erros $omuns tais $omo 7re)eren$e a,iasin"8 e uso indeRido de aritm!ti$a de ponteiros# Estas medidas so parti$u,armente Qteis Xuando pensarmos em ap,i$aWes $omer$iais desenRo,Ridas para a internet# Ser 7stron",. t.ped8 tam&!m ! uma Ranta"em em termos de se"urana, Xue estM a,iada a e,iminao de $onRersWes imp,+$itas de tipos de C]]# A presena de me$anismos de tratamento de eL$eWes torna as ap,i$aWes mais ro&ustas, no permitindo Xue e,as a&ortem, mesmo Xuando rodando so& $ondiWes anormais# O tratamento de eL$eWes serM Qti, na se"unda parte para mode,ar situaWes tais $omo )a,0as de transmisso e )ormatos in$ompat+Reis de arXuiRos# SB=0'-& (02(0''C2(,&/ A ,in"ua"em permite a $riao de maneira )M$i,, de RMrios 7t0reads8 de eLe$uo# Este tOpi$o serM Qti, Xuando Ro$V estudar animaWes, e ! parti$u,armente poderoso nos am&ientes em Xue ap,i$aWes Java so suportadas, am&ientes estes Xue "era,mente podem mapear os t0reads da ,in"ua"em em pro$essamento para,e,o rea,# E4,(,*2-*/ Como Java )oi $riada para ser usada em $omputadores peXuenos, e,a eLi"e pou$o espao, pou$a memOria# Java ! muito mais e)i$iente Xue "rande parte das ,in"ua"ens de 7s$riptin"8 eListentes, em&ora seja $er$a de 4B RePes mais ,enta Xue C, o Xue no ! um mar$o de)initiRo# Com a eRo,uo da ,in"ua"em, sero $riados "eradores de 7&.teK$odes8 $ada ReP mais otimiPados Xue traro as mar$as de per)orman$e da ,in"ua"em mais prOLimas das de C]] e C# A,!m disso um dia Java permitirM a possi&i,idade de "erar $Odi"o eLe$utMRe, de uma parti$u,ar arXuitetura 7on t0e ),.8, tudo a partir do 7&.teK$ode8# SB=0'-* =&'& ='0+'&;&D30 .* ),)-*;&) .,)-',@BE.0)/ Java )orne$e )a$i,idades para pro"ramao $om so$Sets, remote met0od $a,,, t$pKip, et$# Estes tOpi$os no sero a&ordados neste teLto#

PRO$RAMA!O ORIENTADA A OBJETOS


NOTA AOS PRO$RAMADORES "C% A ,eitura deste 0iperteLto ! )ortemente re$omendada para os pro"ramadores Xue tem 7C8 ou 8C]]8 $omo sua prin$ipa, ,in"ua"em de pro"ramao, mesmo antes de ini$iar a ,eitura deste tutoria,' http://www.dcc.unicamp.br/~aacesta/!ava/$roup.html %&li'ue em brewin$ Java tutorial( 7*OUN2OA* #B+*U%&8 JavaL A TB<9+%'(-1 U: <B<9+%'( C* Java PB* ,*8B* 9 *,<%(9 C9 (%E+9 %&%=%'( ,9H+* #C-1 8
7BROUSERS8 *,=+%<9 D9+ 4*+&%8S'& Y R%<=S%* ZZ2[[1 ; ' +*$*+K&=%' HJ,%=' D'+' *,<* <*Q<9. C9H+* D+%&=%D'(:*&<* ,%&<'Q* C* (99D, * 9B<+9, ',,B&<9, $J=*%, &G9 'H9+C'C9, 'PB%.

Ini$iaremos $om um pouXuin0o de teoria so&re orientao a o&jetos# Se Ro$V Xuiser a,"um 0iperteLto para apro)undamento ou para ,er em para,e,o $om esta introduo so&re $,asses e o&jetos e use' http://www.dcc.unicamp.br/~aacesta/!ava/$roup.html
7T1TORIAIS8 #E,<' ; ' S9:*D'8* C9 8+BD9 C* *,<BC9, *: Java-. V9=K E'% *&=9&<+'+ (%&R, '<B'(%)'C9, D'+' C%E*+,9, (B8'+*, &' %&<*+&*< 9&C* ,* *,<BC' 2'E'.

1.

CLASSES E OBJETOS

1ma $,asse ! um tipo de)inido pe,o usuMrio Xue $ont!m o mo,de, a espe$i)i$ao para os o&jetos, a,"o mais ou menos $omo o tipo inteiro $ont!m o mo,de para as RariMReis de$,aradas $omo inteiros# A $,asse enRo,Re, asso$ia, )unWes e dados, $ontro,ando o a$esso a estes, de)in+K,a imp,i$a em espe$i)i$ar os seus atri&utos GdadosH e seus m!todos G)unWesH# 1m pro"rama Xue uti,iPa uma inter)a$e $ontro,adora de um motor e,!tri$o proRaRe,mente de)iniria a $,asse motor# Os atri&utos desta $,asse seriam' temperatura, Re,o$idade, tenso ap,i$ada# Estes proRaRe,mente seriam representados na $,asse por tipos $omo int ou float# Os m!todos desta $,asse seriam )unWes para a,terar a Re,o$idade, ,er a temperatura, et$# 1m pro"rama editor de teLtos de)iniria a $,asse parM"ra)o Xue teria $omo um de seus atri&utos uma )trin$ ou um Retor de )trin$s, e $omo m!todos, )unWes Xue operam so&re estas strin"s# Euando um noRo parM"ra)o ! di"itado no teLto, o editor $ria a partir da $,asse *ar+$rafo um o&jeto $ontendo as in)ormaWes parti$u,ares do noRo teLto# Isto se $0ama instan$iao ou $riao do o&jeto# 1.1. ESPECIFICANDO 7MA CLASSE

Supon0a um pro"rama Xue $ontro,a um motor e,!tri$o atraR!s de uma sa+da seria,# A Re,o$idade do motor ! propor$iona, a tenso ap,i$ada e esta propor$iona, aos &its Xue Ro para sa+da seria, e passam por um $onRersor di"ita, ana,O"i$o# 5amos a&strair todos estes deta,0es por enXuanto e mode,ar somente a inter)a$e do motor $omo uma $,asse, a per"unta ! Xue m!todos e Xue atri&utos deRe ter nossa $,asse, Xue ar"umentos e Ra,ores de retorno deRem ter os m!todos^ R*='*)*2-&D30 .& ?*>0(,.&.*/ A Re,o$idade do motor serM representada por um atri&uto inteiro G intH# 1saremos a )aiLa de &its Xue pre$isarmos, $aso o Ra,or de &its ne$essMrio no possa ser )orne$ido pe,o tipo , usaremos ento o tipo lon$, isto depende do $onRersor di"ita, ana,O"i$o uti,iPado#
,

R*='*)*2-&D30 .& )&E.& )*',&>/ O motor pre$isa $on0e$er a sua sa+da seria,, a sua ,i"ao $om o 7motor do mundo rea,8# Supon0a uma representao em 0eLade$ima, do atri&uto endereo de porta seria,, um poss+Re, nome para o atri&uto : enderecomotor# No se preo$upe em sa&er $omo usar a representao 0eLade$ima,# A>-*'&D30 .0 ?&>0' .& ?*>0(,.&.*/ Internamente o usuMrio da $,asse motor pode desejar a,terar a Re,o$idade, $riaKse ento o m!todo' public void altera-velocidade%int novav(. # O $Odi"o anterior $orresponde ao $a&ea,0o do m!todo e,e ! de)inido junto $om a $,asse motor, asso$iado a e,a# O Ra,or de retorno da )uno Xue 7imp,ementa8 o m!todo ! void, poderia ser $riado um Ra,or de retorno G booleanH Xue indi$asse se o Ra,or de Re,o$idade era permitido e )oi a,terado ou no era permitido e portanto no )oi a,terado# O ato de inRo$ar um m!todo tam&!m ! $0amado de passar uma mensa"em para o o&jeto Xue estM eLe$utando este m!todo# No )aP sentido usar, $0amar, este m!todo separado de uma RariMRe, do tipo motor, mas ento porXue na ,ista de ar"umentos da )uno no se en$ontra um motor^ Este pensamento re),ete a maneira de asso$iar dados e $Odi"o G)unWesH das ,in"ua"ens pro$edurais# Em ,in"ua"ens orientadas a o&jetos o $Odi"o e os dados so ,i"ados de )orma di)erente, a prOpria de$,arao de um tipo de)inido pe,o usuMrio jM en",o&a as de$,araWes das )unWes inerentes a este tipo, isto serM eLp,i$ado em 1#4# O o&jeto ao Xua, ! ap,i$ado o m!todo ! passado de outra )orma# Note Xue no )orne$emos o $Odi"o do m!todo, isto no ! importante, por 0ora a preo$upao ! $om a inter)a$e de)inida pe,a $,asse' seus $a&ea,0os de m!todos e atri&utos# Apenas pense Xue sua inter)a$e deRe ser ),eL+Re, de modo a no apresentar entraRes para a $riao do $Odi"o Xue seria )eita numa outra etapa# Nesta etapa ter+amos Xue ima"inar Xue o Ra,or num!ri$o da Re,o$idade deRe ir para o $onRersor onde irM se trans)ormar numa di)erena de poten$ia, a ser ap,i$ada nos terminais do motor, et$# 7; .,&+'&;& ),;=>,4,(&.0 .& (>&))* ;0-0' (0; 0) &-',@B-0) * ;F-0.0)/

Este e outros dia"ramas deste teLto )oram e,a&orados $om uma )erramenta $ase para 7o&je$t oriented mode,in" and desi"n8 se"undo a metodo,o"ia des$rita em __1``

EG*'(E(,0)/ 1H 2em&reKse de a,"um pro"rama em Xue Ro$V tra&a,0ou, $ite Xue tipos de $,asses seriam $riadas se esse pro"rama )osse es$rito em Java, Xue atri&utos e Xue m!todos estariam asso$iados a esses o&jetos^ EG*;=>0/ 7Eu tra&a,0ei em um pro"rama de $ontas a pa"ar e $ontas a re$e&er# Se esse pro"rama )osse es$rito em Java eu de)iniria a $,asse conta-bancaria # Os atri&utos seriam' saldo, ta/a-de-!uros, limite-de-sa'ue, et$# -in0a opo seria por representMK,os $omo RariMReis do tipo double Gno se preo$upe em usar os tipos da ,in"ua"em inda (8# 7*entre os m!todos desta $,asse estariam )unWes para e)etuar saXues, depOsitos e $omputar juros#8
01

1.2.

OBJETOS EM JAVA

O&jetos so instYn$ias de uma $,asse# Euando um o&jeto ! $riado e,e pre$isa ser ini$ia,iPado, ou seja para uma Qni$a $,asse de nome 2studante3e4raduacao podemos ter RMrios o&jetos durante a eLe$uo de um pro"rama# Estudante de "raduao Andrea Identi)i$ao ,41"0#a Curso &omputacao b Estudante de "raduao 5ui6a , Identi)i$ao #,324,, Curso 7edicina ### A $,asse representa somente o mo,de para a $riao dos o&jetos, estes sim $ont!m in)ormao, Reja tOpi$o C2ASSES E OBJETOS# O atri&uto Identi)i$ao tem Ra,or 3 B:1@ para a instYn$ia Go&jetoH Andr! da $,asse Estudantes de <raduao# INSTANCIASL U: 9HI*<9 *Q%,<*&<* CB+'&<* B: :9:*&<9 C' *Q*=BFG9 C* B: D+98+':' ; B:'
%&,<'&=%' C* B:' =(',,*.

1ma $,asse e suas instan$ias'

Cada estudante Gou instan$iaH poderia ser mode,ado, desen0ado $omo'

O&jetos podem $onter o&jetos, ou seja os atri&utos de um o&jeto podem ser o&jetos, da mesma $,asse ou no# O&jetos podem ser passados pe,a rede, armaPenados em meio )+si$o# O&jetos possuem um estado e um $omportamento# -!todos podem re$e&er o&jetos $omo ar"umentos, podem de$,arar o&jetos $omo RariMReis ,o$ais, podem $0amar outros m!todos# 5o$V pode $0amar um m!todo Gmandar uma mensa"emH para o&jetos em outras mMXuinas atraR!s de sua rede# 1m o&jeto pode ser Risto $omo um RECOR*, sO Xue $om uma ta&e,a de )unWes Xue podem ser $0amadas para e,e# Na Rerdade esta de)inio no ! muito teOri$a, mas ! um &om $omeo para os pro"ramadores Xue esto a$ostumados $om ,in"ua"ens pro$edurais# Na Rerdade podemos )aPer $om o&jetos muito mais do Xue )aPemos $om re$ords e pro$edimentos em (as$a,# Em Java, ao $ontrMrio de C]] e -odu,aK6, no eListem )unWes desRin$u,adas de $,asses, )unWes iso,adas# Isto imp,i$a Xue todo tre$0o de $Odi"o Xue )or es$rito deRe perten$er a uma $,asse, mais pre$isamente deRe ser um m!todo desta# O pro"rama mais simp,es em Java deRe $onter pe,o menos uma $,asse e um m!todo de in+$io de pro"rama, e ! este pro"rama Xue )aremos a"ora# Esta )i,oso)ia ! simp,es e seme,0ante a adotada em Ei))e,, tudo o Xue se pode )aPer $om pro$edimentos, )unWes iso,adas e RariMReis de pro$edimentos, tam&!m se pode )aPer $om $,asses e m!todos# C]] tin0a Xue permitir a $riao de )unWes iso,adas para manter a $ompati&i,idade $om 7C8, mas Java no# Euando neste teLto usarmos o termo )uno no ,u"ar de m!todos estaremos mais interessados em en)atiPar a parte de imp,ementao em detrimento da inter)a$e, Ro$V pensar Xue em Java toda )uno imp,ementa um m!todo de uma $,asse# O ,eitor no a$ostumado $om o paradi"ma de orientao a o&jetos, pode a$0ar estran0as as a)irmaWes a$ima, e a per"unta mais $omum neste momento !' 7-as ento $omo Ro$V sa&e aonde Rai $omear o pro"rama^8# Antes da resposta a essa per"unta, ,eia o primeiro pro"rama eLemp,o, Xue ! seme,0ante ao primeiro pro"rama em C, 7De,,o Uor,d8, presente em __4``# 1.2.1. PRO$RAMA HELLO INTERNET1 Este eLemp,o Risa apresentar um pro"rama simp,es para imprimir uma mensa"em na te,a, este proRaRe,mente serM seu primeiro pro"rama em JaRa#
00

COMPILANDO UM PRIMEIRO PROGRAMA/ 1KCerti)iXueKse de ter adi$ionado a sua ,ista de pat0Ns o pat0 do $ompi,ador e interpretador Java. Javac e Java respe$tiRamente# 2KCrie o arXuiRo ao ,ado em um diretOrio Xua,Xuer G7)o,der8 para usuMrios ma$H e sa,Re $om o nome' 8ello9nternet.Java 3KC0ame o $ompi,ador Java para este arXuiRo' Javac 8ello9nternet.Java 4KSeu diretOrio deRe ter re$e&ido um noRo arXuiRo apOs essa $ompi,ao' HelloInternet.class IKC0ame o interpretador Java para este arXuiRo Gomita a eLtenso #$,ass de arXuiRoH' Java HelloInternet 6KO&serRe o resu,tado na te,a' 8ello 9nternet:

//&omentario de uma linha public class HelloInternet ; public static void main %)trin$ ar$s<=( ; )>stem.out.println%?8ello 9nternet:?(. @ @

Hello Internet!

R*)0>?*2.0 0) *?*2-B&,) ='0@>*;&)/ Compi,e este pro"rama# 5o$V pode de$idir por no prosse"uir enXuanto no $ompi,MK,o# Se Ro$V )or $omo eu, e prin$ipa,mente se tiRer di"itado tudo ao enR!s de usar 7$op. and paste8, ! &em proRMRe, Xue e,e no $ompi,e, se isto o$orrer, ,eia atentamente o pro"rama# 5o$V no esXue$eu o ponto e R+r"u,a^ E as $0aRes^ 8ellointernet $omea $om ,etra maiQs$u,a, e isso )aP di)erena1, Ro$V )oi $oerente $om a $onReno adotada de ,etras maiQs$u,as e minQs$u,as para seus identi)i$adores^ 5o$V estaRa no mesmo diretOrio de 8ello9nternet.!ava Xuando $0amou o $ompi,ador^ E Xuando $0amou o interpretador^ Tam&!m^ Se ainda no der $erto, no se desespere, ,eia as eLp,i$aWes passo a passo do pro"rama e depois re$orra a um usuMrio mais eLperiente# Norma,mente a Java ! muito )M$i, de se pro"ramar, e Ro$V pre$isarM de pou$a ajuda, o seu interesse o )arM $ada ReP mais )ami,iar $om esta ,in"ua"em# EG=>,(&D30 =&))0 & =&))0 .0 ='0+'&;& *G*;=>0/ //&omentario de uma linha ComentMrios em Java se"uem a mesma sintaLe de C]], 7TT8 ini$ia uma ,in0a de $omentMrio, todo o restante da ,in0a ! i"norado# EListe tam&!m um outro tipo de $omentMrio )ormado por /A 9nsira a'ui o te/to a ser i$norado A/ , este tipo de $omentMrio pode ser inter$a,ado em uma ,in0a de $Odi"o# ComentMrios so tratados $omo espaos em &ran$o# public class 8ello9nternet ; class ! a pa,aRra reserRada Xue mar$a o ini$io da de$,arao de uma $,asse# *ublic ! um espe$i)i$ador, por enXuanto "uarde public class $omo o in+$io da de$,arao de uma $,asse# Toda $,asses sero de$,aradas assim at! o tOpi$o ENCA(S12A-ENTO *E ATRIB1TOS E -ATO*OS CO- (AC>A<ESENCA(S12A-ENTO *E C2ASSES CO- (AC>A<ES# 8ello9nternet A o nome dado a esta $,asse# O 7a&re $0aRes8 mar$a o in+$io das de$,araWes da $,asse Xue so os atri&utos e m!todos# Esta $,asse sO possui uma de$,arao, a do m!todo main, note Xue um
1

Identi)i$adores em ,etras maiQs$u,as e minQs$u,as so di)erentes, a ,in"ua"em ! 7$aseKsensitiRe8# 02

m!todo, ao $ontrMrio de C]], sO pode ser de$,arado cinternamented a $,asse a Xua, perten$e, eRitando as $on)usWes so&re 7es$opo8# *esta )orma, todo pedao de $Odi"o em Java deRe perten$er ao a&re $0aRes, )e$0a $0aRes da de)inio de uma $,asse# public static void main %)trin$ ar$s<=( ; )>stem.out.println%?8ello 9nternet:?(. @ public A um Xua,i)i$ador do m!todo Xue indi$a Xue este ! a$ess+Re, eLternamente a esta $,asse Gpara outras $,asses Xue eRentua,mente seriam $riadasH, no se preo$upe $om e,e a"ora, apenas de$,are todos os m!todos $omo public# 5o,taremos a este assunto em 1#?# ENCA(S12AN*O -ATO*OS E ATRIB1TOS static A um outro Xua,i)i$ador ou 7spe$i)ier8, Xue indi$a Xue o m!todo deRe ser $omparti,0ado por todos os o&jetos Xue so $riados a partir desta $,asse# Os m!todos static podem ser inRo$ados, mesmo Xuando no )oi $riado nen0um o&jeto para a $,asse, para ta, deReKse se"uir a sintaLe: BCome&lasseD.BComemetodo)taticD%ar$umentos(.. Retornaremos a esta eLp,i$ao mais tarde, por 0ora Ro$V pre$isa sa&er Xue parti$u,armente o m!todo main pre$isa ter essa Xua,i)i$ao porXue e,e ! $0amado sem Xue se $rie nen0um o&jeto de sua $,asse Ga $,asse 8ello9nternetH# CB',0),.&.*/ Se Ro$V "osta de paradoLos e jM $on0e$e um pou$o de orientao a o&jetos, pense Xue se o m!todo main tiResse Xue ser $0amado para um o&jeto Go Xue no ! o $asoH este o&jeto teria Xue ter sido $riado em a,"um outro ,u"ar ento este ,u"ar seria o in+$io do pro"rama e main0 deiLaria de ter esta )ina,idade# A ,in"ua"em de pro"ramao Ei))e, adota uma t!$ni$a di)erente para reso,Rer este pro&,ema' todo pro"rama $omea $om a $riao de um o&jeto Ge no mais a $0amada automMti$a de mainH, este o&jeto ! $0amado ROOT, e,e pode $onter atri&utos Xue so ini$ia,iPados e um m!todo de ini$ia,iPao, $onstrutor do o&jeto, Xue ! o in+$io do $Odi"o do pro"rama# void Seme,0ante ao void C]] ou C, ! o Ra,or de retorno da )uno, Xuando a )uno no retorna nen0um Ra,or e,a retorna void, uma esp!$ie de Ra,or RaPio Xue tem Xue ser espe$i)i$ado# main Este ! um nome parti$u,ar de m!todo Xue indi$a para o $ompi,ador o in+$io do pro"rama, ! dentro deste m!todo e atraR!s das iteraWes entre os atri&utos, RariMReis e ar"umentos Ris+Reis ne,e Xue o pro"rama se desenRo,Re# %)trin$ ar$s<=( A o ar"umento de main e por $onseXuVn$ia do pro"rama todo, e,e ! um Retor de Strin"s Xue ! )ormado Xuando so passados ou no ar"umentos atraR!s da inRo$ao do nome do pro"rama na ,in0a de $omando do sistema opera$iona,, eLemp,o' Java 8ello9nternet ar$umentote/to0 ar$umentote/to2 No nosso $aso, i"noramos a poss+Re, passa"em de ar"umentos Ria ,in0a de $omando, retornaremos a este assunto em 1#6# c
1

###

main, do in",Vs' (rin$ipa,# 03

7A&re $0aRes8 e 7)e$0a $0aRes8# (ara Xuem no $on0e$e C ou C]], e,es podem ser entendidos $omo a,"o seme,0ante ao E249C 2C3 de (as$a, ou -odu,aK6, ou seja' de,imitam um &,o$o de $Odi"o# Os pro"ramadores (as$a, notaro Xue RariMReis ,o$ais dos m!todos podem ser de$,aradas em Xua,Xuer ,o$a, entre as $0aRes# -as por motiRos de $,arePa do $Odi"o de$,araremos todas no in+$io do a&re $0aRes# )>stem.out.println%?8ello 9nternet:?(. C0amada do m!todo println para o atri&uto out da $,asse ou o&jeto )>stem, o ar"umento ! uma $onstante do tipo Strin$# println assim $omo writeln de (as$a,, imprime a )trin$ e posi$iona o $ursor na ,in0a a&aiLo , ana,o"amente print no aRana ,in0a# (or 0ora Ro$V pode "uardar esta ,in0a de $Odi"o $omo o $omando para imprimir mensa"ens na te,a, onde o ar"umento Xue Rem entre aspas ! a )trin$ a ser impressa# O a 7ponto e R+r"u,a8 separa operaWes# d /ina,mente o )e$0a $0aRes termina $om a de$,arao da $,asse 8ello9nternet#

C02(>B)30/ Norma,mente o Ro,ume de $on$eitos presentes num primeiro pro"rama de uma ,in"ua"em orientada a o&jetos $omo Java ou Ei))e, ! "rande se $omparado $om o de um primeiro pro"rama em C ou (as$a,# Esses $on$eitos ainda sero apro)undados e so $itados aXui apenas por $uriosidade, ! norma, Xue Ro$V no ten0a entendido tudo# *e a"ora em diante no eLp,i$aremos mais $omo $ompi,ar os pro"ramas# EG*'(E(,0)/ 1H ELperimente )aPer modi)i$aWes no pro"rama 8ello9nternet# Imprima outras mensa"ens na te,a, adi$ione $omentMrios# 1.2.2. ATRIB7TOS No pro"rama anterior, no o&serRamos a $riao de nen0um o&jeto, apenas a de$,arao da $,asse 8ello9nternet Xue $ontin0a o m!todo main# O nosso pro"rama )un$ionou, porXue o m!todo main no pre$isa de um o&jeto espe$+)i$o para ser inRo$ado# Este eLemp,o de$,ara uma $,asse G&irculoH e em se"uida $ria um o&jeto deste tipo em main e a,tera o $onteQdo desta RariMRe,# 1ma $,asse ! pare$ida $om um re$ord de (as$a,, a nossa representa um $+r$u,o $om os atri&utos raio e / , >, Xue so $oordenadas $artesianas# Note Xue este o&jeto no possui m!todos ainda# A $,asse $+r$u,o ! espe$i)i$ada em um arXuiRo separado do arXuiRo da $,asse Xue $ont!m o m!todo main Gin+$io do pro"ramaH, um arXuiRo neste teLto ! representado pe,o retYn"u,o enRo,Rendo um tre$0o de $Odi"o, at! o tOpi$o ENCA(S12A-ENTO *E C2ASSES CO(AC>A<ES $ada $,asse serM espe$i)i$ada em um arXuiRo# A importante entender este eLemp,o, Xuando Ro$V estudar inter)a$es "rM)i$as, poderM usar a $,asse $+r$u,o pr!Kde)inida na ,in"ua"em para desen0ar $+r$u,os Xue se moRem na te,a# Em&ora no ten0amos eLp,i$ado $om deta,0es os tipos &Msi$os da ,in"ua"em, usaremos neste eLemp,o o tipo float Grea,H, e nas eLp,i$aWes o tipo )trin$ e o tipo int GinteiroH# No )ina, deste tOpi$o )orne$eremos uma eLp,i$ao deta,0ada so&re tipos#

04

//&lasse circuloF ar'uivo &irculo.Java public class &irculo ; //so atributos entre as chaves publi !lo"t r"io# $$"tributo r"io %o ir ulo publi !lo"t &# //posicoes em coordenadas cartesianas publi !lo"t '# @

05

//&lasse principalF Ar'uivo *rincipal.Java public class *rincipal ; public static void main%)trin$ ar$s<=( ; Cir ulo u( ir # //declaracao de uma variavel circulo no metodo main. u( ir )ne* Cir ulo+,# $$"lo " "o %e--" ."ri".el )>stem.out.println%?%?G u( ir .&G?F?Gu( ir .'G?F?Gu( ir .r"ioG?(?(. u( ir .&)u( ir .&/10# )>stem.out.println%?%?G u( ir .&G?F?Gu( ir .'G?F?Gu( ir .r"ioG?(?(. @ @ %1F1F1( %0"F1F1(

P0'JB* 0) ;&-*;5-,(0) 230 +0)-&; .* C, C<<, J"." * B&),(/ A de$,arao umcirc./Humcirc./G0" presente em nosso pro"rama deiLa os matemMti$os doidos pois de Ro$V su&trair umcirc./ de $ada um dos ,ados da 7i"ua,dade8 a eLpresso se torna 1H0"# O$orre Xue e no ! o operador de teste de i"ua,dade e sim de atri&uio, e,e tem a mesma )uno do 'e de (as$a, a Xua, os matemMti$os adoram# O operador de teste de i"ua,dade em Java ! ' HH M&,) )0@'* &'JB,?0)/ Como pode ser o&serRado, $ada arXuiRo teLto do pro"rama estM enRo,Rido em uma mo,dura retan"u,ar# Neste $aso as duas $,asses $riadas' &irculo e *rincipal , esto em arXuiRos separados# A seXuVn$ia de a,teraWes em seu diretOrio ou )o,der !' I2,(,0/ A=K) J"." A-Du"-Junt"-.J"."/

O $ompi,ador deRe ser $0amado para am&os arXuiRos# Ou Ro$V pode usar os $0amados 7Zi,d$ards81 !avac A.!ava# S*; I2(>B.*)/ Se Ro$V jM pro"rama em a,"uma outra ,in"ua"em proRaRe,mente deRe estar $om a se"uinte dQRida' 75o$Vs usaram o nome da $,asse &irculo na $,asse *rincipal , am&as esto em arXuiRos
Ui,dKCard, do in",Vs' Corin"a , $arta de &ara,0o# O f su&stitui os nomes de todos os arXuiRos, assim $omo o $orin"a pode sus&tituir todas as $artas em jo"os de &ara,0o# 06
1

separados, $omo o $ompi,ador sa&e em Xue diretOrio estM a $,asse &irculo ^ No ! pre$iso )aPer uma esp!$ie de in$,ude para poder usar a $,asse &irculo em outro arXuiRo^8 A resposta ! no# O $ompi,ador sa&e a$0ar se e,a estiRer so& o diretOrio de seu pro"rama# Se Ro$V tiRer Xue deiLar esta $,asse em outro diretOrio ento e,a deRe )aPer parte de um pa$Sa"e e Ro$V terM Xue importar eLp,i$itamente este pa$Sa"e, Reremos $omo )aPVK,o mais tarde# C>&))* Cir ulo * .*(>&'&D30 .* &-',@B-0)/ O primeiro arXuiRo deste eLemp,o $ont!m o $Odi"o da $,asse &irculo, esta $,asse $ont!m trVs atri&utos # A de$,arao de atri&utos se"ue sintaLe seme,0ante a de C]] G0aRero a$r!s$imos a esta sintaLeH' 2specificador7odoAcesso ComeIipo ComeAtributo. public float raio. public float /. public float >. Todos os atri&utos perten$entes a $,asse so do tipo float G(onto ),utuante 64K&it IEEE:? , Reja ta&e,a de tipos &Msi$osH# Esto espe$i)i$ados $omo public o Xue si"ni)i$a Xue podem ser modi)i$ados a partir de uma $,asse Xue usa um o&jeto &irculo seja $omo RariMRe, de m!todo ou $omo atri&uto Geste tipo de modi)i$ao serM eLemp,i)i$ado na $,asse *rincipal H# EListem outros espe$i)i$adores Xue a&ordaremos mais adiante, por 0ora todos os m!todos e atri&utos Xue $riarmos deRero ser public# 5a,e ,em&rar Xue na de$,arao de RariMReis simp,es em m!todos, no )aP sentido usar o 2specificador7odoAcesso. Esta $,asse &irculo no possui m!todos# Como eLemp,o de de$,arao de RariMReis simp,es tome a de$,arao de uma RariMRe, Cir$u,o no m!todo main# Se"uida de sua a,o$ao' u( ir )ne* Cir ulo+,# $$"lo " "o %e--" ."ri".el. Sem a a,o$ao a RariMRe, no pode ser usada# Note Xue os atri&utos so por de)au,t ini$ia,iPados para Pero# C>&))* P',2(,=&> .*(>&'&D30 * ,2,(,&>,L&D30 .* &-',@B-0)/ A $,asse *rincipal no possui atri&utos, porXue nen0um o&jeto desta $,asse ! $riado, apenas seu m!todo main ! $0amado# O m!todo main de$,ara uma re)erVn$ia para o&jeto da $,asse &irculo' &irculo umcirc.# Note Xue di)erentemente de C]] no so ne$essMrios 7in$,udes8 ou 70eader )i,es8 para poder de$,arar essa RariMRe, de um 7tipo8 de)inido pe,o usuMrio e eListente em outro arXuiRo# Antes da re)erVn$ia ao o&jeto ser usada, este pre$isa ser a,o$ado na memOria o Xue ! )eito atraR!s de umcircHnew &irculo%(.. Se Ro$V tiResse de$,arado um o&jeto da $,asse )trin$, jM de)inida na ,in"ua"em, e depois )iPesse sua a,o$ao, o $Odi"o seria seme,0ante ao se"uinte' )trin$ umastrin$. umastrin$Hnew )trin$%J alor inicialK(. A di)erena $om a a,o$ao do o&jeto &irculo ! Xue entre os parVnteses in$,uem um ar"umento 75a,or ini$ia,8, isto o$orre porXue a ,in"ua"em permite Xue Ro$V aproReite a a,o$ao de um o&jeto para ini$ia,iPar a,"uns de seus atri&utos, isto serM eLp,i$ado em 1#4#C#CONSTR1TORES# Neste nosso pro"rama, os atri&utos $ontidos na Mrea de memOria a,o$ada por new, so a,terados de outra )orma# C0>*-& &B-0;5-,(& .* >,G0/ A desa,o$ao do o&jeto ! )eita pe,a ,in"ua"em, G7automati$ "ar&a"e $o,,e$tion8H, Ro$V no pre$isa se preo$upar $om e,a# ApOs o )e$0a $0aRes de main, a memOria do o&jeto umcirc jM pode ser ,i&erada, o Xue norma,mente no o$orre de imediato, pois o am&iente da ,in"ua"em eLe$uta um 7tread8 em &aiLa prioridade Xue ,i&era de tempos em tempos os espaos inuti,iPados de memOria,
0"

tirando proReito por eLemp,o de eRentuais pausas de iterao do usuMrio $om o pro"rama# (or eLe$utar em um 7tread8 entenda para,e,amente ou Xuase para,e,amente, Ro,taremos a este tOpi$o mais adiante# A(*))0 &0) &-',@B-0) * ;F-0.0) * &>-*'&DM*) .0) &-',@B-0)/ O a$esso aos atri&utos da RariMRe, Go&jetoH umcirc deRe ser )eito usando o nome do o&jeto e o nome do atri&uto deste, separados por um ponto' umcirc.raioH01.1. # Note Xue raio soPin0o no )aP sentido no pro"rama, pre$isaKse espe$i)i$ar de Xue o&jeto se deseja a,terar ou o&ter o raio# A sintaLe de $0amadas de m!todos ! seme,0ante a sintaLe des$rita a$ima, sO Xue ao enR!s de nome do atri&uto temos o nome do m!todo se"uido dos parVnteses Xue podem $onter Pero ou mais ar"umentos# 5o,te ao primeiro pro"rama G 8ello9nternetH e Reri)iXue a de$,arao do m!todo mainF onde $0amamos o m!todo println%( para o o&jeto )>stem.out . I;=',;,2.0 ?&',5?*,) .0 -,=0 !lo"t * ,2-*,'0 NintO 2& -*>&/ )>stem.out.println%?%?Gumcirc./G?F?Gumcirc.>G?F?Gumcirc.raioG?(?(. O ar"umento de println Xue $on0e$emos ! uma Qni$a RariMRe, do tipo )trin$, no entanto o $Odi"o a$ima mistura nos ar"umentos desse m!todo os se"uintes e,ementos' )trin$s: J%J, operadores ' G, e RariMReis float' umcirc.># /i$a muito )M$i, de Ro$V entender porXue isto )un$iona se pensar Xue ] ! tam&!m operador de $on$atenao de )trin$s e Xue os ar"umentos int ou float e de outros tipos &Msi$os desse m!todo so $onRertidos para )trin$s. I;=0'-&2-* &0) JB* 230 ='0+'&;&; *; C 0B C<<, 0) 0=*'&.0'*) ) * ))/ Em Java, C, e C]] o operador e Gi"ua,H tem a )uno de atri&uio e o operador HH Gi"ua, i"ua,H tem a )uno de $omparao entre Ra,ores, retornando o Ra,or &oo,eano Rerdadeiro se estes Ra,ores )orem idVnti$os# A,"uns podem no a$0ar esta es$o,0a de operadores sensata, prin$ipa,mente os matemMti$os, mas $om um pou$o de uso da ,in"ua"em e,a se tornarM automMti$a# C7RIOSIDADE N)K =&'& ='0+'&;&.0'*) C * C<<O, *>,;,2&D30 .0 ='0@>*;& JB* 0(0''* *; C * C<< (0; 0) 0=*'&.0'*) P * PP / Em C, C]] e tam&!m em Java ! permitido es$reRer' int iF!FL. iH1. !HLHiG3. //finalF ! vale 3F L vale 3 e i continua valendo 1 Essas atri&uiWes em $adeia permitem es$reRer $Odi"o mais $ompa$to, e,as )aPem sentido porXue atri&uiWes nessas ,in"ua"ens possuem Ra,ores, assim LHiG3a no )ina, tem o Ra,or de L Xue ! i"ua, a iG3# O Ra,or de !H... #no nosso eLemp,o ! des$artado, i"norado pois no 0M nada a esXuerda desta atri&uio# Em C e C]] eListe um pro&,ema "raRe Xue ! )reXuentemente uma $i,ada para os pro"ramadores (as$a, e outros# O pro&,ema ! Xue nessas duas ,in"ua"ens GC e C]]H no eListe o tipo &oo,ean, no ,u"ar deste tipo ! usado o tipo int GinteiroH, onde 1 si"ni)i$a Rerdadeiro e B )a,so# Assim em C e C]] Gmas no em JavaH aHHa tem Ra,or 0 $om o si"ni)i$ado .&.0 =*>0 ='0+'&;&.0' de true ou Rerdadeiro, mas aH0G1. tam&!m tem $omo resu,tado o Ra,or 0F mas a"ora $om o si"ni)i$ado inteiro, num!ri$o# O $ompi,ador no sa&e distin"uir entre os si"ni)i$ados num!ri$o e &oo,eano# Essa am&i"uidade )aP $om Xue pro"ramadores GC ou C]]H no a$ostumados $om esta $onReno de operadores H e HHF in$orram no erro de es$reRer !H0 Xuando na Rerdade Xueriam diPer !HH0, mas para o $ompi,ador am&as as eLpressWes tem Ra,or inteiro de modo Xue se esse en"ano o$orrer num teste de parada de um ,oop, pode o$orrer Xue e,e nun$a pare, pois 1 tem o mesmo Ra,or de true#
0#

Java e,imina este tipo de erro introduPindo o tipo boolean $om os Ra,ores true e false, Xue no tem nen0uma re,ao $om o tipo int e Xua,Xuer outros tipos# TIPOS B:SICOS E CONSTANTES O7 VALORES LITERAIS
Gpara nossa sorte os tipos &Msi$os so os mesmos para Xua,Xuer am&iente de pro"ramao JaRa, porXue a ,in"ua"em ! portMRe,H'

char

Cara$tere 1NICO*E 1CK&it

O tipo char G$ara$tere 1NICO*EH ! representado $om 1CK&its sem sina,, o Xue permite enderear de B a 65535# O o&jetiRo desta opo ! permitir interna$iona,iPao da ,in"ua"em, &em $omo a padroniPao# Constantes do tipo $ara$tere apare$em entre apOstro)es' gaN, g1N, ghN# T&@*>& .* (&'&(-*'*) *)=*(,&,)/ Representao Risua,' Mn Mr Mb Mt Mf MN MK MM Mu223d M$fa Mfff boolean
Gao $ontrMrio de CTC]], no eListe um $ara$tere espe$ia, para o som de &eep ou &e,, H

/uno, si"ni)i$ado' (u,a ,in0a, ,ine)eed Retorno de $arro Ba$Sspa$e Ta&u,ao /orm)eed ApOstro)e Aspas Barra inRersa Cara$tere uni$ode O$ta, DeLade$ima,

5a,or true ou false, di)erente representao de C]], sem $onRerso em outros tipos#

O tipo boolean no tem re,ao nen0uma $om outros tipos G$oeroH# E,iminando pro&,emas Xue sur"iram por eLemp,o em C]] Xue usa inteiros para representar Ra,ores &oo,eanos# Os poss+Reis Ra,ores so true e false Xue so os resu,tado dos testes ,O"i$os# boolean pertenceAo&on!unto. //declara variavel pertenceAo&on!untoHtrue. //e/emplo b>te short int lon$ Inteiro @K&it , $omp,emento de 4, )aiLa'K14@ at! 14: Inteiro 1CK&it, $omp,emento de 4, )aiLa'K64:C@ at! 64:C: Inteiro 64K&it, $omp,emento de 4, )aiLa'K41 : @6C @ at! 41 : @6C : Inteiro C K&it, $omp,# de 4, )aiLa'K34466:4B6C@? ::?@B@ at! 34466:4B6C@? ::?@B:

No eListem espe$i)i$adores de tipos $omo unsi"ned, todos os tipos 7inteiros8 tem sina,# V&>0'*) >,-*'&,)' O Xue Ro$V RV nem sempre ! o Xue Ro$V tem/ 1m Ra,or $omo 2,,",245# ! $onsiderado int $omo padro, se Ro$V Xuer atri&uir esta $onstante a um lon$, )aa o 7t.pe $ast8 eLp,i$itamente' lon$ a. aH%lon$(2,,",245#. //a recebe *9 Ou ento use uma terminao em 5 para indi$ar Xue o nQmero deRe ser representado $omo lon$' lon$ aH2,,",245#5. //ou 5 minusculo (ara indi$ar Ra,ores o$tais ante$edaKos $om um Pero' 1444 , jM para Ra,ores 0eLade$imais ante$edaKos $om 1O ou 1/, eLemp,o' 1/E&34
0,

float double

(onto ),utuante 64K&it IEEE:? (onto ),utuante C K&it IEEE:?

1m Ra,or $omo 3.0405,265 ! $onsiderado double $omo padro, se Ro$V Xuer atri&uir esta $onstante a um float, )aa o t.pe $ast eLp,i$itamente' float a. aH%float(3.0405,265. //a recebe *9 Ou ento usar uma terminao em ) para indi$ar Xue o nQmero deRe ser representado $omo float' float aH3.0405,265f //ou P maiusculo ELpoentes podem ser es$ritos usando o $ara$ter e ou E' 6F12223 ou 0.3#165#eQ23 . Onde eQ0, si"ni)i$a mu,tip,i$ado por deP e,eRado a menos 1 ou A1.0# O separador de $asas de$imais ! o ponto# Apesar de todas estas re"ras para uso de Ra,ores ,iterais, Xuando dois nQmeros de tipo di)erentes $omo double e int so usados em um $a,$u,o do ,ado direito de uma atri&uio, Ro$V no pre$isa )aPer o t.pe $ast desses Ra,ores# O $ompi,ador promoRe o nQmero do tipo mais )ra$o para o tipo mais )orte antes de )aPer o $a,$u,o# 5o$V pode desejar )aPer o t.pe $ast do resu,tado, para atri&uir a uma RariMRe, lon$ por eLemp,o# EG*'(E(,0)/ 1H Repita o mesmo eLemp,o sO Xue a"ora moRa o $+r$u,o a,terando as $omponentes L e .# Co,oXue o $+r$u,o na posio G1#B,1#BH, atraR!s de atri&uiWes do tipo acirc./H0.1. # A$ompan0e todas as modi)i$aWes do o&jeto imprimindo seus atri&utos na te,a# 2H Simp,i)iXue o pro"rama anterior retirando o atri&uto raio# 5o$V pode dar o nome de *onto ou *onto-$eometrico para esta $,asse# No se esXuea de $ompi,ar, use o $ompi,ador $omo )erramenta para Reri)i$ar se Ro$V aprendeu $orretamente a sintaLe da ,in"ua"em# 3K Rees$reRa a $,asse &irculo para tra&a,0ar $om atri&utos do tipo int# 1.2.3. ATRIB7TOS E MQTODOS Os m!todos determinam o $omportamento dos o&jetos de um $,asse# Euando um m!todo ! inRo$ado, se diP Xue o o&jeto estM re$e&endo uma mensa"em Gpara eLe$utar uma aoH# (ro"ramas $omp,eLos )ormam $onjuntos de o&jetos Xue tro$am mensa"ens entre si "eren$iando in$,usiRe os re$ursos do sistema# O pro"rama a se"uir eLemp,i)i$a $0amadas de m!todos, para ta, de)ine um o&jeto Xue serRe $omo $ontador, a imp,ementao representa a $onta"em no atri&uto num Xue ! um nQmero inteiro# Os m!todos so simp,es' incrementa adi$iona um ao $ontador em Xua,Xuer estado e comeca ini$ia,iPa a $onta"em em Pero# 3ecrementa )aP o oposto de incrementa#

//&lasse &ontadorF ar'uivo &ontador.Java public class &ontador ; public int num. //este R o atributo
21

//numero do contador publi .oi% in re(ent"+, $$in re(ent" ont"%or 1 nu()nu(/1# $$" e--o "o "tributo 2 publi .oi% %e re(ent"+, $$%e re(ent" ont"%or 1 nu()nu(31# 2 publi .oi% o(e "+int n, $$ o(e " " ont"r 1 nu()n# 2 @ //&lasse principalF Ar'uivo *rinc.Java public class *rincipal ; public static void main%)trin$ ar$s<=( ; &ontador umcont. //declaracao de atributo contador umcontHnew &ontador%(. //alocacao u( ont. o(e "+4,# )>stem.out.println%umcont.num(. u( ont.in re(ent"+,# )>stem.out.println%umcont.num(. @ @ 1 0

EG*'(E(,0)/ 1H
20

*e)ina um m!todo $0amado mostra para a $,asse $ontador# Este m!todo deRe imprimir o estado do $ontador na te,a# A imp,ementao deste m!todo depende de onde Ro$V estM imprimindo o estado do $ontador^ (ense em pro"ramas de inter)a$es "rM)i$as e de ,in0a de $omando# 2H Crie uma $,asse $ontador $+$,i$o, eLemp,o o $ontador de minutos de re,O"ios di"itais' B,1,4,###,?:,?@,?3,B,1,4,### # A operao modu,o ou resto da diRiso inteira, tem sintaLe seme,0ante a de C]]' a S bHHaQ%%int(a/b(Ab. No tente usar a estrutura de de$iso if ainda# M5JB,2&) .* *)-&.0)/ O,0ando para o desen0o $ontido no $anto direito superior do arXuiRo da C,asse $ontador, Ro$V $onse"ue ima"inar este $ontador $omo uma mMXuina de estado^ O uso de o&jetos $omo mMXuinas de estados ! um dos $on$eitos Xue eLemp,i)i$aremos deste teLto# S,2-&G* .* .*(>&'&D30 .* ;F-0.0)/ A sintaLe simp,i)i$ada para a de$,arao de m!todos de uma $,asse !' especificadordeacesso tipoderetorno nomedometodo%lista-de-ar$umentos( ; /Acodi$o A/ @. 1ma di)erena do uso de )unWes $omuns em ,in"ua"ens no orientadas a o&jetos e do uso de m!todos ! Xue $omo o m!todo estM de)inido na $,asse, e,e "an0a a$esso direto aos atri&utos, sem pre$isar usar o 7ponto8, eLemp,o um-ob!eto.atributo.. 2em&reKse Xue as $0amadas de m!todos em um pro"rama jM se re)erem a um o&jeto espe$+)i$o, em&ora os m!todos sejam de)inidos de uma )orma "era, e parametriPada para toda a $,asse# 5o,te a"ora ao m!todo main e Reri)iXue sua sintaLe# t5i-6 this ! uma pa,aRra $0aRe usada num m!todo $omo re)erVn$ia para o o&jeto $orrente, e,a tem o si"ni)i$ado de' 7o o&jeto para o Xua, este tre$0o de $Odi"o estM sendo eLe$utado8# Supon0a uma $,asse Xue possui a se"uinte de$,arao de atri&uto' public int 'ual'uer. # Se Xuisermos em um m!todo desta $,asse a,terar o atri&uto 'ual'uer para o Ra,or 3, &asta es$reRer 'ual'uerH3. , mas este $Odi"o es$rito dentro de um m!todo da $,asse Xue de$,ara 'ual'uer, ! tota,mente eXuiRa,ente a this.'ual'uerH3. , sendo o Q,timo uma opo mais $,ara e $apaP de e,iminar am&i"uidades entre os nomes dos atri&utos de uma $,asse e os nomes dos ar"umentos de um dos m!todos desta GXuando estes nomes )orem i"uaisH# O uso de this tam&!m ! RM,ido )aPer para $0amadas de m!todos para o o&jeto $orrente# S,2-&G* .* (R&;&.& 0B &(*))0 & ;F-0.0)/ A sintaLe de $0amada ou a$esso i m!todos ! seme,0ante a sintaLe de a$esso aos atri&utos, $om eL$eo dos parVnteses Xue $ont!m a ,ista de ar"umentos da )uno Xue imp,ementa o m!todo, mesmo Xue a ,ista seja RaPia e,es deRem estar presentes' umcontador.incrementa%(.. (rimeiro insereKse o nome do o&jeto e depois a $0amada da )uno, estes so separados por um ponto# Cuidado para no esXue$er os parVnteses em pro"ramas )uturos, este ! um erro &astante $omum#

N0?& ?*')30 .0 ='0+'&;& Cir ulo/


A"ora reapresentaremos o pro"rama &irculo &aseado no eLemp,o 1#4#4, por!m um pou$o mais $omp,i$ado' MF-0.0 (o.e/
22

O m!todo move a,tera as $oordenadas do o&jeto# O o&jeto tem suas $oordenadas / e > somadas $om os ar"umentos dessa )uno# Note Xue este m!todo representa uma maneira mais se"ura, $,ara, e,e"ante de a,terar as $oordenadas do o&jeto do Xue a$essMK,as diretamente da se"uinte )orma' ac./GHd/.. ac.>GHd>.. 2em&reKse Xue ac./GHd/ ! uma a&reRiao para ac./Hac./Gd/.. MF-0.0 (o-tr"/ O m!todo mostra imprime na te,a, de )orma $ompa$ta, os atri&utos do o&jeto#

23

//&lasse circulo public class &irculo ; public float raio. public float /. //posicoes em coordenadas cartesianas public float >. publi .oi% (o.e+!lo"t %&7!lo"t %', $$(o.e o ir ulo %e lu8"r 1 t5i-.&/)%&# '/)%'# 2 publi .oi% (o-tr"+, $$i(pri(e n" tel" e-t"%o %o ob9eto 1 :'-te(.out.println+;+;/&/;7;/'/;7;/r"io/;,;,# 2 @ //fim da declaracao da classe //&lasse principalF Ar'uivo *rincipal.Java class *rincipal ; public static void main%)trin$ ar$s<=( ; &irculo umcirc. //declaracao de atributo circulo umcircHnew &irculo%(. umcirc./H1. umcirc.>H1. umcirc.raioH02. u( ir .(o-tr"+,# u( ir .(o.e+14714,# u( ir .(o-tr"+,# umcirc./H011. u( ir .(o-tr"+,# @ @ %1F1F02( %01F01F02( %011F01F02(

24

C0;0 4B2(,02&; 20 (0;=,>&.0' &) (R&;&.&) .* ;F-0.0)/ A poss+Re, ima"inar Xue as de)iniWes de m!todos o$upam um "rande espao na representao interna dos o&jetos, mas ,em&reKse Xue e,as so todas i"uais para uma $,asse ento &asta manter para $ada $,asse uma ta&e,a de m!todos Xue ! $onsu,tada no momento da $0amada # Os o&jetos sO pre$isam ter uma re)erVn$ia para esta ta&e,a# EG*'(E(,0)/ 1H /aa as se"uintes modi)i$aWes no pro"rama 8ello9nternet' Adi$ione a de$,arao e ini$ia,iPao de RariMRe, )trin$ ,o"o apOs o a&re $0aRes do m!todo main' )trin$ nome'ual'uer. nome'ual'uerHnew )trin$%JTma constante do tipo strin$K(. -odi)iXue o ar"umento de println para nome'ual'uer# No use aspas em nome'ual'uer, temos uma RariMRe, a"ora# ELe$ute o pro"rama, Xua, o resu,tado^ No pro"rama deste eLemp,o, $rie um m!todo $0amado iniciali6a para a $,asse &irculo # Este m!todo deRe ter $omo ar"umentos um Ra,or para /, um para > e outro para o raio, e deRe a,terar os atri&utos ini$ia,iPandoKos $om os Ra,ores passados# 5o$V pode a&strair o uso desse m!todo $omo uma maneira de ini$ia,iPar o o&jeto de uma sO ReP em&ora isto seja )eito seXjen$ia,mente# Comente as Ranta"ens desta a&orda"em, $omparando $om as outras opWes, ten0a sempre em mente a Xuesto de se"urana Xuando aRa,iar t!$ni$as di)erentes de pro"ramao# No pro"rama anterior, Reri)iXue Xue nada impede Xue Ro$V a$esse diretamente os Ra,ores de / , > e raio e os modi)iXue, $omo a,ias )oi )eito nos eLemp,os anteriores# Como se pode $riar um nQmero enorme de m!todos ' altera-/%float a(. move-raio%float dr(. seria desejMRe, Xue somente essas )unWes pudessem modi)i$ar /, > e raio# 5o$V RerM Xue isso ! poss+Re, em en$apsu,amento 1#?# (or 0ora, $rie esses m!todos se preo$upando em permitir atraR!s $0amadas a e,es tudo o Xue )or poss+Re, )aPer $om a$esso direto aos atri&utos# Comente tam&!m as duas opWes eXuiRa,entes de imp,ementao a&aiLo Gos nomes so auto eLp,i$atiRosH, ten0a em mente o nQmero de m!todos a serem $riados para "arantir ),eLi&i,idade a $,asse' umcirculo.multiplica-atributo-/%01(. ou umcirculo.altera-atributo-/%umcirculo.retorna-atributo-/%(A01(. //chamadas aninhadas de metodos //o resultado de uma chamada compoe o ar$umento da outra 43 Teste o m!todo move $om ar"umentos ne"atiRos, eLemp,o ac.move%Q0.1FQ0.5(.. O resu,tado ! $oerente^ IH 8DM uma tendVn$ia em de)inir o maior nQmero de m!todos em uma $,asse, porXue nun$a se pode preRer eLatamente o seu uso em pro"ramas )uturos8# Comente esta )rase, tendo em Rista o $on$eito de porta&i,idade# 5o$V jM ! $apaP de $itar outras medidas Xue tornem suas $,asses mais portMReis, ),eL+Reis e "en!ri$as^ 2eia o eLer$+$io anterior e o eLer$+$io 6# 1.2.4. MQTODOS 67E RETORNAM VALORES.
25

2H

3H

At! a"ora sO 0aR+amos Risto m!todos $om Ra,or de retorno i"ua, a void# 1m m!todo, assim $omo uma )uno $omum, pode retornar um Qni$o e,emento de Xua,Xuer tipo, in$,usiRe os de)inidos pe,o usuMrio ou seja' o&jetos# Sendo assim, sua $0amada no pro"rama se ap,i$a a Xua,Xuer ,u"ar onde se espera um tipo i"ua, ou eXuiRa,ente ao tipo do seu Ra,or de retorno, seja numa ,ista de ar"umentos de outro m!todo , numa atri&uio ou num operador] em )>stem.out.println% variavel /chamada-de-metodo-'ue-retorna-valor(. C>&))* -'&?&/ O estado da traRa ! representado no atri&uto public boolean travado. e pode ser o&tido atraR!s de uma $0amada ao m!todo estado%(# Este eLemp,o ! &astante simp,es e no tem a pretenso de ser uma imp,ementao $omp,eta de uma $,asse Xue mode,e uma traRa Xue possa ser usada para eRitar o a$esso a um arXuiRo, por eLemp,o#

public class Irava ; public )trin$ 'uem. public boolean travado. public void atrave%)trin$ '( //move o circulo de lu$ar ; this.travadoHtrue. this.'uemH'. @ public void adestrave%)trin$ '( ; this.travadoHfalse. this.'uemH'. @ public boole"n estado%( //estado%true/false( do ob!eto ; return travado. @ @ //&lasse principalF Ar'uivo *rincipal.Java public class *rincipal ; public static void main%)trin$ ar$s<=( ; Irava umatrava. umatravaHnew Irava%(. umatrava.atrave%?*ro$rama*rincipal?(.
26

)>stem.out.println%umatrava.estado%((. umatrava.adestrave%?*ro$rama*rincipal?(. )>stem.out.println%umatrava.estado%((. @ @ true false

//COMEN<ARIO: A $,asse traRa ! demasiadamente simp,es, mas se no o )osse no estaria na parte introdutOria deste tutoria,# Esta $,asse a$a&a tendo a )un$iona,idade de uma RariMRe, &oo,eana e o $usto de um o&jeto, mas neste ponto $a&e a Ro$V estender este mode,o para representar uma traRa de arXuiRo GarmaPena o nome e 7pat08 desteH ou uma traRa de um o&jeto, eRitando Xue este seja a,terado# EG*'(E(,0)/ 1H -e,0ore a $,asse &ontador de ATRIB1TOS E -ATO*OS, de)ina um m!todo Xue imprime o $ontador na te,a# Se Ro$V estiResse )aPendo um pro"rama para )un$ionar em uma inter)a$e "rM)i$a $om o usuMrio este m!todo para imprimir na te,a seria o mesmo^ *e)inir um m!todo Xue retorna uma $Opia do Ra,or atua, do $ontador "arante maior porta&i,idade^ (or XuV^ (ara aprender a retornar Ra,ores $onsu,te este tOpi$o# 2H Insira um noRo m!todo na $,asse Irava Xue ten0a a )uno de a,ternar entre os estados do o&jeto, independente do estado atua, GtraRado ou destraRadoH# No use a estrutura de$iso if ainda, use o operador not Xue serRe para ne"ar um Ra,or &oo,eano' aH:valorbooleano. // :trueHHfalse ou trueHH:false. Imp,emente a $0e$a"em do estado de oRer),oZ no eLemp,o do $ontador, $onsidere o uso de um m!todo retornando um Ra,or do tipo boolean. Considere a adio de um atri&uto# 1.2.I. COMPARA!O COM 7M PRO$RAMA EM PASCAL Este eLemp,o de pro"rama em Java ! seme,0ante ao eLemp,o da $,asse &irculo de 1#4#4 ATRIB1TOS, e,e serM $omparado $om um pro"rama es$rito em (as$a,, a,!m disso introduPimos um noRo m!todo $0amado iniciali6a e m!todos public float retorna-raio%void(. e void altera-raio%float a(. iniciali6a $o,o$a o ponto nas $oordenadas passadas $omo seus ar"umentos# A introduo deste m!todo prepara a eLp,i$ao so&re $onstrutores dada no prOLimo tOpi$o' 1#4#C# (ara me,0or entendimento ,eia os eLemp,os anteriores $om a $,asse &irculo#

33

J"."/ (ro"rama eLemp,o $+r$u,o, &aseado no eLemp,o de 1#4#4 ATRIB1TOS/


//&lasse circulo public class &irculo ;
2"

public float raioF/F>. publi .oi% ini i"li="+!lo"t "&7!lo"t "'7!lo"t "r, $$8"r"nte o e-t"%o %o ob9eto 1 t5i-.&)"&# t5i-.')"'# t5i-.r"io)"r# 2 publi .oi% "lter">r"io+!lo"t ", 1 t5i-.r"io)"# 2 publi !lo"t retorn">r"io+, 1 return t5i-.r"io# 2 public void move%float d/Ffloat d>( ; this./GHd/. this.>GHd>. @ public void mostra%( ; )>stem.out.println%?%?Gthis./G?F?Gthis.>G?F?Gthis.retorna-raio%(G?(?(. @ @ //&lasse principalF Ar'uivo *rincipal.Java public class *rincipal ; public static void main%)trin$ ar$s<=( ; &irculo ac. acHnew &irculo%(. ac.iniciali6a%1F1F01(. ac.mostra%(. ac.move%0F0(. ac.mostra%(. ac./H011. ac.altera-raio%02(. ac.mostra%(. @ @ D,)=0),D30 .0) ;F-0.0) * &-',@B-0) 2& .*(>&'&D30 .* B;& (>&))*/

2#

Em uma de$,arao de uma $,asse norma,mente se $o,o$a a de$,arao de m!todos depois da de$,arao dos atri&utos, por!m podemos )aPer inter$a,aWes ou adotar Xua,Xuer ordem Xue nos $onRen0a# 1ma &oa t!$ni$a de pro"ramao, Xue a$onse,0amos Ro$V adotar em seus pro"ramas ! usar ,in0as de $omentMrios para de,imitar uma Mrea do $Odi"o de suas $,asses Xue en",o&e tudo o Xue interessa a um usuMrio desta# Nestes pro"ramas eLemp,os prati$amente tudo ! de interesse de um usuMrio G$,ienteH de sua $,asse, mas nos eLemp,os mais aRanados isto no serM Rerdade# C0;*2-5',0)/ O&serRe Xue o m!todo mostra $0ama o m!todo public float retorna-raio%void( Xue ! da mesma $,asse# /i$a $,aro da de)inio de mostra Xue this.retorna-raio%( se ap,i$a ao mesmo o&jeto instan$iado Xue re$e&eu a $0amada de mostra. Isto )oi )eito somente para reRe,ar Xue $0amadas anin0adas de m!todos tam&!m so permitidas, pois nesse $aso esta $0amada de m!todo poderia ser su&stitu+da pe,o prOprio atri&uto raio, o Xue seria mais e)i$iente# P'0+'&;&D30 0',*2-&.& & 0@A*-0) * ,2-*'4&(*) +'54,(&) (0; 0 B)B5',0/ EListem 7,i&raries8 de $,asses Xue permitem o pro"ramador C]] desenRo,Rer ap,i$aWes para am&ientes $omo o -i$roso)t UindoZsk de uma maneira &astante a&strata, este ! um eLemp,o $,aro de reuso de $Odi"o, a)ina, no ! pre$iso sa&er de deta,0es da inter)a$e para pro"ramar ne,a# Na se"unda parte )a,aremos so&re a 7Java Ap,i$ation (ro"rammin" Inter)a$e8 Xue permite pro"ramar de maneira &astante a&strata sistemas de inter)a$es "rM)i$as $om o usuMrio seja para ap,i$aWes para a internet Grodando em &roZsersH ou para sistemas $omo o UindoZs ou -a$TOs e IKUindoZs # %1F1F01( %0F0F01( %011F0F02(

Pascal:

1m pro"rama pare$ido sO Xue em Pascal:

*UV4UA7 &omparacao. ;&V7*AUA&AV &V7 T7 *UV4UA7A Java@ IW*2 &irculoHU2&VU3 /:real. ;&VVU32CA3A) O 2 W@ >:real. r:real. ;somente dados@ 2C3. var ac:circulo. leitura:inte$er. *UV&23TU2 9niciali6a%var altereme:&irculo.a/Fb>Fcr:real(. ;&V5V&A V &9U&T5V 27 32I2U79CA3A *V)9&AV@ E249C altereme./:Ha/.
2,

altereme.>:Hb>. altereme.r:Hcr. 2C3. *UV&23TU2 Altera-Uaio%var altereme:&irculo.ar:real(. ;A5I2UA V UA9V 3V &9U&T5V@ E249C altereme.r:Har. 2C3. PTC&I9VC Uetorna-Uaio%copieme:&irculo(:real. E249C Uetorna-Uaio:Hcopieme.r. 2C3. *UV&23TU2 7ove%var altereme:&irculo.d/Fd>:real(. ;7V32 A) &VVU32CA3A) O 2 W A&U2)&2CIAC3V 3O 2 3W@ E249C altereme./:Haltereme./Gd/. altereme.>:Haltereme.>Gd>. 2C3. *UV&23TU2 7ostra%copieme:&irculo(. ;7V)IUA V &9U&T5V CA I25A@ E249C writeln%XO:XFcopieme./FX W:XFcopieme.>FX U:XFcopieme.r(. 2C3. E249C ;I2)I2)@ 9niciali6a%acF1.1F1.1F01.1(. 7ostra%ac(. 7ove%acF0.1F0.1(. 7ostra%ac(. ac./:H011.1. Altera-Uaio%acF02.1(. 7ostra%ac(. read%leitura(. 2C3. O: 1.11111111112G11 W: 1.11111111112G11 U: 0.11111111112G10 O: 0.11111111112G11 W: 0.11111111112G11 U: 0.11111111112G10 O: 0.11111111112G12 W: 0.11111111112G11 U: 0.21111111112G10 $$COMEN<ARIO: JAVA6 As $,asses em Java so $ompostas de atri&utos e m!todos# (ara eLe$utar uma ao so&re o o&jeto ou re,atiRa a este &asta $0amar um m!todo ' ac.mostra%(. O m!todo no pre$isa de muitos ar"umentos, porXue ! prOprio da $,asse e portanto "an0a a$esso aos atri&utos do o&jeto para ao Xua, e,a )oi asso$iado' public float retorna-raio%void(
31

; return r"io. //tenho acesso direto a raio. @ { COMEntArios Pascal: } Em (as$a, os pro$edimentos e os dados so $riados de )orma separada, mesmo Xue sO ten0am sentido juntos# A juno entre os dados e pro$edimentos se dM atraR!s de passa"em de parYmetros# No $aso de uma ,in"ua"em pro$edura,, o Xue norma,mente ! )eito se asseme,0a ao $Odi"o se"uinte' 7ove%acF0.1F0.1(.. Nesse $aso A& ! um 7re$ord8, a,"o seme,0ante ao stru$t de C Gno C]]H# 7ove, a$essa os dados do 7re$ord8 a,terando os $ampos# O parYmetro ! passado por re)erVn$ia e o pro$edimento ! de)inido a parte do re"istro, em&ora sO sirRa para a$eitar ar"umentos do tipo &irculo e moRer suas $oordenadas# S*+B'&2D&/ Em am&os pro"ramas G(as$a,, JavaH o pro"ramador pode o&ter a$esso direto aos dados do tipo de)inido pe,o usuMrio' ac./6H011.1. G(as$a,H ou ac./H011.1. GJavaH# 5eremos em 1#? ENCA(S12A-ENTO maneiras de proi&ir este tipo de a$esso direto ao atri&uto, deiLando este ser modi)i$ado somente pe,os m!todos# Isto nos "arante maior se"urana e ,i&erdade pois podemos permitir ou no o a$esso para $ada atri&uto de a$ordo $om nossa Rontade# E4,(,C2(,&/ A,"u!m pode ar"umentar Xue pro"ramas Xue usam &astante $0amadas de m!todos podem se tornar pou$o e)i$ientes e Xue poderia ser me,0or o&ter a$esso direto aos dados de um tipo de)inido pe,o usuMrio ao enR!s de passar por todo o tra&a,0o de $Opia de ar"umentos, insero de )uno na pi,0a, et$# Em Rerdade no se perde muito em e)i$iVn$ia, por Xue ta, metodo,o"ia de pro"ramao nos ,eRa a or"aniPar o $Odi"o de maneira mais $ompa$ta# E a,!m disso muitas RePes no se deseja permitir sempre o a$esso direto aos dados de um tipo de)inido pe,o usuMrio por raPWes de se"urana# EG*'(E(,0)/ 1H Imp,emente outros m!todos do esti,o public void altera-raio%float a( e float retorna-raio%void H para os atri&utos O e W# /aa um pro"rama simp,es para testar uma $,asse Xue representa um mouse e Xue )orne$e a posio na te,a, os indi$adores de estado dos &otWes e os m!todos' clica-botao% (. move%float d/F float d>(.. No ! pre$iso )aPer a ,i"ao do o&jeto $om o mouse rea,, em&ora o ,eitor interessado possa en$ontrar na se"unda parte su&s+dios para esta tare)a# Seu mouse deRe ser $apaP de $amin0ar para Xua,Xuer ,u"ar da te,a atraR!s de $0amadas de m!todos, no deRe u,trapassar os ,imites esta&e,e$idos, deRe indi$ar o &oto estM pressionado ou no atraR!s de um m!todo seme,0ante ao mostra% ( deste eLemp,o# O mouse %e.e ter de 1 &oto# 5o$V pode su&stituir m!todo move%float d/Ffloat d>( por $om&inaWes de move-/%float d/(. e move->%float d>(. 5o$V pode a$0ar o )ato de o mouse ser o&ri"ado a ter um &oto um tanto estran0o, mas no !# Os mouses dos ma$0intos0es tVm um &oto, a,"uns mouses de p$Ns tVm dois &otWes e mouses de ZorSstations tVm trVs &otWes# (ara seu pro"rama ser portMRe, e,e deRe $ontar apenas $om a eListVn$ia de um &oto e isso Ra,e a pena Xuando se )a,a em porta&i,idade# O Xue tem sido usado em
30

2H

$asos eLtremos ! a $om&inao de pressionamento dos &otWes e pressionamento de te$,as para di)eren$iar $ertas aWes# 3H 5eri)iXue Xue em main%( Ro$V pode modi)i$ar o atri&uto / do o&jeto da $,asse &irculo da se"uinte )orma' a./H02.2. # Isto pode no ser muito Qti,, ima"ineKse $riando uma ,i&rar. Gem Java pa$Sa"eH Xue imp,ementa a $,asse &irculo e uma s!rie de m!todos re,a$ionados, por $ertas raPWes Ro$V "ostaria Xue o usuMrio se ,imitasse ao uso da inter)a$e do o&jeto, $omo )aPVK,o serM eLp,i$ado em 1#? en$apsu,amento# (or 0ora, apenas $rie m!todos Xue sirRam $omo a,ternatiRas a este tipo de a$esso direto# 1.2.6. CONSTR7TORES Construtores so m!todos espe$iais $0amados pe,o sistema no momento da $riao de um o&jeto# E,es no possuem Ra,or de retorno, porXue Ro$V no pode $0amar um $onstrutor para um o&jeto, Ro$V sO usa o $onstrutor no momento da ini$ia,iPao do o&jeto# Construtores representam uma oportunidade de ini$ia,iPar seus dados de )orma or"aniPada, ima"ine se Ro$V esXue$e de ini$ia,iPar $orretamente ou o )aP duas RePes, et$# 1m $onstrutor tem sempre o mesmo nome da $,asse a Xua, perten$e# (ara a $,asse )trin$F pr!Kde)inida na ,in"ua"em o $onstrutor tem a )orma )trin$%J&onstante do tipo )trin$K(. $om o ar"umento entre aspas Xue ! espe$i)i$ado pe,o pro"ramador# E,e seria $0amado automati$amente no momento da $riao, de$,arao de uma )trin$F sem ne$essidade de uso do nome do $onstrutor $omo m!todo, apenas dos ar"umentos' Strin$ a. aHnew )trin$%JIe/toK(. //alocacao e iniciali6acao atraves do construtor a.mostra%(. //mostra so pode ser chamada depois do construtor Nos eLemp,os anteriores tam&!m usMRamos $onstrutores no momento de ini$ia,iPar nossos o&jetos, sO Xue e,es no possu+am ar"umentos# EListem RariaWes so&re o tema Xue Reremos mais tarde' so&re$ar"a de $onstrutor, 7$op. $onstru$tor8, $onstrutor de $orpo RaPio# O eLemp,o a se"uir ! simp,es, seme,0ante aos anteriores, preste ateno no m!todo $om o mesmo nome Xue a $,asse, este ! o $onstrutor'

//&lasse ponto public class Ponto ; public float /F>. public Ponto%float a/Ffloat a>( // sempre o(it" o valor de retorno: //$arante o estado do ob!eto ; this./Ha/. this.>Ha>. @ public void move%float d/Ffloat d>( ; this./GHd/. this.>GHd>. @
32

public void mostra%( ; )>stem.out.println%?%?Gthis./G?F?Gthis.>G?(?(. @ @ //&lasse principalF Ar'uivo *rincipal.!ava public class *rincipal ; public static void main%)trin$ ar$s<=( ; *onto ap. apHnew Ponto++!lo"t,4.47+!lo"t,4.4,# ap.mostra%(. ap.move%0F0(. ap.mostra%(. ap./H011. ap.mostra%(. @ @ %1F1( %0F0( %011F0( $$COMEN<ARIO:6 Note Xue $om a de)inio do $onstrutor, Ro$V ! o&ri"ado a passar os ar"umentos deste no momento da a,o$ao do o&jeto# Se Ro$V pre$isa ter a opo de no passar esses Ra,ores ou passar outros, as poss+Reis so,uWes sero dadas em 6# %float(1.1 indi$a Xue ! para ser )eita a $onRerso de 0.1 para ponto ),utuante# 0.1 soPin0o ! $onsiderado double# %int(0.1 ! i"ua, a 0. %int( 2.3 ! i"ua, a dois. Esta operao indi$ada por %nometipo(tipo-a-ser-convertido ! tam&!m $0amada de 7t.pe $ast8# A o$orrVn$ia de rotinas de $riao de o&jetos em diRersos ,o$ais de um pro"rama ! muito $omum# O&jetos podem ser $riados dentro de estruturas $ondi$ionais, armaPenados em arXuiRos, passados $omo parYmetros, inseridos em estruturas dinYmi$as dentro de outros o&jetos, et$# EG*'(E(,0)/ 1H 1m m!todo pode $0amar outro m!todo da mesma $,asse# (arta do eLemp,o de 1#4#? e $rie um $onstrutor Xue $0ama o anti"o m!todo iniciali6a%float aFfloat b( repassando os ar"umentos do $onstrutor' ponto%float aF float b( ; iniciali6a%aFb(. @ Na $0amada de iniciali6a%( )i$a imp,+$ito Xue e,a se ap,i$a ao o&jeto $ujo $onstrutor )oi $0amado# Isto ! RM,ido tam&!m para outros m!todos Xue $0amam m!todos, ou seja, no ! ne$essMrio o operador identificador.iniciali6a%aFb(. , Reja 1#4# uso de this#
33

Este eLer$+$io ! Qti, para mostrar outro re$urso de Java, o ponteiro this# this ! uma pa,aRra reserRada e dentro de Xua,Xuer m!todo this ! um 7ponteiro8 para o o&jeto em Xuesto, ento o $Odi"o des$rito a$ima poderia tam&!m assumir a se"uinte )orma eXuiRa,ente' ponto%float aF float b( ; this.iniciali6a%aFb(. @ // erifi'ue: A ,O"i$o Xue neste eLemp,o this no tem muita uti,idade, mas eListem $asos onde um o&jeto pre$isa passar seu 7ponteiro8 para a,"uma )uno Xue o modi)i$a, ou )i$a possuindo uma re)erVn$ia para e,e, ento usaKse this# 5eremos outras ap,i$aWes mais adiante# 2H IntroduPa mensa"ens no $onstrutor tipo' )>stem.out.println%JVb!eto instanciadoK(. introduPa tre$0os pare$idos em outros pontos de seu pro"rama# O o&jetiRo ! a$ompan0ar Risua,mente a seXjVn$ia de $riao e modi)i$ao dos o&jetos# Esta $,asse *onto pode ser adaptada para )un$ionar $omo representao de Retores em duas dimensWes, para ta, )ornea outros m!todos Qteis' m!todos para tornar o Retor unitMrio, retornar o mOdu,o do Retor, a $omponente / e ># (ara ta, Ro$V terM Xue )aPer uso de 7ath.cos%double a(. 7ath.sin%double a(. e 7ath.s'rt%double a(. , respe$tiRamente o $osseno, o seno e a raiP Xuadrada de um ponto ),utuante de dup,a pre$iso# No ! ne$essMrio )aPer nada seme,0ante a um in$,ude de C]] para usar esses m!todos, &asta adi$ionMK,os ao seu $Odi"o, outro m!todo Qti, ! 7ath.ma/%aFb(. Xue retorna o maior Ra,or entre a e b %floatF doubleF int. lon$F etc H# 1se 7t.pe $ast8 eLp,i$ado nos $omentMrios deste eLemp,o# 4H Crie uma $,asse reta Xue tem $omo atri&utos dois o&jetos da $,asse ponto# *i$a' N30 B)* (02)-'B-0'*), use )unWes do tipo iniciali6a%(F jM apresentadas# Euando seu pro"rama )i$ar pronto a$res$ente m!todos para esta reta tais $omo in$,inao, $oe)i$iente ,inear, et$# (ara a$res$entar $onstrutores ,eia 1#4#:. EListem maneiras mais e)i$ientes e $ompa$tas de representar uma reta, por!m )aa $omo )oi su"erido, neste $aso o o&jetiRo no ! e)i$iVn$ia# 1.2.7. CONSTR7TORES E A$RE$A!O Este eLemp,o ! o resu,tado do eLer$+$io anterior GeLer$+$io tOpi$o CONSTR1TORESH, e,e $ria uma $,asse Ueta $om dois atri&utos da $,asse *onto# Ou seja Ro$V estarM reuti,iPando a $,asse *onto na $,asse Xue representa uma Ueta, a )orma $omo essa reuti,iPao de $Odi"o o$orre ! $0amada de &+'*+&D30# O nome reuti,iPao de $Odi"o ! &astante apropriado, pois a $,asse Ueta estarM uti,iPando todos os m!todos es$ritos para a $,asse *onto# Em $asos $omo este ! $omum diPer Xue a $,asse Ueta ! $,iente da $,asse *onto em uma ana,o"ia $om as re,aWes $omer$iais# Este pro"rama &us$a $0amar sua ateno para o )ato de Xue o&jetos so a,o$ados dinami$amente e Xue $aso Ro$V se esXuea de a,o$MK,os, e,es )i$am possuindo o Ra,or null # O&ter a$esso a uma RariMRe, $om Ra,or null ! um erro Xue "era,mente ! Reri)i$ado em tempo de eLe$uo# Nos pro"ramas anteriores a,o$ar os o&jetos era )M$i,, mas a"ora Xue temos o&jetos )un$ionando dentro de outros o&jetos 0M ne$essidade de adotar t!$ni$as me,0ores# 5eremos a se"uir duas a,ternatiRas para a,o$ar os atri&utos *onto presentes na $,asse Ueta' A>-*'2&-,?& 1/ (rimeiro a,o$aKse o o&jeto da $,asse Ueta, depois $0amaKse para $ada atri&uto da $,asse *onto a rotina de a,o$ao' Ueta r0. r0Hnew Ueta%(.
34

3H

r0.ponto0Hnew *onto%%float(0.1F%float(2.1(. r0.ponto2Hnew *onto%%float(3.1F%float(4.1(. Esta a,ternatiRa ! em muitos $asos pior Xue a se"uinte# A>-*'2&-,?& 2/ (assamos para o $onstrutor da $,asse Ueta a tare)a de a,o$ar e ini$ia,iPar os atri&utos de )orma $oerente# Os ar"umentos do $onstrutor da $,asse Ueta passam a $onter Ra,ores Qteis para a $0amada dos $onstrutores de seus atri&utos# Esta a,ternatiRa ! eLe$utada pe,o pro"rama a se"uir'

//Ueutili6e o ar'uivo da classe *onto definida anteriormente. //&lasse Ueta class Ueta ; public Ponto aFb. public Ueta%float a/Ffloat a>Ffloat b/Ffloat b>( ; ")ne* Ponto+"&7"',# $$ 5"("%"- %o- ontrutore- %" l"--e Ponto b)ne* Ponto+b&7b',# @ public void mostra%( ; a.mostra%(. b.mostra%(. @ @ //&lasse principalF Ar'uivo *rincipal.!ava class *rincipal ; public static void main%)trin$ ar$s<=( ; Ueta ar. "r)ne* Ret"++!lo"t,4.47+!lo"t,4.47+!lo"t,1.47+!lo"t,1.4,# ar.mostra%(. @ @ A,"uns podem ar"umentar Xue esta maneira de representar uma reta no ! muito e)i$iente, mas no ! do es$opo deste teLto tratar de pro&,emas dessa naturePa, o Xue a,iMs $omp,i$aria muito o $Odi"o , desRiandoKnos do o&jetiRo prin$ipa,' simp,i$idade na apresentao de $on$eitos de orientao a o&jetos# O ,eitor deRe amp,iar os mode,os aXui su"eridos em ap,i$aWes na sua Mrea de interesse# Como ainda )a,tam $on$eitos importantes para serem apresentados este tipo de ap,i$ao deRe ser )eita em para,e,o $om a ,eitura# EG*'(E(,0)/
35

1H Imp,emente um pro"rama Xue use a mesma ,O"i$a do eLemp,o anterior para $riar uma $,asse $omposta de outras # 5o$V estarM usando a"re"ao# (or eLemp,o um triYn"u,o pre$isa de trVs pontos para ser de)inido# 2H 1ma imp,ementao mais e)i$iente da $,asse Ueta seria )eita armaPenando apenas um $oe)i$iente an"u,ar e um ,inear, mas esta reta deReria proRer tam&!m um $onstrutor Xue a$eitasse dois pontos $omo ar"umentos# Como Ro$V no aprendeu so&re$ar"a de $onstrutores Gde)inir RMrios $onstrutoresH, use sO um $onstrutor Xue tem $oe)i$iente an"u,ar e ,inear $omo ar"umentos e imp,emente esta noRa $,asse reta Gsem usar a"re"ao a"oraH# *e)ina um m!todo para a $,asse Ueta Xue retorna o ponto de inter$esso $om outra reta' public *onto intercessao%Ueta a(.. No se esXuea de tratar os $asos de"enerados, tais $omo retas para,e,as e $oin$identes, use por eLemp,o mensa"ens de erro ou Ra,or de retorno i"ua, a null # 5eri)iXue Xue um m!todo de uma reta re$e&e outra reta Gmesmo tipoH $omo ar"umento# *entro do m!todo os atri&utos do ar"umento a deRem ser a$essados do se"uinte modo' ap0./. -ais tarde, em #6 tratamento de eL$eWes, Reremos maneiras me,0ores de ,idar $om esses $asos de"enerados# 4H *e)ina um m!todo $0amado move para a $,asse Ueta, ,em&reKse de moRer os dois pontos juntos Ga in$,inao no deRe mudarH# IH *e)ina um m!todo public void $ira%tipo/ an$ulo(. para a $,asse Ueta# Este m!todo re$e&e um Yn"u,o $omo ar"umento, Ro$V pode optar por representar o Yn"u,o em radianos G floatH ou $riar a $,asse Yn"u,o G"raus, minutos, se"undosH# Reso,Ra tam&!m o pro&,ema da es$o,0a do ponto em torno do Xua, a reta deRe ser "irada GRo$V pode usar mais de um ar"umentoH# 1se )unWes matemMti$as Gseno $ossenoH e outras des$ritas no eLer$+$io 6 de 1#4#C 1.2.8. DESTR7TORES O7 "!in"li=er-% A presena de $o,eta automMti$a de ,iLo torna o $on$eito de destrutores um pou$o di)erente de seus eXuiRa,entes em outras ,in"ua"ens orientadas a o&jetos# Em Java destrutores so m!todos $0amados pe,o sistema Xuando a memOria de um o&jeto estM para ser ,i&erada pe,o $o,etor automMti$o de ,iLo Gno Xuando estM para ser $o,etadaH# A sintaLe dos destrutores ! a se"uinte' protected void finali6e%( ; //codi$o para arrumar a casaF antes 'ue o ob!eto se!a apa$ado @ Note Xue o Xue $ara$teriPa o $onstrutor ! ter o mesmo nome da $,asse, jM o destrutor ! $ara$teriPado por possuir o nome finali6e. 5o$V pode $0amar o destrutor, mas isso no imp,i$a Xue o o&jeto serM de,etado# Ao $ontrMrio dos $onstrutores, os destrutores no tem ar"umentos, mas possuem Ra,or de retorno Xue ! i"ua, a void# Os destrutores so muito Qteis para 7,impar a $asa8 Xuando um o&jeto deiLa de ser usado# 1m eLemp,o &astante $omum do uso de destrutores ! o de um o&jeto Xue ,ida $om arXuiRos Xue deRem ser )e$0ados Xuando o o&jeto )or destru+do# EListem outros $asos onde um o&jeto deRe $omuni$ar aos outros o&jetos Xue serM inuti,iPado, destru+do, ou seja ' sairM do pro"rama#
36

3H

Em Java, Xue possui $o,eta automMti$a de ,iLo, um o&jeto passa a no eListir mais no pro"rama Xuando nen0uma RariMRe, )aP re)erVn$ia a e,e# Nesse ponto, e,e ! armaPenado no $o,etor automMti$o de ,iLo, onde re$e&erM o tratamento adeXuado# 1m nO de uma ,ista ,i"ada pode ser apa"ado simp,esmente )aPendo o nO anterior apontar para o posterior a e,e# Os pro"ramadores no a$ostumados $om esse $on$eito pre$isam ouRir a se"uinte )rase' 75o$V no ! o&ri"ado a ,i&erar eLp,i$itamente a memOria de um o&jeto $omo ! )eito em C]] e outras ,in"ua"ens8# Se estiR!ssemos por eLemp,o em C]], Xue no possui $o,eta automMti$a de ,iLo, o destrutor seria $0amado sempre Xue a memOria de um o&jeto )osse desa,o$ada, o Xue ! )eito pe,o pro"ramador atraR!s de uma $0amada a delete nomedoob!eto%(. . Em Java a ,i&erao de memOria Xue ! )eita pe,o $o,etor automMti$o de ,iLo Xue ! eLe$utado de modo ass+n$rono $om o restante do pro"rama, ou seja Ro$V no pode $ontar $om o )ato de Xue o destrutor serM $0amado imediatamente apOs o momento em Xue seu o&jeto sai de es$opo, a no ser Xue o pro"rama seja eLe$utado $om o modo ass+n$rono do $o,etor automMti$o de ,iLo des,i"ado G!ava Qnoas>nc$c Come*ro$ramaH# Na Rerso &eta, Ro$V no pode nem mesmo $ontar $om a $0amada do destrutor pe,o "ar&a"e $o,,e$tor, de modo Xue e,e deRe ser usado apenas para otimiPaWes do $Odi"o# 1.3. PONTEIROS, "POINTERS%, REFERSNCIAS E OBJETOS

A,"u!m pode ter a$0ado estran0o Xue no )oram dis$utidos ponteiros em Java, o$orre Xue e,es no eListem nessa ,in"ua"em# EListem estudos Xue a)irmam Xue erros $om ponteiros so um dos prin$ipais "eradores de 7&u"s8 em pro"ramas, a,!m disso $om todos os re$ursos Xue temos no pre$isaremos de,es# Os pro"ramadores a$ostumados ao uso de ponteiros Ge aos erros de$orrentes desse usoH, a$0aro muito natura, e se"ura a transio para Java onde passaro a usar prin$ipa,mente Retores e $,asses# A estruturao de seu $Odi"o deRerM a"ora ser )eita em um mode,o Xue se &aseia no uso de o&jetos GRetores e )trin$s tam&!m so o&jetosH# O&jetos superam a representatiRidade o&tida $om re$ords, )unWes iso,adas e ponteiros# *e $erto modo Ro$V estarM usando re)erVn$ias, mas de )orma imp,+$ita# (or eLemp,o' o&jetos so a,o$ados dinami$amente $om new, e,es so re)erVn$ias ou ponteiros para posiWes na memOria, mas a ,in"ua"em mas$ara este )ato por raPWes de se"urana# Como o&jetos so ponteiros GsO Xue transparentes para Ro$VH, nos depararemos $om o pro&,ema de re)eren$e a,iasin" Xuando dis$utirmos $Opia de o&jetos $om outros o&jetos $omo atri&utos# 1.3.1. PASSA$EM POR REFERSNCIA 2in"ua"ens $omo (as$a, ou C $riam meios de passar parYmetros por Ra,or ou por re)erVn$ia# Como Java no possui ponteiros, a passa"em por re)erVn$ia deRe ser )eita atraR!s de o&jetos# Se o parYmetro jM ! um o&jeto, ento a passa"em de,e ! o&ri"atoriamente por re)erVn$ia# No $aso de tipos simp,es, podemos passMK,os dentro de Retores Xue so o&jetos, ou ento $riar $,asses para em&a,ar, empa$otar estes tipos# *ada a ne$essidade destas $,asses, e,as jM )oram de)inidas na ,in"ua"em# So $,asses de)inidas para $onter $ada tipo &Msi$os e permitir $ertas $onRersWes entre e,es, )a,aremos destas $,asses $on)orme ne$essitarmos de seu uso# As RePes estas $,asses so $0amadas de 7Zrappers8# EG*'(E(,0)' 1H class O ;
3"

public void troca%O valores( ; int a. aHval. valHvalores.val. valores.valHa. @ //imprima os atributos de um ob!eto VEJ da classe O //chame o metodo troca de outro ob!etoF usando VEJ como ar$umeto //verifi'ue a alteracao nos atributos desse ar$umento O $Odi"o a$ima mostra $omo de)inir um m!todo Xue usa a eListVn$ia imp,+$ita de ponteiros na ,in"ua"em para $riar um m!todo Xue tro$a os atri&utos de dois o&jetos da mesma $,asse# Imp,emente este m!todo e )aa os testes su"eridos nos $omentMrios desse $Odi"o# 1.3.2. VETORES E MATRITES 5etores so o&jetos, e,es possuem pape, importante no esti,o de pro"ramao desta ,in"ua"em Xue eL$,ui ponteiros# (or serem o&jetos, Retores so o&ri"atoriamente a,o$ados de maneira dinYmi$a# O eLemp,o a se"uir a,o$a um Retor de inteiros $om trVs posiWes, se"uindo uma sintaLe seme,0ante a de a,o$ao de o&jetos'

class etorIest ; public static void main %)trin$ ar$s<=( ; int .etor?@)ne* int?A@# .etor?4@)4# //inde/acao semelhante a & F &GG .etor?1@)14# .etor?2@)24# :'-te(.out.println+.etor?4@/; ;/.etor?1@/; ;/.etor?2@/; ;,# @ @ B 1B 4B

R*)B;0 .& ),2-&G* .* ?*-0'*)/ int a<=. //declara vetor de inteiros a aHnew int<01=. //aloca vetor a com de6 posicoes //as duas linhas anteriores podem ser abreviadas por: int a<=Hnew int<01=. //alem disso se voce 'uiser iniciali6ar o vetor aF !aN na declaracao: int a<3=H;1F01F21@. O anM,o"o para matriPes !' int a<=<=. //declara matri6 de inteiros a aHnew int<3=<3=. //aloca matri6 3/3F , celulas //as duas linhas anteriores podem ser abreviadas por:
3#

int a<=Hnew int<3=<3=. //alem disso se voce 'uiser iniciali6ar a matri6 a !a na declaracao: int a<3=<3=H;;1F01F21@F;31F41F51@F;61F"1F#1@@. Em m!todos, ar"umentos e Ra,ores de retorno Xue so Retores, so es$ritos da se"uinte )orma' int_` , ou tipo_` nomedaRariaRe, TTno $aso de ar"umentos# *ia"rama do Retor'

(er$e&a Xue a )aiLa Qti, do Retor Rai de B at! GnK1H onde n ! o Ra,or dado $omo taman0o do Retor no momento de sua $riao, no nosso $aso 6# O mesmo o$orre $om matriPes# Esta $onReno pode $on)undir pro"ramadores (as$a, onde a indeLao Rai de 1 at! n# Java $0e$a se Ro$V usa $orretamente os +ndi$es do Retor# Se o$orrer um a$esso ao vetor<i= onde i ! um +ndi$e inRM,ido G)ora da )aiLa de Ra,ores permitidosH, Ro$V re$e&erM uma mensa"em pare$ida $om' !ava#lan$#Arra>9nde/VutVfEounds2/ception ' l# Retornaremos ao assunto desta mensa"em mais adiante, e,a ! uma eL$eo "erada pe,o $Odi"o Xue a$ompan0a a ,in"ua"em# EListe um atri&uto muito Qti, Xuando se tra&a,0a em um Retor de dados' a.len$th. //arma6ena o numero de elementos do vetor a *e$,arar um Retor de o&jetos, por eLemp,o o&jetos da $,asse *onto, no imp,i$a Xue os o&jetos de $ada posio do Retor jM estaro ini$ia,iPados, para ini$ia,iPar os e,ementos, si"a se"uinte sintaLe' *onto a<=. //declaracaoF todas as posicoes com null a H new *onto<3=. //alocacao for %int i H 1. i B a.len$th%(. iGG( ; a<i= H new *onto%1F1(. @ //iniciali6acao
Go $Odi"o a$ima representa um dos usos de Retores no ,u"ar de ponteirosH

EG*'(E(,0)/ 1H Es$reRa um pro"rama simp,es Xue toma um Retor de preos e um de des$ontos G?Bme#?H, e a,tera o Retor de preos de modo Xue estes produtos jM in$,uam os des$ontos no seu Ra,or de Renda# ELemp,o' (reos ' B,? 6B,6 14,C 1BB *es$ontos' #? #6 #4 #? 5etor $a,$u,ado' 4B#4? 3#B3 4#?4 ?B A ,in"ua"em Java serM muito usada no $om!r$io da internet, ta&e,in0as assim, usadas para $M,$u,os de preos de produtos jM esto se tornando $omuns# Os nomes Xue Ro$V pode dar as $,asses e m!todos so' &lasse: Iabela*recos Atributo: boolean &om3esconto. Atributo: double<= *recos. 7Rtodo: void Aplica3escontos%int<= descontos(. 1.3.3. COPIA , COMPARA!O E DETERMINA!O DA CLASSE EM OBJETOS
3,

E)-* -K=,(0 &,2.& 230 *)-5 (0;=>*-0, .*?,.0 & ,2.*4,2,DM*) )0@'* 0 JB* *)-&'5 (02-,.0 2&) =&(U&+*) * ,2-*'4&(*) .& J&?& API. O&jetos so imp,i$itamente re)erVn$ias, portanto sua $Opia GatraR!s do operador eH estM sujeita ao pro&,ema de 7re)eren$e a,iasin"8 e e)eitos $o,aterais# A $omparao de o&jetos atraR!s do operador HH tem o si"ni)i$ado da $omparao de re)erVn$ias, ou seja e,a Reri)i$a se os o&jetos 1 $omparti,0am o mesmo espao a,o$ado na memOria# O&serRe Xue $om as operaWes $on0e$idas at! a"ora, no $onse"uimos $omparar dois o&jetos Xuanto ao $onteQdo a no ser Xue $omparemos atri&uto por atri&uto, o mesmo Ra,e para a $Opia# Seria Qti, dispor de um $onjunto de operaWes de i"ua,dade, desi"ua,dade e $opia Xue se ap,i$asse ao $onteQdo dos o&jetos e no ao endereo de memOria de suas RariMReis# 1ma outra ne$essidade seria Reri)i$ar a $,asse de um o&jeto em tempo de eLe$uo# Antes de Rer a so,uo pro$ure sentir o pro&,ema no eLemp,o a se"uir' 1saremos o arXuiRo da $,asse *onto, jM apresentado em CONSTR1TORES 1#4#C#, mas $om uma modi)i$ao no m!todo mostra# No ,u"ar de mostra $riaremos um m!todo $0amado public )trin$ to)trin$%(. Este m!todo ! padro em muitas $,asses e deRe ser de)inido de modo a retornar uma )trin$ des$ritiRa do o&jeto# /aPendo isto Ro$V pode $on$atenar uma RariMRe, *onto $om uma )trin$ no ar"umento do m!todo )>stem.out.println%meu*onto0G J Ca vi6inhanca de JGmeu*onto2(.# Esta de$iso de imp,ementao ! $ertamente mais "en!ri$a Xue mostra, Risto Xue nem sempre estaremos imprimindo atraR!s de )>stem.out.println%( , por eLemp,o na se"unda parte o$orrero $asos em Xue temos Xue 7pintar8 )trin$s em Mreas espe$iais na te,a# Apresentao do pro&,ema //&lasse ponto class *onto ; public float /F>. public *onto%float a/Ffloat a>( //omita o valor de retorno: //$arante o estado do ob!eto ; this./Ha/. this.>Ha>. @ public void move%float d/Ffloat d>( ; this./GHd/. this.>GHd>. @ publi :trin8 to:trin8+, 1 return ;+;/t5i-.&/;7;/t5i-.'/;,;# $$+&7', 2 @ //&lasse principalF Ar'uivo *rincipal.!ava class *rincipal ; public static void main%)trin$ ar$s<=( ;
Strin"s e Retores so o&jetos de $,asses pr! de)inidas na ,in"ua"em, portanto as a)irmaWes )eitas aXui se ap,i$am a e,es tam&!m# 41
1

$$prep"r" "o %"- ."ri".ei- opi" %e ob9eto*onto pVri$inalFpAliasFp&opia. pVri$inalHnew *onto%%float(1.1F1.1f(. //%float(1.1 ou 1.1f. 1.1 eh double pAliasHpVri$inal. //copiando atraves de atribuica p&opiaHnew *onto%pVri$inal./FpVri$inal.>(. //copiando atributo por atributo //resultados )>stem.out.println%?Vri$inal:?GpVri$inal(. )>stem.out.println%?Alias:?GpVri$inal(. )>stem.out.println%?7odificando Alias./ para 2?(. pAlias./H2.1f. )>stem.out.println%? e!a como o ori$inal ficou:?GpVri$inal(. )>stem.out.println%?p&opia nao se modifica:?Gp&opia(. $$ o(p"r" "o %e ob9eto)>stem.out.println%?Vri$inalHHAlias:?G%pVri$inalHHpAlias( (. )>stem.out.println%?&opiaHHVri$inal:?G%p&opiaHHpVri$inal( (. )>stem.out.println%?3ei/ando atributos de &opia i$uais aos de Vri$inal?(. p&opia./H2. )>stem.out.println%?&opiaHHVri$inal:? G%p&opiaHHpVri$inal( (. )>stem.out.println%?Vri$inal./HH&opia./:?G%p&opia./HHpVri$inal./( (. )>stem.out.println%?Vri$inal.>HH&opia.>:?G%p&opia.>HHpVri$inal.>( (. @ Vri$inal:%1F1( Alias:%1F1( 7odificando Alias./ para 2 e!a como o ori$inal ficou:%2F1( p&opia nao se modifica:%1F1( Vri$inalHHAlis:true &opiaHHVri$inal:false 3ei/ando atributos de copia i$uais aos de Vri$inal &opiaHHVri$inal:false Vri$inal./HH&opia./:true Vri$inal.>HH&opia.>:true $$COMEN<ARIO: $$prep"r" "o %"- ."ri".ei-7 opi" %e ob9eto-6 pAlias e uma re)erVn$ia para o mesmo ,o$a, de memOria Xue pVri$inal , por este motiRo Xuando pAlias ! a,terado, pVri$inal se a,tera por 7e)eito $o,atera,8, e,es $omparti,0am o mesmo o&jeto pois a atri&uio pAliasHpVri$inal , $opia o endereo de pVri$inal # JM p&opia, ! o resu,tado de uma noRa a,o$ao de memOria, portanto um noRo endereo, um o&jeto independente dos outros# $$ o(p"r" "o %e ob9eto-6 pVri$inalHHpAlias e outras $omparaWes eXuiRa,entes tVm o si"ni)i$ado de $omparao do endereo de memOria e no do $onteQdo#

40

pVri$inal./HHp&opia./ tem o si"ni)i$ado de $omparao do Ra,or desses atri&utos, assim $omo uma $omparao entre inteiros# Se esses atri&utos por sua ReP )ossem o&jetos, esta operao teria o si"ni)i$ado de $omparao entre endereos de memOria dos o&jetos# As poss+Reis so,uWes, $omentadas in$,uindo Reri)i$ao da $,asse dos o&jetos //&lasse *onto class *onto ; public float /F>. public *onto%float a/Ffloat a>( //omita o valor de retorno: //$arante o estado do ob!eto ; this./Ha/. this.>Ha>. @ public void move%float d/Ffloat d>( ; this./GHd/. this.>GHd>. @ public )trin$ to)trin$%( ; return ?%?Gthis./G?F?Gthis.>G?(?. //%/F>( @ publi boole"n i8u"l+Ponto outro, 1 return ++outro.&))t5i-.&, BB +outro.'))t5i-.',,# $$t5i-))outroC 2 @ //&lasse principalF Ar'uivo *rincipal.!ava class *rincipal ; public static void main%)trin$ ar$s<=( ; //preparacao das variaveis *onto pVri$inalFp&opia0Fp&opia2. pVri$inalHnew *onto%%float(1.1F1.1f(. //%float(1.1 ou 1.1f. 1.1 eh double p&opia0Hnew *onto%1.1fF1.1f(. pCopi"1.Cop'+pOri8in"l,# $$pCopi"1 opi" onteu%o %e pOri8in"l nele (e-(o pCopi"2)+Ponto, pOri8in"l.Clone+,# //copia de ob!etos )>stem.out.println%?Vri$inal:?GpVri$inal(. )>stem.out.println%?&opia0:?Gp&opia0(. )>stem.out.println%?&opia2:?Gp&opia2(. )>stem.out.println%?7odificando &opia0./ para 2?(.
42

p&opia0./H2.1f. )>stem.out.println%? e!a como o ori$inal ficou:?GpVri$inal(. )>stem.out.println%?&opia2 nao se modifica:?Gp&opia2(. //comparacao de ob!etos )>stem.out.println%?Vri$inalHH&opia2:?G%pVri$inalHHp&opia2( (. )>stem.out.println%?Vri$inal.i$ual%&opia2(:?G pOri8in"l.i8u"l+pCopi"2, (. )>stem.out.println%?3ei/ando atributos de &opia i$uais aos de Vri$inal?(. //verificacao da classe dos ob!etos )>stem.out.println%?Vbtendo a classe dos ob!etos?(. )>stem.out.println%pVri$inal.$et&lass%(.$etCame%((. )>stem.out.print%?Vri$inal e da classe )trin$Y?(. boole"n re-ult)+pOri8in"l in-t"n eo! :trin8,# )>stem.out.println%result(. @ @ Este pro"rama eLemp,o no opera $orretamente, isto se deRe a no imp,ementao destes m!todos na Rerso &eta Ga dispon+Re, atua,menteH# 1.4. OBTENDO VALORES DO 7S7:RIO

Este tOpi$o )oi introduPido porXue os pro"ramas se"uintes so mais $omp,eLos e pre$isam ser testados iteratiRamente# -esmo Xue Ro$V sO RM )aPer pro"ramas em inter)a$es "rM)i$as ! interessante sa&er $omo testar $ertas $,asses Ria te$,ado ou ,in0a de $omando, sem $ontar Xue sem o $onteQdo deste tOpi$o os pro"ramas se"uintes no sero poss+Reis# A,!m do Xue Ro$V pode desejar )aPer a,"um pro"rama de ,in0a de $omando G&at$0H em Java, por eLemp,o um pro"rama de $omuni$ao entre as diRersas mMXuinas de uma rede ou um pro"rama Xue re$e&a ar"umentos Ria ,in0a de $omando# 1.4.1. LENDO DO TECLADO Este tOpi$o $ont!m dois eLemp,os Xue ensinam $omo ,er )trin$s do te$,ado, $omo $onRertVK ,as para nQmeros, e $omo $ontro,ar me,0or a entrada e sa+da de dados# 1.4.1.1. LEIT7RA DE :<RING: 7SANDO 7M VETOR DE B#TES. Em Java ! prati$amente um padro ,er dados em &.tes, seja do te$,ado, da rede, do dis$o ou de Xua,Xuer outro ,u"ar# (or este motiRo o primeiro eLemp,o ,V em um Retor de &.tes# Como sa&emos Xue Ro$V Xuer mais do Xue issoG eL# ,er outros tipos da ,in"ua"em H, o se"undo eLemp,o tratarM desse $aso#

import !ava.io.A.
43

2 3 4 5 6 " # , 01 00 02 03 04 05 06 0" 0# 0, 21 20 22

class 2ntra3ados ; public static void main %)trin$ ar$s<=( ; b'te .etorte&to?@ ) ne* b'te?244@# $$%e l"r" "o %e u( .etor %e b'teint b'te-li%o- ) 4# )>stem.out.println%?2screva al$o:?(. tr> ; b'te-li%o- ) :'-te(.in.re"%+.etorte&to,# )>stem.out.print%? oce escreveu:?(. :'-te(.out.*rite+.etorte&to747b'te-li%o-,# @ catch %9V2/ception e( ; // Al$uma acao de recuperacao da falha @ @ @ 2screva al$o: &omo assim escreva al$oY oce escreveu:&omo assim escreva al$oY

$$COMEN<ARIO:6 Este pro"rama usa o m!todo )>stem.in.read%vetorte/to(. para ,er do te$,ado# Este m!todo pre$isa de um Retor de &.tes $omo ar"umentoGonde sero ,idos os $ara$teresH e a,!m disso retorna o nQmero de &.tes ,idos, para Xue Ro$V possa usar o Retor $orretamente# (ara des$arre"ar o Retor no R+deo use o m!todo )>stem.out.write%vetorte/toF1Fb>teslidos(. Xue imprime na te,a as posiWes de B at! b>teslidos do Retor de &.tes passado $omo o primeiro ar"umento# 5o$V deRe estar se per"untando Xua, a )uno dos &,o$os de $Odi"o tr> ;@ catch ;@ deste pro"rama eLemp,o# E,es so importantes no tratamento de eL$eWes, tOpi$o Xue serM a&ordado no )ina, deste teLto# (or enXuanto apenas Reja estes &,o$os de $Odi"o $omo ne$essMrios para es$reRer dentro do &,o$o tr>;@ as operaWes de ,eitura de te$,ado, Xue so operaWes Xue podem "erar eL$eWes# 1.4.1.2. 7MA VIS!O $ERAL SOBRE PACVA$ES E :<REAM:

A maneira ensinada nos tOpi$os anteriores G,eitura de &.tesH ! su)i$iente para Xue Ro$V ,eia do te$,ado, mas aproReitaremos a"ora Xue Ro$V jM estM mais eLperiente para ensinar uma outra maneira e,e"ante Xue serRe para ,er do te$,ado, de um arXuiRo ou de uma $oneLo da rede Xue a$eita por eLemp,o a ,eitura direta para uma )trin$ e outros tipos desta ,in"ua"em e no sO para um Retor de &.tes# Nestes eLemp,os usaremos um $on$eitos Xue somente sero eLp,i$ados a )undo nos prOLimos tOpi$os, so os $on$eito de pa$Sa"es e Streams# (a$Sa"es so $onjuntos de $,asses# At! a"ora sO
44

t+n0amos uti,iPados e,ementos da pa$Sa"e !ava.lan$ Xue ! importada imp,i$itamente em todos os pro"ramas, permitindo por eLemp,o es$reRer na te,a G )>stem.out ! uma $,asse presente em !ava.lan$H# A pa$Sa"e !ava.io )orne$e a a&strao de streams para ,idar $om a $omp,eLidade de entrada e sa+da de dados# Esta a&strao ! poderosa e serM uti,iPada aXui para ,er do te$,ado# 1m stream ! $omo um $ano por onde passam os &.tes, a Ranta"em deste $ano ! Xue no pre$isamos nos preo$upar de onde Rem esses &.tes, para nOs e,es Rem do $ano# (ara Xuem es$reRe no stream tam&!m Ra,e a mesma id!ia do Xue a"ora do outro ,ado, empurrando os &.tes para dentro#

Neste eLemp,o usamos um stream para ,er do te$,ado, esta poderosa a&strao serM estendida mais tarde para tratar a entrada e sa+da de dados atraR!s de portas de $omuni$ao e pro"ramao $,iente serRidor, eLp,orando as $apa$idades de 7netZorSin"8 da ,in"ua"em, a,!m da ,eitura e es$rita em arXuiRos, no tOpi$o adeXuado# Este pro"rama simp,esmente ,V uma ,in0a do te$,ado e a imprime noRamente# 0 2 3 4 5 6 " # , 01 00 02 03 04 05 06 0" 0# 0, 21 20 22 23 24 25 i(port 9".".io.D"t"Input:tre"(# $$ l"--e D"t"Input:tre"( p"r" " entr"%" %e %"%opublic class Uead)trin$ ; public static void main%)trin$ ar$s<=( ; )trin$ linhaH??. D"t"Input:tre"( (euD"t"Input:tre"(# meu3ata9nput)tream H new 3ata9nput)tream%)>stem.in(. tr>; linha H meu3ata9nput)tream.read5ine%(. @ catch %2/ception erro( ; )>stem.out.println%J2rro de leituraK(. @ //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. )>stem.out.println%linha(. @/ @

45

oce pode andar rapido com paciencia oce pode andar rapido com paciencia

//COMEN<ARIO: O $ano de nosso eLemp,o ! mais pare$ido $om uma man"ueira de jardim, nOs )i$amos $om a ponta de onde sai a M"ua# 1'Nesta ,in0a diPemos Xue desejamos usar, importar, um stream de entrada de dados de nome 3ata9nput)tream presente na pa$Sa"e !ava.io @' Nesta ,in0a de$,aramos o Xue seria o &a,de para re$o,0er a M"ua da man"ueira G1ma )trin$H# O &a,de $omea RaPio GJKH# 1B'Esta ,in0a diP para pe"ar a man"ueira G3ata9nput)treamH do depOsito Gpa$Sa"e !ava.ioH# 14'Esta ,in0a $one$ta a outra ponta da man"ueira na torneira G )>stem.in ! a torneira, Xue si"ni)i$a te$,ado em Xuase todos os $omputadoresH# 1?'En$0a o &a,de $om o Xue sair da torneira at! 0aRer uma interrupo no )orne$imento# G2eia o Xue puder do stream at! en$ontrar um $ara$tere de noRa ,in0a ZMnN# *a+ o nome readline Xue si"ni)i$a ,eia ,in0aH# 4B'EsRaPie o &a,de no $ano de sa+da GCopie o Ra,or da )trin$ ,ida na entrada do stream )>stem.out, Xue si"ni)i$a R+deo na maioria das mMXuinasH# As ,in0as 1 ,1? e 1: so ne$essMrias para es$reRer line H m>3ata9nput)tream.read5ine%(.. Essas ,in0as permitem aWes de re$uperao de )a,0as Xue possam o$orrer no pro$esso de ,eitura, a&ordaremos este tOpi$o &em mais adiante, de modo Xue aXui apenas daremos uma Riso "era, sO a t+tu,o de $uriosidade' No &,o$o tr> ; @, deReKse inserir as operaWes pass+Reis de )a,0as# Este &,o$o deRe ser se"uido por catch %2/ception erro( ; /A nao faco nada A/ @. No ,u"ar de /A nao faco nada A/ deReriam estar as poss+Reis aWes de re$uperao de )a,0as $omo no $aso adotamos' )>stem.out.println%J2rro de leituraK(. # line H m>3ata9nput)tream.read5ine%(. ! o m!todo Xue )aP $om Xue o )tream ,eia da entrada de dados em Xue )oi asso$iado uma ,in0a# Este m!todo o&Riamente &,oXueia a eLe$uo do pro"rama at! Xue se di"ite 7$arria"e return8, o Xue no ! pro&,emMti$o pois isto poderia ser )eito para,e,amente, usando 7t0reads8# C0;0 (02?*'-*' :trin8- =&'& ,2-*,'0)/ Se Ro$V inserir o se"uinte m!todo na nossa $,asse Uead)trin$ , poderM ,er Ra,ores inteiros do te$,ado# static int le9nteiro%( ; )trin$ line. 3ata9nput)tream in H new 3ata9nput)tream%)>stem.in(. tr> ; line H in.read5ine%(. int i H 9nte$er.valueVf%line(.int alue%(. return i. @ catch %2/ception e( ; return Q0. @
46

@ int i H 9nte$er.valueVf%line(.int alue%(. A um eLemp,o de $0amadas $onse$utiRas ou anin0adas de m!todos# O,0e da esXuerda para a direita# (rimeiro o m!todo valueVf%line( ! $0amado para a $,asse1 9nte$er retornando um o&jeto da $,asse 9nte$er# *epois o o&jeto da $,asse 9nte$er tem seu m!todo int alue%( inRo$ado retornando um Ra,or do tipo int Xue ! $orrespondente a )trin$ line# 5o$V se ,em&ra Xue nOs )a,amos Xue a ,in"ua"em )orne$e uma auLi,iarG7Zrapper8H para $ada tipo &Msi$o da ,in"ua"em^ A $,asse Inte"er ! uma $,asse Xue mapeia em termos de o&jetos o tipo &Msi$o int de 64 &its# A"ora Xue Ro$V jM $on0e$e o nome da $,asse, pesXuise mais so&re e,a na JA5A A(I# EG*'(E(,0)/ 1H 5o,taremos a )a,ar so&re )trin$s, por!m por 0ora, Ro$V jM tem $ondiWes de ,er as &i&,io"ra)ias adi$ionais so&re e,es# 1.4.2. AR$7MENTOS DE LINHA DE COMANDO Na se"unda parte Reremos Xue os pro"ramas Java Xue rodam em&e&idos em 0iperteLtos podem re$e&er parYmetros ini$iais de )un$ionamento do 0iperteLto# Os pro"ramas Xue estamos des$reRendo nesta parte so ap,i$aWes eLe$utadas Ria ,in0a de $omando# *e modo anM,o"o, essas ap,i$aWes podem re$e&er ar"umentos de ,in0a de $omando# ELemp,o de passa"em de trVs ar"umentos de ,in0a de $omando para um pro"rama Java' !ava teste JIe/toK 2 Come Interrompa sua ,eitura a"ora e eLperimente passar ar"umentos para um dos pro"ramas $riados anteriormente, os ar"umentos o&Riamente sero i"norados pe,o pro"rama e este se $omportarM da mesma )orma Xue antes# O Retor de )trin$s ! o ar"umento do m!todo main Xue norma,mente $0amMRamos de )trin$ ar$s<=' public static void main +:trin8 "r8-?@, ...

class 7ostraAr$umentos ; public static void main%)trin$ ar$s<=( ; for %int iH1. i B ar$s.len$th. iGG( ; )>stem.out.println%?Ar$umento? G iG?: ?G ar$s<i=(. @ @ @ Resu,tado do pro"rama para a $0amada' !ava 7ostraAr$umentos *assando 3 Jar$umento sK Ar$umento1: *assando Ar$umento0: 3 Ar$umento2: ar$umento s

A poss+Re, $riar m!todos para serem $0amados para $,asses e no sO para o&jetos, so os $0amados 7$,ass met0ods8 em $ontraposio a 7instan$e met0ods8# 4"
1

ar$s.len$th. Retorna o $omprimento do Retor de )trin$s, este Ra,or ! usado para iterar so&re os ar"umentos Xue so )trin$s armaPenadas em ar$s<i=# (er$e&a Xue as aspas )aPem $om Xue nomes separados por espaos sejam $onsiderados sO um ar"umento# Os ar"umentos passados para seu pro"rama so "raRados em um Retor de Strin"s, para usar o ar"umento 6 Xue )i$ou "uardado $omo )trin$, na )orma de inteiro, ! pre$iso primeiro $onRertVK,o para inteiro# Isto pode ser )eito no $aso do nosso eLemp,o atraR!s de uma $0amada a' 9nte$er.parse9nt%ar$s<0=(. A $,asse Inte"er usada no $Odi"o a$ima ! um dos 7Zrappers8 Xue des$reRemos em 1#6#1# A operao $ontrMria a Xue )oi )eita ! 9nte$er.to)trin$%int a(.. O m!todo parse9nt a$eita tam&!m um se"undo ar"umento Xue ! a &ase em Xue o nQmero estM representado na )trin$. EG*'(E(,0)/ 1H -ude o primeiro pro"rama em Java G8ello9nternetH para imprimir J8elloK se"uido do primeiro ar"umento de ,in0a de $omando Gse eListir' ar$s.len$thD1 H# 4K Construa um pro"rama simp,es Xue re$e&e ar"umentos da ,in0a de $omando e os imprime atraR!s de cout# Norma,mente ! isso Xue deRe ser )eito antes de usar um re$urso da ,in"ua"em pe,a primeira ReP, eLperimentMK,o em pro"ramas simp,es#

1.D.

ENCAPS7LAMENTO COM PRIVA<E7 PUELIC7 FPACGAGEH * PRO<EC<ED

En$apsu,amento, 7data 0idin"8 ! um $on$eito &astante importante em orientao a o&jetos# Neste tOpi$o Ramos )a,ar das maneiras de restrin"ir o a$esso as de$,araWes de uma $,asse e a prOpria $,asse, isto ! )eito atraR!s do uso das pa,aRras reserRadas publicF private e protected0 2 Xue so Xua,i)i$adores# A,"u!m pode estar se per"untando o porXuV de se restrin"ir o a$esso a $ertas partes de uma $,asse# A id!ia ! simp,es, deRemos )orne$er ao usuMrio, $,iente de uma $,asse, o ne$essMrio e somente o ne$essMrio para Xue e,e tire proReito da )un$iona,idade desta $,asse# Os deta,0es deRem ser omitidos, somente a ,ista de operaWes a Xua, uma $,asse deRe atender )i$a Ris+Re,# Os &ene)+$ios so muitos' $,arePa do $Odi"o, minimiPao de erros, )a$i,idade de eLtenso# Ta,ReP a )a$i,idade de modi)i$ao seja o mais importante dos &ene)+$ios# Como a $,asse ! $on0e$ida pe,a sua inter)a$e, ! muito )M$i, mudar a representao interna sem Xue o $,iente, usuMrio, per$e&a a di)erena Estaremos preo$upados em separar desi"n de imp,ementao, Java ! uma ,in"ua"em &oa de se pro"ramar em termos de desi"n e em termos de imp,ementao# (ro"ramar tendo em Rista o desi"n ! tam&!m $0amado de 7pro"rammin" in t0e ,ar"e8, enXuanto Xue pro"ramar tendo em Rista imp,ementao, $odi)i$ao ! $0amado de 7pro"rammin" in t0e sma,,8# A,"uns pro"ramadores eLperientes a)irmam Xue Java se pare$e $om C Xuando estamos preo$upados $om $odi)i$ao, mas Xuando estamos preo$upados $om desi"n, Java se asseme,0a a Sma,,ta,S# Com en$apsu,amento Ro$V serM $apaP de $riar $omponentes de so)tZare reuti,iPMReis, se"uros, )M$eis de modi)i$ar# 1.I.1. ENCAPS7LANDO MQTODOS E ATRIB7TOS

1 4

*rotected serM eLp,i$ada juntamente $om 0erana na seo 4# (AC>A<E serM eLp,i$ado juntamente $om pa$Sa"es# 4#

At! a"ora no nos preo$upMRamos $om o modo de a$esso de de$,araWes de uma $,asse pois, mesmo sem sa&er porXue, Ro$V )oi aRisado para Xua,i)i$ar todos os atri&utos e m!todos de suas $,asses $omo public o Xue si"ni)i$a Xue e,es so a$ess+Reis, Ris+Reis, em Xua,Xuer ,o$a, de seu $Odi"o# (or Ris+Re, entenda o se"uinte' se o atri&uto / do o&jeto Tm*onto no ! Ris+Re, por eLemp,o )ora de sua $,asse, ento no )aP sentido es$reRer em main' Tm*onto./H1. # -as ento $omo $ontro,ar o a$esso de atri&utos e m!todos em uma $,asse^ Simp,es, atraR!s das pa,aRras reserRadas privateF public e protected $ujos si"ni)i$ados Xuando Xua,i)i$ando m!todos e atri&utos Gprivate e public podem tam&!m Xua,i)i$ar $,assesH so des$ritos a&aiLo' public private protected Nada espe$i)i$ado, eXuiRa,e 7pa$Sa"e8 ou 7)riend,.8 Estes atri&utos e m!todos so sempre a$ess+Reis em todos os m!todos de todas as $,asses# Este ! o n+Re, menos r+"ido de en$apsu,amento, Xue eXuiRa,e a no en$apsu,ar# Estes atri&utos e m!todos so a$ess+Reis somente nos m!todosGtodosH da prOpria $,asse# Este ! o n+Re, mais r+"ido de en$apsu,amento# Estes atri&utos e m!todos so a$ess+Reis nos m!todos da prOpria $,asse e suas su&$,asses, o Xue serM Risto em Derana 4# Estes atri&utos e m!todos so a$ess+Reis somente nos m!todos das $,asses Xue perten$em ao 7pa$Sa"e8 em Xue )oram $riados# Este modo de a$esso ! tam&!m $0amado de 7)riend,.8#

GeListem outros Xua,i)i$adores, no re,a$ionados $om en$apsu,amento Xue sero eLp,i$ados depoisH

P'=R'8* * $+%*&C(\L AD'+*=*: *&<+* ',D', D9+PB* &G9 ,G9 D'('E+', +*,*+E'C', C' (%&8B'8*:1 ,G9 'D*&', &9:*, C'C9, D'+' 9 <%D9 C* *&='D,B(':*&<9 D'C+G9 7C*$'B(<>1 PB* 9=9++* PB'&C9 &G9 *Q%,<* B: *,D*=%$%='C9+. SG9 &9:*, $J=*%, C* :*:9+%)'+. .+%*&C(\ ,%8&%$%=' ':%8JE*(1 &9 ,*&<%C9 C* PB* ', =(',,*, PB* D*+:%<*: *,<* <%D9 C* '=*,,9 D9,,B*: B: *&='D,B(':*&<9 :'%, +*('Q'C9 =9: +*('FG9 ', =(',,*, C9 :*,:9 D'=R'8* 7':%8',>. P'=R'8* ; B: 8+BD9 C* =(',,*, +*('=%9&'C',. *rotected serM eLp,i$ada em 4#1 pois estM re,a$ionada $om 0erana, por 0ora Ramos )o$a,iPar nossa ateno em private e public Xue Xua,i)i$am os atri&utos e m!todos de uma $,asse Xuanto ao tipo de a$esso Gonde e,es so Ris+ReisH # *ublic, private e protected podem ser Ristos $omo Xua,i)i$adores ou 7spe$i)iers8# (ara )a$i,itar a eLp,i$ao supon0a a se"uinte de$,arao de uma $,asse' 1H ;rea private# class *onto ; private float / private float > public void iniciali6a%float aFfloat b( ;/Ha. >Hb.@. public void move %float d/Ffloat d>(. @ /i$a )M$i, entender essas de$,araWes se Ro$V pensar no se"uinte' esses Xua,i)i$adores se ap,i$am aos m!todos e atri&utos Xue Rem imediatamente apOs e,es# Os e,ementos da $,asse Xua,i)i$ados $omo private apare$em $om )undo $inPa es$uro indi$ando Xue sua 7Risi&i,idade8 ! mais ,imitada Xue os atri&utos Xua,i)i$ados $omo public G$inPa $,aroH# A"ora Ramos entender o Xue ! private e o Xue ! public # 5amos supor Xue Ro$V instan$iou G$riouH um o&jeto do tipo *onto em seu pro"rama' *onto meu. //instanciacao meuHnew *onto%(.
4,

Se"undo o uso da de)inio da $,asse *onto dada a$ima Ro$V 230 pode es$reRer no seu pro"rama' meu./H%float(5.1. //erro ! ,$omo )aP+amos nos eLemp,os anteriores, a no ser Xue / )osse de$,arado $omo public na de)inio da $,asse o Xue no o$orre aXui# -as Ro$V pode es$reRer /H5.1. na imp,ementao GdentroH de um m!todo porXue enXuanto no )or )eito uso de 0erana, podeKse diPer Xue um m!todo tem a$esso a tudo Xue ! de sua $,asse, Reja o pro"rama se"uinte# 5o$V pode es$reRer: meu.move%5.1F5.1(. ,porXue sua de$,arao %move( estM $omo public na $,asse, em Xua,Xuer ,u"ar se pode es$reRer meu.move%5.1F5.1(.# 5isi&i,idade das de$,araWes de uma $,asse, )ora de,a ,de sua 0ierarXuia e de seu pa$Sa"e# 5eja Xue sO a parte pu&,i$ ! Ris+Re, neste $aso' (1B2IC (RI5ATE (ROTECTE* 7(AC>A<E8 (1B2IC (RI5ATE (ROTECTE* 7(AC>A<E8

5isi&i,idade das de$,araWes de uma $,asse, dentro de,a mesma'

1.I.1.1.

ATRIB7TOS PRIVA<E, MQTODOS PUELIC

Ap,i$ando en$apsu,amento a $,asse ponto de)inida anteriormente, deiLando os atri&utos en$apsu,ados e de)inindo a inter)a$e pu&,i$a da $,asse somente atraR!s de m!todos# //&lasse ponto public class *onto ; pri."te float /F>. //atributos private

publi *onto%float a/Ffloat a>( //omita o valor de retorno: //$arante o estado do ob!eto ; this./Ha/. this.>Ha>. @ publi void move%float d/Ffloat d>( ; this./GHd/. this.>GHd>. @ publi float retorna-/%( ; return /. @ publi void mostra%( ; )>stem.out.println% ?%? G this./ G ?F? G this.> G ?(? (. @
51

@ //&lasse principalF Ar'uivo *rincipal.!ava class *rincipal ; public static void main%)trin$ ar$s<=( ; *onto ap. apHnew *onto%%float(1.1F%float(1.1(. ap.mostra%(. @ @ %1F1(

$$COMEN<ARIO:6 Este pro"rama no deiLa Ro$V tirar o ponto de %1F1( a no ser Xue seja $0amada iniciali6a noRamente# /i$a $,aro Xue a"ora, en$apsu,ando / e > pre$isamos de mais m!todos para Xue a $,asse no ten0a sua )un$iona,idade ,imitada# NoRamente' es$reRer ap./H01. em main ! um erro\ (ois / estM Xua,i)i$ada $omo private# Sempre ,eia os eLer$+$ios, mesmo Xue no RM )aPeK,os# O Xue o$orre em $,asses mais $omp,i$adas, ! Xue ao de)inir mais m!todos na inter)a$e da $,asse, estamos permitindo Xue a representao interna possa ser mudada sem Xue os usuMrios tomem $on0e$imento disto# EG*'(E(,0)/ 1H Imp,emente os m!todos public void altera-/%float a( F public float retorna-/%void(F public void move %float d/Ffloat d> (. #Imp,emente outros m!todos Xue a$0ar importantes eLemp,o public void distancia%ponto a( ; return dist%OFWFa.OFa.W(. @F onde dist representa o $onjunto de operaWes matemMti$as ne$essMrias para o&ter a distYn$ia entre GI,=H Ga#I,a#=H# 5o$V proRaRe,mente usarM a )uno 7ath.s'rt%( Xue de)ine a raiP Xuadrada de um double, no ! pre$iso )aPer nen0um import para usar 7ath.s'rt%(, mas ! pre$iso $onRerter os ar"umentos de float para double e o Ra,or de retorno de double para float. 5eja Xue no m!todo distancia , podemos o&ter a$esso aos atri&utos private O e W do ar"umento a, isto ! permitido porXue distancia ! um m!todo da mesma $,asse de a, em&ora no do mesmo o&jeto, uma maneira de proRer este tipo de a$esso para outras $,asses Gdistan$ia de reta a pontoH ! dotar a $,asse *onto de m!todos do tipo float retorna-/%void(. # 2H Es$o,0a um pro"rama imp,ementado anteriormente e ap,iXue en$apsu,amento, ana,ise a )un$iona,idade de sua $,asse# 5o$V teRe Xue imp,ementar mais m!todos^ Euais^ 1.I.1.2. 7M ATRIB7TO Q PUELIC

50

Neste tOpi$o pedimos Xue o ,eitor )aa uma Rariante do pro"rama anterior, a Qni$a di)erena ! Xue W deRe ser $o,o$ado na parte public da de)inio da $,asse podendo ser a$essado diretamente# (ara es$reRer a Rariante, tome o $Odi"o do pro"rama anterior e su&stitua pri."te float /F>. por pri."te float /. publi float >. //> pode ser acessado C0;*2-5',0)/ O&serRe Xue a"ora nada impede Xue Ro$V a$esse diretamente .' ap.>H011.1F por!m ap./H01.11 ! um erro# O&serRe em Xue parte GMreaH da $,asse $ada um desses atri&utos )oi de$,arado# EG*'(E(,0)/ 1H Crie os m!todos float retorna-/%void(F void altera-/%float a(. Xue deRem serRir para retornar o Ra,or armaPenado em / e para a,terar o Ra,or armaPenado em / respe$tiRamente# Crie tam&!m os respe$tiRos m!todos retorna e altera para o atri&uto ># 2H Eua, das se"uintes de$,araWes permite Xue se a$esse em main )0;*2-* os m!todos move e iniciali6a , en$apsu,ando todos os outros e,ementos da $,asse^ O&s#' A ordem das de$,araWes private e public pode estar inRertida $om re,ao aos eLemp,os anteriores#

aH public class *onto 1 publi float /. publi float >. publi void iniciali6a%float aF float b( ;/Ha. >Hb.@. publi void move%float d/F float d>( . ;/GHd/. >GHd>. @. 2. &H public class *onto 1 publi void iniciali6a%float aF float b( ;/Ha. >Hb.@. publi void move%float d/F float d>( . ;/GHd/. >GHd>. @. pri."te float /. pri."te float >. 2. $H public class *onto 1 publi void iniciali6a%float aF float b( ;/Ha. >Hb.@. pri."te void move%float d/F float d>( . ;/GHd/. >GHd>. @. publi float /. pri."te float >. 2. 1.I.2. ENCAPS7LAMENTO E "PACVA$ES%
52

Neste tOpi$o eLp,i$aremos o re$urso de pa$Sa"es $om Vn)ase nas opWes de en$apsu,amento re,a$ionadas , em 0erana eLp,i$aremos este re$urso $om Vn)ase no reuso de $Odi"o das pa$Sa"es o)ere$idas $om a ,in"ua"em# (a$Sa"es so $onjuntos de $,asses re,a$ionadas, estes $onjuntos so determinados in$,uindo uma ,in0a no topo de $ada arXuiRo indi$ando a Xua, pa$Sa"e perten$em as $,asses a,i de$,aradas# Se nen0uma ,in0a ! inserida assumeKse Xue todas as $,asses perten$em a uma pa$Sa"e sO# 1.I.2.1. ENCAPS7LAMENTO DE ATRIB7TOS E MQTODOS COM PACVA$ES O en$apsu,amento de atri&utos e m!todos atin"ido $om o uso de pa$Sa"es ! muito seme,0ante ao en$apsu,amento $om private e public , sO Xue a"ora o 7,imite de Risi&i,idade8 ! mais amp,o do Xue a $,asse# A Xuesto aXui ,eRantada ! se a $,asse ! Ris+Re, )ora do 7pa$Sa"e8 ou no# SO para ,em&rar, a Xuesto Xue do item anterior' 1#?#1, era se os m!todos e atri&utos eram Ris+Reis )ora da $,asse ou no# 5isi&i,idade das de$,araWes de uma $,asse, dentro de seu pa$Sa"e' (1B2IC (RI5ATE (ROTECTE* 7(AC>A<E8

Euando eLp,i$armos protected )orne$eremos um dia"rama $omp,eto dos modos de en$apsu,amento de m!todos e atri&utos, este dia"rama ! muito Qti, para a memoriPao# 7(a$Sa"es8 ! um re$urso da ,in"ua"em Xue permite )ormar "rupos de $,asses re,a$ionadas entre si de )orma Xue e,as o)eream )a$i,idades umas as outras# /a$i,idades estas Xue nem sempre so o)ere$idas ao usuMrio# 5amos montar uma pa$Sa"e de nome 4eometria $ontendo $,asses Xue representam e,ementos "rM)i$os tais $omo retas, $+r$u,os e pontos# A estrutura de diretOrio a&aiLo des$reRe a disposio dos arXuiRos deste eLemp,o' I2,(,0/ A=K) J"." /

Note Xue a pa$Sa"e 4eometria estM toda so& um diretOrio ou )o,der de mesmo nome, isto o$orre porXue a estrutura de pa$Sa"es deRe ser mapeada em uma estrutura de diretOrios para Xue suas $,asses possam ser a$0adas# Assim a $,asse !ava.awt.&olor estM dois n+Reis, portanto dois diretOrios a&aiLo na 0ierarXuia de pa$Sa"es )orne$ida $om a ,in"ua"em#

//&lasse ponto p" I"8e Geo(etri"#


53

public class *onto ; float /F>. //nenhu especificadorF defaultHpacLa$e public *onto%float a/Ffloat a>( //omita o valor de retorno: //$arante o estado do ob!eto ; this./Ha/. this.>Ha>. @ public float retornaO%( ; return /. @ public void move%float d/Ffloat d>( ; this./GHd/. this.>GHd>. @ public void mostra%( ; )>stem.out.println%?%?Gthis./G?F?Gthis.>G?(?(. @ @ //&lasse circulo p" I"8e Geo(etri"# public class &irculo ; float raioF/F>. //nenhum especificadorF defaulHpacLa$e public &irculo%float a/Ffloat a>Ffloat ar( //$arante o estado do ob!eto ; this./Ha/. this.>Ha>. this.raioHar. @ public void altera-raio%float a( ; this.raioHa. @ public float retorna-raio%( ; return this.raio. @ public void move%float d/Ffloat d>(
54

; this./GHd/. this.>GHd>. @ publi !lo"t %i-t"n i"+Ponto "p, 1 !lo"t % p# $$%i-t"n i" %o entro %o ir ulo "o ponto % p)+!lo"t,M"t5.-Jrt++%ouble, ++&3"p.&,K+&3"p.&,/+'3"p.',K+'3"p.',, ,# $$" e--o %ireto $$"o- "tributo- %e "p7 i-to porJue "- l"--e- perten e( "o (e-(o p" I"8e i! +% pLr"io, 1return r"io3% p# 2 el-e 1return % p3r"io# 2 2 public void mostra%( ; )>stem.out.println%?%?Gthis./G?F?Gthis.>G?F?Gthis.raioG?(?(. @ @ //Ar'uivo Ueta.!ava //&lasse Ueta p" I"8e Geo(etri"# public class Ueta ; *onto aFb. //idem F sao encapsulados como pacLa$e public Ueta%float a/Ffloat a>Ffloat b/Ffloat b>( ; aHnew *onto%a/Fa>(. bHnew *onto%b/Fb>(. @ publi !lo"t %i-t"n i"+Ponto "p, 1 $$(eto%o n"o i(ple(ent"%o $$" e--e li.re(ente o- "tributo- %o "r8u(ento Ponto $$%e (o%o " "l ul"r -u" %i-t"n i" " e-t" ret"7 e& opi")"p.&# return 4.4!# 2 public void mostra%( ; a.mostra%(. b.mostra%(. @ @
55

//&lasse principalF Ar'uivo *rincipal.!ava i(port Geo(etri".K# public class *rincipal ; public static void main%)trin$ ar$s<=( ; &irculo acirc. $$" ir .&)+!lo"t,14.4# erro! "tributo en "p-ul"%o +(o%o p" I"8e, *onto apto. acircHnew &irculo%%float(1.1F%float(1.1F%float(0.1(. acirc.mostra%(. aptoHnew *onto%%float(4.1F%float(3.1(. apto.mostra%(. :'-te(.out.println+;Di-t6; / " ir .%i-t"n i"+"pto,,# @ @ %1F1F0( %4F3( 3ist:4 As de$,araWes em ne"rito dos arXuiRos a$ima' p" I"8e Geo(etri".K# e i(port Geo(etri".K deRem ser inseridas ,o"o no in+$io do arXuiRo, sO podendo ser pre$edidas por $omentMrios# EListe uma Xuantidade "rande de 7pa$Sa"es8, jM de)inidas na ,in"ua"em, as Xuais a&ordaremos na se"unda parte# (or 0ora &asta sa&er Xue jM estamos usando de$,araWes da 7pa$Sa"e8 !ava.lan$ , mesmo sem espe$i)i$ar import !ava.lan$.Aa no in+$io de nossos arXuiRos# Isto o$orre porXue este pa$Sa"e ! importado imp,i$itamente em todos os pro"rama Java# O .A usado em import 4eometria.Aa tem o si"ni)i$ado de todas as $,asses da pa$Sa"e 4eometria, o asteris$o ! usado $omo um $orin"a, um Ra,or Xue pode su&stituir todos os demais, assim $omo em a,"uns sistemas opera$ionais# Em&ora de )M$i, uti,iPao, este $on$eito $onstitui uma inoRao $om re,ao a C]]# Em -odu,aK6 podeKse o&ter um e)eito seme,0ante uti,iPando de$,araWes de $,asses Gtipos o&jetosH no mesmo mOdu,o e inter)a$es Xue no eLportam tudo o Xue eListe no mOdu,o, assim as $,asses de$,aradas no mesmo mOdu,o o)ere$em )a$i,idades umas as outras# O modo de a$esso de atri&utos e m!todos $0amado 7)riend,.8 ou pa$Sa"e ! propor$ionado pe,o uso de 7pa$Sa"es8 e permite pro"ramar de maneira e)i$iente Gsem muitas $0amadas de m!todosH e se"ura G$om en$apsu,amentoH# Se os tri&utos da $,asse *onto )orem espe$i)i$ados $omo 7)riend,.8 ou pa$Sa"e GeXuiRa,e a nen0um espe$i)i$adorH, e,es podero ser a$essados .,'*-&;*2-* Gsem $0amadas do tipo ap.retorna-/%(. H pe,a $,asse Ueta Xue perten$e a mesma 7pa$Sa"e8, mas $ontinuam en$apsu,ados para as $,asses eLternas ao 7pa$Sa"e8 ou seja para o usuMrio# En)atiPamos o termo 7diretamente8 porXue o&ter a$esso a um atri&uto Ria m!todo ! &em mais $ustoso do Xue a$essMK,o diretamente, mas se Ro$V pro"ramar usando pa$Sa"es, "an0arM o &ene)i$io da e)i$iVn$ia sem perder o do en$apsu,amento#

56

1.I.2.2.

ENCAPS7LAMENTO DE CLASSES COM PACVA$ES

At! a"ora, t+n0amos de$,arado todas as $,asses $omo public Gpubli class Comeclasse ;@H, em&ora sem eLp,i$ar eLatamente porXue# Este tOpi$o trata da possi&i,idade de o pro"ramador desejar $riar uma $,asse para seu uso prOprio e no )orne$VK,a para o usuMrio# O Xue a ,in"ua"em Java permite neste sentido !' 1K A $riao de $,asses Xue sO podem ser usadas dentro de pa$Sa"es, ou seja, Ro$V no pode de$,arar um o&jeto desta $,asse eLternamente ao pa$Sa"e# 4K A $riao de $,asses Xue podem ser usadas somente pe,as $,asses presentes no mesmo arXuiRo, em&ora no ten0amos mostrado, um arXuiRo pode $onter a de$,arao de mais de uma $,asse desde Xue somente uma de,as seja public# O en$apsu,amento de $,asses se"ue uma sintaLe seme,0ante ao en$apsu,amento de m!todos e atri&utos, ou seja' atraR!s de Xua,i)i$adores ou modi)i$adores' [ualificador3a&lasse class Come3a&lasse ; /AAtributos e metodos A/ @ Os Xua,i)i$adores so' public Estas $,asses so sempre a$ess+Reis em todos os pa$Sa"es do seu $Odi"o# Somente uma $,asse pu&,i$a ! permitida por arXuiRo, e o arXuiRo deRe ter o mesmo nome da $,asse# private Estas $,asses so a$ess+Reis somente pe,as $,asses de$,aradas no mesmo arXuiRo# 1m arXuiRo pode possuir RMrias $,asses private, mas uma Qni$a $,asse public# Nada espe$i)i$ado 7pa$Sa"e8 Estas $,asses podem ser a$essadas no pa$Sa"e Xue e,as perten$em, se nen0um pa$Sa"e ! espe$i)i$ado, e,as perten$em ao pro"rama#

GeListem outros Xua,i)i$adores, 230 re,a$ionados $om en$apsu,amento Xue sero eLp,i$ados depoisH

Seus pro"ramas no pre$isam ne$essariamente )aPer uso destes re$ursos de en$apsu,amento, mas todo $Odi"o es$rito para ter$eiros deRe uti,iPMK,os intensamente# 5o$V teRe ter notado Xue sempre de)inimos uma $,asse por arXuiRo, isto ! )eito porXue a ,in"ua"em sO permite uma $,asse public por arXuiRo, as outras tem Xue ser private ou pacLa$e# 1m eLemp,o de uti,iPao' ao $riar uma $,asse ,ista ,i"ada a,"u!m pode a$0ar $onReniente de)inir uma $,asse nO para ser usada somente pe,a $,asse listali$ada# 1ma opo ! de)inir a $,asse nO $om modo de en$apsu,amento' pa$Sa"e# O $,iente de sua $,asse ,ista ,i"ada no pre$isa sa&er Xue esta $,asse se &aseia em uma $,asse Co# 5amos imp,ementar esta id!ia no eLemp,o a se"uir, tomarei o $uidado de )aPVK,o &em simp,es pois estamos no $omeo do tutoria,' I2,(,0/ A=K) J"." /

pacLa$e listas. //classe 5istaF classe Co ar'uivo 5ista.!ava class Co ; //sem especificador de modo de acesso na classe
5"

private char info. //se eu !a tivesse ensinado protected usaria em lu$ar de private private Co pro/. //?ponteiro? para o pro/imo no Co%char iFCo p( //construtor ; infoHi. pro/Hp. @ char retorna-info%( //retorna valor do campo ; return info. @ void altera-info%char i( //altera valor do campo ; infoHi. @ void altera-pro/%Co p( //altera valor do pro/imo no ; pro/Hp. @ Co retorna-pro/%( //retorna referencia ao pro/imo no ; return pro/. @ @ public class 5ista ; private Co cabeca. //inicio da lista private int elementos. //numero de nos na lista public 5ista%( //construtor ; cabecaHnull. elementosH1. @ public void insere%char a( ; //reali6ada em muitos mais pacos para facilitar apredi6ado elementosGG.
5#

Co temp. if %cabecaHHnull( cabecaHnew Co%aFnull(. else; tempHnew Co%aFnull(. temp.altera-pro/%cabeca(. cabecaHtemp. @ //se cabeca HH null tambem funciona @ public char remove%( ; Co removido. if %cabecaHHnull( return X1X. //elementosHH1 else ; elementosQQ. removidoHcabeca. cabecaHcabeca.retorna-pro/%(. return removido.retorna-info%(. @ @ public int retorna-elementos%( ; return elementos. @ public void mostra%( //nao deveria estar a'uiF e so para debu$ar ; Co tempHcabeca. while %temp:Hnull( ; )>stem.out.print% ?<? G temp.retorna-info%( G ?=Q? (. tempHtemp.retorna-pro/%(. @ )>stem.out.print%?null?(. )>stem.out.println%(. @ @ A"ora Ro$V pode es$o,0er entre duas RersWes do pro"rama prin$ipa,, a Rerso da esXuerda imp,ementa um ,oop de entradas do te$,ado Xue permite testar iteratiRamente a $,asse 5ista, no eLp,i$aremos ainda deta,0es deste ,oop, apenas $omo usMK,o# *V uma o,0ada no $Odi"o desta Rerso de pro"rama prin$ipa,, se Ro$V a$0aK,o $omp,i$ado pode usar a se"unda Rerso presente a direita deste arXuiRo e em uma se"unda ,eitura retornar a Rerso da esXuerda# Na Rerso $om o ,oop G1KesXuerdaH a ,etra MiN indi$a o $omando ,nsero, se Ro$V di"itar iBenterD inserirM o $ara$tere BenterD na sua ,ista, o Xue norma,mente no ! desejado, di"ite icBenterD para inserir o $ara$tere c# MrN indi$a 'emoo, e M(N indi$a Xue a ,ista deRe ser ;ostrada na te,a# (e,o resu,tado do pro"rama Ro$V entenderM me,0or esses $omandos rudimentares de teste#
5,

5o$V pode a$0ar rudimentar pro"ramar assim, mas ! um &om m!todo, RerM $omo esta mesma ,ista depois de testada assim pode )i$ar &onita se inserida em um applet e mostrada "ra)i$amente# Es$o,0a uma imp,ementao para entender e $ompi,ar'
//&lasse principalF Ar'uivo *rincipal.!ava versao 0 import !ava.io.3ata9nput)tream. import listas.A. class *rincipal ; public static void main%)trin$ ar$s<=( ; 5ista mlHnew 5ista%(. //mlHminhalista char oFe. //oHopcaoF eHtemporario 3ata9nput)tream meu3ata9nput)tream Hnew 3ata9nput)tream%)>stem.in(. //&lasse principalF Ar'uivo *rincipal.!ava versao 2 import !ava.io.3ata9nput)tream. import listas.A. class *rincipal ; public static void main%)trin$ ar$s<=( ; char e. 5ista mlHnew 5ista%(. //mlHminhalista ml.insere%XaX(. //mesma se'uencia da versao com menu //de pro$rama principal ml.mostra%(.

tr>; do ml.insere%XvX(. ; ml.insere%XaX(. o H%char(meu3ata9nput)tream.read%(. ml.insere%X!X(. switch %o( ; ml.mostra%(. case XiX: eH%char(meu3ata9nput)tream.read%(. eHml.remove%(. ml.insere%e(. )>stem.out.println%e(. breaL. ml.mostra%(. case XrX: eHml.remove%(. ml.remove%(. //embora o metodo )>stem.out.println%e(. //remove retorne um valor //)>stem.out.flush%(. ml.remove%(. //nestas chamadasF breaL. //este valor de retorno eX case XmX: ml.remove%(. //i$norado ml.mostra%(. ml.mostra%(. )>stem.out.println%(. //)>stem.out.flush%(. @ breaL. @ default: . @ @ while %o:HX'X(.@ catch %2/ception erro( ; /A nao faco nada A/ @ @ @

ia m ?"@3null iviai! m ?9@3?"@3?.@3?"@3null r ! m


61

<a=Qnull <!=Q<a=Q<v=Q<a=Qnull ! <a=Q<v=Q<a=Qnull null

?"@3?.@3?"@3null r " r . r " m null ' //COMEN<ARIO: Os pro"ramadores Xue no esto a$ostumados $om $o,eta automMti$a de ,iLo podem a$0ar estran0o Xue retiramos o primeiro e,emento da ,ista simp,esmente perdendo proposita,mente a re)erVn$ia para e,e ao emendar o nO $a&ea $om o restante'

No se preo$upem, a ,in"ua"em $uida 1.6.

da desa,o$ao#

TIPO ABSTRATO DE DADOS

Tipo a&strato de dados, TA*, se preo$upa em propor$ionar uma a&strao so&re uma estrutura de dados em termos de uma inter)a$e &em de)inida# O en$apsu,amento mant!m a inte"ridade do o&jeto eRitando a$essos inesperados# O )ato de o $Odi"o estar armaPenado em um sO ,u"ar $ria um pro"rama modi)i$MRe,, ,e"+Re,, $oeso# A id!ia ! $riar $,asses Xue o$u,tem a sua representao interna as Xuais podem "era,mente ser mode,adas atraR!s de 7s0oppin" ,ist approa$08# (or 7s0oppin" ,ist approa$08 entenda Xue Ro$V pode mode,ar sua $,asse atraR!s das operaWes Xue e,a suporta, ou seja, antes de $omear a imp,ementar ! re$omendMRe, Xue se )aa uma ,ista Gseme,0ante a uma ,ista de $omprasH das operaWes desejadas para a $,asse e depois se es$o,0a a representao interna adeXuada# Comp,etando este $on$eito amp,o podemos diPer Xue uma $,asse imp,ementa um tipo a&strato de dados# So eLemp,os de tipos a&stratos de dados' 1ma MrRore &inMria $om as operaWes usuais de insero, remoo, &us$a ### 1ma representao para nQmeros ra$ionais Gnumerador, denominadorH Xue possua as operaWes aritm!ti$as &Msi$as e outras de $onRerso de tipos# 1ma representao para Yn"u,os na )orma G<raus, -inutos, Se"undosH# Tam&!m $om as operaWes re,a$ionadas, &em $omo as operaWes para $onRerter para radianos, entre outras# Tipo a&strato de dados ! um $on$eito muito importante em pro"ramao orientada a o&jetos e por este motiRo ! ,o"o apresentado neste tutoria,# Os eLemp,os se"uintes so simp,es por no podermos usar todos os re$ursos da ,in"ua"em ainda# *ada esta importYn$ia, a medida em Xue
60

)ormos introduPindo noRos $on$eitos eLemp,i)i$aremos $om ap,i$aWes na imp,ementao tipos a&stratos de dados# EG*'(E(,0)/ 1H 1se a estrat!"ia da ,ista de $ompras G7s0oppin" ,ist approa$08H para mode,ar a inter)a$e do tipo a&strato de dados *onto, tente pensar nas operaWes Xue "era,mente se ap,i$am a pontos em "eometria, tais $omo distYn$ia a outros e,ementos, rotao em torno de outro ponto# Reimp,emente este TA* adi$ionando as inQmeras a,teraWes# 1.6.1. TAD FRA!O Neste eLemp,o imp,ementaremos o tipo a&strato de dados )rao# Baseado no $on$eito de nQmero ra$iona, do $ampo da matemMti$a# A,"umas operaWes no )oram imp,ementadas por serem seme,0antes is eListentes# 1ma ap,i$ao deste TA*s $onsiste em a,"uns $M,$u,os onde pode o$orrer muita perda de pre$iso ao ,on"o do pro"rama deRido ao uso de aritm!ti$a de ponto ),utuante# (or eLemp,o' )aa eLatamente o se"uinte em sua $a,$u,adora' 5 / 3 A 3 F Xua, ! o resu,tado^ Ao terminar este pro"rama teste a se"uinte operao $om )raWes %5/3(A%3/0(, Xua, serM o resu,tado^ RES7MO DAS OPERAWES MATEM:TICAS ENVOLVIDAS/ Simp,i)i$ao de )rao' %a/b(H% %a/mdc%aFb(( / %b/mdc%aFb(( ( Onde mdc%aFb( retorna o mMLimo diRisor $omum de a&# Soma de )rao' %a/b(G%c/d(H% %a.dGc.b( / b.d ( simp,i)i$ada# -u,tip,i$ao de )rao' %a/b( A %c/d(H % %aAc( / %bAd( ( simp,i)i$ada# I"ua,dade' %a/b(HH %c/d( se aAd HH bAc. No i"ua,dade' %a/b( :H %c/d( se aAd :H bAc -aior ou i"ua, Xue' %a/b(%c/d( se aAd bAc

"SHOPPIN$ LIST APPROACH% PARA O TAD FRA!O/ GO $onjunto de operaWes imp,ementadas esta mar$ado $om # A )ina,iPao dessa s0oppin" ,ist &em $omo do pro"rama ! deiLada $omo eLer$+$io, o Xua, no deRe ser di)+$i, pois Rendo a imp,ementao da soma, o ,eitor o&t!m Xuase Xue de maneira direta a imp,ementao da su&trao, o mesmo o$orre para as demais operaWesH'

Construtor Gre$e&e dois ar"umentos num!ri$os inteirosH Simp,i)i$ao da )rao GdiRiso do numerador e denominador por mMLimo diRisor $omumH Soma de )rao Gm!todo re$e&endo ar"umento do prOprio tipo )raoH Su&trao de )rao -u,tip,i$ao *iRiso Teste de i"ua,dade Teste de desi"ua,dade Teste de maior ou i"ua, Xue Teste de menor ou i"ua, Xue Teste de maior Xue Teste de menor Xue Impresso na te,a
62

Rotina de $riao $om entrada de numerador e denominador pe,o te$,ado ConRerso para double ConRerso para lon$ Operao de a,terao do numerador Operao de a,terao do denominador Retorno do Ra,or do numerador e denominador Outras operaWes Xue o ,eitor ju,"ar ne$essMrias
TXPICOS ABORDADOS/ Construtores em "era,, $riao de m!todos de $onRerso de tipos, $0amadas de m!todos do mesmo o&jeto, operador m Xue retorna o resto da diRiso de dois inteiros# CONSIDERAWES DE PROJETO/ A representao es$o,0ida para o numerador e o denominador da )rao serM &aseada no tipo int# O )ormato es$o,0ido para os m!todos Xue imp,ementam as operaWes !' Iipo3o alor3eUetorno ComedaVperacao%Iipo3oVperando alor3oVperando(. Nesse )ormato um dos operandos ! a prOpria )rao Xue estM re$e&endo a $0amada de m!todo o outro ! passado $omo ar"umento# Outros )ormatos eXuiRa,entes poderiam ter sido adotados# 1m dos poss+Reis )ormatos )aP $om Xue os dois operandos sejam passados $omo ar"umentos e a )rao Xue estM re$e&endo a $0amada de m!todo eLe$uta a operao para esses ar"umentos retornando o Ra,or# 5o,taremos a dis$utir essas a,ternatiRas de imp,ementao# Se durante o pro$esso de $onstruo de seu pro"rama, o$orrer a repetio de um $erto tre$0o de $Odi"o nos diRersos m!todos Grepetio da rotina de simp,i)i$ao nos m!todos de soma, su&traoH, $onsidere a opo de de)inir este tre$0o de $Odi"o $omo um m!todo em separado# Se este m!todo no )or um m!todo Xue deRa $ompor, parti$ipar, da inter)a$e, mas Xue ainda assim tem seu padro muito repetido, $onsidere a possi&i,idade de de)iniK,o $omo private Gm!todo md$H# No eListe uma re"ra de ouro Xue di"a eLatamente $omo projetar as suas $,asses para Xue e,as preen$0am reXuisitos de porta&i,idade, ro&usteP, ),eLi&i,idade# TodaRia uma re$omendaWes importantes podem ser )eitas para eRitar re)ormu,aWes durante o pro$esso de pro"ramao' 7No e$onomiPe tempo na )ase de projeto# (ro$ure antes de pro"ramar, simu,ar o uso de uma $,asse, seja menta,mente ou atraR!s de um protOtipo#8 O $M,$u,o do mMLimo diRisor $omum G mdcH de dois inteiros no tem nada a Rer $om as operaWes a serem o)ere$idas por )raWes, teria a Rer $om as operaWes o)ere$idas por um o&jeto )a$i,idades de $M,$u,os Gmdc%aFb( F fatorial%b( F fibonaci%/(F combinacoes%nFL( H# No entanto a $,asse )rao pre$isa da operao mdc# O$orre Xue jM estudamos uma maneira de imp,ementar um m!todo em uma $,asse e no o)ere$VK,o atraR!s da inter)a$e, ! o Xua,i)i$ador private# Em C]] proRaRe,mente o pro"ramador imp,ementaria mdc $omo uma )uno iso,ada# IMPLEMENTA!O/

//IA3 fracao. //Pile Pracao.!ava class Pracao ; private int numFden. pri."te int mdc%int nFint d( //numeradorF denominador //metodo private ma/imo divisor comum
63

//metodo de 2uclides GQ 311 anos A&. ; if %nB1( nHQn. if %dB1( dHQd. while %d:H1( ; int rHn S d. nHd. dHr. @ return n. @ public Pracao%int tFint m( ; numHt. denHm. this.simplifica%(. @ public void simplifica%( ; int commd. commdHmdc%numFden(. numHnum/commd. denHden/commd. if %denB1( ; denHQden. numHQnum.@. @

//SH7V3HUesto da divisao inteira.

//construtor comum

//chamada para o mesmo ob!eto.

//divide num e den pelo mdc%numFden( //divisor comum //move sinal para cima

//operacoes matematicas basicas public Pracao soma %Pracao !( ; Pracao $. $Hnew Pracao%%numA!.den(G%!.numAden(FdenA!.den(. return $. @ public Pracao multiplicacao%Pracao !( ; Pracao $. $Hnew Pracao%numA!.numFdenA!.den(. return $. @ //operacoes de comparacao public boolean i$ual%Pracao t( ; return %%numAt.den(HH%denAt.num((. @

64

public boolean diferente%Pracao t( ; return %%numAt.den(:H%denAt.num((. @

public boolean maioroui$ual%Pracao t( ; return %%numAt.den(DH%t.numAden((. @ //operacoes de input output public void mostra%( ; )>stem.out.println%?%? G num G ?/? G den G ?(?(. @ //operacoes de conversao de tipos public double convertedbl%( ; double dbl. dblH%%double(num/%double(den(. return dbl. @ public int converteint%( ; int itn$. itn$Hnum/den. return itn$. @ public void altera-num%int nn( ; numHnn. @ public void altera-den%int nd( ; denHnd. @ public int retorna-num%( ; return num. @ public int retorna-den%( ; return den. @ @ class *rincipal ; public static void main%)trin$ ar$s<=(
65

//e/ibe fracao no video

//converte para double

//converte para int

; Pracao aFbFc. aHnew Pracao%5F3(. bHnew Pracao%2F6(. )>stem.out.print%?2sta eX a fracao a: ?(. a.mostra%(. )>stem.out.print%?2sta eX a fracao b: ?(. b.mostra%(. cHa.soma%b(. )>stem.out.print%?c de aGb: ?(. c.mostra%(. )>stem.out.print%?aAb: ?(. cHa.multiplicacao%b(. c.mostra%(. )>stem.out.print%?aGb: ?(. cHa.soma%b(. c.mostra%(. )>stem.out.print%?aDHb: ?(. )>stem.out.println%a.maioroui$ual%b((. )>stem.out.print%?aHHb: ?(. )>stem.out.println%a.i$ual%b((. )>stem.out.print%?a:Hb: ?(. )>stem.out.println%a.diferente%b((. )>stem.out.print%?%int(a ?(. )>stem.out.println%a.converteint%((. )>stem.out.print%?%double(a ?(. )>stem.out.println% a.convertedbl%((. @ @ 2sta eN a fracao a: %5/3( 2sta eN a fracao b: %0/3( c de aGb: %2/0( aAb: %5/,( aGb: %2/0( aDHb: true aHHb: false a:Hb: true %int(a 0 %double(a 0.6666" $$COMEN<ARIO:6

//c%aGb(

1ma imp,ementao $omp,eta do tipo de dados )rao tem Xue $0e$ar por 7oRer),oZ8 do numerador e denominador o Xue o$orre )reXuentemente Xuando se tra&a,0a $om nQmeros primos
66

entre si Gno podem ser simp,i)i$adosH, uma poss+Re, so,uo para este pro&,ema ! )aPer uma aproLimao eTou a,terar a representao interna da )rao para um tipo $om maior numero de &its Gde int para lon$H# *e Xua,Xuer )orma estas eLtensWes so eLer$+$ios aRanados pois a Q,tima de,as enRo,Re uso de 0erana# EG*'(E(,0)/ 1H Comp,ete o tipo )rao $om os m!todos )a,tantes da 7s0oppin" ,ist approa$08 lon$ retorna-den%void( ;return den.@ lon$ altera-den%int a( ;denHa.@ Considerando Xue os atri&utos de$,arados em private no so a$ess+Reis )ora da $,asse, des$reRa a uti,idade desses m!todos# E,es so Qteis se usados pe,os prOprios m!todos de )rao^
1

2H Imp,emente o tipo a&strato de dados nQmero $omp,eLo $om as operaWes matemMti$as inerentes# /aa antes um projeto dos m!todos Xue sero imp,ementados, des$reRa Gdeta,0adamenteH as operaWes matemMti$as ne$essMrias# Eue )orma de representao Ro$V es$o,0erM' $oordenadas po,ares ou retan"u,ares^

3H (esXuise so&re matriPes em Java: 0.3.2# Crie um tipo a&strato de dados matriP Xue suporte atri&uiWes e ,eituras de $!,u,as $ontendo e,ementos do tipo float# Crie outros m!todos para este tipo a&strato de dados $omo mu,tip,i$ao por uma $onstante# 4H Imp,emente o tipo a&strato de dados re,O"io, pesXuise as operaWes norma,mente o)ere$idas por re,O"ios reais, o Qni$o o&jetiRo ! mar$ar as 0oras# Se Ro$V pre$isar de inspirao para este eLer$+$io, $onsu,te o eLemp,o da $,asse &ontador e seus eLer$+$ios# 1.6.2. :<RING:, 7M MODELO DE CLASSE A"ora Xue jM estamos pro"ramando a,"uns tipos a&stratos de dados, estM na 0ora de apresentar um eLemp,o Xue mostre $omo $omportamento ! importante para um TA*# SO Xue desta ReP )i$aremos do ,ado do $,iente, do usuMrio desse tipo a&strato de dados e no do ,ado do pro"ramador# Estudaremos a $,asse )trin$ o)ere$ida pe,a ,in"ua"em# Nos tutoriais desta s!rie, )eitos para outras ,in"ua"ens GC]], -odu,aK6H, re$omendMRamos $omo eLer$+$io a imp,ementao do tipo a&strato de dados strin", Xue deReria suportar operaWes de $on$atenao, su&strin", a$esso a e,emento, et$# Este eLer$+$io no )aP sentido em Java porXue o tipo )trin$, ! )orne$ido $om a ,in"ua"em $omo uma $,asse da pa$Sa"e !ava.lan$ Xue ! importada imp,i$itamente em todos os pro"ramas a,!m disso a sua imp,ementao desta $,asse ! &astante $omp,eta# A de$,arao de )trin$s se dM da mesma )orma Xue os outros o&jetos' )trin$ minha)trin$. # O $ompi,ador o)ere$e uma )a$i,idade sintMti$a para a ini$ia,iPao $om Ra,ores ,iterais' )trin$ testeHJVla meu ami$oK. //ob!eto instanciado com valor Vla meu ami$o (ara $on$atenar )trin$s use o operador ]# Os operandos podem no ser )trin$s, nesse $aso sero $onRertidos para o&jetos desta $,asse, por eLemp,o se um dos ar"umentos )or um inteiro, o o&jeto )trin$ $orrespondente $onterM o Ra,or ,itera, deste inteiro# )>stem.out.println%teste G J Andre:K(. //Vla meu ami$o Andre:
Estes eLer$+$ios so $onsiderados di)+$eis# A re$omendMRe, somente es&oar o projeto de,es e depois, a imp,ementao pode ser deiLada $omo eLer$+$io das prOLimas seWes#
1

6"

testeGHJ Andre:K. //atalho para concatenacao se$uida de atribuicao: testeHtesteGK Andre:K )>stem.out.println%teste(. //totalmente e'uivalente a primeira (ara o&ter o $omprimento em nQmero de $ara$teres de uma )trin$, $0ame o m!todo len$th%( para a )trin$ em Xuesto# (ara o&ter o $ara$tere presente na posio C da )trin$, $0ame o m!todo charAt%(. # Note Xue o primeiro $ara$tere da )trin$ estM na posio Pero' char um&harHteste.charAt%6(. //um char recebe ZuN (ara o&ter uma su&strin", $0ame o m!todo substrin$%int aFint b(. onde o primeiro ar"umento ! o +ndi$e do in+$io da su&strin" e o se"undo ! o +ndi$e do )im da su&strin"s, os $ara$teres em a e & tam&!m so in$,u+dos' )trin$ a)trHteste.substrin$%1F2(. //a)tr recebe ola (ara trans)ormar todos os $ara$teres de uma )trin$ em ,etras maiQs$u,as &asta $0amar o m!todo to Tpper&ase%(. testeHteste.toTpper&ase%(. //teste fica i$ual a V5A 72T A794V 1m m!todo interessante para usar em $0e$a"em de padrWes em teLto ! inde/Vf%)trin$ bus'ue(. # Este m!todo retorna o +ndi$e posio ini$ia, de o$orrVn$ia de &usXue na )trin$ para a Xua, )oi $0amado o m!todo' teste.inde/Vf%J72TK(. //retorna 4 Ana,o"amente, last9nde/Vf%)trin$ bus'ue( , retorna o +ndi$e de o$orrVn$ia da su&strin", sO Xue a"ora do pro$urando do )im para o $omeo# teste.inde/Vf%J7K(. //resulta em , %lo$o a se$uir do ultimo A 'ue esta na posicao #( (ara $omparao de i"ua,dade use' test.e'uals%JV5A 72T A794VK(. //retorna valor booleano A,!m disso, a $,asse )trin$ de)ine m!todos para $onRerso dos tipos &Msi$os para seus Ra,ores na )orma de )trin$F Ro$V pode a$0ar esses m!todos um pou$o estran0os, pois e,es tem todos os mesmos nomes e no pre$isam de um o&jeto para serem $0amados, e,es so $0amados para a $,asse' )trin$.valueVf%3(. //ar$umento e naturalmente um inteiroF retorna J3K )trin$.valueVf%3.0405(. //ar$umento e doubleF retorna J3.0405K Os m!todos de nome valueVf so uma padroniPao de m!todos de $onRerso entre tipos en$ontrados em a,"umas das $,asses pr!Kde)inidas na ,in"ua"em, prin$ipa,mente nas $,asses 7Zrappers8 Xue )oram eLemp,i)i$adas $om a $,asse 9nte$er#

class )trin$Iest ; public static void main %)trin$ ar$s<=( ; )trin$ testeH?Vla meu ami$o?. )>stem.out.println%teste G ? Andre:?(. //Vla meu ami$o Andre: testeGH? Andre:?. //atalho para concatenacao se$uida de atribuicao )>stem.out.println%teste(. //totalmente e'uivalente a primeira char um&harHteste.charAt%5(. //um char receber ZeN )>stem.out.println%?Andre ?Gum&harGteste.substrin$%3F03((. testeHteste.toTpper&ase%(. //teste fica i$ual a V5A 72T A794V AC3U2: for %int iH1.iBteste.len$th%(.iGG( //imprimindo caracteres um a um ; )>stem.out.print%teste.charAt%i((. @
6#

)>stem.out.println%(. //pula uma linha )>stem.out.println%teste.inde/Vf%?A794V?((. //retorna # )>stem.out.println%teste.inde/Vf%?biba?((. //nao achaF retorna Q0 )>stem.out.println%teste.last9nde/Vf%?A794V?((. //retorna # )>stem.out.println%)trin$.valueVf%3.0405f((. //7etodo chamado para a classe @ @ Vla meu ami$o Andre: Vla meu ami$o Andre: Andre e meu ami$o V5A 72T A794V AC3U2: # Q0 # 3.0405 $$COMEN<ARIO: O $Odi"o )onte dispon+Re, $om o $ompi,ador $onstitui uma Otima )onte de aprendiPado so&re $omo $onstruir $omponentes de so)tZare reuti,iPMReis no esti,o de pro"ramao orientada a o&jetos, ,eiaKo sempre Xue estiRer dispon+Re, e Xuando no estiRer, preste ateno na sua inter)a$e# 5o$V deRe ter notado Xue eL$eto pe,o m!todo toTpper&ase%( a $,asse )trin$ no permite a,teraWes no seu estado depois de ter sido $riada# Isto de$orre da de$iso do 7Java team8 de imp,ementar duas $,asses para "arantir a )un$iona,idade e se"urana no uso de strin"s, so e,as' )trin$ e )trin$Euffer# )trin$Euffer permite ser modi)i$ada, a&aiLo apresentamos uma ta&e,a de seus prin$ipais m!todos, para maiores in)ormaWes $onsu,te a do$umentao de !ava.lan$#f T&@*>& .* ;F-0.0) .& (>&))* :trin8Eu!!er )trin$Euffer enderecoHJhttp://www.!ava.comK. //2rro: 2sta facilidade para instancia\]o n]o R permitida para a classe )trin$EufferF ao envRs disso use o construtor descrito abai/o. )trin$Euffer enderecoHnew )trin$Euffer%Jhttp://www.!ava.comK(. //a$ora sim estaN correto endereco.append%?/fim.html?(. //concatena e atribuiF forma: Jhttp://www.!ava.com/fim.htmlK endereco.charAt%5(. //retorna o caractere Z/N )>stem.out.println%endereco G K/outro.htmlK(. //o operadorG tambem funciona para )trin$Euffer endereco.insert%05F?soft?(. //forma Jhttp://www.!avasoft.com/fim.htmlK endereco.set&harAt%25FNVN(. //forma Jhttp://www.!avasoft.com/fVm.htmlK )>stem.out.println%endereco.to)trin$%((. //retorna ob!eto )trin$ e'uivalente EG*'(E(,0)' 1H -e,0ore um dos eLer$+$ios anteriores introduPindo um nome para o o&jeto# Este nome pode ir nas sa+das de te,a eLe$utadas pe,o o&jeto e ! o nome dado para o $onstrutor $omo uma )trin$# No se esXuea de proRer m!todos $omo )trin$ $et-name%(# Y2H
6,

Este ! um eLer$+$io aRanado# Bus$a de padrWes em teLto ! uma operao &astante $omum em editores# A &us$a de in)ormaWes na internet Xuando )eita por pa,aRras $0aRe, ! eLe$utada por ap,i$atiRos Xue podem ter $omo estrat!"ia a $onta"em do nQmero de o$orrVn$ias de $ertas pa,aRras nos teLtos $adastrados# Neste eLer$+$io Ro$V )arM parte desse tra&a,0o de &us$a de in)ormaWes, eu Rou te orientar $omo' Crie um m!todo Xue a$eita $omo ar"umento uma )trin$ "rande Xue pode ter Rindo de RMrias )ontes Gno importa XuaisH# Este m!todo pode perten$er a uma $,asse de nome 2statisticas3eIe/to e deRe Xue&rar o ar"umento )trin$ em pa,aRras separadas por espaos GRo$V jM pode )aPer isso $om os m!todos $on0e$idos, mas ta,ReP Xueira usar a $,asse )treamIoLeni6erH# (ara $ada uma destas pa,aRras este m!todo )aP uma &us$a na estrutura de armaPenamento de pa,aRras da $,asse, se a pa,aRra no $onstar, deRe ser in$,u+da $om mu,tip,i$idade 1, $aso e,a $onste na estrutura, apenas sua mu,tip,i$idade deRe ser in$rementada# 1m pro&,ema pode sur"ir# A estrutura deRe ser $apaP de $res$er de taman0o durante as RMrias $0amadas de m!todos $om Strin"s para serem pro$essadas# Se Ro$V usar Retor uma opo ! rea,o$ar o Retor $om o do&ro de espaos# Outra opo ! usar uma ,ista ,i"ada# 3H Crie uma $,asse Xue a"re"a um stream de entrada de dados ,i"ado ao te$,ado# Co,oXue esta $,asse $omo intermediMria na re$epo dos dados de modo Xue e,a testa para todo $ara$tere ,ido se e,e ! i"ua, ao $ara$tere gnnN# Se o $ara$tere ,ido )or i"ua, a gnnN e,e deRe ser retirado da )trin$ ,ida Guse os m!todos su&strin" e $on$atenao ensinadosH# /aa $om Xue a $0amada do m!todo readline de sua $,asse dispare o a $0amada do m!todo readline do stream a"re"ado ne,a# Resumindo ' sua $,asse atuarM $omo um )i,tro de dados do te$,ado# -antendo a ana,o"ia do eLemp,o introdutOrio so&re )treams, estaremos ,idando $om $oneLWes entre $anos, ou seja para os dados $0e"arem do te$,ado ao seu pro"rama e,es deRem passar pe,a sua $,asse )i,tro# 1.6.3. TAD E ALOCA!O DINZMICA. Este eLemp,o $ria um tipo a&strato de dados matriP &idimensiona, de inteiros %int(# O ,eitor pode a$0ar estran0o Xue para representar esta matriP usamos um Retor, mas ! Xue isto traP a,"umas Ranta"ens' R*='*)*2-&D30 >,2*&' .* B;& ;&-',L/ (odeKse representar uma matriP de Xua,Xuer dimenso em um Retor# 5eja o eLemp,o de uma matriP &idimensiona, de inteiros mostrada no )ormato indice5inear:valorArma6enado. Os +ndi$es ,ineares Ro de 0 at! n2. -atriP' 1'6 4'64 '46 ?'3B :'41 @'B@ 6'1 C'14 3'64 '46 ?'3B C'14 :'41 @'B@ 3'64

5etor eXuiRa,ente' 1'6 4'64 6'1

5anta"em da representao ,inear GRetorH' para re)eren$iar uma posio "astaKse somente um inteiro $ontra dois da representao matriP# (odeKse $onsiderar posiWes Xue apontam para outras posiWes, &asta interpretar o $onteQdo do Retor $omo um +ndi$e ,inear# Este tipo de $onstruo pode ser Qti, em Java, pois a ,in"ua"em no possui ponteiros este ! um dos motiRos de estarmos ensinando esta t!$ni$a#
"1

*esRanta"em da representao ,inear GRetorH' ! ne$essMrio $riar )unWes de $onRerso de +ndi$e na )orma G,in0a,$o,unaH para G+ndi$e ,inearH e de G+ndi$e ,inearH para G$o,unaH ou G,in0aH# So as )unWes lin e col e linear deste eLemp,o# Em uma primeira ,eitura, no ! pre$iso entender os $M,$u,os $om +ndi$es, apenas o uso dos m!todos Xue o)ere$em estes $M,$u,os# (ara nOs, $,ientes da $,asse 7atri6239ntF os e,ementos sero indeLados de 0 at! m Gar&itrMrioH em termos de +ndi$e ,inear# Em termos de ,in0as e $o,unas, e,es sero indeLados de G1,,maLH e de G1,$maLH# O )ato da ,in"ua"em adotar +ndi$es de 1 at! mQ0 para matriPes e Retores no importa, nOs $onstru+mos em Ro,ta dessa representao para Xue nosso o&jeto )ornea, tra&a,0e na $onReno mais natura, de indeLao para 0umanos' 0 atR m# Euanto as operaWes de +ndi$es, apenas Reri)iXue a Rera$idade para Ra,ores ar&itrMrios de uma matriP $omo a desen0ada anteriormente tentar entendVK ,as ,eRa tempo e eu sei Xue Ro$V ! $apaP de pro"ramaK,as# *entre os o&jetiRos de um pro"ramador de uma ,in"ua"em orientada a o&jetos podemos $itar' es$reRer pou$o $Odi"o, es$reRer $Odi"o $orreto, tornar o seu $Odi"o reuti,iPMRe,# A $riao de $omponentes de so)tZare reuti,iPMReis, ! enormemente )a$i,itada pe,a porta&i,idade da ,in"ua"em Java# (ro"ramas eLemp,o posteriores Gse"unda parteH mostraro $omo reuti,iPar esta $,asse matriP para a $riao de um jo"o de Xue&ra $a&ea de Xuadradin0os des,iPantes# Os Xuadradin0os deRem ser moRidos na mo,dura de modo a )ormar uma ima"em onde um dos Xuadrados ! RaPio# "SHOPPIN$ LIST APPROACH% PARA O TAD MATRIT2DI2-/
GAs operaWes imp,ementadas esto mar$adas $om # As operaWes mar$adas $om deRem ser imp,ementadas $omo eLer$+$io aRanado $ujo o&jetiRo ! $omp,etar um de seus primeiros $omponentes de so)tZare reuti,iPMRe,, estamos in$,uindo desta ReP os atri&utos tam&!mH#

private int linhas. //numero de linhas da matri6 private int colunas. //numero de colunas da matri6 private int tam. //HlinhasAcolunas private int lc<=. //Hnew int<linhasAcolunas=Hvetor<1..%tamQ0(=H~matri6<l=<c=

Construtor Gre$e&e dois ar"umentos num!ri$os inteiros, nQmero de ,in0as e de $o,unasH ConRerso de ,in0a e $o,una para +ndi$e ,inear ConRerso de +ndi$e ,inear para $o,una# ConRerso de +ndi$e ,inear para ,in0a# Operao de tro$a de e,ementos da matriP $om dois ar"umentos do tipo +ndi$e ,inear# Operao de tro$a de e,ementos da matriP $om ar"umentos do tipo G,in0a e $o,unaH# Operao de atri&uio a e,emento da matriP indi$ado por +ndi$e ,inear# Operao de atri&uio a e,emento da matriP indi$ado por ,in0a e $o,una# Operao de retorno do $onteQdo de posio da matriP indi$ada por um +ndi$e ,inear# Operao de retorno do $onteQdo de posio da matriP indi$ada por ,in0a e $o,una# Representao do nQmero de $o,unas, permitindo a$esso de ,eitura ao $,iente# Representao do nQmero de ,in0as, permitindo a$esso de ,eitura ao $,iente#
(ro"rama eLemp,o da $,asse -atriP4*Int# class 7atri6239nt ; private int linhas. //numero de linhas da matri6 private int colunas. //numero de colunas da matri6 private int tam. //HlinhasAcolunas private int lc<=. //Hnew int<linhasAcolunas=Hvetor<1..%tamQ0(=H~matri6<l=<c= public 7atri6239nt%int lFint c( //cria matri6 5/& ; lcHnew int<lAc=. //lFc dimensoes . lc vetor<lAc=
"0

linhasHl. colunasHc. tamHlinhasAcolunas. @ //'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 % %1Balin( ^^ %alinBHlinhas( ^^ %1Bacol( ^^ %acolBHcolunas( ( ; resultH%alinQ0(AcolunasGacol. @ else ; resultHQ0. @ return result. @ public int col%int indlin( //coluna a partir do indice linear //nao modifica nenhum atributo da classe ; int result. if % %1Bindlin( ^^ %indlinBHtam( ( ; resultH%indlin S colunas(. if %resultHH1( ; resultHcolunas. @ @ else ; resultHQ0. @ return result. @ public int lin%int indlin( //linha a partir do indice linear //nao modifica nenhum atributo da classe ; int result. if % %1Bindlin( ^^ %indlinBHtam( ( ; resultH%int(% % %indlinQ0(/colunas (G0 else ; resultHQ0. @ return result. @

(. @

public boolean trocaindlin%int iFint !( //ar$umentos: 2 indices lineares // retorna se conse$uiuFou nao conse$uiu%false( ; int au/. //au/iliar na troca if % %1Bi( ^^ %iBHtam( ^^ %1B!( ^^ %!BHtam( (
"2

; au/Hlc<iQ0=. //efetua a troca lc<iQ0=Hlc<!Q0=. //embora para usuario a matri6 vai de 0 ate lAc lc<!Q0=Hau/. //para mim vai de o ate lAcQ0 return true. //sucesso @ else ; return false. @ //falhou @ public boolean atribuiindlin%int iFint v( //atribui v ao indice i //retorna true se conse$uiuF false nao conse$uiu ; if % %1Bi( ^^ %iBHtam( ( ; lc<iQ0=Hv. //efetua a atribuicao return true. @ else ; return false. @ //falhou @ public int retornaindlin%int indlin( //retorna conteudo do indice i //retorna Q0 se nao conse$uiu ; int result. if % %1Bindlin( ^^ %indlinBHtam( ( ; resultHlc<indlinQ0=. @ else ; resultHQ0. @ return result. @ public int $etl%( //retorna numero de linhas ; return linhas. @ public int $etc%( //retorna numero de colunas ; return colunas. @ public int $ett%( //retorna tamanho ; return tam. @
"3

@ //&lasse principalF Ar'uivo *rincipal.!ava class *rincipal ; public static void main%)trin$ ar$s<=( ; 7atri6239nt teste. testeHnew 7atri6239nt%5F01(. //5 linhas 01 colunas for%int iH0.iBteste.$ett%(.iGG( ;teste.atribuiindlin%iF1(. @ )>stem.out.println%?linear%5F5(H?G teste.linear%5F5( (. )>stem.out.println%?Atribuindo 2 a posicao %5F5(?(. teste.atribuiindlin%teste.linear%5F5(F2(. )>stem.out.println%?Atribuindo 4 a posicao %4F2(?(. teste.atribuiindlin%teste.linear%4F2(F4(. )>stem.out.println%?Irocando estas posicoes?(. teste.trocaindlin%teste.linear%5F5(Fteste.linear%4F2((. )>stem.out.println%?&onteudo da posicao %5F5(:?Gteste.retornaindlin%teste.linear%5F5(((. @ @ linear%5F5(H45 Atribuindo 2 a posicao %5F5( Atribuindo 4 a posicao %4F2( Irocando estas posicoes &onteudo da posicao %5F5(:4 M&-',L*) .*4,2,.&) 2& >,2+B&+*;/ As matriPes de)inidas pe,a ,in"ua"em se"uem uma sintaLe de de$,arao e uso seme,0ante a sintaLe de Retores' int custos<=<=Hnew int <21F31=. //vinte por trintaF nao importa 'ual e linha 'ual e coluna custos<1=<1=H045. int aHcustos<1=<1=. CB',0),.&.*/ DouRe um $aso de R+rus na internet Xue se &aseaRa no a$esso a +ndi$es )ora de um Retor para "raRar por $ima de instruWes do sistema opera$iona, o $Odi"o Xue "arantisse a sua mu,tip,i$ao# No por a$aso, Java, impede o a$esso a posiWes )ora do Retor# D,(& .* ='0+'&;&D30/ Sai&a Xue uma prMti$a &astante Qti, na )ase de testes de um pro"rama ! introduPir mensa"ens in)ormatiRas em pontos $onRenientes# Euando tra&a,0ando $om o&jetos ta, prMti$a pode ser usada de RMrios modos, por eLemp,o podeKse inserir uma mensa"em no $onstrutor de uma $,asse para Reri)i$ar Xuando os o&jetos so $riados e se so $riados $orretamente# EG*'(E(,0)/ 1K
"4

-e,0ore a $,asse matriP para a$eitar nas suas )unWes ar"umentos do tipo G,in0a,$o,unaH e no sO +ndi$es ,ineares# 2H Note Xue no )oram impostas restriWes para +ndi$es inRM,idos da matriP de modo Xue nosso $omponente de so)tZare )a,0a se no usado $orretamente# Adote uma estrat!"ia de dete$o de +ndi$es inRM,idos e useKa de modo a eRitar o traRamento do pro"rama# 5eremos $omo )aPer esta $0e$a"em de +ndi$es de )orma se"ura e uni)orme em 7 #6 EL$eption 0and,in"8# 3H Imp,emente um m!todo $0amado ordena para o tipo a&strato de dados matriP de)inido a$ima# 1se Xua,Xuer a,"oritmo de ordenao para deiLar a matriP ordenada $omo um Retor Xue&rado em RMrias ,in0as# *e Xue )orma a )a$i,idade Xue a inter)a$e o)ere$e de enLer"ar a matriP $omo um Retor )a$i,ita este pro$esso^ SerM Xue este m!todo ordena ! rea,mente impres$ind+Re, para esta $,asse^ Os m!todos $riados at! o momento jM no )ormam um mode,o $omputa$iona, su)i$iente para Xue o $,iente desta $,asse possa de)inir em seu $Odi"o os m!todos de ordenao de matriPes Xue desejar^ A dQRida so&re a ne$essidade ou no de um m!todo em uma $,asse ! &astante )reXuente# <uardadas as deRidas proporWes, pro"ramao orientada a o&jetos ! $omo &rin$ar $om &,o$os de en$aiLar, ou ,e"os# EListem &,o$os Xue no se en$aiLam, eListem &,o$os Xue podem ser $onstru+dos atraR!s de outros menores, mas Xue ainda sim eListem porXue so &astante usados, e a tare)a de $ompoK,os a partir de outros &,o$os tornaKse in$onReniente# EListem &,o$os sem os Xuais no se pode $onstruir prati$amente nada# 4H Crie um m!todo de nome preenche, Xue ini$ia,iPa todas as posiWes da matriP $om o Ra,or de um de seus ar"umentos# Este m!todo pode ser $omposto pe,os m!todos jM imp,ementados^ YIH *e)ina um pro"rama $0amado "randes Xue imp,ementa o tipo a&strato de dados nQmeros "randes e inteiros, este tipo deRe usar um Retor do tipo num!ri$o Xue Ro$V a$0ar $onReniente para representar os a,"arismos# Ta,ReP estudar $ir$uitos ,O"i$os Gsomadores, mu,tip,i$adoresH o ajude a imp,ementar as Xuatro operaWes matemMti$as &Msi$as para estes tipo em termos de 7,ooS a0ead $arrier8 e outras t!$ni$as de per)orman$e de imp,ementao de operaWes# Se sua preo$upao ! $om e)i$iVn$ia e espao, Ro$V pode usar $ada posio do Retor para representar mais de um d+"ito, mas 0aRerM muito tra&a,0o em termos de tratar oRer),oZ e under),oZs# 6H Note Xue na a,o$ao da matriP' public 7atri6239nt%int lFint c( , no ! $0e$ado se os Ra,ores passados so maiores Xue B, )aa este teste# Euando eLp,i$armos 7eL$eption 0and,in"8 Ro$V terM m!todos me,0ores de ,idar $om esses 7erros8#

"5

2.

HERANA

EListe uma Riso um pou$o ta$an0a de orientao a o&jetos $omo uma simp,es maneira de or"aniPar me,0or o seu $Odi"o# Essa Riso ! )a$i,mente desmentida pe,os $on$eitos de en$apsu,amento, inter)a$es, pa$Sa"es e outros jM apresentados# Neste tOpi$o apresentaremos o $on$eito de 0erana, )undamenta, para pro"ramao orientada a o&jetos e um dos )atores de su$esso desta $omo muito mais Xue uma simp,es maneira de or"aniPar me,0or seu $Odi"o# 1m dos aspe$tos Xue distin"uem o&jetos de pro$edimentos e )unWes ! Xue o tempo de eListVn$ia de um o&jeto pode ser maior do Xue o do o&jeto Xue o $riou# Isto permite Xue em sistemas distri&u+dos o&jetos $riados em um ,o$a,, sejam passados atraR!s da rede para outro ,o$a, e armaPenados ,M Xuem sa&e na memOria ou mesmo em um &an$o de dados# CB',0),.&.*/ EListem $,asses Xue podem ser o&tidas na Internet para )aPer inter)a$e $om &an$os de dados SE2, serRindo prin$ipa,mente para )a$i,itar esta )a$eta da pro"ramao na internet Xue ! &astante ,imitada pe,as restriWes de se"urana da ,in"ua"em# 2.1. HIERAR67IAS DE TIPOS

Neste tOpi$o mostraremos $omo $onstruir 0ierarXuias de tipo por "enera,iPao T espe$ia,iPao# (ara entender o Xue ! "enera,iPao espe$ia,iPao e as re"ras de atri&uio entre e,ementos dessas 0ierarXuias, a$ompan0e a se"uinte $omparao' Se Ro$V Rai a um restaurante e pede o prato de )rutos do mar, ! natura, Xue Ro$V a$eite uma ,a"osta $om $atupir., ou ento )i,! de &adejo# -as se o "arom ,0e serRe uma sa,ada de tomates isto no se en$aiLa no pedido# (or outro ,ado, se o seu pedido )or peiLe, uma ,a"osta $om $atupir., em&ora muito sa&orosa no serRe mais1, assim $omo a sa,ada# Note Xue peiLe e ,a"osta so espe$ia,iPaWes de )rutos do mar# <enera,iPao e Espe$ia,iPao so )erramentas para ,idar $om $omp,eLidade, e,as so a&straWes# Os sistemas do mundo rea, apresentam $omp,eLidade muito maior Xue ordenar um prato ,istado em um $ardMpio# O uso de "enera,iPao e espe$ia,iPao permite $ontro,ar a Xuantidade de deta,0es presente nos seus mode,os do mundo rea,, permite $apturar as $ara$ter+sti$as essen$iais dos o&jetos e tratar os deta,0es de )orma muito mais or"aniPada e "radua,# EListe muito mais para )a,ar so&re 0erana, prin$ipa,mente no Xue diP respeito a po,imor)ismo de in$,uso e a$op,amento dinYmi$o de mensa"ens, tOpi$os estes Xue sero a&ordados em separado# 2.1.1. 7MA HIERAR67IA SIMPLES. Construiremos uma 0ierarXuia de tipos simp,es para demonstrar 0erana pQ&,i$a em Java#

,a"osta ! $rustM$eo no peiLe# "6

C0;*2-5',0)/ O dia"rama a$ima representa a 0ierarXuia de $,asses imp,ementada neste eLemp,o e )oi o&tido a partir da jane,a de edio de uma )erramenta $ase para pro"ramao orientada a o&jetos# A $,asse ponto Xue estM no topo da 0ierarXuia ! $0amada de $,asse &ase, enXuanto Xue as $,asses ponto-reflete e ponto-move so $0amadas $,asses )i,0as ou 0erdeiras# As $,asses da 0ierarXuia so simp,es, ponto-move apresenta o m!todo move, jM a&ordado neste tutoria, em 1#4#C, ponto-reflete apresenta o m!todo Greflete H Xue inRerte o sina, das $oordenadas# *ada a simp,i$idade das $,asses o ,eitor poderia se per"untar, porXue no juntar as trVs em uma sO# A per"unta )aP sentido, mas e se Xuis!ssemos $riar uma $,asse *onto Xue no se moResse, apenas re),etisse e outra Xue sO se moResse^ E se Xuis!ssemos projetar nosso pro"rama se"undo uma 0ierarXuia de espe$ia,iPao T "enera,iPao da $,asse *onto^ O eLemp,o mostra $omo )aPVK,o# Na 0erana as $,asses )i,0as passam a atender pe,os mesmos m!todos e atri&utos public da $,asse pai, as $,asses )i,0as podem a$res$entar m!todos, atri&utos e at! rede)inir m!todos 0erdados GReremos mais tardeH# (or isso ! Xue se diP Xue as $,asses su&$,asses "arantem pe,o menos o $omportamento 7&e0aRiour8 das super$,asses, podendo a$res$entar mais $ara$ter+sti$as# Os atri&utos en$apsu,ados GprivateH da $,asse pai no so a$ess+Reis diretamente na $,asse )i,0a a no ser Xue sejam Xua,i)i$ados $omo protected ou public , Reja 4#1#4# *ia"rama de a$esso, Risi&i,idade, dos e,ementos da $,asse pai para uma $,asse )i,0a ou 0erdeira# Os atri&utos e m!todos da $,asse pai so $,assi)i$ados Xuanto ao en$apsu,amento# A parte som&reada si"ni)i$a no Ris+Re,, en$apsu,ado# fAs duas so $onsideradas $omo sendo do mesmo pa$Sa"e# (1B2IC (RI5ATE (ROTECTE* 7(AC>A<E8f

C02)-'B-0'*) * R*'&2D&/ No $onstrutor de uma $,asse )i,0a o pro"ramador pode in$,uir a $0amada do $onstrutor da $,asse pai eListente ne,a# (ara re)eren$iar a $,asse pai use a 7Se.Zord 7 super de modo ana,o"o a this %ob!eto corrente( # DierarXuia de "enera,iPao e espe$ia,iPao# //&lasse *onto class *onto ; pri."te float /F>. public *onto%float a/Ffloat a>( //omita o valor de retorno: //$arante o estado do ob!eto ; this./Ha/. this.>Ha>.
""

@ public void iniciali6a%float aFfloat b( ; this./Ha. this.>Hb. @ public float retorna-/%( ; return /. @ public float retorna->%( ; return >. @ public void altera-/%float a( ; this./Ha. @ public void altera->%float b( ; this.>Hb. @ public void mostra%( ; )>stem.out.println% ?%? G this./ G ?F? G this.> G ?(? (. @ @ //&lasse *to7ove class *to7ove e/tends *onto ; //adicione al$um atributo private se 'uiser public *to7ove%float aFfloat b( ; -uper+"7b,# $$ 5"("%" %o on-trutor %" l"--e p"i @ public void move%float d/Ffloat d>( ; t5i-."lter">&+retorn">&+,/%&,# t5i-."lter">'+retorn">'+,/%',# @ @
"#

//&lasse *toUeflete class *toUeflete e/tends *onto ; //adicione al$um atributo private se 'uiser public *toUeflete%float aF float b( //construtor ; -uper+"7b,# $$ 5"("%" %e on-trutor %" l"--e p"i ou -uper l"--e @ void reflete%( //troca o sinal das coordenadas ; t5i-."lter">&+3retorn">&+,,# t5i-."lter">'+3retorn">'+,,# @ @ //&lasse principalF Ar'uivo *rincipal.!ava class *rincipal ; public static void main%)trin$ ar$s<=( ; *toUeflete p0Hnew *toUeflete%3.04fF2."2f(. )>stem.out.println%?&riando *ontoUeflete em 3.04F2."2?(. p0.reflete%(. )>stem.out.println%?Uefletindo este ponto.?(. p0.mostra%(. *to7ove p2Hnew *to7ove%0.1fF0.1f(. )>stem.out.println%?&riando *onto7ove em 0.1F0.1?(. p2.move%.5fF.5f(. )>stem.out.println%?7ovendo este ponto de 1.5F1.5?(. p2.mostra%(. @ @ &riando *ontoUeflete em 3.04F2."2 Uefletindo este ponto. %Q3.04FQ2."2( &riando *onto7ove em 0.1F0.1 7ovendo este ponto de 1.5F1.5 %0.5F0.5( $$COMEN<ARIO: Os atri&utos / e > da $,asse *onto esto de$,arados $omo private# (e,o dia"rama anterior ao pro"rama, atri&utos private no so Ris+Reis aos des$endentes na 0ierarXuia# E de )ato nOs a,teramos esses atri&utos Gre),ete e moReH atraR!s de $0amadas a m!todos public da $,asse pai,
",

$0amadas de m!todos Xue imp,iXuem em a$esso indireto a atri&utos da mesma $,asse pare$em ser um pou$o ine)i$ientes# 2em&reKse Xue os m!todos public sempre so Ris+Reis# N0-& &0) ='0+'&;&.0'*) C<</ Java no permite 0erana private, a $,ausu,a e/tends eXuiRa,e a 0erana pQ&,i$a de C]] e sO# (ara o&ter o e)eito de 0erana private use a"re"ao# EG*'(E(,0)/ 1H (ro"rame e teste a 0ierarXuia representada a&aiLo'

A $,asse )orma no tem um si"ni)i$ado prMti$o, ! uma a&strao, Ro$V no pode desen0ar GmostrarH uma )orma, no entanto neste pro"rama Ro$V poderM instan$iMK,a# Esta $,asse estM na 0ierarXuia, somente para $apturar as $ara$ter+sti$as $omuns a *onto e Uetan$ulo # Em 6#6 aprenderemos $omo de)inir estas $,asses a&stratas de )orma mais $ondiPente $om o paradi"ma de orientao a o&jetos# O m!todo mostra deRe imprimir na te,a os atri&utos destas $,asses# 2.1.2. PRO<EC<ED Euando Rimos o tOpi$o en$apsu,amento, )oi men$ionado Xue private era o modo de en$apsu,amento mais restritiRo, se"uido de protected, pacLa$e e depois public Go mais a&ertoH# NaXue,e tOpi$o mostramos um eLemp,o para $ada tipo de en$apsu,amento, eL$eto protected Xue depende da eListVn$ia de uma 0ierarXuia para ser demonstrado# I"ua, ao eLemp,o anterior, mas a"ora tornando os atri&utos da $,asse pai a$ess+Reis para as $,asses )i,0as atraR!s do uso de protected. *rotected deiLa os atri&utos da $,asse pai Ris+Reis, a$ess+Reis 70ierarXuia a&aiLo8# -as para o restante do pro"rama tem o mesmo e)eito Xue private# Outra )rase so&re prote$ted' 7A 0erana permite Xue uma su&$,asse "an0e a$esso a de$,araWes protected de sua super$,asse, mas o usuMrio no per$e&e isso, para o usuMrio Guma $,asse eLternaH o Xue $ontinua eListindo ! o Xue ! public 8# *ia"ramas de a$esso, Risi&i,idade, de atri&utos e m!todos de uma $,asse pai para uma $,asse )i,0a ou 0erdeira' (ara uma $,asse )i,0a em outro pa$Sa"e GRo$V 0erdando de uma $,asse pronta em JaRaH (RI5ATE (ROTECTE* 7(AC>A<E8 (1B2IC
#1

O Xue o restante do pro"rama RV das de$,araWes da $,asse pai na $,asse )i,0a# Gpor restante do pro"rama entenda' outros pa$Sa"es e outras 0ierarXuiasH

(RI5ATE (ROTECTE* 7(AC>A<E8 (1B2IC

O mesmo eLemp,o sO Xue usando protected. //&lasse *onto class *onto ; prote te% float /F>. public *onto%float a/Ffloat a>( //omita o valor de retorno: //$arante o estado do ob!eto ; this./Ha/. this.>Ha>. @ public void iniciali6a%float aFfloat b( ; this./Ha. this.>Hb. @ public float retorna-/%( ; return /. @ public float retorna->%( ; return >. @ public void altera-/%float a( ; this./Ha. @ public void altera->%float b( ; this.>Hb. @ public void mostra%( ; )>stem.out.println% ?%? G this./ G ?F? G this.> G ?(? (. @ @
#0

//&lasse *to7ove class *to7ove e/tends *onto ; //adicione al$um atributo private se 'uiser public *to7ove%float aFfloat b( ; -uper+"7b,# @ public void move%float d/Ffloat d>( ; &)&/%&# $$"Jui ontinu"( " e--i.ei-7 e( ("in n"o ')'/%'# $$" e--o %ireto7 -e( p"--"r por (eto%o @ @ //&lasse *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 @ void reflete%( ; /HQ/. >HQ>. @ @ //&lasse principalF Ar'uivo *rincipal.!ava class *rincipal ; public static void main%)trin$ ar$s<=( ; *toUeflete p0Hnew *toUeflete%3.04fF2."2f(. )>stem.out.println%?&riando *ontoUeflete em 3.04F2."2?(. p0.reflete%(. )>stem.out.println%?Uefletindo este ponto.?(. p0.mostra%(. *to7ove p2Hnew *to7ove%0.1fF0.1f(. )>stem.out.println%?&riando *onto7ove em 0.1F0.1?(. p2.move%.5fF.5f(.
#2

)>stem.out.println%?7ovendo este ponto de 1.5F1.5?(. p2.mostra%(. @ @ &riando *ontoUeflete em 3.04F2."2 Uefletindo este ponto. %Q3.04FQ2."2( &riando *onto7ove em 0.1F0.1 7ovendo este ponto de 1.5F1.5 %0.5F0.5( O Xua,i)i$ador protected termina $om os modos de en$apsu,amento de atri&utos e m!todos, portanto )aremos uma reRiso )ina,, uti,iPe os nQmeros dessa ta&e,a para $0e$ar Risua,mente o tipo de en$apsu,amento no dia"rama a se"uir# 5o$V Rai aprender a o,0ar para este dia"rama e enLer"ar tudo o Xue aprendemos nesse assunto, os atri&utos e m!todos Xue estamos preo$upados em en$apsu,ar so os da $,asse mais es$ura' MODO Hprivate LIMITE DE VISIBILIDADE a Este ! o n+Re, de en$apsu,amento mais restritiRo# A Risi&i,idade das de$,araWes ,imitaKse ao enRo,tOrio da $,asse# 3( protected Representao no dia"rama' A Risi&i,idade das de$,araWes se ,imita prOpria a 0ierarXuia a&aiLo da $,asse es$ura# $,asse e as $,asses 0erdeiras de,a# 4HNada Representao no dia"rama' A Risi&i,idade das de$,araWes se ,imita a prOpria espe$i)i$ado retYn"u,o enRo,Rendo as $,asses $,asse e as $,asses do mesmo pa$Sa"e, mas no is 7pa$Sa"e8 pintadas# $,asses 0erdeiras, # C,asses 0erdeiras no pre$isam ser do mesmo pa$Sa"e# 0 (public Representao no dia"rama' Estas de$,araWes so sempre a$ess+Reis# todas as $,asses# REPRESENTA!O Representao no dia"rama' prOpria $,asse es$ura#

O dia"rama a$ima mostra as Mreas de Risi&i,idade de $ada tipo de modi)i$ador ap,i$ado aos atri&utos da $,asse desta$ada# Os retYn"u,os "randes, representam os pa$Sa"es, optamos por $onstruir a 0ierarXuia da esXuerda dentro do mesmo pa$Sa"e o Xue nem sempre ! )eito# Norma,mente Xuando Ro$V estende uma $,asse das pa$Sa"es Xue Rem $om a ,in"ua"em, sua $,asse 0erdeira no perten$e a aXue,a pa$Sa"e, mas perten$e a 0ierarXuia, saindo )ora dos retYn"u,os
#3

maiores $omo na 0ierarXuia da direita# Supon0a Xue todas as $,asses so de$,aradas $omo public # EListem a,"umas de$,araWes de Xua,i)i$adores de atri&utos Xue no )aPem sentido $om $,asses private e so erros de $ompi,ao. 2.1.3. REDEFINI!O DE MQTODOS HERDADOS 1ma $,asse )i,0a pode )orne$er uma outra imp,ementao para um m!todo 0erdado, $ara$teriPando uma rede)inio 7oRerridin"8 de m!todo# Importante' o m!todo deRe ter a mesma assinatura Gnome, ar"umentos e Ra,or de retornoH, seno no se trata de uma rede)inio e sim so&re$ar"a 7oRer,oadin"8# A rede)inio "arante Xue o m!todo terM o mesmo $omportamento Xue o anterior isto )aP $om Xue as su&$,asses possam ser atri&u+das a RariMReis da super$,asse pois atendem a todas as operaWes desta# Este eLemp,o ! i"ua, ao eLemp,o anterior, mas a"ora rede)inindo o m!todo mostra para a $,asse )i,0a *toUeflete# Na Rerdade este eLemp,o deReria perten$er ao tOpi$o de po,imor)ismo, $ontudo, nos eLemp,os se"uintes usaremos tam&!m rede)iniWes de m!todos, portanto )aPKse ne$essMrio introduPiK,o a"ora# Teremos mais eLp,i$aWes so&re o assunto# No nosso eLemp,o a $,asse *toUeflete rede)ine o m!todo mostra da $,asse pai, enXuanto Xue a $,asse 0erdeira *to7ove a$eita a de)inio do m!todo mostra dada pe,a $,asse *onto Xue ! sua $,asse pai#

//9nsira a'ui o ar'uivo da classe *onto do e/emplo anterior: *UVI2&I23

//9nsira a'ui o ar'uivo da classe *to7ove do e/emplo anterior: *UVI2&I23

//&lasse *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 @ publi .oi% (o-tr"+, 1 :'-te(.out.println+ ;O6; / t5i-.& / ; P6; / t5i-.' ,# 2 void reflete%( ; /HQ/. >HQ>. @
#4

//9nsira a'ui o ar'uivo da classe *rincipal do e/emplo anterior: *UVI2&I23 $$COMEN<ARIO: No $aso de rede)inio de m!todos, a &us$a da imp,ementao do m!todo a ser eLe$utado o$orre de &aiLo para $ima na 0ierarXuia# ELemp,o' se Ro$V tem um o&jeto *toUeflete e $0ama o m!todo retorna-/%( para e,eF primeiro o $ompi,ador pro$ura se *toUeflete possui ou no uma imp,ementao para este m!todo, no $aso no possui, ento a &us$a ! )eita nos m!todos public da super$,asse, onde a imp,ementao de retorna-/%( ! a$0ada#

EG*'(E(,0)/ 1H Teste rede)inio de m!todos $o,o$ando 7S.stem#outNs8 em m!todos da 0ierarXuia, tais $omo' )>stem.out.println%J7etodo redefinido na classe OF chamado.K( . 2.2. INTERFACES, 7MA ALTERNATIVA PARA HERANA M[LTIPLA
Derana mQ,tip,a'

Derana mQ,tip,a ! a $apa$idade de uma $,asse 0erdar de duas ou mais $,asses, por eLemp,o a $,asse radioKre,O"io 0erdar da $,asse rMdio e da $,asse re,O"io# C]] apresenta 0erana mQ,tip,a, e tam&!m maneiras de tratar os pro&,emas de$orrentes de seu uso# 1m dos pro&,emas Xue podem sur"ir ! o $on),ito de nomes de atri&utos ou m!todos 0erdados desse tipo de 0erana# 1ma das estrat!"ias adotadas para reso,Rer estes $on),itos ! o 7renamin"8 ou renomeamento desses nomes i"uais presentes nas super$,asses# Tendo o se"uinte si"ni)i$ado' A $,asse 0erdeira tem $omportamento, 7&e0aRiour8, seme,0ante ao das duas $,asses pais# 1m outro eLemp,o de inter)a$e seria a $,asse audioKR+deo Xue 0erda da $,asse audio e da $,asse R+deo# Java por motiRos de simp,i$idade, a&andona a id!ia de 0erana mQ,tip,a, $edendo ,u"ar ao uso de inter)a$es# Inter)a$es so um $onjunto de m!todos e $onstantes Gno $ont!m atri&utosH# Os m!todos de)inidos na inter)a$e so 7o$os8 ou desproRidos de imp,ementao# C,asses podem diPer Xue imp,ementam uma inter)a$e, esta&e,e$endo um $ompromisso, uma esp!$ie de $ontrato, $om seus $,ientes no Xue se re)ere a proRer uma imp,ementao para $ada m!todo da re)erida inter)a$e##
#5

Ao $,iente, pode ser dada a de)inio da inter)a$e, e,e a$a&a no sa&endo o Xue a $,asse !, mas sa&e o Xue )aP# Euem pro"rama em O&je$tiRe C, deRe Rer as inter)a$es $omo a,"o seme,0ante ao $on$eito de proto$o,os# Neste eLemp,o usaremos uma inter)a$e de nome imprim+Re, para $apturar as $ara$ter+sti$as $omuns as $,asse Xue podem ser imprimidas em a,"um dispositiRo de sa+da de dados# Inter)a$es public inter!" e I(pri(i.el ; //alem das classesF so interfaces pode ocupar um ar'uivo final char nlinHXMnX. //nova linha public )trin$ to)trin$%(. //forma preferida para impressao na tela public void to)>stemVut%(. @ public class *roduto i(ple(ent- I(pri(i.el ; //um produto comercial 'ual'uer protected )trin$ descricao. protected int 'uantidade. public *roduto%)trin$ dFint '( ; descricaoHd. 'uantidadeH'. @ public )trin$ to)trin$%( ; return new )trin$%? ?GdescricaoG? ?G'uantidade(. @ //forma preferida para impressao na tela public void to)>stemVut%( ; )>stem.out.print%descricao G 'uantidade(. @ @ //&lasse principalF Ar'uivo *rincipal.!ava class *rincipal ; public static void main%)trin$ ar$s<=( ; *roduto umpHnew *roduto%?macarrao?F 011(. ump.to)>stemVut%(. )>stem.out.println%(. )>stem.out.println%ump.to)trin$%((. @ @
#6

macarrao011 macarrao 011

$$COMEN<ARIO: O paradi"ma de orientao a o&jetos estM re),etido na $apa$idade de 0erana e en$apsu,amento das inter)a$es# No $aso deste eLemp,o, a inter)a$e )oi de$,arada $omo public , mas se nada )osse espe$i)i$ado e,a perten$eria ao pa$Sa"e de,a, ou seja os modos de en$apsu,amentos so seme,0antes aos de $,asses# 1ma ,2-*'4&(* poderia *)-*2.*' a ,2-*'4&(* 9mprimivel' interface 9mprimivel2 e/tends 9mprimivel ; @ Inter)a$es tem sido representadas por retYn"u,os de &ordas arredondadas ,i"adas as $,asses Xue as imp,ementam por ,in0as tra$ejadas# -uitos $on)undem inter)a$es $om $,asses e o ato de imp,ementar uma inter)a$e $om o ato de estender ou 0erdar uma $,asse# (or isso a re,ao entre inter)a$es e 0erana serM eLp,i$ada sO a"ora, depois Xue Ro$V jM pensou no assunto# 1ma $,asse *roduto2 0erda da $,asse *rodutoGnosso eLemp,oH Xue imp,ementa a inter)a$e 9mprimivel# A $,asse produto jM )eP a parte di)+$i, Xue ! imp,ementar a inter)a$e, a"ora a $,asse *roduto2 pode optar por a$eitar ou rede)inir os m!todos 0erdados, ou seja' 7A inter)a$e ! um dos +tems Xue ! 0erdado de uma $,asse, assim $omo os atri&utos e m!todos8# EG*'(E(,0)/ 1H *e)ina uma inter)a$e para um $onjunto de $,asses Xue representam )i"uras "eom!tri$as Xue podem ser desen0adas na te,a#

#"

3.

POLIMORFISMO, CLASSES ABSTRATAS

EListem RMrias $,assi)i$aWes e tipos de po,imor)ismo# C]] apresenta RMrios tipos de po,imor)ismo # Java apresenta um $onjunto mais reduPido eRitando prin$ipa,mente po,imor)ismos adK0o$# (o,imor)ismo, do "re"o' muitas )ormas# (o,imor)ismo ! a $apa$idade de um operador eLe$utar a ao apropriada dependendo do tipo do operando# AXui operando e operador esto de)inidos num sentido mais "era,' operando pode si"ni)i$ar ar"umentos atuais de um pro$edimento e operador o pro$edimento, operando pode si"ni)i$ar um o&jeto e operador um m!todo, operando pode si"ni)i$ar um tipo e operador um o&jeto deste tipo# 3.1. REDEFINI!O DE MQTODOS PARA 7MA CLASSE HERDEIRA

Este eLemp,o jM )oi apresentado em 4#1#6# Tam&!m trataKse de um po,imor)ismo, pode ser $,assi)i$ado $omo po,imor)ismo de in$,uso# 1m m!todo ! uma rede)inio de um m!todo 0erdado, Xuando estM de)inido em uma $,asse $onstru+da atraR!s de 0erana e possui o mesmo nome, Ra,or de retorno e ar"umentos de um m!todo 0erdado da $,asse pai# A assinatura do m!todo tem Xue ser idVnti$a, ou seja, teremos rede)inio Xuando uma $,asse )i,0a )orne$e apenas uma noRa imp,ementao para o m!todo 0erdado e no um noRo m!todo# Se a $,asse )i,0a )orne$er um m!todo de $a&ea,0o ou assinatura pare$ida $om a do m!todo 0erdado Gdi)ere ou no nQmero ou no tipo dos ar"umentos, ou ento no tipo do Ra,or de retornoH ento no se trata mais de rede)inio, trataKse de uma so&re$ar"a, pois $riouKse um noRo m!todo# 1ma $0amada ao m!todo 0erdado no mais ! inter$eptada por esse noRo m!todo de mesmo nome# O m!todo tem o mesmo nome, mas ! ,i"eiramente di)erente na sua assinatura Go $orpo ou &,o$o de $Odi"o cd no importaH, o Xue jM imp,i$a Xue no propor$iona o mesmo $omportamento G&e0aRiourH do m!todo da super$,asse# 3.2. SOBRECAR$A N MQTODOS E OPERADORESO

Este tipo de po,imor)ismo permite a eListVn$ia de RMrios m!todos de mesmo nome, por!m $om assinaturas ,eRemente di)erentes ou seja Rariando no nQmero e tipo de ar"umentos e no Ra,or de retorno# /i$aria a $ar"o do $ompi,ador es$o,0er de a$ordo $om as ,istas de ar"umentos os pro$edimentos ou m!todos a serem eLe$utados# 3.2.1. SOBRECAR$A DE MQTODOS, "COP# CONSTR7CTOR% No eLemp,o a se"uir Ramos so&re$arre"ar o $onstrutor de uma $,asse, esta $,asse passarM a ter duas RersWes de $onstrutores, Ra,e ,em&rar Xue assim $omo o $onstrutor serM so&re$arre"ado, Xua,Xuer outro m!todo poderia ser# O $ompi,ador sa&erM Xua, m!todo $0amar no mais pe,o nome, mas pe,os ar"umentos# O m!todo *onto%*onto ap(. ! um 7$op. $onstru$tor8 F pois tem o mesmo nome Xue *onto%float d/Ffloat d>(.. Ta, dup,i$ao de nomes pode pare$er estran0aF por!m Java permite Xue e,es $oeListam =&'& B;& ;*);& (>&))* porXue no tem a mesma assinatura Gnome]ar"umentosH# Isto se $0ama so&re$ar"a de m!todo, o $ompi,ador sa&e distin"uir entre esses dois $onstrutores# Outros m!todos, no sO $onstrutores podero ser so&re$arre"ados para RMrios ar"umentos di)erentes, esse re$urso ! um po,imor)ismo do tipo 7adK0o$8# O Xue ! interessante para nOs ! o )ato de o ar"umento do $onstrutor Ponto%Ponto ap(. ser da mesma $,asse para Xua, o $onstrutor )oi imp,ementado, o Xue $ara$teriPa um 7$op. $onstru$tor8 ! Xue ini$ia,iPa um o&jeto a partir de outro da mesma $,asse# Outros m!todos
##

seme,0antes seriam' &irculo%&irculo a(. 7ouse%7ouse d(. . Imp,ementar $op. $onstru$tor pode ser muito importante, ,em&reKse dos pro&,emas $om $Opias de o&jetos apresentados em 1#6#6# (or XuestWes de espao, &asearemos nosso eLemp,o no tipo a&strato de dados )rao, apresentado em 1#C#1# 5o$V deRe modi)i$ar a $,asse Pracao para Xue e,a ten0a dois $onstrutores, o Xue esta em ne"rito deRerM ser a$res$entado ao $Odi"o ori"ina,' publi Qr" "o+int u(-o, $$-obre "r8" %o on-trutor ori8in"l 1 nu()u(-o# %en)1# $$-ubenten%i%o 2 publi Qr" "o+Qr" "o opie(e, $$e--e eN u( op' on-tru tor e u(" -obre "r8" 1 nu() opie(e.retorn">nu(+,# %e() opie(e.retorn">%en+,# 2 public Pracao%int tFint m( //construtor ori$inal ; numHt. denHm. this.simplifica%(. //chamada para o mesmo ob!eto. @

//V pro$rama principalF sobre a modificacao em ne$rito class *rincipal ; public static void main%)trin$ ar$s<=( ; Pracao aFbFc. ")ne* Qr" "o+D,# $$eli(ine o -e8un%o "r8u(ento bHnew Pracao%2F6(. )>stem.out.print%?2sta eX a fracao a: ?(. a.mostra%(. )>stem.out.print%?2sta eX a fracao b: ?(. b.mostra%(. cHa.soma%b(. )>stem.out.print% ?c de aGb: ?(. //c%aGb( c.mostra%(. )>stem.out.print%?aAb: ?(. cHa.multiplicacao%b(. c.mostra%(. )>stem.out.print%?aGb: ?(. cHa.soma%b(. c.mostra%(. )>stem.out.print%?aDHb: ?(. )>stem.out.println%a.maioroui$ual%b((.
#,

)>stem.out.print%?aHHb: ?(. )>stem.out.println%a.i$ual%b((. )>stem.out.print%?a:Hb: ?(. )>stem.out.println%a.diferente%b((. )>stem.out.print%?%int(a ?(. )>stem.out.println%a.converteint%((. )>stem.out.print%?%double(a ?(. )>stem.out.println% a.convertedbl%((. @ @ 2sta eX a fracao a: %5/0( 2sta eX a fracao b: %0/3( c de aGb: %06/3( aAb: %5/3( aGb: %06/3( aDHb: true aHHb: false a:Hb: true %int(a 5 %double(a 5 Teste o 7$op. $onstru$tor8 para o tipo a&strato de dados )rao apresentado a$ima# Euando um sO nQmero )or passado para o $onstrutor desta $,asse, su&entendeKse Xue o $onstrutor $0amado ! o de um sO ar"umento inteiro e Xue portanto o denominador serM i"ua, a 1# A"ora Ramos )a,ar do 7$op. $onstru$tor8, Xue em&ora imp,ementado, no )oi testado em main%( # Esse m!todo, perten$e a outro o&jeto Xue no o ar"umento copieme, ento para distin"uir o atri&uto num deste o&jeto, do atri&uto num de copieme usamos copieme.num e simp,esmente num para o o&jeto ,o$a,, o&jeto em Xuesto, ou o&jeto dono do m!todo $0amado# EG*'(E(,0)/ 1H /aa um 7$op. $onstru$tor8 para uma das $,asses jM imp,ementadas neste teLto# 2H So&re$arre"ue o m!todo move da $,asse *onto para a$eitar um *onto $omo ar"umento, su&entendeKse Xue deRemos moRer a distYn$ia / e a distYn$ia > daXue,e ponto a ori"em# Crie um m!todo de nome unitari6ado para a $,asse *onto# Este m!todo deRe interpretar o *onto $omo um Retor e retornar um noRo *onto Xue $ont!m as $oordenadas do Retor unitariPado# 1nitariPar ! diRidir $ada $oordenada pe,o mOdu,o do Retor# O mOdu,o ! a raiP Xuadrada da soma dos Xuadrados das $omponentes#

3H

,1

3.2.2.

SOBRECAR$A DE OPERADOR

Java no )orne$e re$ursos para so&re$ar"a de operador, o Xue ! per)eitamente $ondiPente $om a )i,oso)ia da ,in"ua"em# Seus $riadores Xue a$reditaRam Xue a ,in"ua"em deReria ser peXuena, simp,es, se"ura de se pro"ramar e de se usar Gsimp,e, sma,,, sa)e and se$ureH# A ausVn$ia de so&re$ar"a de operadores pode ser $ontornada de)inindo apropriadamente $,asses e m!todos# 3.3. CLASSES ABSTRATAS E CONCRETAS

Em um dos eLer$+$ios anteriores Gno tOpi$o so&re 0eranaH ped+amos Xue Ro$V de)inisse uma 0ierarXuia $omposta de trVs $,asses# A $,asse pai tin0a o nome de Porma, e as $,asses 0erdeiras desta eram *onto e Uetan$ulo. Em&ora a $,asse )orma no possu+sse sentido prMti$o, e,a permitia $ertas operaWes $omo moveF altera-/%int n/(, entre outras Gretorne a este eLer$+$ioH# Na Rerdade o Xue desejMRamos era Xue esta $,asse Porma se $omportasse $omo um esXue,eto para as suas $,asses )i,0as, nOs no Xuer+amos instan$iMK,a# C,asses a&stratas permitem eLatamente isto pois no podem ser instan$iadas em&ora possam ser usadas de outras maneiras# C,asses a&stratas so poderosas, e,as permitem' $riao de ,istas 0etero"Vneas, o$orrVn$ia de 7d.nami$ &indin"8 e maior $,arePa no projeto de sistemas# Os pa$Sa"es Xue Rem $om a ,in"ua"em esto rep,etos de eLemp,os de $,asses a&stratas# -!todos a&stratos, o&ri"atoriamente perten$em a $,asses a&stratas, e so m!todos desproRidos de imp,ementao, so apenas de)iniWes Xue sero aproReitadas por outras $,asses da 0ierarXuia# 5o,tando ao eLemp,o da 0ierarXuia PormaF *onto e Uetan$ulo # O m!todo mostra poderia ter sido de)inido na $,asse &ase a&strata GPormaH $omo um m!todo a&strato#

C,asses a&stratas //&lasse Porma "b-tr" t class Porma ; protected float /F>. //visivel hierar'uia abai/o public void move%float d/Ffloat d>( ; this./GHd/. this.>GHd>. @
,0

"b-tr" t public void mostra%(. //metodo abstrato @ //&lasse ponto class *onto e/tends Porma ; public *onto%float a/Ffloat a>( //omita o valor de retorno: //$arante o estado do ob!eto ; this./Ha/. this.>Ha>. @ //move nao precisa ser redefinido public void mostra%( ; )>stem.out.println%?%?Gthis./G?F?Gthis.>G?(?(. @ @

//&lasse Uetan$ulo class Uetan$ulo e/tends Porma ; 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 ob!eto ; /Ha/. >Ha>. this.d/Hd/. this.d>Hd>. //this usado para eliminar ambi$uidade @ //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 @ public void mostra%( ; )>stem.out.println%?%?Gthis./G?F?Gthis.>G?(%?Gd/G?F?Gd>G?(?(. @ @
,2

//&lasse principalF Ar'uivo *rincipal.!ava class *rincipal ; public static void main%)trin$ ar$s<=( ; Uetan$ulo arHnew Uetan$ulo%1F1F03F04(. ar.mostra%(. ar.move%0F0(. ar.mostra%(. @ @ %1F1(%03F04( %0F0(%04F05(

//COMEN<ARIO:: O&serRe Xue a $,asse Porma Xue ! a&strata, no possui um $onstrutor, porXue no pode ser instan$iada# A"ora tam&!m temos um noRo Xua,i)i$ador de $,asse e de m!todos' abstract. C>&))*) &@)-'&-&) O I2-*'4&(*)/ 5o$V deRe estar a$0ando Xue $,asses a&stratas e inter)a$es so $on$eitos pare$idos e Xue podem ser usados $om o&jetiRos seme,0antes# Cuidado\ 1ma $,asse pode estender uma Qni$a $,asse GXue pode ser a&strata ou noH, mas pode imp,ementar RMrias inter)a$es# A,!m disso, inter)a$es no permitem de$,arao de atri&utos, enXuanto Xue $,asses a&stratas permitem# Inter)a$es esto mais ,i"adas a $omportamento, enXuanto Xue $,asses a&stratas esto mais ,i"adas a imp,ementao# EG*'(E(,0)' 1K *e)ina uma $,asse a&strata tipo num!ri$o Xue deRe serRir $omo $,asse &ase para a monta"em de $,asses $omo a $,asse )rao ou a $,asse nQmero $omp,eLo# 1ma &oa medida da Xua,idade de sua imp,ementao ! a Xuantidade de mudanas ne$essMrias para por eLemp,o tro$ar a $,asse )rao usada em um a,"oritmo de $M,$u,o num!ri$o pe,a $,asse nQmero $omp,eLo# A &em Rerdade Xue eListem operaWes Xue se ap,i$am a uma dessas $,asses, mas no a outra, mas essas disparidades deRero ser mantidas )ora da $,asse &ase a&strata# 3.3.1. CLASSE ABSTRATA ITERADOR Neste eLemp,o iremos $riar uma $,asse &ase a&strata iterador, Xue serRirM $omo topo de uma 0ierarXuia para iteradores de estruturas de dados $omo ,istas, Retores e MrRores# O iterador de Retor ! de)inido por 0erana da $,asse &ase a&strata de iteradores# (er$e&a Xue a,"uns m!todos da $,asse &ase so desproRidos de imp,ementao, por!m nada impede Xue Ro$V $o,oXue $omo $Odi"o desses m!todos uma mensa"em de erro do tipo 7Erro, m!todo deReria ter sido rede)inido8, mas a"ora o $ompi,ador no pode mais te ,em&rar de rede)iniK,os# "SHOPPIN$ LIST APPROACH% PARA A CLASSE ABSTRATA ITERADOR
,3

GAs operaWes imp,ementadas esto mar$adas $om , eListem outras operaWes Qteis, no men$ionadas por motiRos de espao# Esta $,asse &ase a&strata no tem a )un$iona,idade de uma $,asse Xue possa estar instan$iada, per$e&a a ausVn$ia de um m!todo para aRanar na iteraoH#

-!todo de ini$ia,iPao da iterao Retorno do $onteQdo da atua, posio na iterao Atri&uio de Ra,or a atua, posio da iterao -!todo Xue Reri)i$a se a iterao no $0e"ou ao )im
"SHOPPIN$ LIST APPROACH% PARA A CLASSE ABSTRATA ITERADOR VETOR
G1ma tare)a desa"radMRe, Xuando iterando so&re Retores ! manter os +ndi$es das iteraWes atua,iPados durante aRanos e retro$essos# Note Xue retro$essos no )ariam sentido em uma ,ista simp,esmente ,i"ada, por isso essa operao somente ! de)inida neste n+Re, da 0ierarXuia#H

Retorno do Ra,or num!ri$o ou +ndi$e da atua, posio da iterao Retro$esso na iterao ARano na iterao ARano e retro$esso $om sa,tos Gin$,usiRe ! mais "en!ri$o Xue os dois anterioresH#

//&lasse 9terador9 "b-tr" t class 9terador9 ; "b-tr" t public void comeca%(. "b-tr" t public int retorna%(. //metodos abstrato "b-tr" t public void atribui%int a(. "b-tr" t public boolean fim%(. @ //&lasse 9terador etor9 class 9terador etor9 e/tends 9terador9 ; protected int<= vet. //itero sobre ele private int conta. //posicao atual da iteracao public 9terador etor9%int<= itereme( ; vetHitereme. contaH1. @ public void comeca%( ; contaH1. @ public void comeca%int p( ;
,4

contaH%pSvet.len$th(. @ public void atribui%int novo( ; vet<conta=Hnovo. @ public int retorna%( ; return vet<conta=. @ public boolean fim%( ; return contaHHvet.len$thQ0. @ public int retorna-conta%( ; return conta. @ public void avanca%( ; if %contaB%vet.len$thQ0(( contaGG. @ public void retrocede%( ; if %contaD1( contaQQ. @ @ import !ava.io.3ata9nput)tream. //&lasse principalF Ar'uivo *rincipal.!ava class *rincipal ; public static void main%)trin$ ar$s<=( ; int<= vetHnew int<6=. vet<1=H1. vet<0=H0. vet<2=H2. vet<3=H3. vet<4=H4. vet<5=H5. 9terador etor9 mitHnew 9terador etor9%vet(. char o. //oHopcaoF int e. //temporario
,5

)trin$ line. //linha a ser lida do teclado 3ata9nput)tream meu3ata9nput)treamHnew 3ata9nput)tream%)>stem.in(. tr>; do ; do ; oHmeu3ata9nput)tream.read5ine%(.charAt%1(. @ while %oHHXMnX(. switch %o( ; case XaX: //atribui lineHmeu3ata9nput)tream.read5ine%(. tr> ; eH9nte$er.valueVf%line(.int alue%(. mit.atribui%e(. @ catch %2/ception erro( ; )>stem.out.println%?2ntrada invalida:?(. @ breaL. case XrX: //retorna eHmit.retorna%(. )>stem.out.println%e(. breaL. case XfX: //frente mit.avanca%(. breaL. case XtX: //tras mit.retrocede%(. breaL. case XcX: //comeca iteracaoY mit.comeca%(. breaL. case XeX: //fim da iteracaoY )>stem.out.println%mit.fim%((. breaL. case XvX: //valor atual )>stem.out.println%? :?Gmit.retorna-conta%((. breaL. case XmX: //mostra vetor for%int !H1.!Bvet.len$th.!GG( ; )>stem.out.print%?<?Gvet<!=G?=?(. @ )>stem.out.println%(. breaL. default: . @ //switch @ while %o:HX'X(. @ //tr> blocL catch %2/ception erro( ; /A nao faco nada A/ @ @ //main method
,6

@ //class *rincipal m <1=<0=<2=<3=<4=<5= a , m <,=<0=<2=<3=<4=<5= f f f a 33 t a 22 m <,=<0=<22=<33=<4=<5= c v :1 ' EG*'(E(,0)' 1K *e)ina uma $,asse de nome Arra>)ervices Xue )orne$e serRios para Retores# Imp,emente os 7serRios8 de' ordenao de su&Retor GRetor interno menor ou i"ua, ao Retor em XuestoH , &us$a, tro$a de posiWes, et$# Esta $,asse opera so&re os Retores passados $omo ar"umentos de seus m!todos Gpassa"em imp,+$ita do ponteiro para o RetorH# Os Retores deRem ser de tipos num!ri$os de)inidos na ,in"ua"em G$onte $om a eListVn$ia de operadores G Q B HH, et$H# 5o$V terM Xue de)inir uma Rerso desta $,asse para $ada tipo da ,in"ua"em G b>teF float, et$H# Na Rerdade isto no ! tra&a,0oso, &asta Ro$V de)inir para um tipo, depois a,terar sO as partes ne$essMrias e re$ompi,ar para os demais# (ense $omo )aPer a $,asse Arra>)ervices tra&a,0ar em $onjunto $om a $,asse Iterador Retor# No $on)unda estas duas $,asses, e,as eLe$utam tare)as distintas#

3.3.2. ACOPLAMENTO DINZMICO DE MENSA$ENS (or a$op,amento entenda a es$o,0a $erta de um m!todo a ser eLe$utado para uma RariMRe, de$,arada $omo de uma $,asse, mas podendo $onter um o&jeto de uma su&$,asse desta# (or dinYmi$o entenda em tempo de eLe$uo# JM dissemos Xue um o&jeto de uma $,asse )i,0a "arante no m+nimo o $omportamento 7&e0aRiour8 de seu pai# (or este motiRo podemos atri&uir um o&jeto da $,asse )i,0a a uma RariMRe, da $,asse pai, mas no o $ontrMrio# A$op,amento dinYmi$o mostrarM Xue ! poss+Re, )aPer $om Xue o $ompi,ador eLe$ute a imp,ementao desejada de um m!todo rede)inido para $,asses 0erdeiras, mesmo no $aso de $0amada de m!todo o$orrer para uma RariMRe, de super$,asse G$,asse paiH $ontendo um o&jeto de uma su&$,asse G$,asse )i,0aH# Isto nos permitirM $onstruir ,istas 0etero"Vneas 6#6#6#
,"

/aPendo uma $omparao $om ,in"ua"ens pro$edurais' O tra&a,0o do d.nami$ &indin" norma,mente ! )eito desta )orma em ,in"ua"ens pro$edurais' TT&omputa&ontaEancaria if t>pe%a(HH&onta&orrente then &omputa&onta&orrente%a(. else if t>pe%a(HH*oupanca then &omputa*oupanca%a(. //chamadas procedimentos

de

JM em ,in"ua"ens orientadas a o&jetos $omo Java temos o se"uinte' &onta &ont etHnew conta<3=. // etor de ob!etos da classe conta &ont et<1=Hnew *oupanca%0111F.01(. //toda *oupanca R uma &onta &ont et<0=Hnew &onta&orrente%0111F.01F1(. //toda &onta&orrente R uma &onta &ont et<2=Hnew *oupanca%0131F.05(. &ont et</=.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 D,&+'&;& .&) (>&))*)/

A $,asse )i,0a "arante no m+nimo o mesmo $omportamento, 7&e0aRiour8 da $,asse pai, podendo a$res$entar ou rede)inir parte do Xue )oi 0erdado# (or este motiRo, uma RariMRe, da $,asse pai pode re$e&er um o&jeto da $,asse )i,0a, o $omportamento da $,asse pai )i$a "arantido e o restante Go Xue a $,asse )i,0a a$res$entouH ! perdido# JM uma RariMRe, da $,asse )i,0a no pode re$e&er um o&jeto da $,asse pai, porXue os m!todos de)inidos para RariMReis desta $,asse passam a no )aPer sentido para o o&jeto $ontido nesta RariMRe,# O dia"rama re),ete o aspe$to das $ara$ter+sti$as a$res$entadas pe,a $,asse )i,0a a $,asse pai, mas no o )ato de uma RariMRe, da $,asse pai poder re$e&er um e,emento da $,asse )i,0a, isto porXue $omo no desen0o o pai ! desen0ado menor Xue o )i,0o, o ,eitor tem a tendVn$ia de in)erir Xue o pai $a&e no )i,0o o Xue ! justamente o $ontrMrio do Xue a$onte$e em termos de RariMReis# 3.3.2.1. 7M E8EMPLO ESCLARECEDOR

O eLemp,o a se"uir $ria dois o&jetos Gpai e )i,0oH e )aP atri&uiWes e $0amadas de m!todos entre e,es#

//&lasse )uper&lasse class )uper&lasse ; public void nome%(


,#

; )>stem.out.println%?7etodo da superclasse?(. @ @ //&lasse )ub&lasse class )ub&lasse e/tends )uper&lasse ; public int novoatributo. public void nome%( //redefinicao ; )>stem.out.println%?7etodo da subclasse?(. @ public void novometodo%( ; )>stem.out.println%?Covo metodo:?Gnovoatributo(. @ @ //&lasse principalF Ar'uivo *rincipal.!ava class *rincipal ; public static void main%)trin$ ar$s<=( ; )ub&lasse esub0Hnew )ub&lasse%(. )uper&lasse esuper0Hnew )uper&lasse%(. //poderia ter alocado uma )ub&lasse a'ui esub0.nome%(. esub0.novoatributoH01. esuper0.nome%(. esuper0Hesub0. esuper0.nome%(. @ //main method @ //class *rincipal 7etodo da subclasse 7etodo da superclasse 7etodo da subclasse

$$COMEN<ARIO:6 Note Xue o m!todo ! es$o,0ida de a$ordo $om o $onteQdo da RariMRe, e no de a$ordo $om a $,asse desta#

,,

3.3.2.2. O 67E ACONTECE COM O 67E FOI ACRESCENTADO *epois do pro"rama anterior, Ro$V deRe estar se per"untando o Xue a$onte$e $om o Xue )oi a$res$entado pe,a $,asse )i,0a Xuando um o&jeto desta $,asse ! atri&u+do a $,asse pai#

//9nsira a'ui o ar'uivo da )uper&lasse do e/emplo anterior

//9nsira a'ui o ar'uivo da )ub&lasse do e/emplo anterior

//&lasse principalF Ar'uivo *rincipal.!ava class *rincipal ; public static void main%)trin$ ar$s<=( ; )ub&lasse esub0Hnew )ub&lasse%(. )uper&lasse esuper0Hnew )uper&lasse%(. //poderia ter alocado uma )ub&lasse a'ui esub0.nome%(. esub0.novoatributoH01. esuper0.nome%(. esuper0Hesub0. esuper0.nome%(. esub0H%)ub&lasse(esuper0. //cast esub0.nome%(. esub0.novometodo%(. @ //main method @ //class *rincipal 7etodo da subclasse 7etodo da superclasse 7etodo da subclasse 7etodo da subclasse Covo metodo:01 \\COMEN<ARIO: Em&ora Ro$V seja $apaP de re$uperar os m!todos e atri&utos a$res$entados atraR!s do t.pe $astin", enXuanto isto no )or )eito, estes m!todos e atri&utos esto ina$ess+Reis# EG*'(E(,0)/ 1K Imp,emente em suas $,asses m!todos Xue imprimem uma )rase identi)i$ando o tipo da $,asse, por eLemp,o' 7Eu sou a $,asse $onta $orrente, espe$ia,iPao de $onta &an$aria#8
011

4K

-ode,e e imp,emente uma 0ierarXuia de CONTAS BANC;RIAS, use os re$ursos Xue a$0ar $onReniente' $,asses a&stratas, inter)a$es, RariMReis stati$# 5o$V deRe de)inir $,asses seme,0antes as $ontas &an$Mrias $omo poupana, $onta $orrente, et$# Os m!todos deRem ter nomes $omo deposita, sa$a, $omputa, et$# 3.3.3. LISTA HETERO$SNEA DE FORMAS N+*0;F-',(&)O Este eLemp,o ,ida $om um Retor de o&jetos da $,asse )orma de)inida em 6#6C2ASSES ABSTRATAS E CONCRETAS , estes o&jetos so retYn"u,os, pontos, et$# O o&jetiRo ! mostrar' su&$,asses $ontidas em RariMReis GposiWes de RetorH da super$,asse e a$op,amento dinYmi$o de mensa"ens# O nosso Retor de )ormas $onterM o&jetos "rM)i$os de $,asses 0etero"Vneas# Trataremos todos de maneira uni)orme, $0amando os m!todos mostra e move# 5o$V jM Riu nos eLemp,os anteriores $omo re$uperar o o&jeto em uma RariMRe, de sua prOpria $,asse e no super$,asse# Re$ompi,e $om esse noRo m!todo main' //9nsira a'ui a definicao da classe Porma dada em 3.3&5A))2) AE)IUAIA) 2 &VC&U2IA)

//9nsira a'ui a definicao da classe *onto dada em 3.3&5A))2) AE)IUAIA) 2 &VC&U2IA)

//9nsira a'ui a definicao da classe Uetan$ulo dada em 3.3&5A))2) AE)IUAIA) 2 &VC&U2IA)

//&lasse principalF Ar'uivo *rincipal.!ava class *rincipal ; public static void main%)trin$ ar$s<=( ; Porma vetor$rafico<=Hnew Porma<4=. vetor$rafico<1=Hnew Uetan$ulo%1F1F21F01(. vetor$rafico<0=Hnew *onto%1F0(. vetor$rafico<2=Hnew Uetan$ulo%011F011F21F21(. //lados i$uais vetor$rafico<3=Hnew *onto%2F0(. for%int iH1.iB4.iGG( ; vetor$rafico<i=.mostra%(. @ for%int !H1.!B4.!GG( ; vetor$rafico<!=.move%02.1fF02.1f(.
010

vetor$rafico<!=.mostra%(. @ @ @ %1F1(%21F01( %1F0( %011F011(%21F21( %2F0( %02F02(%21F01( %02F03( %002F002(%21F21( %04F03( TTCOMEN<ARIO:' O&serRe Xue a imp,ementao $orreta do m!todo mostra ! es$o,0ida em tempo de eLe$uo de a$ordo $om a $,asse do o&jeto Xue estM naXue,a posio do Retor# EG*'(E(,0)/ 1 Considere as se"uintes de$,araWes em Java'

public class I ; public void f%void( ; )>stem.out.println% J2stou em IK(.@ @. public class ) e/tends I ; public void f%void( ; )>stem.out.println%J2stou em )K(.@ @. I /H new I%(. ) >Hnew )%(. I pHnew I%(. e as se"uintes inRo$aWes de operaWes' p.f%(. //primeira pH>. p.f%(. //se$unda /.f%(. //terceira >.f%(. //'uarta /H>. /.f%( //'uinta Responda Xua, ! o resu,tado na te,a de $ada uma destas $0amadas#

012

4.

CONCEITOS AVANADOS

Neste tOpi$o apresentaremos $on$eitos aRanados da ,in"ua"em, estes $on$eitos so importantes se Ro$V deseja $riar so)tZares re,atiRamente "randes em Java# R.1. ATRIB7TOS :<A<IC

At! o momento sO 0aR+amos aprendido $omo de)inir atri&utos de instYn$ia# Cada o&jeto tin0a seus prOprios atri&utos e uma modi)i$ao nos atri&utos de um o&jeto no a)etaRa os atri&utos de outros o&jetos# Neste tOpi$o iremos apreender $omo de)inir atri&utos de $,asse# Esses atri&utos so os mesmos para todos os o&jetos, e,es so $omparti,0ados# 1ma mudana em um destes atri&utos ! Ris+Re, por todos os o&jetos instan$iados# Atri&utos de $,asse tam&!m so $0amados de atri&utos static# Neste eLemp,o de)iniremos uma $,asse robo Xue usa atri&utos static para sa&er Xuantos robos )oram $riados Ginstan$iadosH# 1m outro uso de atri&utos static seria usar uma estrutura de dados Xue permitisse Xue um robo sa&er a posioG$oordenadasH dos demais o&jetos de sua $,asse#

//&lasse Uobo class Uobo ; public int /. public int >. publi -t"ti int Ju"nto-# $$Ju"nto- !or"( in-t"n i"%opublic Uobo%int a/Fint a>( ; /Ha/. >Ha>. Ju"nto-//# @ @ //&lasse principalF Ar'uivo *rincipal.!ava class *rincipal ;
013

public static void main%)trin$ ar$s<=( ; Robo.Ju"nto-)4# $$ini i"li="n%o " ."ri".el -t"ti Uobo cncFcnc2. )>stem.out.println%Uobo.'uantos(. cncHnew Uobo%01F02(. )>stem.out.println%Uobo.'uantos(. cnc2Hnew Uobo%00F02(. )>stem.out.println%Uobo.'uantos(. @ //main method @ //class *rincipal 1 0 2

TTCOMEN<ARIO:' Euando de)inimos atri&uto static, estMRamos nos re)erindo ao sentido "era, de atri&uto# Apesar de termos eLemp,i)i$ado $om um inteiro, Ro$V poderia ter usado uma $,asse no ,u"ar desse atri&uto, tomando o $uidado de $0amar new antes de usMK,o# 4.2. MQTODOS STATIC

-!todos static tam&!m so $0amados de m!todos de $,asses# Estes m!todos sO podem operar so&re atri&utos de $,asses# Nos jM R+n0amos usando estes m!todos# EListem eLemp,os de $0amadas de m!todos static em nossos pro"ramas anteriores porXue as pa$Sa"es da ,in"ua"em so rep,etas de eLemp,os de m!todos static# (or este motiRo eu es$o,0i uma das de)iniWes de m!todos static da Java A(I GSun -i$ros.stemsH para trans$reRer' 'H,7C9BH(*>. S<'<%= :*<S9C %& =(',, I'E'.('&8.M'<S R*<B+&, <S* 'H,9(B<* C9BH(* E'(B* 9$ '. Neste tOpi$o no mostraremos um eLemp,o propriamente dito, apenas mostraremos $omo de)inir um m!todo static, portanto ! importante Xue Ro$V )aa os eLer$+$ios# -!todos static so de)inidos assim $omo atri&utos static' public static int 73&%int aFint b( ; //ma/imo divisor comum de a e b @ No eLemp,o da $,asse Pracao G1#C#1TA* /RAOH, tiRemos Xue ,idar $om o m!todo mdc# Este m!todo no )aPia muito sentido para o usuMrio desta $,asse, em&ora )osse ne$essMrio para )aPer $ertas operaWes Xue enRo,Riam simp,i)i$ao de )rao# NaXue,e momento nossa opo )oi por imp,ementar o m!todo $omo private na prOpria $,asse Pracao# A,"u!m ri"oroso poderia ter dito' 75o$V estM errado, mdc no tem nada a Rer $om Pracao e eu Rou imp,ementMK,o em uma $,asse separada $0amada )ervicos7atematicos8# A min0a resposta a esta a)irmao seria' 7A$0o sua id!ia &oa, mas sem o uso de m!todos static na $,asse )ervicos7atematicos, Ro$V Rai ter Xue de$,arar um o&jeto da $,asse )ervicos7atematicos dentro de $ada Pracao para poder usar o m!todo mdc#8
014

EG*'(E(,0)' 1K *e)ina uma $,asse $om m!todos static Xue permite /ATORIA2, CO-BINAJESGn,SH, (ER-1TAJES, et$# Y2K EListe uma ,in"ua"em de pro"ramao $0amada 2o"o Xue ! muito usada no Brasi, em es$o,as de primeiro e se"undo "rau# Nesta ,in"ua"em Ro$V pode pro"ramar os moRimentos na te,a de uma tartaru"uin0a ou $ursor# Este $ursor des$reRe moRimentos ris$ando ou no a te,a, dentre os moRimentos des$ritos esto $+r$u,os, Xuadrados e seXuVn$ias repetitiRas G,oopsH# -odi)iXue seu o&jeto ro&o para apresentar a,"uns desses re$ursos# Crie ento um pro"rama Xue ,V de um arXuiRo teLto instruWes para este o&jeto ro&o eLe$utar moRimentos na te,a# 2o"o )oi $riada por um $ientista de $omputao do -IT# 6K 5o$V pode desejar armaPenar as in)ormaWes da $,asse Uobot em outra $,asse, Xue $omputa outros $M,$u,os, neste $aso temos pe,o menos duas a,ternatiRas a se"uir' aHCrie uma $,asse auLi,iar eLterna de armaPena"em e para todos o&jetos robo instan$iados passe o ponteiro desta $,asse auLi,iar $omo ar"umento do $onstrutor # Assim esses o&jetos podero mandar mensa"ens para esta $,asse de armaPena"em# Essas mensa"ens, $0amadas de m!todos, podem ter RMrios si"ni)i$ados, num sentido )i"urado podemos ter a,"o pare$ido $om' 7C,asse auLi,iar, armaPene essa in)ormao para mim8# 7C,asse auLi,iar, me mande uma mensa"em daXui a $in$o se"undos, estou passando o ponteiro para mim mesmo G thisH8 , et$# As mensa"ens Ristas desse modo )i$am mais interessantes, Ro$V pode at! a$0ar en"raado, mas ! muito prMti$o pensar assim# Em a,"uma $,asse Xue Ro$V $riou anteriormente de)ina RariMReis static $om o se"uinte o&jetiRo' Contar, )aPer estat+sti$as das $0amadas de m!todos da $,asse# 1se o Xue )oi aprendido so&re 7static Raria&,es8 no pro"rama $ontas, o o&jetiRo ! armaPenar in)ormaWes so&re os moRimentos de todas as $ontas num o&jeto static# (ara Xue a modi)i$ao )iXue a $ontento Ro$V pode pre$isar tornar o eLemp,o mais prOLimo da rea,idade, adi$ionando no $onstrutor de $ontas um ar"umento' nQmero de $onta# Comente se Ro$V usaria a,o$ao dinYmi$a para essa $,asse de armaPena"em a"re"ada em $onta, ou no# Ten0a em mente a Xuesto do taman0o em &.tes do o&jeto# 4.3. TRATAMENTO DE E8CEWES $M,$u,os matemMti$os $omo -*C,

?K

Se os $on$eitos de orientao a o&jetos dados at! a"ora )ossem su)i$ientes para mode,ar Xua,Xuer atiRidade ou o&jeto do mundo rea,, todos os pro&,emas de pro"ramao estariam reso,Ridos# O$orre Xue o mundo rea, ! &em mais $omp,eLo Xue seu pro"rama pode ser# Nem todos os o&jetos e iteraWes entre e,es podem ser mode,ados ou preRistos# Os me$anismos de tratamento de eL$eWes se en$aiLam justamente nessa ,a$una# O mode,o de tratamento de eL$eWes adotado por Java ! muito seme,0ante ao de C]]# Se Ro$V jM teRe a,"uma eLperiVn$ia $om tratamento de eL$eWes, este tOpi$o serM &astante )M$i,# 4.3.1. TRATANDO AS E8CEWES $ERADAS POR TERCEIROS
015

Tratamento de eL$eWes permite ,idar $om as $ondiWes anormais de )un$ionamento de seu pro"rama# /aPer uso deste re$urso tornarM seu so)tZare mais ro&usto, se"uro e &em estruturado# So eLemp,os de $ondiWes anormais' a$esso a um +ndi$e inRM,ido de um Retor, tentatiRa de uso de um o&jeto no ini$ia,iPado, )a,0a na trans)erVn$ia de uma in)ormao, uma )a,0a no preRista, et$# Sem as )a$i,idades o)ere$idas pe,a ,in"ua"em seria muito di)+$i, ,idar $om essas $ondiWes anormais, isto pode ser o&serRado nos de)i$ientes meios de tratamento de erros usados em ,in"ua"ens Xue no )orne$em 7eL$eption 0and,in"8# Java ! uma ,in"ua"em Xue )aP )orte uso do $on$eito de tratamento de eL$eWes# Em a,"umas ,in"ua"ens Xue imp,ementam tratamento ! per)eitamente poss+Re, pro"ramar sem usar esse re$urso, mas em Java no# Isto pode ser $omproRado pe,a ne$essidade de a,"uns &,o$os de $Odi"o tr> ;@ catch ;@ em pro"ramas anteriores# 1m dos motiRos de o pro"ramador Java ter Xue sa&er tratamento de eL$eWes ! Xue os m!todos de $,asses de)inidas na ,in"ua"em podem "erar eL$eWes e na maioria das RePes o $ompi,ador nos o&ri"a a es$reRer tratadores G&,o$os tr>;@ catch;@H para $0amadas destes m!todos# Euando Ro$V )or estruturar seu $Odi"o dessa )orma, 0aRero duas aWes &Msi$as Xue deRem ser tomadas' ,eRantar Gjo"arH uma eL$eo e tratar uma eL$eo# 1ma eL$eo serM ,eRantada Xuando )or Reri)i$ada uma $ondio anorma, de )un$ionamento do pro"rama, ento o m!todo Xue esta sendo eLe$utado ! imediatamente terminado e o $ontro,e passa para o m!todo Xue o $0amou, onde pode o$orrer um tratador da eL$eo ou no# Se o$orrer um tratador, na maioria dos $asos a eL$eo para de se propa"ar a,i mesmo# Se no o$orrer um tratador outras $0amadas de m!todos so 7des)eitas8, en$erradas, podendo $u,minar no t!rmino do pro"rama se toda a $adeia de $0amada de m!todos )or des)eita at! $0e"ar em main sem Xue se a$0e um tratador para esta eL$eo# EListem RMrios mode,os de tratamento de eL$eWes, o mode,o adotado por Java re$e&e o nome de' 7termination mode,8, justamente por essas terminaWes de m!todos# -as o Xue ! uma jo"ar uma eL$eo^ A suspender a eLe$uo do m!todo atua, e passar um o&jeto para o &,o$o catch mais prOLimo na $adeia de $0amadas de m!todos atua,# Isto ! )eito atraR!s da de$,arao' throw nomedoob!eto. //ou throw new nomedaclassedoob!eto%ar$umentos do construtor( throw ! $omo um breaL para m!todos# Como eL$eWes so o&jetos, Ro$V pode de)inir 0ierarXuias de $,asses de eL$eWes, Xue mapeiem em termos de in)ormaWes as $ondiWes anormais de seu pro"rama $ontendo as mensa"ens de erro e as poss+Reis so,uWes As eL$eWes "eradas pe,a ,in"ua"em perten$em a uma 0ierarXuia $ujo topo ! a $,asse Ihrowable, imediatamente estendida por 2rror e 2/ception# Neste eLemp,o Ro$V RerM Xue os tratadores de eL$eo so es$o,0idos $omparando a $,asse da eL$eo jo"ada e a $,asse de eL$eWes Xue o tratador diP tratar# Assim sendo o tratador' tr>; /Aal$o 'ue possa $erar uma e/cecaoA/@ catch %E& eption erro( ; /A acoes de tratamento do erro com possivelmente nova tentativa de e/ecucao dos metodos chamadosA/ @ Seria $apaP de tratar todas as eL$eWes Xue estejam a&aiLo de 2/ception Gna 0ierarXuiaH "eradas em tr> ; d# *ispondo mais de um tratador G&,o$o $at$0H em seXjVn$ia onde os primeiros sO tratam as $,asses eL$eWes mais &aiLas da 0ierarXuia, ! poss+Re, es$o,0er Xue $Odi"o de tratamento usar $om $ada tipo de eL$eo "erada# (or sorte, das eL$eWes ,eRantadas pe,a ,in"ua"em, Ro$V $omo pro"ramador sO pre$isarM tratar as da 0ierarXuia de 2/ception. Neste eLemp,o iremos )orar o a$onte$imento da eL$eo Arra>9nde/VutVfEounds2/ceptionF atraR!s de uma tentatiRa de a$esso a um +ndi$e inRM,ido de um Retor' A$esso a +ndi$e inRM,ido do Retor sem $orromper o sistema, pro"ramadores C pasmem\ //&lasse principalF Ar'uivo *rincipal.!ava
016

class *rincipal ; public static void main%)trin$ ar$s<=( ; int a<=Hnew int<4=. tr> ; a<4=H01. //linha acima $era e/cecaoF os indices validos sao 'uatro:1F0F2F3 //'ual'uer codi$o escrito a'ui %depois de a<4=H01.( //nunca sera e/ecutado @ catch%2/ception ae( ; //refa6 a per$unta do indice a alterar ao usuario //e descrobre 'ue ele 'ueria alterar o valor no indice 3F escrevendo 02 a<3=H02. @ )>stem.out.println%a<3=(. @ @ 02

//COMEN<ARIO:: O )ato do $Odi"o imediatamente apOs o ponto onde )oi "erada a eL$eo no ser eLe$utado te preo$upa^ 5o$V "ostaria por eLemp,o de ter uma $0an$e de ,i&erar re$ursos do sistema GeL##')e$0ar um arXuiRoH antes do m!todo ser terminado^ A para isso Xue eListe em Java o &,o$o tr>; @ catch;@ finall>;@ Xue no eListe em C]], mas eListe por eLemp,o em -odu,aK6# A $,Musu,a finall>; @ ! op$iona,, seu $Odi"o Rai ser eLe$utado o$orra ou no o$orra uma eL$eo no &,o$o tr>;@ # ELemp,o $,Mssi$o de uso do &,o$o tr>;@ catch;@ finall> ;@: tr' 1 //abre um ar'uivo //$era uma e/cecao com ar'uivos 2 "t 5 +E& e "oArJui.o e,1 //tenta recuperar a'uivo e informacoes perdidas 2 !in"ll' 1 ar'uivo.close%(. 2 finall> tem sido usado para )e$0ar arXuiRos, parar threads e des$artar jane,as# EG*'(E(,0): 0Q
01"

Em RMrios dos pro"ramas anteriores men$ionamos Xue 0aReria uma maneira me,0or de tratar situaWes anormais# 1m desses pro"ramas era o do tipo a&strato de dados matri6# 2eia este pro"rama e adi$ione tratamento de eL$eWes para as $ondiWes anormais Xue podem sur"ir, tais $omo a$esso a +ndi$es inRM,idos# Comp,emente este eLer$+$io apOs ter ,ido os tOpi$os se"uintes# 4.3.2. $ERANDO S7AS PRXPRIAS E8CEWES O eLemp,o a se"uir ensina $omo tra&a,0ar $om throw, a pa,aRra $0aRe usada para ,eRantar eL$eWes# Este eLemp,o se &aseia na $,asse Pracao de 1#C#1 TA* /RAO# Nossa eL$eo serM "erada Xuando nas operaWes de )raWes o$orrer uma diRiso por Pero# Em Java, eL$eWes so instYn$ias de $,asses Xue perten$em a 0ierarXuia Xue ! ini$iada, en$a&eada, pe,a $,asse Ihrowable# Neste eLemp,o $onstruiremos nossa eL$eo 0erdando de 2/ception Xue por sua ReP 0erda de Ihrowable#

public class 3ivisao*or_ero e&ten%- E& eption ; public )trin$ info. public 3ivisao*or_ero%)trin$ i( ; infoHi. @ @ 5o$V deRe modi)i$ar a $,asse Pracao apresentada anteriormente na pM"ina C4, para a$eitar o se"uinte m!todo' public Pracao divisao%Pracao !( t5ro*- Di.i-"oPorSero ; Pracao $. if %!.denHH1( t5ro* ne* Di.i-"oPorSero+;N" l"--e Qr" "o;,# //se for 6ero a e/ecucao nao che$a a'ui $Hnew Pracao%numA!.denFdenA!.num(. return $. @ class *rincipal ; public static void main%)trin$ ar$s<=( ; Pracao aFbFc. aHnew Pracao%5F3(. bHnew Pracao%2F1(. )>stem.out.print%?2sta eX a fracao a: ?(. a.mostra%(. )>stem.out.print%?2sta eX a fracao b: ?(. b.mostra%(. tr' 1 cHa.divisao%b(. c.mostra%(. 2 "t 5+Di.i-"oPorSero (in5"e& e "o, 1
01#

)>stem.out.println%?Cao posso dividir por 6ero?(. 2 @ @ 2sta eX a fracao a: %5/3( 2sta eX a fracao b: %0/1( Cao posso dividir por 6ero

//COMEN<ARIO: NOs no apresentamos um eLemp,o de uma eL$eo propa"ando em uma $adeia ,on"a de $0amadas de m!todos# -as $om os $on0e$imentos dados, Ro$V pode )aPer isso# Outro )ato importante ! Xue um &,o$o catch tam&!m pode "erar eL$eWes, assim se Ro$V pe"ou uma eL$eo e reso,Reu Xue no $onse"ue tratMK,a Ro$V pode )aPer um throw de,a mesma ou mudar a $,asse da eL$eo e $ontinuar propa"ando G throw de outra eL$eoH, ou )aPer o Xue Ro$V pode para reparar o erro e jo"ar uma eL$eo para Xue o Xue Ro$V )eP seja $omp,etado por outros m!todos# 2em&reKse Xue se Ro$V pe"ou uma eL$eo, e,a para de propa"ar# EG*'(E(,0)/ 1K Imp,emente, tratamento de eL$eWes $omp,eto para o eLemp,o de 1#C#1 TA* /RAO# Antes )aa um ,eRantamento das eL$eWes Xue podem ser "eradas, ,em&re das restriWes matemMti$as para o denominador em uma diRiso# 2eRe em $onta tam&!m o oRer),oZ de RariMReis int Xue so uma representao $om nQmero de &its )inito da seXuVn$ia dos nQmeros inteiros G$onjunto o da matemMti$aH# Compare este tratamento $om o de outros pro"ramas por eLemp,o na diRiso por Pero, Xuais as Ranta"ens Xue Ro$V pode apontar e as desRanta"ens^ R.R. <HREAD:

t0reads so ),uLos de eLe$uo Xue rodam dentro de um pro$esso Gap,i$aoH# Norma,mente os t0reads $omparti,0am re"iWes de memOria, mas no ne$essariamente# 2em&reKse de en$apsu,amento# (ro$essos, os aROs dos t0reads permitem Xue o seu sistema opera$iona, eLe$ute mais de uma ap,i$ao ao mesmo tempo enXuanto Xue t0reads permitem Xue sua ap,i$ao eLe$ute mais de um m!todo ao mesmo tempo# Todos os pro"ramas Xue )iPemos at! a"ora sO tin0am um Qni$o $amin0o, )io, ),uLo, de eLe$uo# Nen0um de,es eLe$utaRa duas $oisas Gdois pedaos de $Odi"oH simu,taneamente# <rande parte do so)tZare de Xua,idade es$rito 0oje )aP uso de mais de uma ,in0a de eLe$uo, mais de um t0read# So os $0amados pro"ramas mu,tit0readed# O seu &roZser de 0iperteLto $onse"ue )aPer o doZn,oad de RMrios arXuiRos ao mesmo tempo, "eren$iando as di)erentes Re,o$idades de $ada serRidor e ainda assim permite Xue Ro$V $ontinue intera"indo, mudando de pM"ina no 0iperteLto enXuanto o arXuiRo nem )oi $arre"ado tota,mente^ Isto no seria poss+Re, sem o uso de t0reads# O seu editor de teLtos permite Xue Ro$V RM editando o $omeo do arXuiRo, enXuanto e,e estM sendo $arre"ado do dis$o^ Editar e $arre"ar do dis$o so atiRidades Xue no podem ser inter$a,adas de maneira simp,es em um pedao de $Odi"o# Seu editor estM usando t0reads, essas atiRidades esto sendo )eitas em para,e,o#
01,

Se sua mMXuina sO possui um pro$essador, esse para,e,ismo ! um )a,so para,e,ismo# O pro$essador tem seu tempo diRidido em peXuenos interRa,os, em $ada interRa,o e,e eLe$uta uma das atiRidades e Ro$V tem a sensao de Xue tudo estM )un$ionando ao mesmo tempo, simu,taneamente# Se Ro$V ! um )e,iPardo e sua mMXuina tVm mais de um pro$essador, ento seu am&iente serM $apaP de mapear seus t0reads em 0ardZare e Ro$V terM rea,mente pro$essamento para,e,o# Se Ro$V o,0ar a traduo de t0reads no di$ionMrio ! at! $apaP Xue Ro$V en$ontre um desen0o de um $arrete, de ,in0a ou da ros$a de um para)uso, este nome ! &astante )e,iP# Ima"ine Xue seu pro"rama ! $omposto por RMrias ,in0as de eLe$uo Xue )un$ionam em para,e,o Ga,"umas RePes estas ,in0as podem se juntar, outras se diRidirH# Cada ,in0a de eLe$uo $uida de uma tare)a' trans)erir um arXuiRo, tratar a entrada do usuMrio, mostrar sua jane,a na te,a, et$# threads ! uma inReno re$ente se $omparada $om o restante da ,in"ua"em# A,"umas outras ,in"ua"ens G&em pou$asH )orne$em )a$i,idades para ,idar $om t0reads, eLemp,o' -odu,aK6#Tam&!m $on0e$idos $omo ,i"0tZei"0t pro$esses, t0reads so um re$urso eLtremamente di)+$i, de se imp,ementar, de modo Xue ! poss+Re, diPer Xue ou seu am&iente de pro"ramao o)ere$e )a$i,idades para ,idar $om e,es, ou Ro$V no Rai Xuerer imp,ementMK,osTusMK,os# 4.4.1. CRIANDO THREADS 7SANDO INTERFACES O7 HERANA EListem duas maneiras &Msi$as de $riar t0reads em Java, usando inter)a$es e usando 0erana# 1sando 0erana, sua $,asse jM ! um t0read Gis a re,ations0ipH, Xue Xuando tiRer seu m!todo startGH $0amado Rai eLe$utar tudo o Xue estiRer no m!todo runGH em para,e,o# 1sando inter)a$es, Ro$V de)ine uma $,asse $ujo m!todo runGH Rai ser eLe$utado por um t0read# 4.4.1.1. HERANA 7SADA PARA CRIAR THREADS

Se Ro$V Xuer ter uma id!ia do Xue Rai a$onte$er no pro"ramin0a a&aiLo, Reja o desen0o ao ,ado# NOs )aremos uma $orrida de T0reads' A e B# E,es sero ini$iados depois Xue o pro"rama prin$ipa, GmainH $omear# A sai $om a,"uma Ranta"em pois ! ini$iado primeiro, depois sai B# A $ada ,oop estes T0reads so o&ri"ados a )aPer uma pausa por um interRa,o a,eatOrio at! $omp,etarem ,oops' B,1,4,6, # No )ina,, pedimos ao pro"rama prin$ipa, Xue espere os T0reads terminarem seus $i$,os para se juntar a e,es Gm!todo !oinGH da $,asse t0readH#O m!todo !oin no retorna enXuanto o seu t0reads no terminar# EListem uma s!rie de outras primitiRas para ,idar $om T0reads' pausa# parada, retorno a eLe$uo, et$# No eLp,i$aremos todas aXui# 5o$V deRe )aPer ,eituras $omp,ementares, ! isso Xue temos a$onse,0ado# A"ora estas ,eituras podem ser mais t!$ni$as, tipo "uias de re)erVn$ia, uma ReP Xue nOs jM )iPemos a introduo do assunto# A,"uns assuntos, a eLemp,o de T0reads eLi"em um $on0e$imento teOri$o )orte, de modo Xue tam&!m a$onse,0amos Xue Ro$V adXuira um ,iRro so&re pro"ramao $on$orrente#

001

public class 7euIhread e&ten%- <5re"% ; public 7euIhread%)trin$ nome( ; super%nome(. @ public void run%( // o metodo 'ue vai ser e/ecutado no thread tem sempre nome run ; for %int iH1. iB5. iGG( ; )>stem.out.println%$etCame%(G ? na etapa:?Gi(. tr> ; sleep%%int(%7ath.random%( A 2111((. //milise$undos @ catch %9nterrupted2/ception e( ;@ @ )>stem.out.println%?&orrida de threads terminada:? G $etCame%((. @ @ class &orridaIhreads ; public static void main %)trin$ ar$s<=( ; Meu<5re"% "7b# ")ne* Meu<5re"%+;Leon"r%o O".ier Ro--i;,# ".-t"rt+,# b)ne* Meu<5re"%+;An%re Au8u-to Ce-t";,# b.-t"rt+,# tr> ;".9oin+,# @ catch %9nterrupted2/ception i$norada( ;@ tr> ;b.9oin+,# @ catch %9nterrupted2/ception i$norada( ;@ @ @ Leon"r%o O".ier Ro--i n" et"p"64 Andre Au$usto &esta na etapa:1 Andre Au$usto &esta na etapa:0 Leon"r%o O".ier Ro--i n" et"p"61 Andre Au$usto &esta na etapa:2 Leon"r%o O".ier Ro--i n" et"p"62 Leon"r%o O".ier Ro--i n" et"p"6A Andre Au$usto &esta na etapa:3 Andre Au$usto &esta na etapa:4 &orrida de threads terminada:Andre Au$usto &esta Leon"r%o O".ier Ro--i n" et"p"6R Corri%" %e t5re"%- ter(in"%"6Leon"r%o O".ier Ro--i

t5re"% A thread E

4.4.1.2.

INTERFACES 7SADAS PARA CRIAR THREADS

Co,o$ar sua $,asse a&aiLo da $,asse T0reads em uma 0ierarXuia, as RePes ! um preo muito "rande para ter um m!todo de,a rodando em um T0read# A por isso Xue T0reads pode ser $riados usando inter)a$es# 5o$V sO tem Xue diPer Xue imp,ementa a inter)a$e Uunnable, Xue ! $omposta do
000

m!todo run%(. Euando um Ihread ! $onstru+do usando $omo ar"umento uma $,asse Xue imp,ementa a inter)a$e Uunnable, $0amar o m!todo start para este thread )aP $om Xue o m!todo runGH de nossa $,asse $ome$e a ser eLe$utado neste t0read para,e,o#

public class Uodeme2mTmIhread i(ple(ent- Runn"ble ; public )trin$ str. //nome do ob!eto 'ue vai ter o metodo run rodado em um //thread public Uodeme2mTmIhread%)trin$ nome( ; strHnome. @ public void run%( ; for %int iH1. iB5. iGG( ; )>stem.out.println%strG ? na etapa:?Gi(. @ //As mensa$ens de corrida terminada poderiam se postas a'ui. @ @

class IhreadsUodadores ; public static void main %)trin$ ar$s<=( ; <5re"% "7b# Ro%e(eE(U(<5re"% leo7"n%re# leo)ne* Ro%e(eE(U(<5re"%+;Leon"r%o O".ier Ro--i;,# "n%re)ne* Ro%e(eE(U(<5re"%+;An%re Au8u-to Ce-t";,# ")ne* <5re"%+leo,# ".-t"rt+,# b)ne* <5re"%+"n%re,# b.-t"rt+,# tr> ; ".9oin+,# @ catch %9nterrupted2/ception i$norada( ; @ //espera thread terminar seu metodo run tr> ; b.9oin+,# @ catch %9nterrupted2/ception i$norada( ; @ @ @ 5eonardo Oavier Uossi na etapa:1 An%re Au8u-to Ce-t" n" et"p"64 An%re Au8u-to Ce-t" n" et"p"61 5eonardo Oavier Uossi na etapa:0 An%re Au8u-to Ce-t" n" et"p"62 5eonardo Oavier Uossi na etapa:2 5eonardo Oavier Uossi na etapa:3

thread A t5re"% E
002

An%re Au8u-to Ce-t" n" et"p"6A 5eonardo Oavier Uossi na etapa:4 An%re Au8u-to Ce-t" n" et"p"6R EG*'(E(,0)/ 1H As tare)as de transpor uma matriP ou )aPer o 7espe,0o8 de uma ima"em GXue pode ser representada por uma matriPH so eLemp,os )M$eis de tare)as Xue podem ser diRididas em dois ou mais T0reads# A ,O"i$o Xue aXui estaremos &us$ando tirar Ranta"em da poss+Re, eListVn$ia de mais de um pro$essador e tam&!m &us$ando ,i&erar o T0read prin$ipa, dessa $omputao, para Xue e,e possa )aPer outras atiRidades antes do !oin%(. Es$o,0a uma dessas tare)as e imp,ementeKas usando T0reads# *i$a' os T0reads deRem ser $onstru+dos de modo a $onter a re)erVn$ia para a matriP Xue Rai armaPenar o resu,tado, a re)erVn$ia para a matriP ori"ina, e os Ra,ores Xue indi$am em Xue Mrea da matriP este T0read deRe tra&a,0ar# (or eLemp,o' no $aso da inRerso da ima"em um T0read tra&a,0aria em uma metade e o outro na outra metade# Seria interessante imprimir na te,a os instantYneos da matriP resu,tado para Ro$V Rer o tra&a,0o sendo )eito em para,e,o# 4.4.2. PENSANDO M7LTITHREADED Este tOpi$o dis$ute a,"uns dos pro&,emas Xue podem sur"ir Xuando ,idando $om t0reads e apresenta a,"umas das so,uWes da ,in"ua"em# No nos apro)undaremos muito em t0reads# EListe um eLemp,o $,Mssi$o dos pro&,emas Xue podem a$onte$er Xuando Ro$V estM usando $on$orrVn$ia# Ima"ine Xue Ro$V tem um pro"rama Xue ,V dados em &.tes de a,"um ,u"ar Gte$,adoTdis$oH e os transmite Ria rede# 5o$V de$idiu usar t0reads porXue no Xuer )i$ar $om um pro"rama de um Qni$o ),uLo de eLe$uo &,oXueado porXue estM esperando o te$,ado ou o dis$o enXuanto poderia estar tentando transmitir parte de seu &u))er pe,a rede# (ara ta, Ro$V diRidiu o seu pro"rama em dois t0reads Xue )i$am repetindo o mesmo $onjunto de aWes' T0read A, En)i,eirando Ra,ores do te$,ado G2eituraH' 1K2V Ra,or do )onte# 4KConsu,ta o nQmero de e,ementos da )i,a# 6KSoma um a esse nQmero# KEn)i,era o Ra,or ,ido# T0read B, *esen)i,eirando os Ra,ores GE es$reRendoKos na sa+daH' 1KConsu,ta o taman0o da )i,a se )or maior Xue Pero eLe$uta prOLimo passo 4KRetira e,emento da )i,a# 6K*e$rementa $ontador de e,ementos# Os seus t0reads podem no rodar em interRa,os de)inidos, re"u,ares de tempo# A,"uns pro&,emas podem sur"ir pois a mesma re"io de memOria ! a$essada por dois ),uLos de eLe$uo distintos Xue podem ter eLe$utados apenas a,"uns de seus 7passsos8' public class IhreadA ; //5eitura while %:fim5eitura( ; 2nfileraTm%(. public class IhreadE ; //2scrita while %:fim2scrita( ; 2screve%3esenfileraTm%((.
003

@ @ @

Atri&uto No e,ementos /i,a' T0read B 6 pK_*`K_R`K_O`Kp # o 1KConsu,ta N e,ementosKKKKK 6 pK_*`K_R`K_O`Kp # 2KIn$rementa No e,ementosKK pK_*`K_R`K_O`Kp # pK_*`K_R`K_O`Kp KKKKKConsu,ta taman0o da )i,aK3 # pK_*`K_R`Kp KKKKKKKKKKKRetira um e,ementoK4 # 6 pK_*`K_R`Kp KKK*e$rementa No e,ementosKI # 6 pK_*`K_R`Kp # T0read A

A seXuVn$ia de operaWes 1,2,3,4,I $orrompe o estado de sua estrutura de dados# Se um sO t0read estiResse eLe$utando so&re a mesma estrutura, ainda assim poderiam tam&!m 0aRer momentos em Xue o atri&uto nQmero de e,ementos no re),ete eLatamente Xuantos esto na )i,a, mas isso ,o"o seria $onsertado# SO Xue $om dois t0reads, um outro t0read pode usar essa in)ormao in$onsistente sem Xue 0aja tempo para e,a ser reparada# Seu pro"rama pode )a,0ar Xuando Ro$V tentar retirar um e,emento de uma )i,a RaPia# A,"uns dos passos dos pro"ramas a$ima podem ser diRididos em passos menores, mas o Xue importa nesse eLemp,o ! Xue sem o uso dos re$ursos espe$+)i$os da ,in"ua"em ! imposs+Re, tornar este pro"rama se"uro# O idea, para este nosso eLemp,o seria Xue um Ihread tiResse Xue esperar um $i$,o do outro Ihread terminar para ini$iar o seu prOLimo $i$,o e Ri$e Rersa, ou seja os $i$,os teriam Xue ser sin$roniPados, o$orrer um apOs o outro, podendo inter$a,ar $i$,os do Ihread A $om $i$,os do Ihread B, mas no pedaos desses $i$,os# Em $asos assim , $ostuma diPer Xue $ada $i$,o $ompWe um $onjunto de aWes indiRis+Re,# A"ora Xue Ro$V jM sa&e a so,uo, &asta sa&er $omo imp,ementMK,a# Os m!todos 2nfileraTmGHa e 3esenfileraTmGHa deRem ser espe$i)i$ados $omo sin$roniPados# ERite espe$i)i$ar m!todos muito "randes $omo sin$roniPados, pois outros Ihreads tero Xue esperar muito tempo para $omear a eLe$utar# public s>nchroni6ed void 2nfileraTm%b>te a( ; //esta parte voce !a sabe @ public s>nchroni6ed E>te 3esenfileraTm%( ; //E>te e uma classe wrapperF ela e i$ual a null se nao ha elementos //o restante voce !a sabe @
004

A"ora sua $,asse ! se"ura# 5o$V sO deRe se preo$upar $om a sin$roniPao dos m!todos do seu pro"rama# Os m!todos e as $,asses da ,in"ua"em jM so es$ritos para serem 7T0read sa)e8, o Xue "erou muito tra&a,0o para os pro"ramadores do 7JaRa team8# $$COMEN<ARIO: A$a&amos a"ora o tOpi$o so&re t0reads e tam&!m o tutoria,# Antes de Ro$V $omear a estudar outros teLtos, um $omentMrio )ina,' Se Ro$V Xuiser rodar um m!todo de uma $,asse jM pronta em um t0read, ,em&reKse de $o,o$MK,o Ga sua $0amadaH dentro de um m!todo $om o nome runGH# O 67E VOCS PODE EST7DAR A PARTIR DE A$ORA 7SANDO JAVA As opWes so muitas' pro"ramao $on$orrente, inter)a$es "rM)i$as, sistemas distri&u+dos, et$# O importante ! Xue para todos estes assuntos, Ro$V Rai ter Xue sa&er as t!$ni$as ensinadas neste teLto#

005

2.,(* '*;,)),?0/
A
A$op,amento dinYmi$o de mensa"ens##################################3: A"re"ao#######################################################################6 , 6? A,o$ao################################################################################### de matriPes######################################################################:B de o&jetos########################################################################1: App,ets##################################################################################### de)inio############################################################################C Ar"umentos de ,in0a de $omando######################################### : ArXuiRos################################################################################### estrutura de######################################################################1C Atri&uiWes entre $,asses######################################################3@ Atri&uto################################################################################11 Atri&utos###############################################################################1 a$esso de#########################################################################1@ de $,asse########################################################################1B6 de instYn$ia#####################################################################1 de$,arao de###################################################################1: disposio das de$,araWes de#########################################43 en$apsu,amento de####################################################?B, ?1 Atri&utos e m!todos##############################################################4B (to-oRe##############################################################:@, @1, @ (toRe),ete############################################################:@, @4, @ Reta###########################################################################?6, ?C Retan"u,o########################################################################31 Retan"u,o, eL#1###############################################################@B Ro&o##############################################################################1B6 Strin" Bu))er###################################################################C3 C,asses###################################################################################### atri&uiWes entre##############################################################3@ e $omportamento#############################################################C1 en$apsu,amento de##########################################################?: C,asses A&stratas######################################################@@, 31, 3 C,asses A&stratas I Inter)a$es#############################################36 C,asses e O&jetos####################################################################3 Coero#################################################################################13 Co,eta automMti$a de ,iLo###############################################6:, C1 Co,eta AutomMti$a de ,iLo####################################################1: Comparao############################################################################## $om (as$a,########################################################################4: entre o&jetos##################################################63, B, 4, 6 Compi,ao###########################################################################14 Compi,adores##########################################################################C Comp,eLidade, ,idando $om#################################################:C Comportamento##############################################################C1, 3@ Con$eitos aRanados###########################################################1B6 Con$orrVn$ia###########################################################################@ Constantes ,iterais################################################################13 Construtores###################################################################64, 66 de $opia###########################################################################@@ e a"re"ao################################################################6 , 6? e 0erana#########################################################################:: Contas &an$Mrias#################################################################1B1 Contas &an$Mrias, eLer$+$io##################################################1B ConRerso################################################################################# de Strin"s para inteiros################################################### C de tipos &Msi$os#########################################################4B, C ConRerso ################################################################################ de Strin"s para inteiros################################################### @ Copia de o&jetos#################################################63, B, 4, 6 Cop. $onstru$tors#################################################################@@ Cop.ri"0t################################################################################

Ba$Sspa$e $ara$tere espe$ia,################################################13 Ban$os de dados G$uriosidadeH#############################################:C Basi$#####################################################################################1C B,o$os de $Odi"o###################################################################1 &oo,ean#################################################################################13 BroZsers#################################################################################: Bus$a de pradWes em teLto###################################################C3 &.te#######################################################################################13 B.teK$ode################################################################################:

C
C, di$a aos pro"ramadores######################################################3 Capa$idades da ,in"ua"em#####################################################: Cara$teres espe$iais#############################################################13 Cara$teres 1NICO*E##########################################################13 Cara$ter+sti$as da ,in"ua"em##################################################: Carria"e return, $ara$tere espe$ia,#######################################13 Case, )erramentas#################################################################1B $at$0###################################################################################1B? Riso "era, so&re############################################################## C $0ar#######################################################################################13 $,ass######################################################################################14 C,asse####################################################################################### Cir$u,o###############################################1 , 1C, 1:, 4 , 4:, 4@ Contador#####################################################################4B, 41 *ataInputStream############################################################## ? Espe$i)i$ando uma#############################################################3 De,,oInternet####################################################################14 motor##################################################################################3 -ouse###############################################################################61 (onto##########################################################################64, 66 Reta############################################################################6 , 6? Reta eL# #########################################################################6 TraRa##########################################################################4C, 4: 5etor 4*, eL# 6#################################################################6 Arra.SerRi$es, eL#1#########################################################3: Cir$u,o######################################################################?6, ?? de o&jetos######################################################63, B, 4, 6 EL$eption##############################################1B:, 1B3, 111, 114 /orma##############################################################################31 /orma, eL#1#####################################################################@B /ra$ao##################################################################C4, C?, @3 Iterador############################################################################3 2ista##########################################################################?:, ?3 -atriP4*Int###############################################################:B, : No##############################################################################?:, ?3 (onto###########################################?B, ?6, ? , ::, @1, @ , 31 (onto, eL#1######################################################################@B

*
*ata 0idin"########################################################################### @ *e&u""in", di$a de pro"ramao##########################################: *estrutores###########################################################################6C *ia"ramao do teLto#############################################################? *iretOrios, or"aniPao de####################################################1C dou&,e###################################################################################4B *.nami$ &indin"##################################################################3:

E)i$iVn$ia##########################################################################@, 61 Ei))e,#########################################################################11, 16, 1 En$apsu,amento#################################################################### @ de atri&utos e m!todos $om pa$Sa"es#############################?6 de $,asses########################################################################?: de m!todos e atri&utos#################################################### @ e 0erana#########################################################################@B e pa$Sa"es#######################################################################?4 modo pa$Sa"e################################################################## 3 reRiso )ina,#####################################################################@6 Espe$ia,iPaoT<enera,iPao###############################################:C Eu$,ides################################################################################C6 EL$eWes################################################################################### "erandoKas#####################################################################1B@ tratamento de#################################################################1B? tratando#########################################################################1B? ELpoentes em tipos nQmeri$os#############################################4B

/
/erramentas $ase##################################################################1B

006

),oat#######################################################################################4B /orm )eed $ara$tere espe$ia,################################################13 /riend,., ou pa$Sa"e, Reja en$apsu,amento######################### 3

< D

<enera,iPaoTEspe$ia,iPao###############################################:C De,,o Internet########################################################################11 Derana#################################################################################:C e $onstrutores##################################################################:: e en$apsu,amento############################################################@B e inter)a$es######################################################################@: mQ,tip,a###########################################################################@? DierarXuias############################################################################### de tipos############################################################################:C simp,es############################################################################:C Domepa"e################################################################################# Nets$ape#############################################################################: Sun#####################################################################################C tutoria,################################################################################?

destrutores#######################################################################6C disposio das de$,araWes de#########################################43 en$apsu,amento de##########################################################?B Xuais e $omo de)inir, eLer$+$ios 6, ,?#############################4? rede)inio de##################################################################@ Rede)inio de#################################################################@@ sintaLe de de$,arao de##################################################44 so&re$ar"a de###################################################################@@ stati$##############################################################################1B m!todos e atri&utos###############################################################4B -odu,o, resto da diRiso, Reja m#########################################C6

N O

NQmeros $omp,eLos, eL# 4###################################################C: NQmeros ra$ionais################################################################C4 O&jetos#################################################################################11 $omparao de################################################63, B, 4, 6 $opia de##########################################################63, B, 4, 6 determinao da $,asse de##############################63, B, 4, 6 a,o$ao de######################################################################1: ini$ia,iPao de################################################################1: OO-* O&je$t Oriented -ode,in" and *esi"n####################1B Operador################################################################################### so&re$ar"a de###################################################################31 Operadores############################################################################### so&re$ar"a de###################################################################@@ Ordenao, eL# 6###################################################################:? Orientao a o&jetos###############################################################3

Imprimindo############################################################################### na te,a##############################################################################1@ tipos &Msi$os na te,a########################################################1@ In$,udes################################################################################1C InstYn$ias##############################################################################11 int13 Inter)a$e#################################################################################### ImprimiRe,#######################################################################@C Inter)a$es##############################################################################@? e 0erana#########################################################################@: uma a,ternatiRa para 0erana mQ,tip,a############################@? Inter)a$es "rM)i$as#################################################################43 Inter)a$es I C,asses A&stratas#############################################36 Internet e R+rus######################################################################: Introduo###############################################################################?

2
2eitura###################################################################################### do te$,ado################################################################## 6, 2ineK)eed################################################################################## $ara$tere espe$ia,#############################################################13 2in0a de $omando#################################################################### ar"umentos de################################################################# : 2in0a de $omando, ar"umentos de####################################### : 2inSs, dia"rama######################################################################? 2ista ,i"ada###########################################################################?3 2istas 0etero"Vneas#############################################################1B1 2o"o, eLer$+$io 4################################################################1B? ,on"#######################################################################################13

-a$TOs###################################################################################: main######################################################################################16 -MXuinas de estado##############################################################44 -ar$as re"istradas################################################################## -atriP####################################################################################### representao ,inear de####################################################:B -atriPes################################################################################6@ -MLimo diRisor $omum########################################################C6 -*C, -aLimo diRisor $omum#############################################C6 -ensa"ens############################################################################4B a$op,amento dinYmi$o de################################################3: -etain)ormao, Reja stati$################################################1B6 -!todos#################################################################################### $0amada de#######################################################################44 $onstrutores######################################################################64 Construtores#####################################################################66 "eren$iamento de $0amadas pe,o $ompi,ador##################4? retornando Ra,ores############################################################4C a$esso de#########################################################################1@ $0amando m!todos##########################################################43 de $,asse################################################################1B6, 1B

(a$Sa"e##################################################################################### <eometria########################################################################?6 (a$Sa"es#########################################################################?4, ?C e en$apsu,amento de $,asses###########################################?: e estruturas de diretOrios#################################################?6 Riso "era, so&re####################################################### , ? (as$a,####################################################################################43 $omparao $om##############################################################4: (,ata)ormas#############################################################################C (ointers#################################################################################6: (o,imor)ismo########################################################################@@ de in$,uso##############################################################@@, 1B1 (onteiros###############################################################################6: (onto ),utuante#####################################################################13 priRate############################################################################# 3, ?B e 0erana#########################################################################:3 (ro$edimentos######################################################################61 ausVn$ia de######################################################################11 (ro"rama, Comparao#########################################################43 prote$ted######################################################################### 3, @B pu&,i$######################################################################## 3, ?B, ?1

R
RaiP Xuadrada#######################################################################6 Rede)inio de m!todos 0erdados########################################@ Re)erVn$ias###########################################################################6: passa"em por###################################################################6: Resu,tados do pro"ramas dia"rama########################################C

Se"urana, Cara$ter+sti$as da ,in"ua"em###############################@ Seno######################################################################################6 S0oppin" ,ist approa$0############################################################# para a $,asse -atriP4*Int###############################################:1 S0oppin" 2ist Approa$0#######################################################C4 s0ort######################################################################################13 Sistemas distri&u+dos##############################################################@ So&re$ar"a######################################################################@@, 31 So,aris#####################################################################################: stati$###################################################################################1B6 Streams##################################################################################### Riso "era, so&re############################################################## ? Streams, Riso "era, so&re####################################################

00"

Strin"####################################################################################64 mat$0in"##########################################################################:B Strin"Bu))er##########################################################################C3 Strin"s###################################################################################### $onRerso de#################################################################### C de)inio de#####################################################################C: Su&$,asses, Super$,asses e $omportamento##########################3@ Sun########################################################################################## S.stem#in##############################################################################

tr.1BC Riso "era, so&re############################################################## C t.pe $ast################################################################################4B T.pe Cast################################################################################## e $,asses########################################################################1BB

1 5

1NICO*E############################################################################13 5a,ores ,iterais#####################################################################13 5etores###########################################################################6@, 63 $omprimento de G,en"0tH################################################# @ 5+deo######################################################################################## es$reRendo no##################################################################1@ 5+rus######################################################################################### de $omputador#################################################################: Roid#######################################################################################16 5o,umes I, II, III#####################################################################C

Ta&u,ao $ara$tere espe$ia,################################################13 TA*######################################################################################C1 /ra$ao##############################################################################C4 Te$,ado##################################################################################### ,endo do##################################################################### 6, TeLto######################################################################################### Reja Strin"s#####################################################################C: t0is########################################################################################44 T0reads###################################################################################@ Tipo########################################################################################## $0ar###################################################################################13 Tipo a&strato de dados##########################################################C1 Tipos &Msi$os########################################################################13 Tratamento de eL$eWes######################################################1B?

U m

UindoZs#################################################################################: Zrappers#########################################################################6:, : m, operador de resto da diRiso############################################44

e e##################################################################################1C, 1@

00#

B,@>,0+'&4,&/ A,"uns dos tutoriais aXui men$ionados se tornaro ,iRros, de modo Xue ! importante Xue Ro$V )aa uma &us$a pe,os nomes dos autores tam&!m# _1` _4` _6` _ ` _?` _C` _:`
Rum&au"0, B,a0a -#, (remer,ani U#, Edd. /# [ 2orensen U# , JVb!ectQVriented 7odelin$ and 3esi$nK. (renti$e Da,,, 1331# >erni"0am Brian U# , Rit$0ie *ennis -# , 7T0e C (ro"rammin" 2an"ua"e8 , En",eZood C,i))s, N#J#'(renti$eK Da,, In$, 13:@ Ru&ira, C#-#/# 7Stru$turin" /au,tKTo,erant O&je$t Oriented S.stems 1sin" In0eritan$e and *e,e"ation8, (0#*# T0esis, *epartment o) Computin" S$ien$e, 1niRersit. o) NeZ$ast,e upon T.ne, O$to&er 133 , see C0apter 4# 2ema. 2aura, (erSins C0ar,es 2#, 7Tea$0 =ourse,) JA5A in 41 da.s8, samsnet, 133C Ran Do)) A#, S0aio S#, Star&u$S O#, Sun -i$ros.stems In$, 7DooSed on JaRa8, AddisonKUes,e., 133C Daro,d E,,iotte Rust., 7BreZin" JaRa' A Tutoria,8, 0ttp'TTsunsite#un$#eduTjaRa)aXTjaRatutoria,#0tm, Campione -ar., Ua,rat0 >at0., 7T0e JaRa Tutoria,\, O&je$tKOriented (ro"rammin" )or t0e Internet8, 0ttp'TTZZZ#aZ#$om#T$pTjaRaseries#0tm,

00,

Potrebbero piacerti anche