Você está na página 1de 119

TUTORIAL:

A LINGUAGEM DE PROGRAMAO

JAVA

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

INDCE
1. CLASSES E OBJETOS...................................................................................................................................................9 $ $ ES(ECI/ICAN*O 1-A C2ASSE$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 $4$ OBJETOS E- JA5A$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 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! $!$ (ONTEIROS, 6(OINTERS7, RE/ER8NCIAS E OBJETOS$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!9 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 $:$ OBTEN*O 5A2ORES *O 1S1;RIO$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ :! 1.4.1. LENDO DO TECLADO.........................................................................................................................................43
$:$ $ $ 2EIT1RA *E STRIN<S 1SAN*O 1- 5ETOR *E B=TES$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:! $:$ $4$ 1-A 5ISO <ERA2 SOBRE (AC>A<ES E STREA-S$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$::

1.4.2. ARGUMENTOS DE LINHA DE COMANDO.......................................................................................................4 $?$ ENCA(S12A-ENTO CO- (RI5ATE, (1B2IC, 6(AC>A<E7 E (ROTECTE*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:@ 1.5.1. ENCAPSULANDO MTODOS E ATRIBUTOS....................................................................................................4" 1.5.2. ENCAPSULAMENTO E #PAC4AGES-...............................................................................................................52 $C$ TI(O ABSTRATO *E *A*OS$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C 1.!.1. TAD .RAO.......................................................................................................................................................!2 1.!.2. STRINGS1 UM MODELO DE CLASSE................................................................................................................! 1.!.3. TAD E ALOCAO DIN5MICA......................................................................................................................... 0 2. HERANA......................................................................................................................................................................76 4$ $ DIERARE1IAS *E TI(OS $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 9C 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 !$ $ RE*E/INIO *E -ATO*OS (ARA 1-A C2ASSE DER*EIRA$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@ !$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 !$!$ C2ASSES ABSTRATAS E CONCRETAS$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 3.3.1. CLASSE ABSTRATA ITERADOR..........................................................................................................................33 3.3.2. ACOPLAMENTO DIN5MICO DE MENSAGENS................................................................................................3
!$!$4$ $ 1- EIE-(2O ESC2ARECE*OR$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$3@ !$!$4$4$ O E1E ACONTECE CO- O E1E /OI ACRESCENTA*O$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ BB $?$ $ $ ATRIB1TOS (RI5ATE, -ATO*OS (1B2IC $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?B $?$ $4$ 1- ATRIB1TO A (1B2IC$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$? $?$4$ $ ENCA(S12A-ENTO *E ATRIB1TOS E -ATO*OS CO- (AC>A<ES$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?! $?$4$4$ ENCA(S12A-ENTO *E C2ASSES CO- (AC>A<ES$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?9

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

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

INFORMA!O SOBRE "COP#RI$HT%


Cop.ri#0t 33CK IC K 1NICA-($ Este teLto e do%umentos re,a%ionados so prote#idos por %op.ri#0t$ Esta pub,i%ao " apresentada %omo estM sem #arantia de erros e mudanas, seNam nos endereos G1R2OsH , teLto ou do %Pdi#o reuti,izado nos pro#ramas eLemp,o$ (ara obter 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 6*uSe7 " 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' 6Nets%apeE''01 I2.,(&.0' 230 .*4,2,.0. Communi%ations Corporation7$

P'*45(,0/
Este teLto )az parte de um estudo %omparatiRo de ,in#ua#ens de pro#ramao orientadas a obNetos$ O %onteQdo deste estudo tamb"m estM dispon+Re, na 6Uor,d Uide Ueb7, Mrea mu,t+midia da internet, sob o endereo http://www.dcc.unicamp.br/~aacesta $ Neste endereo, Ro%V pode %omp,ementar seu aprendizado, rodando eLer%+%ios iteratiRos, a%essando 6,inSs7 para outros 0iperteLtos sobre ,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 sobre o mesmo assunto " o %arMter prMti%o$ ELemp,os %omp,etos, di%as de pro#ramao, eLp,i%aWes sobre deta,0es norma,mente i#norados em ,iRros, tornaro seu aprendizado 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 Rez mais de modo Xue " importante Xue o ,eitor a%ompan0e o teLto )azendo 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 " %oberto 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 propPsitos, o seu su%esso atua, G"po%a do seu ,anamentoH se deRe a possibi,idade de e,aborao de ap,i%aWes para a internet$ *ada a importYn%ia deste aspe%to da ,in#ua#em, este teLto estM or#anizado 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 )az um resumo do %onteQdo desta pM#ina$ 1sando estes 6,inSs7 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 Rez Xue introduzirmos uma pa,aRra noRa$ Caso Ro%V en%ontre a,#uma pa,aRra des%on0e%ida, basta usar o +ndi%e remissiRo para obter sua de)inio$ A importante ,embrar Xue os 0iperteLtos %itados neste tutoria,, no so de nossa responsabi,idade$ Como e,es esto suNeitos a mudanas, %ontamos %om a sua aNuda para e)etuarmos atua,izaWes, %onte Ro%V tamb"m %om a nossa aNuda na internet$ Os pro#ramas eLemp,o deste teLto so apresentados em %aiLas retan#u,ares, e todo %Pdi#o " es%rito em )onte di)erente da usada neste teLto %omum$ O tre%0os de %Pdi#o Xue apare%em desmembrados de seus arXuiRos, tem )undo %inza %,aro$ Todos os arXuiRos presentes dentro dos retYn#u,os, so arXuiRos 6teLtKon,.7, 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 tPpi%os Xue permite apresentar a ,in#ua#em sob a Pti%a da teoria de orientao a obNetos$ A apresentao do mode,o de obNetos 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 bMsi%os da ,in#ua#em tais %omo 6,oops7, desRios %ondi%ionais, et%$ Estes tPpi%os so )reXuentemente retomados, %ada Rez de maneira mais apro)undada$ Euando terminamos o assunto m"todos, Ro%V NM estM pronto para saber 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 %onNunto %om a#re#ao e depois em %onNunto %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 botWes, %aiLas de diM,o#o, ima#ens, et%$ Se esse " o seu %aso, " re%omendMRe, um 6tour7 pe,a UUU antes de %omear a pro#ramar, um bom 6site7 para %omear a pesXuisar %om um 6broZser7 %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%eberM 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 tPpi%os re%entes' pro#ramao %on%orrente, sitemas distribu+dos, orientao a obNetos, 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)ezin0o $ (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 ambiente de pro#ramao Java " norma,mente %omposto de um Sit de desenRo,Rimento de ap,i%aWes Java e um 6broZser %ompat+Re, %om esta ,in#ua#em Gre%omendMRe,H$ Se Ro%V no tem a%esso a esse ambiente 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
1m dos s+mbo,os da ,in#ua#em " uma L+%ara de %a)" Xue apare%e em animaWes %om sua )umaa Xuente tremu,ando$ 6

6*OUN2OA* 7

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
6*OUN2OA* 7 6BROUSERS7

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
6*OUN2OA* 7 6BROUSERS7

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]], embora a )i,oso)ia da ,in#ua#em seNa di)erente$ (or este motiRo estaremos )reXuentemente )azendo %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 obNetos, se sentirM mais a Rontade e se tornarM um bom pro#ramador Java em menos tempo$ Java tamb"m possui %ara%ter+sti%as 0erdadas de muitas outras ,in#ua#ens de pro#ramao' ObNe%tiReKC, Sma,,ta,S, Ei))e,, -odu,aK!, et%$ -uitas das %ara%ter+sti%as desta ,in#ua#em no so tota,mente noRas$ Java " uma )e,iz 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 6b.teK%ode7, Xue " prPLimo as instruWes de mMXuina, mas no de uma mMXuina rea,$ O 6b.teK%ode7 " um %Pdi#o de uma mMXuina Rirtua, idea,izada 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 6b.teK%ode7 #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$!, 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 portabi,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$!$ Em Java um inteiro por eLemp,o, tem sempre !4 bits, independentemente da arXuitetura$ O prPprio %ompi,ador Java " es%rito em Java, de modo Xue e,e " portMRe, para Xua,Xuer sistema Xue possua o interpretador de 6b.teK%odes7$ 1m eLemp,o de pro#rama es%rito em Java " o broZser hot!ava$
"

O',*2-&.& & O@A*-0)/ A portabi,idade " uma das %ara%ter+sti%as Xue se in%,ui nos obNetiRos a,meNados por uma ,in#ua#em orientada a obNetos$ Em Java e,a )oi obtida de maneira inoRadora %om re,ao ao #rupo atua, de ,in#ua#ens orientadas a obNetos$ 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 abstratas$ Outra %ara%ter+sti%a importante em ,in#ua#ens orientadas a obNetos " a se#urana$ *ada a sua importYn%ia o tPpi%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 obri#ados a #eren%iar diretamente a memPria GC , C]], (as%a, H$ A e,iminao do uso de ponteiros, em )aRor do uso de Retores, obNetos e outras estruturas substitutiRas traz bene)+%ios em termos de se#urana$ O pro#ramador " proibido de obter a%esso a memPria Xue no perten%e ao seu pro#rama, a,"m de no ter %0an%es de %ometer erros %omuns tais %omo 6re)eren%e a,iasin#7 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 6stron#,. t.ped7 tamb"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 robustas, no permitindo Xue e,as abortem, mesmo Xuando rodando sob %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 6t0reads7 de eLe%uo$ Este tPpi%o serM Qti, Xuando Ro%V estudar animaWes, e " parti%u,armente poderoso nos ambientes em Xue ap,i%aWes Java so suportadas, ambientes 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 memPria$ Java " muito mais e)i%iente Xue #rande parte das ,in#ua#ens de 6s%riptin#7 eListentes, embora seNa %er%a de 4B Rezes mais ,enta Xue C, o Xue no " um mar%o de)initiRo$ Com a eRo,uo da ,in#ua#em, sero %riados #eradores de 6b.teK%odes7 %ada Rez mais otimizados Xue traro as mar%as de per)orman%e da ,in#ua#em mais prPLimas das de C]] e C$ A,"m disso um dia Java permitirM a possibi,idade de #erar %Pdi#o eLe%utMRe, de uma parti%u,ar arXuitetura 6on t0e ),.7, tudo a partir do 6b.teK%ode7$ 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 tPpi%os no sero abordados 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 6C7 ou 7C]]7 %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( 6*OUN2OA* #B+*U%&8 JavaL A TB<9+%'(-1 U: <B<9+%'( C* Java PB* ,*8B* 9 *,<%(9 C9 (%E+9 %&%=%'( ,9H+* #C-1 7
6BROUSERS7 *,=+%<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 sobre orientao a obNetos$ Se Ro%V Xuiser a,#um 0iperteLto para apro)undamento ou para ,er em para,e,o %om esta introduo sobre %,asses e obNetos e use' http://www.dcc.unicamp.br/~aacesta/!ava/$roup.html
6T1TORIAIS7 #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 obNetos, 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 atributos GdadosH e seus m"todos G)unWesH$ 1m pro#rama Xue uti,iza uma inter)a%e %ontro,adora de um motor e,"tri%o proRaRe,mente de)iniria a %,asse motor$ Os atributos 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 atributos uma )trin$ ou um Retor de )trin$s, e %omo m"todos, )unWes Xue operam sobre estas strin#s$ Euando um noRo parM#ra)o " di#itado no teLto, o editor %ria a partir da %,asse *ar+$rafo um obNeto %ontendo as in)ormaWes parti%u,ares do noRo teLto$ Isto se %0ama instan%iao ou %riao do obNeto$ 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 bits Xue Ro para sa+da seria, e passam por um %onRersor di#ita, ana,P#i%o$ 5amos abstrair 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 atributos 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 atributo inteiro G intH$ 1saremos a )aiLa de bits Xue pre%isarmos, %aso o Ra,or de bits ne%essMrio no possa ser )orne%ido pe,o tipo , usaremos ento o tipo lon$, isto depende do %onRersor di#ita, ana,P#i%o uti,izado$
,

R*='*)*2-&D30 .& )&E.& )*',&>/ O motor pre%isa %on0e%er a sua sa+da seria,, a sua ,i#ao %om o 6motor do mundo rea,7$ Supon0a uma representao em 0eLade%ima, do atributo endereo de porta seria,, um poss+Re, nome para o atributo : enderecomotor$ No se preo%upe em saber %omo usar a representao 0eLade%ima,$ A>-*'&D30 .0 ?&>0' .& ?*>0(,.&.*/ Internamente o usuMrio da %,asse motor pode deseNar a,terar a Re,o%idade, %riaKse ento o m"todo' public void altera-velocidade%int novav(. $ O %Pdi#o anterior %orresponde ao %abea,0o do m"todo e,e " de)inido Nunto %om a %,asse motor, asso%iado a e,a$ O Ra,or de retorno da )uno Xue 6imp,ementa7 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 tamb"m " %0amado de passar uma mensa#em para o obNeto Xue estM eLe%utando este m"todo$ No )az 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 %Pdi#o G)unWesH das ,in#ua#ens pro%edurais$ Em ,in#ua#ens orientadas a obNetos o %Pdi#o e os dados so ,i#ados de )orma di)erente, a prPpria de%,arao de um tipo de)inido pe,o usuMrio NM en#,oba as de%,araWes das )unWes inerentes a este tipo, isto serM eLp,i%ado em $4$ O obNeto ao Xua, " ap,i%ado o m"todo " passado de outra )orma$ Note Xue no )orne%emos o %Pdi#o do m"todo, isto no " importante, por 0ora a preo%upao " %om a inter)a%e de)inida pe,a %,asse' seus %abea,0os de m"todos e atributos$ Apenas pense Xue sua inter)a%e deRe ser ),eL+Re, de modo a no apresentar entraRes para a %riao do %Pdi#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,aborados %om uma )erramenta %ase para 6obNe%t oriented mode,in# and desi#n7 se#undo a metodo,o#ia des%rita em __ ``

EG*'(E(,0)/ 1H 2embreKse de a,#um pro#rama em Xue Ro%V traba,0ou, %ite Xue tipos de %,asses seriam %riadas se esse pro#rama )osse es%rito em Java, Xue atributos e Xue m"todos estariam asso%iados a esses obNetos^ EG*;=>0/ 6Eu traba,0ei em um pro#rama de %ontas a pa#ar e %ontas a re%eber$ Se esse pro#rama )osse es%rito em Java eu de)iniria a %,asse conta-bancaria $ Os atributos 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 (7$ 6*entre os m"todos desta %,asse estariam )unWes para e)etuar saXues, depPsitos e %omputar Nuros$7
01

1.2.

OBJETOS EM JAVA

ObNetos so instYn%ias de uma %,asse$ Euando um obNeto " %riado e,e pre%isa ser ini%ia,izado, ou seNa para uma Qni%a %,asse de nome 2studante3e4raduacao podemos ter RMrios obNetos 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 obNetos, estes sim %ont"m in)ormao, ReNa tPpi%o C2ASSES E OBJETOS$ O atributo Identi)i%ao tem Ra,or 3:B9 @ para a instYn%ia GobNetoH 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'

ObNetos podem %onter obNetos, ou seNa os atributos de um obNeto podem ser obNetos, da mesma %,asse ou no$ ObNetos podem ser passados pe,a rede, armazenados em meio )+si%o$ ObNetos possuem um estado e um %omportamento$ -"todos podem re%eber obNetos %omo ar#umentos, podem de%,arar obNetos %omo RariMReis ,o%ais, podem %0amar outros m"todos$ 5o%V pode %0amar um m"todo Gmandar uma mensa#emH para obNetos em outras mMXuinas atraR"s de sua rede$ 1m obNeto pode ser Risto %omo um RECOR*, sP Xue %om uma tabe,a de )unWes Xue podem ser %0amadas para e,e$ Na Rerdade esta de)inio no " muito tePri%a, mas " um bom %omeo para os pro#ramadores Xue esto a%ostumados %om ,in#ua#ens pro%edurais$ Na Rerdade podemos )azer %om obNetos muito mais do Xue )azemos %om re%ords e pro%edimentos em (as%a,$ Em Java, ao %ontrMrio de C]] e -odu,aK!, no eListem )unWes desRin%u,adas de %,asses, )unWes iso,adas$ Isto imp,i%a Xue todo tre%0o de %Pdi#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 )azer %om pro%edimentos, )unWes iso,adas e RariMReis de pro%edimentos, tamb"m se pode )azer %om %,asses e m"todos$ C]] tin0a Xue permitir a %riao de )unWes iso,adas para manter a %ompatibi,idade %om 6C7, mas Java no$ Euando neste teLto usarmos o termo )uno no ,u#ar de m"todos estaremos mais interessados em en)atizar 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 obNetos, pode a%0ar estran0as as a)irmaWes a%ima, e a per#unta mais %omum neste momento "' 6-as ento %omo Ro%V sabe aonde Rai %omear o pro#rama^7$ Antes da resposta a essa per#unta, ,eia o primeiro pro#rama eLemp,o, Xue " seme,0ante ao primeiro pro#rama em C, 6De,,o Uor,d7, 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 pat0Os o pat0 do %ompi,ador e interpretador Java. Javac e Java respe%tiRamente$ 2KCrie o arXuiRo ao ,ado em um diretPrio Xua,Xuer G6)o,der7 para usuMrios ma%H e sa,Re %om o nome' 8ello9nternet.Java 3KC0ame o %ompi,ador Java para este arXuiRo' Javac 8ello9nternet.Java 4KSeu diretPrio deRe ter re%ebido um noRo arXuiRo apPs essa %ompi,ao' HelloInternet.class IKC0ame o interpretador Java para este arXuiRo Gomita a eLtenso $%,ass de arXuiRoH' Java HelloInternet 6KObserRe 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 6%op. and paste7, " bem 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 )az di)erena , 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 diretPrio de 8ello9nternet.!ava Xuando %0amou o %ompi,ador^ E Xuando %0amou o interpretador^ Tamb"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 aNuda, o seu interesse o )arM %ada Rez 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]], 6TT7 ini%ia uma ,in0a de %omentMrio, todo o restante da ,in0a " i#norado$ EListe tamb"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 %Pdi#o$ ComentMrios so tratados %omo espaos em bran%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 tPpi%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 6abre %0aRes7 mar%a o in+%io das de%,araWes da %,asse Xue so os atributos e m"todos$ Esta %,asse sP possui uma de%,arao, a do m"todo main, note Xue um
Identi)i%adores em ,etras maiQs%u,as e minQs%u,as so di)erentes, a ,in#ua#em " 6%aseKsensitiRe7$ 02

m"todo, ao %ontrMrio de C]], sP pode ser de%,arado cinternamented a %,asse a Xua, perten%e, eRitando as %on)usWes sobre 6es%opo7$ *esta )orma, todo pedao de %Pdi#o em Java deRe perten%er ao abre %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 $?$ ENCA(S12AN*O -ATO*OS E ATRIB1TOS static A um outro Xua,i)i%ador ou 6spe%i)ier7, Xue indi%a Xue o m"todo deRe ser %omparti,0ado por todos os obNetos Xue so %riados a partir desta %,asse$ Os m"todos static podem ser inRo%ados, mesmo Xuando no )oi %riado nen0um obNeto 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 saber 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 obNeto de sua %,asse Ga %,asse 8ello9nternetH$ CB',0),.&.*/ Se Ro%V #osta de paradoLos e NM %on0e%e um pou%o de orientao a obNetos, pense Xue se o m"todo main tiResse Xue ser %0amado para um obNeto Go Xue no " o %asoH este obNeto 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 prob,ema' todo pro#rama %omea %om a %riao de um obNeto Ge no mais a %0amada automMti%a de mainH, este obNeto " %0amado ROOT, e,e pode %onter atributos Xue so ini%ia,izados e um m"todo de ini%ia,izao, %onstrutor do obNeto, Xue " o in+%io do %Pdi#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 Razio 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 atributos, 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 $!$ c $$$ d

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

6Abre %0aRes7 e 6)e%0a %0aRes7$ (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,aK!, ou seNa' de,imitam um b,o%o de %Pdi#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 %,areza do %Pdi#o de%,araremos todas no in+%io do abre %0aRes$ )>stem.out.println%?8ello 9nternet:?(. C0amada do m"todo println para o atributo out da %,asse ou obNeto )>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 abaiLo , ana,o#amente print no aRana ,in0a$ (or 0ora Ro%V pode #uardar esta ,in0a de %Pdi#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 6ponto e R+r#u,a7 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 obNetos %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 )azer 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 obserRamos a %riao de nen0um obNeto, 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 obNeto espe%+)i%o para ser inRo%ado$ Este eLemp,o de%,ara uma %,asse G&irculoH e em se#uida %ria um obNeto 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 atributos raio e / , >, Xue so %oordenadas %artesianas$ Note Xue este obNeto 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 %Pdi#o, at" o tPpi%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$ Embora no ten0amos eLp,i%ado %om deta,0es os tipos bMsi%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 tPpi%o )orne%eremos uma eLp,i%ao deta,0ada sobre 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 subtrair umcirc./ de %ada um dos ,ados da 6i#ua,dade7 a eLpresso se torna 1H0"$ O%orre Xue e no " o operador de teste de i#ua,dade e sim de atribuio, 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 obserRado, %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 diretPrio ou )o,der "' I2,(,0/ A=K) J"." A-Du"-Junt"-.J"."/

O %ompi,ador deRe ser %0amado para ambos arXuiRos$ Ou Ro%V pode usar os %0amados 6Zi,d%ards7 !avac A.!ava$ S*; I2(>B.*)/ Se Ro%V NM pro#rama em a,#uma outra ,in#ua#em proRaRe,mente deRe estar %om a se#uinte dQRida' 65o%Vs usaram o nome da %,asse &irculo na %,asse *rincipal , ambas esto em arXuiRos
Ui,dKCard, do in#,Vs' Corin#a , %arta de bara,0o$ O f substitui os nomes de todos os arXuiRos, assim %omo o %orin#a pode susbtituir todas as %artas em No#os de bara,0o$ 06

separados, %omo o %ompi,ador sabe em Xue diretPrio estM a %,asse &irculo ^ No " pre%iso )azer uma esp"%ie de in%,ude para poder usar a %,asse &irculo em outro arXuiRo^7 A resposta " no$ O %ompi,ador sabe a%0ar se e,a estiRer sob o diretPrio de seu pro#rama$ Se Ro%V tiRer Xue deiLar esta %,asse em outro diretPrio ento e,a deRe )azer parte de um pa%Sa#e e Ro%V terM Xue importar eLp,i%itamente este pa%Sa#e, Reremos %omo )azVK,o mais tarde$ C>&))* Cir ulo * .*(>&'&D30 .* &-',@B-0)/ O primeiro arXuiRo deste eLemp,o %ont"m o %Pdi#o da %,asse &irculo, esta %,asse %ont"m trVs atributos $ A de%,arao de atributos 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 atributos perten%entes a %,asse so do tipo float G(onto ),utuante !4Kbit IEEE9?:, ReNa tabe,a de tipos bMsi%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 obNeto &irculo seNa %omo RariMRe, de m"todo ou %omo atributo Geste tipo de modi)i%ao serM eLemp,i)i%ado na %,asse *rincipal H$ EListem outros espe%i)i%adores Xue abordaremos mais adiante, por 0ora todos os m"todos e atributos Xue %riarmos deRero ser public$ 5a,e ,embrar Xue na de%,arao de RariMReis simp,es em m"todos, no )az 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 atributos so por de)au,t ini%ia,izados para zero$ C>&))* P',2(,=&> .*(>&'&D30 * ,2,(,&>,L&D30 .* &-',@B-0)/ A %,asse *rincipal no possui atributos, porXue nen0um obNeto desta %,asse " %riado, apenas seu m"todo main " %0amado$ O m"todo main de%,ara uma re)erVn%ia para obNeto da %,asse &irculo' &irculo umcirc.$ Note Xue di)erentemente de C]] no so ne%essMrios 6in%,udes7 ou 60eader )i,es7 para poder de%,arar essa RariMRe, de um 6tipo7 de)inido pe,o usuMrio e eListente em outro arXuiRo$ Antes da re)erVn%ia ao obNeto ser usada, este pre%isa ser a,o%ado na memPria o Xue " )eito atraR"s de umcircHnew &irculo%(.. Se Ro%V tiResse de%,arado um obNeto da %,asse )trin$, NM de)inida na ,in#ua#em, e depois )izesse sua a,o%ao, o %Pdi#o seria seme,0ante ao se#uinte' )trin$ umastrin$. umastrin$Hnew )trin$%J alor inicialK(. A di)erena %om a a,o%ao do obNeto &irculo " Xue entre os parVnteses in%,uem um ar#umento 65a,or ini%ia,7, isto o%orre porXue a ,in#ua#em permite Xue Ro%V aproReite a a,o%ao de um obNeto para ini%ia,izar a,#uns de seus atributos, isto serM eLp,i%ado em $4$C$CONSTR1TORES$ Neste nosso pro#rama, os atributos %ontidos na Mrea de memPria a,o%ada por new, so a,terados de outra )orma$ C0>*-& &B-0;5-,(& .* >,G0/ A desa,o%ao do obNeto " )eita pe,a ,in#ua#em, G6automati% #arba#e %o,,e%tion7H, Ro%V no pre%isa se preo%upar %om e,a$ ApPs o )e%0a %0aRes de main, a memPria do obNeto umcirc NM pode ser ,iberada, o Xue norma,mente no o%orre de imediato, pois o ambiente da ,in#ua#em eLe%uta um 6tread7 em baiLa prioridade Xue ,ibera de tempos em tempos os espaos inuti,izados de memPria,
0"

tirando proReito por eLemp,o de eRentuais pausas de iterao do usuMrio %om o pro#rama$ (or eLe%utar em um 6tread7 entenda para,e,amente ou Xuase para,e,amente, Ro,taremos a este tPpi%o mais adiante$ A(*))0 &0) &-',@B-0) * ;F-0.0) * &>-*'&DM*) .0) &-',@B-0)/ O a%esso aos atributos da RariMRe, GobNetoH umcirc deRe ser )eito usando o nome do obNeto e o nome do atributo deste, separados por um ponto' umcirc.raioH01.1. $ Note Xue raio sozin0o no )az sentido no pro#rama, pre%isaKse espe%i)i%ar de Xue obNeto se deseNa a,terar ou obter o raio$ A sintaLe de %0amadas de m"todos " seme,0ante a sintaLe des%rita a%ima, sP Xue ao enR"s de nome do atributo temos o nome do m"todo se#uido dos parVnteses Xue podem %onter zero 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 obNeto )>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 %Pdi#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 ] " tamb"m operador de %on%atenao de )trin$s e Xue os ar#umentos int ou float e de outros tipos bMsi%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 atribuio e o operador HH Gi#ua, i#ua,H tem a )uno de %omparao entre Ra,ores, retornando o Ra,or boo,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 tamb"m em Java " permitido es%reRer' int iF!FL. iH1. !HLHiG3. //finalF ! vale 3F L vale 3 e i continua valendo 1 Essas atribuiWes em %adeia permitem es%reRer %Pdi#o mais %ompa%to, e,as )azem sentido porXue atribuiWes 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 atribuio$ Em C e C]] eListe um prob,ema #raRe Xue " )reXuentemente uma %i,ada para os pro#ramadores (as%a, e outros$ O prob,ema " Xue nessas duas ,in#ua#ens GC e C]]H no eListe o tipo boo,ean, no ,u#ar deste tipo " usado o tipo int GinteiroH, onde 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. tamb"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 sabe distin#uir entre os si#ni)i%ados num"ri%o e boo,eano$ Essa ambi#uidade )az %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 dizer !HH0, mas para o %ompi,ador ambas 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 tem o mesmo Ra,or de true$
0#

Java e,imina este tipo de erro introduzindo 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 bMsi%os so os mesmos para Xua,Xuer ambiente de pro#ramao JaRa, porXue a ,in#ua#em " portMRe,H'

char

Cara%tere 1NICO*E CKbit

O tipo char G%ara%tere 1NICO*EH " representado %om CKbits sem sina,, o Xue permite enderear de B a 65535$ O obNetiRo desta opo " permitir interna%iona,izao da ,in#ua#em, bem %omo a padronizao$ Constantes do tipo %ara%tere apare%em entre apPstro)es' gaO, g O, ghO$ 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 beep ou be,, H

/uno, si#ni)i%ado' (u,a ,in0a, ,ine)eed Retorno de %arro Ba%Sspa%e Tabu,ao /orm)eed ApPstro)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 prob,emas Xue sur#iram por eLemp,o em C]] Xue usa inteiros para representar Ra,ores boo,eanos$ Os poss+Reis Ra,ores so true e false Xue so os resu,tado dos testes ,P#i%os$ boolean pertenceAo&on!unto. //declara variavel pertenceAo&on!untoHtrue. //e/emplo b>te short int lon$ Inteiro @Kbit , %omp,emento de 4, )aiLa'K 4@ at" 49 Inteiro CKbit, %omp,emento de 4, )aiLa'K!49C@ at" !49C9 Inteiro !4Kbit, %omp,emento de 4, )aiLa'K4 :9:@!C:@ at" 4 :9:@!C:9 Inteiro C:Kbit, %omp,$ de 4, )aiLa'K344!!94B!C@?:99?@B@ at" 344!!94B!C@?:99?@B9

No eListem espe%i)i%adores de tipos %omo unsi#ned, todos os tipos 6inteiros7 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 atribuir esta %onstante a um lon$, )aa o 6t.pe %ast7 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 zero' 1444 , NM para Ra,ores 0eLade%imais ante%edaKos %om 1O ou 1/, eLemp,o' 1/E&34
0,

float double

(onto ),utuante !4Kbit IEEE9?: (onto ),utuante C:Kbit IEEE9?:

1m Ra,or %omo 3.0405,265 " %onsiderado double %omo padro, se Ro%V Xuer atribuir 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 dez e,eRado a menos 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 atribuio, Ro%V no pre%isa )azer 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 )azer o %a,%u,o$ 5o%V pode deseNar )azer o t.pe %ast do resu,tado, para atribuir a uma RariMRe, lon$ por eLemp,o$ EG*'(E(,0)/ 1H Repita o mesmo eLemp,o sP Xue a#ora moRa o %+r%u,o a,terando as %omponentes L e .$ Co,oXue o %+r%u,o na posio G $B, $BH, atraR"s de atribuiWes do tipo acirc./H0.1. $ A%ompan0e todas as modi)i%aWes do obNeto imprimindo seus atributos na te,a$ 2H Simp,i)iXue o pro#rama anterior retirando o atributo 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 traba,0ar %om atributos do tipo int$ 1.2.3. ATRIB7TOS E MQTODOS Os m"todos determinam o %omportamento dos obNetos de um %,asse$ Euando um m"todo " inRo%ado, se diz Xue o obNeto estM re%ebendo uma mensa#em Gpara eLe%utar uma aoH$ (ro#ramas %omp,eLos )ormam %onNuntos de obNetos 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 obNeto Xue serRe %omo %ontador, a imp,ementao representa a %onta#em no atributo 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,iza a %onta#em em zero$ 3ecrementa )az 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,P#ios di#itais' B, ,4,$$$,?9,?@,?3,B, ,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 obNetos %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 obNetos e do uso de m"todos " Xue %omo o m"todo estM de)inido na %,asse, e,e #an0a a%esso direto aos atributos, sem pre%isar usar o 6ponto7, eLemp,o um-ob!eto.atributo.. 2embreKse Xue as %0amadas de m"todos em um pro#rama NM se re)erem a um obNeto espe%+)i%o, embora os m"todos seNam de)inidos de uma )orma #era, e parametrizada 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 obNeto %orrente, e,a tem o si#ni)i%ado de' 6o obNeto para o Xua, este tre%0o de %Pdi#o estM sendo eLe%utado7$ Supon0a uma %,asse Xue possui a se#uinte de%,arao de atributo' public int 'ual'uer. $ Se Xuisermos em um m"todo desta %,asse a,terar o atributo 'ual'uer para o Ra,or 3, basta es%reRer 'ual'uerH3. , mas este %Pdi#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 %apaz de e,iminar ambi#uidades entre os nomes dos atributos 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 tamb"m " RM,ido )azer para %0amadas de m"todos para o obNeto %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 atributos, %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 seNa Razia e,es deRem estar presentes' umcontador.incrementa%(.. (rimeiro insereKse o nome do obNeto 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 bastante %omum$

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


A#ora reapresentaremos o pro#rama &irculo baseado no eLemp,o $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 obNeto$ O obNeto 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 obNeto do Xue a%essMK,as diretamente da se#uinte )orma' ac./GHd/.. ac.>GHd>.. 2embreKse Xue ac./GHd/ " uma abreRiao para ac./Hac./Gd/.. MF-0.0 (o-tr"/ O m"todo mostra imprime na te,a, de )orma %ompa%ta, os atributos do obNeto$

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 obNetos, mas ,embreKse Xue e,as so todas i#uais para uma %,asse ento basta manter para %ada %,asse uma tabe,a de m"todos Xue " %onsu,tada no momento da %0amada $ Os obNetos sP pre%isam ter uma re)erVn%ia para esta tabe,a$ EG*'(E(,0)/ 1H /aa as se#uintes modi)i%aWes no pro#rama 8ello9nternet' Adi%ione a de%,arao e ini%ia,izao de RariMRe, )trin$ ,o#o apPs o abre %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 atributos ini%ia,izandoKos %om os Ra,ores passados$ 5o%V pode abstrair o uso desse m"todo %omo uma maneira de ini%ia,izar o obNeto de uma sP Rez embora isto seNa )eito seXjen%ia,mente$ Comente as Ranta#ens desta aborda#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 deseNMRe, Xue somente essas )unWes pudessem modi)i%ar /, > e raio$ 5o%V RerM Xue isso " poss+Re, em en%apsu,amento $?$ (or 0ora, %rie esses m"todos se preo%upando em permitir atraR"s %0amadas a e,es tudo o Xue )or poss+Re, )azer %om a%esso direto aos atributos$ Comente tamb"m as duas opWes eXuiRa,entes de imp,ementao abaiLo Gos nomes so auto eLp,i%atiRosH, ten0a em mente o nQmero de m"todos a serem %riados para #arantir ),eLibi,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 7DM 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 )uturos7$ Comente esta )rase, tendo em Rista o %on%eito de portabi,idade$ 5o%V NM " %apaz 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 !$ 1.2.4. MQTODOS 67E RETORNAM VALORES.
25

2H

3H

At" a#ora sP 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 seNa' obNetos$ 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, seNa numa ,ista de ar#umentos de outro m"todo , numa atribuio ou num operador] em )>stem.out.println% variavel /chamada-de-metodo-'ue-retorna-valor(. C>&))* -'&?&/ O estado da traRa " representado no atributo public boolean travado. e pode ser obtido atraR"s de uma %0amada ao m"todo estado%($ Este eLemp,o " bastante 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 introdutPria deste tutoria,$ Esta %,asse a%aba tendo a )un%iona,idade de uma RariMRe, boo,eana e o %usto de um obNeto, mas neste ponto %abe a Ro%V estender este mode,o para representar uma traRa de arXuiRo Garmazena o nome e 6pat07 desteH ou uma traRa de um obNeto, eRitando Xue este seNa 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 )azendo 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 %Ppia do Ra,or atua, do %ontador #arante maior portabi,idade^ (or XuV^ (ara aprender a retornar Ra,ores %onsu,te este tPpi%o$ 2H Insira um noRo m"todo na %,asse Irava Xue ten0a a )uno de a,ternar entre os estados do obNeto, 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 boo,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 atributo$ 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 $4$4 ATRIB1TOS, e,e serM %omparado %om um pro#rama es%rito em (as%a,, a,"m disso introduzimos 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 sobre %onstrutores dada no prPLimo tPpi%o' $4$C$ (ara me,0or entendimento ,eia os eLemp,os anteriores %om a %,asse &irculo$

33

J"."/ (ro#rama eLemp,o %+r%u,o, baseado no eLemp,o de $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 atributos, por"m podemos )azer inter%a,aWes ou adotar Xua,Xuer ordem Xue nos %onRen0a$ 1ma boa 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 %Pdi#o de suas %,asses Xue en#,obe 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)/ ObserRe 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 obNeto instan%iado Xue re%ebeu a %0amada de mostra. Isto )oi )eito somente para reRe,ar Xue %0amadas anin0adas de m"todos tamb"m so permitidas, pois nesse %aso esta %0amada de m"todo poderia ser substitu+da pe,o prPprio atributo 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 6,ibraries7 de %,asses Xue permitem o pro#ramador C]] desenRo,Rer ap,i%aWes para ambientes %omo o -i%roso)t UindoZsk de uma maneira bastante abstrata, este " um eLemp,o %,aro de reuso de %Pdi#o, a)ina, no " pre%iso saber de deta,0es da inter)a%e para pro#ramar ne,a$ Na se#unda parte )a,aremos sobre a 6Java Ap,i%ation (ro#rammin# Inter)a%e7 Xue permite pro#ramar de maneira bastante abstrata sistemas de inter)a%es #rM)i%as %om o usuMrio seNa para ap,i%aWes para a internet Grodando em broZsersH ou para sistemas %omo o UindoZs ou -a%TOs e IKUindoZs $ %1F1F01( %0F0F01( %011F0F02(

Pascal:

1m pro#rama pare%ido sP 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 atributos e m"todos$ (ara eLe%utar uma ao sobre o obNeto ou re,atiRa a este basta %0amar um m"todo ' ac.mostra%(. O m"todo no pre%isa de muitos ar#umentos, porXue " prPprio da %,asse e portanto #an0a a%esso aos atributos do obNeto 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 sP ten0am sentido Nuntos$ A Nuno 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 %Pdi#o se#uinte' 7ove%acF0.1F0.1(.. Nesse %aso A& " um 6re%ord7, a,#o seme,0ante ao stru%t de C Gno C]]H$ 7ove, a%essa os dados do 6re%ord7 a,terando os %ampos$ O parYmetro " passado por re)erVn%ia e o pro%edimento " de)inido a parte do re#istro, embora sP sirRa para a%eitar ar#umentos do tipo &irculo e moRer suas %oordenadas$ S*+B'&2D&/ Em ambos pro#ramas G(as%a,, JavaH o pro#ramador pode obter 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 $? ENCA(S12A-ENTO maneiras de proibir este tipo de a%esso direto ao atributo, deiLando este ser modi)i%ado somente pe,os m"todos$ Isto nos #arante maior se#urana e ,iberdade pois podemos permitir ou no o a%esso para %ada atributo de a%ordo %om nossa Rontade$ E4,(,C2(,&/ A,#u"m pode ar#umentar Xue pro#ramas Xue usam bastante %0amadas de m"todos podem se tornar pou%o e)i%ientes e Xue poderia ser me,0or obter a%esso direto aos dados de um tipo de)inido pe,o usuMrio ao enR"s de passar por todo o traba,0o de %Ppia 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#anizar o %Pdi#o de maneira mais %ompa%ta$ E a,"m disso muitas Rezes no se deseNa permitir sempre o a%esso direto aos dados de um tipo de)inido pe,o usuMrio por razWes 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 atributos 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 botWes e os m"todos' clica-botao% (. move%float d/F float d>(.. No " pre%iso )azer a ,i#ao do obNeto %om o mouse rea,, embora o ,eitor interessado possa en%ontrar na se#unda parte subs+dios para esta tare)a$ Seu mouse deRe ser %apaz de %amin0ar para Xua,Xuer ,u#ar da te,a atraR"s de %0amadas de m"todos, no deRe u,trapassar os ,imites estabe,e%idos, deRe indi%ar o boto estM pressionado ou no atraR"s de um m"todo seme,0ante ao mostra% ( deste eLemp,o$ O mouse %e.e ter de boto$ 5o%V pode substituir m"todo move%float d/Ffloat d>( por %ombinaWes de move-/%float d/(. e move->%float d>(. 5o%V pode a%0ar o )ato de o mouse ser obri#ado a ter um boto um tanto estran0o, mas no "$ Os mouses dos ma%0intos0es tVm um boto, a,#uns mouses de p%Os tVm dois botWes e mouses de ZorSstations tVm trVs botWes$ (ara seu pro#rama ser portMRe, e,e deRe %ontar apenas %om a eListVn%ia de um boto e isso Ra,e a pena Xuando se )a,a em portabi,idade$ O Xue tem sido usado em
30

2H

%asos eLtremos " a %ombinao de pressionamento dos botWes e pressionamento de te%,as para di)eren%iar %ertas aWes$ 3H 5eri)iXue Xue em main%( Ro%V pode modi)i%ar o atributo / do obNeto da %,asse &irculo da se#uinte )orma' a./H02.2. $ Isto pode no ser muito Qti,, ima#ineKse %riando uma ,ibrar. Gem Java pa%Sa#eH Xue imp,ementa a %,asse &irculo e uma s"rie de m"todos re,a%ionados, por %ertas razWes Ro%V #ostaria Xue o usuMrio se ,imitasse ao uso da inter)a%e do obNeto, %omo )azVK,o serM eLp,i%ado em $? 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 obNeto$ E,es no possuem Ra,or de retorno, porXue Ro%V no pode %0amar um %onstrutor para um obNeto, Ro%V sP usa o %onstrutor no momento da ini%ia,izao do obNeto$ Construtores representam uma oportunidade de ini%ia,izar seus dados de )orma or#anizada, ima#ine se Ro%V esXue%e de ini%ia,izar %orretamente ou o )az duas Rezes, 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 tamb"m usMRamos %onstrutores no momento de ini%ia,izar nossos obNetos, sP Xue e,es no possu+am ar#umentos$ EListem RariaWes sobre o tema Xue Reremos mais tarde' sobre%ar#a de %onstrutor, 6%op. %onstru%tor7, %onstrutor de %orpo Razio$ 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 " obri#ado a passar os ar#umentos deste no momento da a,o%ao do obNeto$ 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 !$ %float(1.1 indi%a Xue " para ser )eita a %onRerso de 0.1 para ponto ),utuante$ 0.1 sozin0o " %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 " tamb"m %0amada de 6t.pe %ast7$ A o%orrVn%ia de rotinas de %riao de obNetos em diRersos ,o%ais de um pro#rama " muito %omum$ ObNetos podem ser %riados dentro de estruturas %ondi%ionais, armazenados em arXuiRos, passados %omo parYmetros, inseridos em estruturas dinYmi%as dentro de outros obNetos, et%$ EG*'(E(,0)/ 1H 1m m"todo pode %0amar outro m"todo da mesma %,asse$ (arta do eLemp,o de $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 obNeto %uNo %onstrutor )oi %0amado$ Isto " RM,ido tamb"m para outros m"todos Xue %0amam m"todos, ou seNa, no " ne%essMrio o operador identificador.iniciali6a%aFb(. , ReNa $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 6ponteiro7 para o obNeto em Xuesto, ento o %Pdi#o des%rito a%ima poderia tamb"m assumir a se#uinte )orma eXuiRa,ente' ponto%float aF float b( ; this.iniciali6a%aFb(. @ // erifi'ue: A ,P#i%o Xue neste eLemp,o this no tem muita uti,idade, mas eListem %asos onde um obNeto pre%isa passar seu 6ponteiro7 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 Introduza mensa#ens no %onstrutor tipo' )>stem.out.println%JVb!eto instanciadoK(. introduza tre%0os pare%idos em outros pontos de seu pro#rama$ O obNetiRo " a%ompan0ar Risua,mente a seXjVn%ia de %riao e modi)i%ao dos obNetos$ 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 mPdu,o do Retor, a %omponente / e >$ (ara ta, Ro%V terM Xue )azer uso de 7ath.cos%double a(. 7ath.sin%double a(. e 7ath.s'rt%double a(. , respe%tiRamente o %osseno, o seno e a raiz Xuadrada de um ponto ),utuante de dup,a pre%iso$ No " ne%essMrio )azer nada seme,0ante a um in%,ude de C]] para usar esses m"todos, basta adi%ionMK,os ao seu %Pdi#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 6t.pe %ast7 eLp,i%ado nos %omentMrios deste eLemp,o$ 4H Crie uma %,asse reta Xue tem %omo atributos dois obNetos da %,asse ponto$ *i%a' N30 B)* (02)-'B-0'*), use )unWes do tipo iniciali6a%(F NM 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 $4$9. EListem maneiras mais e)i%ientes e %ompa%tas de representar uma reta, por"m )aa %omo )oi su#erido, neste %aso o obNetiRo 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 : tPpi%o CONSTR1TORESH, e,e %ria uma %,asse Ueta %om dois atributos da %,asse *onto$ Ou seNa Ro%V estarM reuti,izando a %,asse *onto na %,asse Xue representa uma Ueta, a )orma %omo essa reuti,izao de %Pdi#o o%orre " %0amada de &+'*+&D30$ O nome reuti,izao de %Pdi#o " bastante apropriado, pois a %,asse Ueta estarM uti,izando todos os m"todos es%ritos para a %,asse *onto$ Em %asos %omo este " %omum dizer Xue a %,asse Ueta " %,iente da %,asse *onto em uma ana,o#ia %om as re,aWes %omer%iais$ Este pro#rama bus%a %0amar sua ateno para o )ato de Xue obNetos 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 $ Obter 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 obNetos era )M%i,, mas a#ora Xue temos obNetos )un%ionando dentro de outros obNetos 0M ne%essidade de adotar t"%ni%as me,0ores$ 5eremos a se#uir duas a,ternatiRas para a,o%ar os atributos *onto presentes na %,asse Ueta' A>-*'2&-,?& 1/ (rimeiro a,o%aKse o obNeto da %,asse Ueta, depois %0amaKse para %ada atributo 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,izar os atributos de )orma %oerente$ Os ar#umentos do %onstrutor da %,asse Ueta passam a %onter Ra,ores Qteis para a %0amada dos %onstrutores de seus atributos$ 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 prob,emas dessa natureza, o Xue a,iMs %omp,i%aria muito o %Pdi#o , desRiandoKnos do obNetiRo prin%ipa,' simp,i%idade na apresentao de %on%eitos de orientao a obNetos$ 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 ,P#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 armazenando apenas um %oe)i%iente an#u,ar e um ,inear, mas esta reta deReria proRer tamb"m um %onstrutor Xue a%eitasse dois pontos %omo ar#umentos$ Como Ro%V no aprendeu sobre%ar#a de %onstrutores Gde)inir RMrios %onstrutoresH, use sP 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%ebe outra reta Gmesmo tipoH %omo ar#umento$ *entro do m"todo os atributos do ar#umento a deRem ser a%essados do se#uinte modo' ap0./. -ais tarde, em :$! 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, ,embreKse de moRer os dois pontos Nuntos 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%ebe 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 tamb"m o prob,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 ! de $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 obNetos$ Em Java destrutores so m"todos %0amados pe,o sistema Xuando a memPria de um obNeto estM para ser ,iberada 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%teriza o %onstrutor " ter o mesmo nome da %,asse, NM o destrutor " %ara%terizado por possuir o nome finali6e. 5o%V pode %0amar o destrutor, mas isso no imp,i%a Xue o obNeto 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 6,impar a %asa7 Xuando um obNeto deiLa de ser usado$ 1m eLemp,o bastante %omum do uso de destrutores " o de um obNeto Xue ,ida %om arXuiRos Xue deRem ser )e%0ados Xuando o obNeto )or destru+do$ EListem outros %asos onde um obNeto deRe %omuni%ar aos outros obNetos Xue serM inuti,izado, destru+do, ou seNa ' sairM do pro#rama$
36

3H

Em Java, Xue possui %o,eta automMti%a de ,iLo, um obNeto passa a no eListir mais no pro#rama Xuando nen0uma RariMRe, )az re)erVn%ia a e,e$ Nesse ponto, e,e " armazenado no %o,etor automMti%o de ,iLo, onde re%eberM o tratamento adeXuado$ 1m nP de uma ,ista ,i#ada pode ser apa#ado simp,esmente )azendo o nP 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' 65o%V no " obri#ado a ,iberar eLp,i%itamente a memPria de um obNeto %omo " )eito em C]] e outras ,in#ua#ens7$ Se estiR"ssemos por eLemp,o em C]], Xue no possui %o,eta automMti%a de ,iLo, o destrutor seria %0amado sempre Xue a memPria de um obNeto )osse desa,o%ada, o Xue " )eito pe,o pro#ramador atraR"s de uma %0amada a delete nomedoob!eto%(. . Em Java a ,iberao de memPria 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 seNa Ro%V no pode %ontar %om o )ato de Xue o destrutor serM %0amado imediatamente apPs o momento em Xue seu obNeto sai de es%opo, a no ser Xue o pro#rama seNa 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 beta, Ro%V no pode nem mesmo %ontar %om a %0amada do destrutor pe,o #arba#e %o,,e%tor, de modo Xue e,e deRe ser usado apenas para otimizaWes do %Pdi#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 6bu#s7 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 %Pdi#o deRerM a#ora ser )eita em um mode,o Xue se baseia no uso de obNetos GRetores e )trin$s tamb"m so obNetosH$ ObNetos superam a representatiRidade obtida %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' obNetos so a,o%ados dinami%amente %om new, e,es so re)erVn%ias ou ponteiros para posiWes na memPria, mas a ,in#ua#em mas%ara este )ato por razWes de se#urana$ Como obNetos so ponteiros GsP Xue transparentes para Ro%VH, nos depararemos %om o prob,ema de re)eren%e a,iasin# Xuando dis%utirmos %Ppia de obNetos %om outros obNetos %omo atributos$ 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 obNetos$ Se o parYmetro NM " um obNeto, ento a passa#em de,e " obri#atoriamente por re)erVn%ia$ No %aso de tipos simp,es, podemos passMK,os dentro de Retores Xue so obNetos, ou ento %riar %,asses para emba,ar, empa%otar estes tipos$ *ada a ne%essidade destas %,asses, e,as NM )oram de)inidas na ,in#ua#em$ So %,asses de)inidas para %onter %ada tipo bMsi%os e permitir %ertas %onRersWes entre e,es, )a,aremos destas %,asses %on)orme ne%essitarmos de seu uso$ As Rezes estas %,asses so %0amadas de 6Zrappers7$ 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 %Pdi#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 atributos de dois obNetos da mesma %,asse$ Imp,emente este m"todo e )aa os testes su#eridos nos %omentMrios desse %Pdi#o$ 1.3.2. VETORES E MATRITES 5etores so obNetos, e,es possuem pape, importante no esti,o de pro#ramao desta ,in#ua#em Xue eL%,ui ponteiros$ (or serem obNetos, Retores so obri#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 obNetos'

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 B 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 matrizes "' 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%eba Xue a )aiLa Qti, do Retor Rai de B at" GnK H onde n " o Ra,or dado %omo taman0o do Retor no momento de sua %riao, no nosso %aso !$ O mesmo o%orre %om matrizes$ Esta %onReno pode %on)undir pro#ramadores (as%a, onde a indeLao Rai de 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%eberM 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 %Pdi#o Xue a%ompan0a a ,in#ua#em$ EListe um atributo muito Qti, Xuando se traba,0a em um Retor de dados' a.len$th. //arma6ena o numero de elementos do vetor a *e%,arar um Retor de obNetos, por eLemp,o obNetos da %,asse *onto, no imp,i%a Xue os obNetos de %ada posio do Retor NM estaro ini%ia,izados, para ini%ia,izar 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 %Pdi#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 NM in%,uam os des%ontos no seu Ra,or de Renda$ ELemp,o' (reos ' :B,? !B,! 4,C BB *es%ontos' $? $! $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, tabe,in0as assim, usadas para %M,%u,os de preos de produtos NM 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. ObNetos so imp,i%itamente re)erVn%ias, portanto sua %Ppia GatraR"s do operador eH estM suNeita ao prob,ema de 6re)eren%e a,iasin#7 e e)eitos %o,aterais$ A %omparao de obNetos atraR"s do operador HH tem o si#ni)i%ado da %omparao de re)erVn%ias, ou seNa e,a Reri)i%a se os obNetos %omparti,0am o mesmo espao a,o%ado na memPria$ ObserRe Xue %om as operaWes %on0e%idas at" a#ora, no %onse#uimos %omparar dois obNetos Xuanto ao %onteQdo a no ser Xue %omparemos atributo por atributo, o mesmo Ra,e para a %Ppia$ Seria Qti, dispor de um %onNunto de operaWes de i#ua,dade, desi#ua,dade e %opia Xue se ap,i%asse ao %onteQdo dos obNetos e no ao endereo de memPria de suas RariMReis$ 1ma outra ne%essidade seria Reri)i%ar a %,asse de um obNeto em tempo de eLe%uo$ Antes de Rer a so,uo pro%ure sentir o prob,ema no eLemp,o a se#uir' 1saremos o arXuiRo da %,asse *onto, NM apresentado em CONSTR1TORES $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 obNeto$ /azendo 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 6pintar7 )trin$s em Mreas espe%iais na te,a$ Apresentao do prob,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 obNetos de %,asses pr" de)inidas na ,in#ua#em, portanto as a)irmaWes )eitas aXui se ap,i%am a e,es tamb"m$ 41

$$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 memPria Xue pVri$inal , por este motiRo Xuando pAlias " a,terado, pVri$inal se a,tera por 6e)eito %o,atera,7, e,es %omparti,0am o mesmo obNeto pois a atribuio pAliasHpVri$inal , %opia o endereo de pVri$inal $ JM p&opia, " o resu,tado de uma noRa a,o%ao de memPria, portanto um noRo endereo, um obNeto 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 memPria e no do %onteQdo$

40

pVri$inal./HHp&opia./ tem o si#ni)i%ado de %omparao do Ra,or desses atributos, assim %omo uma %omparao entre inteiros$ Se esses atributos por sua Rez )ossem obNetos, esta operao teria o si#ni)i%ado de %omparao entre endereos de memPria dos obNetos$ As poss+Reis so,uWes, %omentadas in%,uindo Reri)i%ao da %,asse dos obNetos //&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 beta Ga dispon+Re, atua,menteH$ 1.4. OBTENDO VALORES DO 7S7:RIO

Este tPpi%o )oi introduzido porXue os pro#ramas se#uintes so mais %omp,eLos e pre%isam ser testados iteratiRamente$ -esmo Xue Ro%V sP RM )azer pro#ramas em inter)a%es #rM)i%as " interessante saber %omo testar %ertas %,asses Ria te%,ado ou ,in0a de %omando, sem %ontar Xue sem o %onteQdo deste tPpi%o os pro#ramas se#uintes no sero poss+Reis$ A,"m do Xue Ro%V pode deseNar )azer a,#um pro#rama de ,in0a de %omando Gbat%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%eba ar#umentos Ria ,in0a de %omando$ 1.4.1. LENDO DO TECLADO Este tPpi%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 b.tes, seNa 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 b.tes$ Como sabemos 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 b.tes %omo ar#umentoGonde sero ,idos os %ara%teresH e a,"m disso retorna o nQmero de b.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 b.tes passado %omo o primeiro ar#umento$ 5o%V deRe estar se per#untando Xua, a )uno dos b,o%os de %Pdi#o tr> ;@ catch ;@ deste pro#rama eLemp,o$ E,es so importantes no tratamento de eL%eWes, tPpi%o Xue serM abordado no )ina, deste teLto$ (or enXuanto apenas ReNa estes b,o%os de %Pdi#o %omo ne%essMrios para es%reRer dentro do b,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 tPpi%os anteriores G,eitura de b.tesH " su)i%iente para Xue Ro%V ,eia do te%,ado, mas aproReitaremos a#ora Xue Ro%V NM 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 sP para um Retor de b.tes$ Nestes eLemp,os usaremos um %on%eitos Xue somente sero eLp,i%ados a )undo nos prPLimos tPpi%os, so os %on%eito de pa%Sa#es e Streams$ (a%Sa#es so %onNuntos de %,asses$ At" a#ora sP
44

t+n0amos uti,izados 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 abstrao de streams para ,idar %om a %omp,eLidade de entrada e sa+da de dados$ Esta abstrao " poderosa e serM uti,izada aXui para ,er do te%,ado$ 1m stream " %omo um %ano por onde passam os b.tes, a Ranta#em deste %ano " Xue no pre%isamos nos preo%upar de onde Rem esses b.tes, para nPs e,es Rem do %ano$ (ara Xuem es%reRe no stream tamb"m Ra,e a mesma id"ia do Xue a#ora do outro ,ado, empurrando os b.tes para dentro$

Neste eLemp,o usamos um stream para ,er do te%,ado, esta poderosa abstrao 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 6netZorSin#7 da ,in#ua#em, a,"m da ,eitura e es%rita em arXuiRos, no tPpi%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 Nardim, nPs )i%amos %om a ponta de onde sai a M#ua$ 'Nesta ,in0a dizemos Xue deseNamos 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 ba,de para re%o,0er a M#ua da man#ueira G1ma )trin$H$ O ba,de %omea Razio GJKH$ B'Esta ,in0a diz para pe#ar a man#ueira G3ata9nput)treamH do depPsito Gpa%Sa#e !ava.ioH$ 4'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$ ?'En%0a o ba,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'EsRazie o ba,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 :, ? e 9 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, abordaremos este tPpi%o bem mais adiante, de modo Xue aXui apenas daremos uma Riso #era, sP a t+tu,o de %uriosidade' No b,o%o tr> ; @, deReKse inserir as operaWes pass+Reis de )a,0as$ Este b,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 )az %om Xue o )tream ,eia da entrada de dados em Xue )oi asso%iado uma ,in0a$ Este m"todo obRiamente b,oXueia a eLe%uo do pro#rama at" Xue se di#ite 6%arria#e return7, o Xue no " prob,emMti%o pois isto poderia ser )eito para,e,amente, usando 6t0reads7$ 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 %,asse 9nte$er retornando um obNeto da %,asse 9nte$er$ *epois o obNeto 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 ,embra Xue nPs )a,amos Xue a ,in#ua#em )orne%e uma auLi,iarG6Zrapper7H para %ada tipo bMsi%o da ,in#ua#em^ A %,asse Inte#er " uma %,asse Xue mapeia em termos de obNetos o tipo bMsi%o int de !4 bits$ A#ora Xue Ro%V NM %on0e%e o nome da %,asse, pesXuise mais sobre e,a na JA5A A(I$ EG*'(E(,0)/ 1H 5o,taremos a )a,ar sobre )trin$s, por"m por 0ora, Ro%V NM tem %ondiWes de ,er as bib,io#ra)ias adi%ionais sobre e,es$ 1.4.2. AR$7MENTOS DE LINHA DE COMANDO Na se#unda parte Reremos Xue os pro#ramas Java Xue rodam embebidos em 0iperteLtos podem re%eber 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%eber 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 obRiamente 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 sP para obNetos, so os %0amados 6%,ass met0ods7 em %ontraposio a 6instan%e met0ods7$ 4"

ar$s.len$th. Retorna o %omprimento do Retor de )trin$s, este Ra,or " usado para iterar sobre os ar#umentos Xue so )trin$s armazenadas em ar$s<i=$ (er%eba Xue as aspas )azem %om Xue nomes separados por espaos seNam %onsiderados sP um ar#umento$ Os ar#umentos passados para seu pro#rama so #raRados em um Retor de Strin#s, para usar o ar#umento ! 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 %Pdi#o a%ima " um dos 6Zrappers7 Xue des%reRemos em $!$ $ A operao %ontrMria a Xue )oi )eita " 9nte$er.to)trin$%int a(.. O m"todo parse9nt a%eita tamb"m um se#undo ar#umento Xue " a base 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%ebe 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 Rez, eLperimentMK,o em pro#ramas simp,es$

1.D.

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

En%apsu,amento, 6data 0idin#7 " um %on%eito bastante importante em orientao a obNetos$ Neste tPpi%o Ramos )a,ar das maneiras de restrin#ir o a%esso as de%,araWes de uma %,asse e a prPpria %,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 bene)+%ios so muitos' %,areza do %Pdi#o, minimizao de erros, )a%i,idade de eLtenso$ Ta,Rez a )a%i,idade de modi)i%ao seNa o mais importante dos bene)+%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%eba a di)erena Estaremos preo%upados em separar desi#n de imp,ementao, Java " uma ,in#ua#em boa de se pro#ramar em termos de desi#n e em termos de imp,ementao$ (ro#ramar tendo em Rista o desi#n " tamb"m %0amado de 6pro#rammin# in t0e ,ar#e7, enXuanto Xue pro#ramar tendo em Rista imp,ementao, %odi)i%ao " %0amado de 6pro#rammin# in t0e sma,,7$ 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 %apaz de %riar %omponentes de so)tZare reuti,izMReis, se#uros, )M%eis de modi)i%ar$ 1.I.1. ENCAPS7LANDO MQTODOS E ATRIB7TOS

*rotected serM eLp,i%ada Nuntamente %om 0erana na seo 4$ (AC>A<E serM eLp,i%ado Nuntamente %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 saber porXue, Ro%V )oi aRisado para Xua,i)i%ar todos os atributos 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 %Pdi#o$ (or Ris+Re, entenda o se#uinte' se o atributo / do obNeto Tm*onto no " Ris+Re, por eLemp,o )ora de sua %,asse, ento no )az sentido es%reRer em main' Tm*onto./H1. $ -as ento %omo %ontro,ar o a%esso de atributos e m"todos em uma %,asse^ Simp,es, atraR"s das pa,aRras reserRadas privateF public e protected %uNos si#ni)i%ados Xuando Xua,i)i%ando m"todos e atributos Gprivate e public podem tamb"m Xua,i)i%ar %,assesH so des%ritos abaiLo' public private protected Nada espe%i)i%ado, eXuiRa,e 6pa%Sa#e7 ou 6)riend,.7 Estes atributos 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 atributos e m"todos so a%ess+Reis somente nos m"todosGtodosH da prPpria %,asse$ Este " o n+Re, mais r+#ido de en%apsu,amento$ Estes atributos e m"todos so a%ess+Reis nos m"todos da prPpria %,asse e suas sub%,asses, o Xue serM Risto em Derana 4$ Estes atributos e m"todos so a%ess+Reis somente nos m"todos das %,asses Xue perten%em ao 6pa%Sa#e7 em Xue )oram %riados$ Este modo de a%esso " tamb"m %0amado de 6)riend,.7$

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$ pois estM re,a%ionada %om 0erana, por 0ora Ramos )o%a,izar nossa ateno em private e public Xue Xua,i)i%am os atributos 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 6spe%i)iers7$ (ara )a%i,itar a eLp,i%ao supon0a a se#uinte de%,arao de uma %,asse' H ;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 atributos Xue Rem imediatamente apPs e,es$ Os e,ementos da %,asse Xua,i)i%ados %omo private apare%em %om )undo %inza es%uro indi%ando Xue sua 6Risibi,idade7 " mais ,imitada Xue os atributos Xua,i)i%ados %omo public G%inza %,aroH$ A#ora Ramos entender o Xue " private e o Xue " public $ 5amos supor Xue Ro%V instan%iou G%riouH um obNeto 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 )az+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 dizer Xue um m"todo tem a%esso a tudo Xue " de sua %,asse, ReNa 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(.$ 5isibi,idade das de%,araWes de uma %,asse, )ora de,a ,de sua 0ierarXuia e de seu pa%Sa#e$ 5eNa Xue sP a parte pub,i% " Ris+Re, neste %aso' (1B2IC (RI5ATE (ROTECTE* 6(AC>A<E7 (1B2IC (RI5ATE (ROTECTE* 6(AC>A<E7

5isibi,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 atributos en%apsu,ados e de)inindo a inter)a%e pub,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 seNa %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 )azeK,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 %onNunto de operaWes matemMti%as ne%essMrias para obter a distYn%ia entre GI,=H Ga$I,a$=H$ 5o%V proRaRe,mente usarM a )uno 7ath.s'rt%( Xue de)ine a raiz Xuadrada de um double, no " pre%iso )azer 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. 5eNa Xue no m"todo distancia , podemos obter a%esso aos atributos private O e W do ar#umento a, isto " permitido porXue distancia " um m"todo da mesma %,asse de a, embora no do mesmo obNeto, 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 tPpi%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 %Pdi#o do pro#rama anterior e substitua pri."te float /F>. por pri."te float /. publi float >. //> pode ser acessado C0;*2-5',0)/ ObserRe Xue a#ora nada impede Xue Ro%V a%esse diretamente .' ap.>H011.1F por"m ap./H01.11 " um erro$ ObserRe em Xue parte GMreaH da %,asse %ada um desses atributos )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 armazenado em / e para a,terar o Ra,or armazenado em / respe%tiRamente$ Crie tamb"m os respe%tiRos m"todos retorna e altera para o atributo >$ 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^ Obs$' 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. bH 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 tPpi%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 %Pdi#o das pa%Sa#es o)ere%idas %om a ,in#ua#em$ (a%Sa#es so %onNuntos de %,asses re,a%ionadas, estes %onNuntos 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 sP$ 1.I.2.1. ENCAPS7LAMENTO DE ATRIB7TOS E MQTODOS COM PACVA$ES O en%apsu,amento de atributos e m"todos atin#ido %om o uso de pa%Sa#es " muito seme,0ante ao en%apsu,amento %om private e public , sP Xue a#ora o 6,imite de Risibi,idade7 " mais amp,o do Xue a %,asse$ A Xuesto aXui ,eRantada " se a %,asse " Ris+Re, )ora do 6pa%Sa#e7 ou no$ SP para ,embrar, a Xuesto Xue do item anterior' $?$ , era se os m"todos e atributos eram Ris+Reis )ora da %,asse ou no$ 5isibi,idade das de%,araWes de uma %,asse, dentro de seu pa%Sa#e' (1B2IC (RI5ATE (ROTECTE* 6(AC>A<E7

Euando eLp,i%armos protected )orne%eremos um dia#rama %omp,eto dos modos de en%apsu,amento de m"todos e atributos, este dia#rama " muito Qti, para a memorizao$ 6(a%Sa#es7 " 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 diretPrio abaiLo des%reRe a disposio dos arXuiRos deste eLemp,o' I2,(,0/ A=K) J"." /

Note Xue a pa%Sa#e 4eometria estM toda sob um diretPrio ou )o,der de mesmo nome, isto o%orre porXue a estrutura de pa%Sa#es deRe ser mapeada em uma estrutura de diretPrios para Xue suas %,asses possam ser a%0adas$ Assim a %,asse !ava.awt.&olor estM dois n+Reis, portanto dois diretPrios abaiLo 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, sP podendo ser pre%edidas por %omentMrios$ EListe uma Xuantidade #rande de 6pa%Sa#es7, NM de)inidas na ,in#ua#em, as Xuais abordaremos na se#unda parte$ (or 0ora basta saber Xue NM estamos usando de%,araWes da 6pa%Sa#e7 !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 substituir todos os demais, assim %omo em a,#uns sistemas opera%ionais$ Embora de )M%i, uti,izao, este %on%eito %onstitui uma inoRao %om re,ao a C]]$ Em -odu,aK! podeKse obter um e)eito seme,0ante uti,izando de%,araWes de %,asses Gtipos obNetosH no mesmo mPdu,o e inter)a%es Xue no eLportam tudo o Xue eListe no mPdu,o, assim as %,asses de%,aradas no mesmo mPdu,o o)ere%em )a%i,idades umas as outras$ O modo de a%esso de atributos e m"todos %0amado 6)riend,.7 ou pa%Sa#e " propor%ionado pe,o uso de 6pa%Sa#es7 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 tributos da %,asse *onto )orem espe%i)i%ados %omo 6)riend,.7 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 6pa%Sa#e7, mas %ontinuam en%apsu,ados para as %,asses eLternas ao 6pa%Sa#e7 ou seNa para o usuMrio$ En)atizamos o termo 6diretamente7 porXue obter a%esso a um atributo Ria m"todo " bem mais %ustoso do Xue a%essMK,o diretamente, mas se Ro%V pro#ramar usando pa%Sa#es, #an0arM o bene)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, embora sem eLp,i%ar eLatamente porXue$ Este tPpi%o trata da possibi,idade de o pro#ramador deseNar %riar uma %,asse para seu uso prPprio e no )orne%VK,a para o usuMrio$ O Xue a ,in#ua#em Java permite neste sentido "' K A %riao de %,asses Xue sP podem ser usadas dentro de pa%Sa#es, ou seNa, Ro%V no pode de%,arar um obNeto desta %,asse eLternamente ao pa%Sa#e$ 4K A %riao de %,asses Xue podem ser usadas somente pe,as %,asses presentes no mesmo arXuiRo, embora no ten0amos mostrado, um arXuiRo pode %onter a de%,arao de mais de uma %,asse desde Xue somente uma de,as seNa public$ O en%apsu,amento de %,asses se#ue uma sintaLe seme,0ante ao en%apsu,amento de m"todos e atributos, ou seNa' 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 %Pdi#o$ Somente uma %,asse pub,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 6pa%Sa#e7 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 )azer uso destes re%ursos de en%apsu,amento, mas todo %Pdi#o es%rito para ter%eiros deRe uti,izMK,os intensamente$ 5o%V teRe ter notado Xue sempre de)inimos uma %,asse por arXuiRo, isto " )eito porXue a ,in#ua#em sP permite uma %,asse public por arXuiRo, as outras tem Xue ser private ou pacLa$e$ 1m eLemp,o de uti,izao' ao %riar uma %,asse ,ista ,i#ada a,#u"m pode a%0ar %onReniente de)inir uma %,asse nP para ser usada somente pe,a %,asse listali$ada$ 1ma opo " de)inir a %,asse nP %om modo de en%apsu,amento' pa%Sa#e$ O %,iente de sua %,asse ,ista ,i#ada no pre%isa saber Xue esta %,asse se baseia em uma %,asse Co$ 5amos imp,ementar esta id"ia no eLemp,o a se#uir, tomarei o %uidado de )azVK,o bem 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 %Pdi#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 G KesXuerdaH 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 " deseNado, 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 bom m"todo, RerM %omo esta mesma ,ista depois de testada assim pode )i%ar bonita 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 nP %abea %om o restante'

No se preo%upem, a ,in#ua#em %uida 1.6.

da desa,o%ao$

TIPO ABSTRATO DE DADOS

Tipo abstrato de dados, TA*, se preo%upa em propor%ionar uma abstrao sobre uma estrutura de dados em termos de uma inter)a%e bem de)inida$ O en%apsu,amento mant"m a inte#ridade do obNeto eRitando a%essos inesperados$ O )ato de o %Pdi#o estar armazenado em um sP ,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 6s0oppin# ,ist approa%07$ (or 6s0oppin# ,ist approa%07 entenda Xue Ro%V pode mode,ar sua %,asse atraR"s das operaWes Xue e,a suporta, ou seNa, antes de %omear a imp,ementar " re%omendMRe, Xue se )aa uma ,ista Gseme,0ante a uma ,ista de %omprasH das operaWes deseNadas para a %,asse e depois se es%o,0a a representao interna adeXuada$ Comp,etando este %on%eito amp,o podemos dizer Xue uma %,asse imp,ementa um tipo abstrato de dados$ So eLemp,os de tipos abstratos de dados' 1ma MrRore binMria %om as operaWes usuais de insero, remoo, bus%a $$$ 1ma representao para nQmeros ra%ionais Gnumerador, denominadorH Xue possua as operaWes aritm"ti%as bMsi%as e outras de %onRerso de tipos$ 1ma representao para Yn#u,os na )orma G<raus, -inutos, Se#undosH$ Tamb"m %om as operaWes re,a%ionadas, bem %omo as operaWes para %onRerter para radianos, entre outras$ Tipo abstrato de dados " um %on%eito muito importante em pro#ramao orientada a obNetos 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 introduzindo noRos %on%eitos eLemp,i)i%aremos %om ap,i%aWes na imp,ementao tipos abstratos de dados$ EG*'(E(,0)/ 1H 1se a estrat"#ia da ,ista de %ompras G6s0oppin# ,ist approa%07H para mode,ar a inter)a%e do tipo abstrato 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 abstrato 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 ab$ 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 %onNunto de operaWes imp,ementadas esta mar%ado %om $ A )ina,izao dessa s0oppin# ,ist bem %omo do pro#rama " deiLada %omo eLer%+%io, o Xua, no deRe ser di)+%i, pois Rendo a imp,ementao da soma, o ,eitor obt"m Xuase Xue de maneira direta a imp,ementao da subtrao, o mesmo o%orre para as demais operaWesH'

Construtor Gre%ebe 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%ebendo ar#umento do prPprio tipo )raoH Subtrao 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 Nu,#ar ne%essMrias
TXPICOS ABORDADOS/ Construtores em #era,, %riao de m"todos de %onRerso de tipos, %0amadas de m"todos do mesmo obNeto, 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 baseada 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 prPpria )rao Xue estM re%ebendo a %0amada de m"todo o outro " passado %omo ar#umento$ Outros )ormatos eXuiRa,entes poderiam ter sido adotados$ 1m dos poss+Reis )ormatos )az %om Xue os dois operandos seNam passados %omo ar#umentos e a )rao Xue estM re%ebendo 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 %Pdi#o nos diRersos m"todos Grepetio da rotina de simp,i)i%ao nos m"todos de soma, subtraoH, %onsidere a opo de de)inir este tre%0o de %Pdi#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 possibi,idade de de)iniK,o %omo private Gm"todo md%H$ No eListe uma re#ra de ouro Xue di#a eLatamente %omo proNetar as suas %,asses para Xue e,as preen%0am reXuisitos de portabi,idade, robustez, ),eLibi,idade$ TodaRia uma re%omendaWes importantes podem ser )eitas para eRitar re)ormu,aWes durante o pro%esso de pro#ramao' 6No e%onomize tempo na )ase de proNeto$ (ro%ure antes de pro#ramar, simu,ar o uso de uma %,asse, seNa menta,mente ou atraR"s de um protPtipo$7 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 obNeto )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 NM 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 6oRer),oZ7 do numerador e denominador o Xue o%orre )reXuentemente Xuando se traba,0a %om nQmeros primos
66

entre si Gno podem ser simp,i)i%adosH, uma poss+Re, so,uo para este prob,ema " )azer uma aproLimao eTou a,terar a representao interna da )rao para um tipo %om maior numero de bits 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 6s0oppin# ,ist approa%07 lon$ retorna-den%void( ;return den.@ lon$ altera-den%int a( ;denHa.@ Considerando Xue os atributos 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 prPprios m"todos de )rao^ 2H Imp,emente o tipo abstrato de dados nQmero %omp,eLo %om as operaWes matemMti%as inerentes$ /aa antes um proNeto 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 sobre matrizes em Java: 0.3.2$ Crie um tipo abstrato de dados matriz Xue suporte atribuiWes e ,eituras de %",u,as %ontendo e,ementos do tipo float$ Crie outros m"todos para este tipo abstrato de dados %omo mu,tip,i%ao por uma %onstante$ 4H Imp,emente o tipo abstrato de dados re,P#io, pesXuise as operaWes norma,mente o)ere%idas por re,P#ios reais, o Qni%o obNetiRo " 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 NM estamos pro#ramando a,#uns tipos abstratos de dados, estM na 0ora de apresentar um eLemp,o Xue mostre %omo %omportamento " importante para um TA*$ SP Xue desta Rez )i%aremos do ,ado do %,iente, do usuMrio desse tipo abstrato 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,aK!H, re%omendMRamos %omo eLer%+%io a imp,ementao do tipo abstrato de dados strin#, Xue deReria suportar operaWes de %on%atenao, substrin#, a%esso a e,emento, et%$ Este eLer%+%io no )az 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 " bastante %omp,eta$ A de%,arao de )trin$s se dM da mesma )orma Xue os outros obNetos' )trin$ minha)trin$. $ O %ompi,ador o)ere%e uma )a%i,idade sintMti%a para a ini%ia,izao %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 obNetos desta %,asse, por eLemp,o se um dos ar#umentos )or um inteiro, o obNeto )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 esboar o proNeto de,es e depois, a imp,ementao pode ser deiLada %omo eLer%+%io das prPLimas seWes$ 6"

testeGHJ Andre:K. //atalho para concatenacao se$uida de atribuicao: testeHtesteGK Andre:K )>stem.out.println%teste(. //totalmente e'uivalente a primeira (ara obter o %omprimento em nQmero de %ara%teres de uma )trin$, %0ame o m"todo len$th%( para a )trin$ em Xuesto$ (ara obter 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 zero' char um&harHteste.charAt%6(. //um char recebe ZuN (ara obter uma substrin#, %0ame o m"todo substrin$%int aFint b(. onde o primeiro ar#umento " o +ndi%e do in+%io da substrin# e o se#undo " o +ndi%e do )im da substrin#s, os %ara%teres em a e b tamb"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 basta %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 busXue 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 substrin#, sP 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 bMsi%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 obNeto 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 padronizao 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 6Zrappers7 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 %Pdi#o )onte dispon+Re, %om o %ompi,ador %onstitui uma Ptima )onte de aprendizado sobre %omo %onstruir %omponentes de so)tZare reuti,izMReis no esti,o de pro#ramao orientada a obNetos, ,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 6Java team7 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, abaiLo apresentamos uma tabe,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 introduzindo um nome para o obNeto$ Este nome pode ir nas sa+das de te,a eLe%utadas pe,o obNeto 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 bastante %omum em editores$ A bus%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 traba,0o de bus%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 Xuebrar o ar#umento )trin$ em pa,aRras separadas por espaos GRo%V NM pode )azer isso %om os m"todos %on0e%idos, mas ta,Rez Xueira usar a %,asse )treamIoLeni6erH$ (ara %ada uma destas pa,aRras este m"todo )az uma bus%a na estrutura de armazenamento de pa,aRras da %,asse, se a pa,aRra no %onstar, deRe ser in%,u+da %om mu,tip,i%idade , %aso e,a %onste na estrutura, apenas sua mu,tip,i%idade deRe ser in%rementada$ 1m prob,ema pode sur#ir$ A estrutura deRe ser %apaz 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 dobro 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 gnnO$ Se o %ara%tere ,ido )or i#ua, a gnnO e,e deRe ser retirado da )trin$ ,ida Guse os m"todos substrin# 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 introdutPrio sobre )treams, estaremos ,idando %om %oneLWes entre %anos, ou seNa 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 abstrato de dados matriz bidimensiona, de inteiros %int($ O ,eitor pode a%0ar estran0o Xue para representar esta matriz usamos um Retor, mas " Xue isto traz a,#umas Ranta#ens' R*='*)*2-&D30 >,2*&' .* B;& ;&-',L/ (odeKse representar uma matriz de Xua,Xuer dimenso em um Retor$ 5eNa o eLemp,o de uma matriz bidimensiona, de inteiros mostrada no )ormato indice5inear:valorArma6enado. Os +ndi%es ,ineares Ro de 0 at" n2. -atriz' '! 4'!4 :'4! ?'3B 9'4 @'B@ !' C' 4 3'!4 ?'3B C' 4 9'4 @'B@ 3'!4

5etor eXuiRa,ente' '! 4'!4 !' :'4!

5anta#em da representao ,inear GRetorH' para re)eren%iar uma posio #astaKse somente um inteiro %ontra dois da representao matriz$ (odeKse %onsiderar posiWes Xue apontam para outras posiWes, basta 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 nPs, %,ientes da %,asse 7atri6239ntF os e,ementos sero indeLados de 0 at" m GarbitrMrioH em termos de +ndi%e ,inear$ Em termos de ,in0as e %o,unas, e,es sero indeLados de G ,,maLH e de G ,%maLH$ O )ato da ,in#ua#em adotar +ndi%es de 1 at" mQ0 para matrizes e Retores no importa, nPs %onstru+mos em Ro,ta dessa representao para Xue nosso obNeto )ornea, traba,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 arbitrMrios de uma matriz %omo a desen0ada anteriormente tentar entendVK ,as ,eRa tempo e eu sei Xue Ro%V " %apaz de pro#ramaK,as$ *entre os obNetiRos de um pro#ramador de uma ,in#ua#em orientada a obNetos podemos %itar' es%reRer pou%o %Pdi#o, es%reRer %Pdi#o %orreto, tornar o seu %Pdi#o reuti,izMRe,$ A %riao de %omponentes de so)tZare reuti,izMReis, " enormemente )a%i,itada pe,a portabi,idade da ,in#ua#em Java$ (ro#ramas eLemp,o posteriores Gse#unda parteH mostraro %omo reuti,izar esta %,asse matriz para a %riao de um No#o de Xuebra %abea de Xuadradin0os des,izantes$ Os Xuadradin0os deRem ser moRidos na mo,dura de modo a )ormar uma ima#em onde um dos Xuadrados " Razio$ "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 %uNo obNetiRo " %omp,etar um de seus primeiros %omponentes de so)tZare reuti,izMRe,, estamos in%,uindo desta Rez os atributos tamb"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%ebe 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 matriz %om dois ar#umentos do tipo +ndi%e ,inear$ Operao de tro%a de e,ementos da matriz %om ar#umentos do tipo G,in0a e %o,unaH$ Operao de atribuio a e,emento da matriz indi%ado por +ndi%e ,inear$ Operao de atribuio a e,emento da matriz indi%ado por ,in0a e %o,una$ Operao de retorno do %onteQdo de posio da matriz indi%ada por um +ndi%e ,inear$ Operao de retorno do %onteQdo de posio da matriz 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 -atriz4*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 matrizes 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 baseaRa no a%esso a +ndi%es )ora de um Retor para #raRar por %ima de instruWes do sistema opera%iona, o %Pdi#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/ Saiba Xue uma prMti%a bastante Qti, na )ase de testes de um pro#rama " introduzir mensa#ens in)ormatiRas em pontos %onRenientes$ Euando traba,0ando %om obNetos 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 obNetos so %riados e se so %riados %orretamente$ EG*'(E(,0)/ K
"4

-e,0ore a %,asse matriz para a%eitar nas suas )unWes ar#umentos do tipo G,in0a,%o,unaH e no sP +ndi%es ,ineares$ 2H Note Xue no )oram impostas restriWes para +ndi%es inRM,idos da matriz 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 )azer esta %0e%a#em de +ndi%es de )orma se#ura e uni)orme em 6:$! EL%eption 0and,in#7$ 3H Imp,emente um m"todo %0amado ordena para o tipo abstrato de dados matriz de)inido a%ima$ 1se Xua,Xuer a,#oritmo de ordenao para deiLar a matriz ordenada %omo um Retor Xuebrado em RMrias ,in0as$ *e Xue )orma a )a%i,idade Xue a inter)a%e o)ere%e de enLer#ar a matriz %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 NM no )ormam um mode,o %omputa%iona, su)i%iente para Xue o %,iente desta %,asse possa de)inir em seu %Pdi#o os m"todos de ordenao de matrizes Xue deseNar^ A dQRida sobre a ne%essidade ou no de um m"todo em uma %,asse " bastante )reXuente$ <uardadas as deRidas proporWes, pro#ramao orientada a obNetos " %omo brin%ar %om b,o%os de en%aiLar, ou ,e#os$ EListem b,o%os Xue no se en%aiLam, eListem b,o%os Xue podem ser %onstru+dos atraR"s de outros menores, mas Xue ainda sim eListem porXue so bastante usados, e a tare)a de %ompoK,os a partir de outros b,o%os tornaKse in%onReniente$ EListem b,o%os sem os Xuais no se pode %onstruir prati%amente nada$ 4H Crie um m"todo de nome preenche, Xue ini%ia,iza todas as posiWes da matriz %om o Ra,or de um de seus ar#umentos$ Este m"todo pode ser %omposto pe,os m"todos NM imp,ementados^ YIH *e)ina um pro#rama %0amado #randes Xue imp,ementa o tipo abstrato 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,Rez estudar %ir%uitos ,P#i%os Gsomadores, mu,tip,i%adoresH o aNude a imp,ementar as Xuatro operaWes matemMti%as bMsi%as para estes tipo em termos de 6,ooS a0ead %arrier7 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 traba,0o em termos de tratar oRer),oZ e under),oZs$ 6H Note Xue na a,o%ao da matriz' public 7atri6239nt%int lFint c( , no " %0e%ado se os Ra,ores passados so maiores Xue B, )aa este teste$ Euando eLp,i%armos 6eL%eption 0and,in#7 Ro%V terM m"todos me,0ores de ,idar %om esses 6erros7$

"5

2.

HERANA

EListe uma Riso um pou%o ta%an0a de orientao a obNetos %omo uma simp,es maneira de or#anizar me,0or o seu %Pdi#o$ Essa Riso " )a%i,mente desmentida pe,os %on%eitos de en%apsu,amento, inter)a%es, pa%Sa#es e outros NM apresentados$ Neste tPpi%o apresentaremos o %on%eito de 0erana, )undamenta, para pro#ramao orientada a obNetos e um dos )atores de su%esso desta %omo muito mais Xue uma simp,es maneira de or#anizar me,0or seu %Pdi#o$ 1m dos aspe%tos Xue distin#uem obNetos de pro%edimentos e )unWes " Xue o tempo de eListVn%ia de um obNeto pode ser maior do Xue o do obNeto Xue o %riou$ Isto permite Xue em sistemas distribu+dos obNetos %riados em um ,o%a,, seNam passados atraR"s da rede para outro ,o%a, e armazenados ,M Xuem sabe na memPria ou mesmo em um ban%o de dados$ CB',0),.&.*/ EListem %,asses Xue podem ser obtidas na Internet para )azer inter)a%e %om ban%os de dados SE2, serRindo prin%ipa,mente para )a%i,itar esta )a%eta da pro#ramao na internet Xue " bastante ,imitada pe,as restriWes de se#urana da ,in#ua#em$ 2.1. HIERAR67IAS DE TIPOS

Neste tPpi%o mostraremos %omo %onstruir 0ierarXuias de tipo por #enera,izao T espe%ia,izao$ (ara entender o Xue " #enera,izao espe%ia,izao e as re#ras de atribuio 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 badeNo$ -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., embora muito saborosa no serRe mais , assim %omo a sa,ada$ Note Xue peiLe e ,a#osta so espe%ia,izaWes de )rutos do mar$ <enera,izao e Espe%ia,izao so )erramentas para ,idar %om %omp,eLidade, e,as so abstraWes$ Os sistemas do mundo rea, apresentam %omp,eLidade muito maior Xue ordenar um prato ,istado em um %ardMpio$ O uso de #enera,izao e espe%ia,izao 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 obNetos e tratar os deta,0es de )orma muito mais or#anizada e #radua,$ EListe muito mais para )a,ar sobre 0erana, prin%ipa,mente no Xue diz respeito a po,imor)ismo de in%,uso e a%op,amento dinYmi%o de mensa#ens, tPpi%os estes Xue sero abordados em separado$ 2.1.1. 7MA HIERAR67IA SIMPLES. Construiremos uma 0ierarXuia de tipos simp,es para demonstrar 0erana pQb,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 obtido a partir da Nane,a de edio de uma )erramenta %ase para pro#ramao orientada a obNetos$ A %,asse ponto Xue estM no topo da 0ierarXuia " %0amada de %,asse base, 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, NM abordado neste tutoria, em $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 Nuntar as trVs em uma sP$ A per#unta )az sentido, mas e se Xuis"ssemos %riar uma %,asse *onto Xue no se moResse, apenas re),etisse e outra Xue sP se moResse^ E se Xuis"ssemos proNetar nosso pro#rama se#undo uma 0ierarXuia de espe%ia,izao T #enera,izao da %,asse *onto^ O eLemp,o mostra %omo )azVK,o$ Na 0erana as %,asses )i,0as passam a atender pe,os mesmos m"todos e atributos public da %,asse pai, as %,asses )i,0as podem a%res%entar m"todos, atributos e at" rede)inir m"todos 0erdados GReremos mais tardeH$ (or isso " Xue se diz Xue as %,asses sub%,asses #arantem pe,o menos o %omportamento 6be0aRiour7 das super%,asses, podendo a%res%entar mais %ara%ter+sti%as$ Os atributos en%apsu,ados GprivateH da %,asse pai no so a%ess+Reis diretamente na %,asse )i,0a a no ser Xue seNam Xua,i)i%ados %omo protected ou public , ReNa 4$ $4$ *ia#rama de a%esso, Risibi,idade, dos e,ementos da %,asse pai para uma %,asse )i,0a ou 0erdeira$ Os atributos e m"todos da %,asse pai so %,assi)i%ados Xuanto ao en%apsu,amento$ A parte sombreada si#ni)i%a no Ris+Re,, en%apsu,ado$ fAs duas so %onsideradas %omo sendo do mesmo pa%Sa#e$ (1B2IC (RI5ATE (ROTECTE* 6(AC>A<E7f

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 6Se.Zord 6 super de modo ana,o#o a this %ob!eto corrente( $ DierarXuia de #enera,izao e espe%ia,izao$ //&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 atributos / e > da %,asse *onto esto de%,arados %omo private$ (e,o dia#rama anterior ao pro#rama, atributos private no so Ris+Reis aos des%endentes na 0ierarXuia$ E de )ato nPs a,teramos esses atributos 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 atributos da mesma %,asse pare%em ser um pou%o ine)i%ientes$ 2embreKse 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 pQb,i%a de C]] e sP$ (ara obter o e)eito de 0erana private use a#re#ao$ EG*'(E(,0)/ 1H (ro#rame e teste a 0ierarXuia representada abaiLo'

A %,asse )orma no tem um si#ni)i%ado prMti%o, " uma abstrao, 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 !$! aprenderemos %omo de)inir estas %,asses abstratas de )orma mais %ondizente %om o paradi#ma de orientao a obNetos$ O m"todo mostra deRe imprimir na te,a os atributos destas %,asses$ 2.1.2. PRO<EC<ED Euando Rimos o tPpi%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 abertoH$ NaXue,e tPpi%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 atributos da %,asse pai a%ess+Reis para as %,asses )i,0as atraR"s do uso de protected. *rotected deiLa os atributos da %,asse pai Ris+Reis, a%ess+Reis 60ierarXuia abaiLo7$ -as para o restante do pro#rama tem o mesmo e)eito Xue private$ Outra )rase sobre prote%ted' 6A 0erana permite Xue uma sub%,asse #an0e a%esso a de%,araWes protected de sua super%,asse, mas o usuMrio no per%ebe isso, para o usuMrio Guma %,asse eLternaH o Xue %ontinua eListindo " o Xue " public 7$ *ia#ramas de a%esso, Risibi,idade, de atributos 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* 6(AC>A<E7 (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* 6(AC>A<E7 (1B2IC

O mesmo eLemp,o sP 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 atributos e m"todos, portanto )aremos uma reRiso )ina,, uti,ize os nQmeros dessa tabe,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 atributos 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 Risibi,idade das de%,araWes ,imitaKse ao enRo,tPrio da %,asse$ 3( protected Representao no dia#rama' A Risibi,idade das de%,araWes se ,imita prPpria a 0ierarXuia abaiLo da %,asse es%ura$ %,asse e as %,asses 0erdeiras de,a$ 4HNada Representao no dia#rama' A Risibi,idade das de%,araWes se ,imita a prPpria espe%i)i%ado retYn#u,o enRo,Rendo as %,asses %,asse e as %,asses do mesmo pa%Sa#e, mas no is 6pa%Sa#e7 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' prPpria %,asse es%ura$

O dia#rama a%ima mostra as Mreas de Risibi,idade de %ada tipo de modi)i%ador ap,i%ado aos atributos 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 atributos Xue no )azem 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%terizando uma rede)inio 6oRerridin#7 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 sobre%ar#a 6oRer,oadin#7$ A rede)inio #arante Xue o m"todo terM o mesmo %omportamento Xue o anterior isto )az %om Xue as sub%,asses possam ser atribu+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 tPpi%o de po,imor)ismo, %ontudo, nos eLemp,os se#uintes usaremos tamb"m rede)iniWes de m"todos, portanto )azKse ne%essMrio introduziK,o a#ora$ Teremos mais eLp,i%aWes sobre 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 bus%a da imp,ementao do m"todo a ser eLe%utado o%orre de baiLo para %ima na 0ierarXuia$ ELemp,o' se Ro%V tem um obNeto *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 bus%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 6S.stem$outOs7 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,P#io 0erdar da %,asse rMdio e da %,asse re,P#io$ C]] apresenta 0erana mQ,tip,a, e tamb"m maneiras de tratar os prob,emas de%orrentes de seu uso$ 1m dos prob,emas Xue podem sur#ir " o %on),ito de nomes de atributos ou m"todos 0erdados desse tipo de 0erana$ 1ma das estrat"#ias adotadas para reso,Rer estes %on),itos " o 6renamin#7 ou renomeamento desses nomes i#uais presentes nas super%,asses$ Tendo o se#uinte si#ni)i%ado' A %,asse 0erdeira tem %omportamento, 6be0aRiour7, 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, abandona a id"ia de 0erana mQ,tip,a, %edendo ,u#ar ao uso de inter)a%es$ Inter)a%es so um %onNunto de m"todos e %onstantes Gno %ont"m atributosH$ Os m"todos de)inidos na inter)a%e so 6o%os7 ou desproRidos de imp,ementao$ C,asses podem dizer Xue imp,ementam uma inter)a%e, estabe,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%aba no sabendo o Xue a %,asse ", mas sabe o Xue )az$ Euem pro#rama em ObNe%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 obNetos 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 seNa 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 bordas arredondadas ,i#adas as %,asses Xue as imp,ementam por ,in0as tra%eNadas$ -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 sP a#ora, depois Xue Ro%V NM pensou no assunto$ 1ma %,asse *roduto2 0erda da %,asse *rodutoGnosso eLemp,oH Xue imp,ementa a inter)a%e 9mprimivel$ A %,asse produto NM )ez 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 seNa' 6A inter)a%e " um dos +tems Xue " 0erdado de uma %,asse, assim %omo os atributos e m"todos7$ EG*'(E(,0)/ 1H *e)ina uma inter)a%e para um %onNunto 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 %onNunto mais reduzido 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 obNeto e operador um m"todo, operando pode si#ni)i%ar um tipo e operador um obNeto deste tipo$ 3.1. REDEFINI!O DE MQTODOS PARA 7MA CLASSE HERDEIRA

Este eLemp,o NM )oi apresentado em 4$ $!$ Tamb"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 seNa, 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 %abea,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 sobre%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 b,o%o de %Pdi#o cd no importaH, o Xue NM imp,i%a Xue no propor%iona o mesmo %omportamento Gbe0aRiourH 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 seNa 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 sobre%arre#ar o %onstrutor de uma %,asse, esta %,asse passarM a ter duas RersWes de %onstrutores, Ra,e ,embrar Xue assim %omo o %onstrutor serM sobre%arre#ado, Xua,Xuer outro m"todo poderia ser$ O %ompi,ador saberM Xua, m"todo %0amar no mais pe,o nome, mas pe,os ar#umentos$ O m"todo *onto%*onto ap(. " um 6%op. %onstru%tor7 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 sobre%ar#a de m"todo, o %ompi,ador sabe distin#uir entre esses dois %onstrutores$ Outros m"todos, no sP %onstrutores podero ser sobre%arre#ados para RMrios ar#umentos di)erentes, esse re%urso " um po,imor)ismo do tipo 6adK0o%7$ O Xue " interessante para nPs " 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%teriza um 6%op. %onstru%tor7 " Xue ini%ia,iza um obNeto 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, ,embreKse dos prob,emas %om %Ppias de obNetos apresentados em $!$!$ (or XuestWes de espao, basearemos nosso eLemp,o no tipo abstrato de dados )rao, apresentado em $C$ $ 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 %Pdi#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 6%op. %onstru%tor7 para o tipo abstrato de dados )rao apresentado a%ima$ Euando um sP nQmero )or passado para o %onstrutor desta %,asse, subentendeKse Xue o %onstrutor %0amado " o de um sP ar#umento inteiro e Xue portanto o denominador serM i#ua, a $ A#ora Ramos )a,ar do 6%op. %onstru%tor7, Xue embora imp,ementado, no )oi testado em main%( $ Esse m"todo, perten%e a outro obNeto Xue no o ar#umento copieme, ento para distin#uir o atributo num deste obNeto, do atributo num de copieme usamos copieme.num e simp,esmente num para o obNeto ,o%a,, obNeto em Xuesto, ou obNeto dono do m"todo %0amado$ EG*'(E(,0)/ 1H /aa um 6%op. %onstru%tor7 para uma das %,asses NM imp,ementadas neste teLto$ 2H Sobre%arre#ue o m"todo move da %,asse *onto para a%eitar um *onto %omo ar#umento, subentendeKse 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 unitarizado$ 1nitarizar " diRidir %ada %oordenada pe,o mPdu,o do Retor$ O mPdu,o " a raiz Xuadrada da soma dos Xuadrados das %omponentes$

3H

,1

3.2.2.

SOBRECAR$A DE OPERADOR

Java no )orne%e re%ursos para sobre%ar#a de operador, o Xue " per)eitamente %ondizente %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 sobre%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 tPpi%o sobre 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. Embora 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 deseNMRamos era Xue esta %,asse Porma se %omportasse %omo um esXue,eto para as suas %,asses )i,0as, nPs no Xuer+amos instan%iMK,a$ C,asses abstratas permitem eLatamente isto pois no podem ser instan%iadas embora possam ser usadas de outras maneiras$ C,asses abstratas so poderosas, e,as permitem' %riao de ,istas 0etero#Vneas, o%orrVn%ia de 6d.nami% bindin#7 e maior %,areza no proNeto de sistemas$ Os pa%Sa#es Xue Rem %om a ,in#ua#em esto rep,etos de eLemp,os de %,asses abstratas$ -"todos abstratos, obri#atoriamente perten%em a %,asses abstratas, 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 base abstrata GPormaH %omo um m"todo abstrato$

C,asses abstratas //&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:: ObserRe Xue a %,asse Porma Xue " abstrata, no possui um %onstrutor, porXue no pode ser instan%iada$ A#ora tamb"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 abstratas e inter)a%es so %on%eitos pare%idos e Xue podem ser usados %om obNetiRos seme,0antes$ Cuidado\ 1ma %,asse pode estender uma Qni%a %,asse GXue pode ser abstrata ou noH, mas pode imp,ementar RMrias inter)a%es$ A,"m disso, inter)a%es no permitem de%,arao de atributos, enXuanto Xue %,asses abstratas permitem$ Inter)a%es esto mais ,i#adas a %omportamento, enXuanto Xue %,asses abstratas esto mais ,i#adas a imp,ementao$ EG*'(E(,0)' K *e)ina uma %,asse abstrata tipo num"ri%o Xue deRe serRir %omo %,asse base para a monta#em de %,asses %omo a %,asse )rao ou a %,asse nQmero %omp,eLo$ 1ma boa 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 bem 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 base abstrata$ 3.3.1. CLASSE ABSTRATA ITERADOR Neste eLemp,o iremos %riar uma %,asse base abstrata 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 base abstrata de iteradores$ (er%eba Xue a,#uns m"todos da %,asse base so desproRidos de imp,ementao, por"m nada impede Xue Ro%V %o,oXue %omo %Pdi#o desses m"todos uma mensa#em de erro do tipo 6Erro, m"todo deReria ter sido rede)inido7, mas a#ora o %ompi,ador no pode mais te ,embrar 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 base abstrata no tem a )un%iona,idade de uma %,asse Xue possa estar instan%iada, per%eba a ausVn%ia de um m"todo para aRanar na iteraoH$

-"todo de ini%ia,izao da iterao Retorno do %onteQdo da atua, posio na iterao Atribuio 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 sobre Retores " manter os +ndi%es das iteraWes atua,izados 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)' K *e)ina uma %,asse de nome Arra>)ervices Xue )orne%e serRios para Retores$ Imp,emente os 6serRios7 de' ordenao de subRetor GRetor interno menor ou i#ua, ao Retor em XuestoH , bus%a, tro%a de posiWes, et%$ Esta %,asse opera sobre 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 " traba,0oso, basta Ro%V de)inir para um tipo, depois a,terar sP as partes ne%essMrias e re%ompi,ar para os demais$ (ense %omo )azer a %,asse Arra>)ervices traba,0ar em %onNunto %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 obNeto de uma sub%,asse desta$ (or dinYmi%o entenda em tempo de eLe%uo$ JM dissemos Xue um obNeto de uma %,asse )i,0a #arante no m+nimo o %omportamento 6be0aRiour7 de seu pai$ (or este motiRo podemos atribuir um obNeto da %,asse )i,0a a uma RariMRe, da %,asse pai, mas no o %ontrMrio$ A%op,amento dinYmi%o mostrarM Xue " poss+Re, )azer %om Xue o %ompi,ador eLe%ute a imp,ementao deseNada 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 obNeto de uma sub%,asse G%,asse )i,0aH$ Isto nos permitirM %onstruir ,istas 0etero#Vneas !$!$!$
,"

/azendo uma %omparao %om ,in#ua#ens pro%edurais' O traba,0o do d.nami% bindin# 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 obNetos %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, 6be0aRiour7 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%eber um obNeto 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%eber um obNeto da %,asse pai, porXue os m"todos de)inidos para RariMReis desta %,asse passam a no )azer sentido para o obNeto %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%eber 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 %abe no )i,0o o Xue " Nustamente 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 obNetos Gpai e )i,0oH e )az atribuiWes 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 obNeto desta %,asse " atribu+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: Embora Ro%V seNa %apaz de re%uperar os m"todos e atributos a%res%entados atraR"s do t.pe %astin#, enXuanto isto no )or )eito, estes m"todos e atributos esto ina%ess+Reis$ EG*'(E(,0)/ K Imp,emente em suas %,asses m"todos Xue imprimem uma )rase identi)i%ando o tipo da %,asse, por eLemp,o' 6Eu sou a %,asse %onta %orrente, espe%ia,izao de %onta ban%aria$7
011

4K

-ode,e e imp,emente uma 0ierarXuia de CONTAS BANC;RIAS, use os re%ursos Xue a%0ar %onReniente' %,asses abstratas, inter)a%es, RariMReis stati%$ 5o%V deRe de)inir %,asses seme,0antes as %ontas ban%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 obNetos da %,asse )orma de)inida em !$!C2ASSES ABSTRATAS E CONCRETAS , estes obNetos so retYn#u,os, pontos, et%$ O obNetiRo " mostrar' sub%,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 obNetos #rM)i%os de %,asses 0etero#Vneas$ Trataremos todos de maneira uni)orme, %0amando os m"todos mostra e move$ 5o%V NM Riu nos eLemp,os anteriores %omo re%uperar o obNeto em uma RariMRe, de sua prPpria %,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:' ObserRe Xue a imp,ementao %orreta do m"todo mostra " es%o,0ida em tempo de eLe%uo de a%ordo %om a %,asse do obNeto Xue estM naXue,a posio do Retor$ EG*'(E(,0)/ 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 tPpi%o apresentaremos %on%eitos aRanados da ,in#ua#em, estes %on%eitos so importantes se Ro%V deseNa %riar so)tZares re,atiRamente #randes em Java$ R.1. ATRIB7TOS :<A<IC

At" o momento sP 0aR+amos aprendido %omo de)inir atributos de instYn%ia$ Cada obNeto tin0a seus prPprios atributos e uma modi)i%ao nos atributos de um obNeto no a)etaRa os atributos de outros obNetos$ Neste tPpi%o iremos apreender %omo de)inir atributos de %,asse$ Esses atributos so os mesmos para todos os obNetos, e,es so %omparti,0ados$ 1ma mudana em um destes atributos " Ris+Re, por todos os obNetos instan%iados$ Atributos de %,asse tamb"m so %0amados de atributos static$ Neste eLemp,o de)iniremos uma %,asse robo Xue usa atributos static para saber Xuantos robos )oram %riados Ginstan%iadosH$ 1m outro uso de atributos static seria usar uma estrutura de dados Xue permitisse Xue um robo saber a posioG%oordenadasH dos demais obNetos 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 atributo static, estMRamos nos re)erindo ao sentido #era, de atributo$ Apesar de termos eLemp,i)i%ado %om um inteiro, Ro%V poderia ter usado uma %,asse no ,u#ar desse atributo, tomando o %uidado de %0amar new antes de usMK,o$ 4.2. MQTODOS STATIC

-"todos static tamb"m so %0amados de m"todos de %,asses$ Estes m"todos sP podem operar sobre atributos de %,asses$ Nos NM 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 tPpi%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 atributos static' public static int 73&%int aFint b( ; //ma/imo divisor comum de a e b @ No eLemp,o da %,asse Pracao G $C$ TA* /RAOH, tiRemos Xue ,idar %om o m"todo mdc$ Este m"todo no )azia muito sentido para o usuMrio desta %,asse, embora )osse ne%essMrio para )azer %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 prPpria %,asse Pracao$ A,#u"m ri#oroso poderia ter dito' 65o%V estM errado, mdc no tem nada a Rer %om Pracao e eu Rou imp,ementMK,o em uma %,asse separada %0amada )ervicos7atematicos7$ A min0a resposta a esta a)irmao seria' 6A%0o sua id"ia boa, mas sem o uso de m"todos static na %,asse )ervicos7atematicos, Ro%V Rai ter Xue de%,arar um obNeto da %,asse )ervicos7atematicos dentro de %ada Pracao para poder usar o m"todo mdc$7
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 obNeto robo para apresentar a,#uns desses re%ursos$ Crie ento um pro#rama Xue ,V de um arXuiRo teLto instruWes para este obNeto robo eLe%utar moRimentos na te,a$ 2o#o )oi %riada por um %ientista de %omputao do -IT$ !K 5o%V pode deseNar armazenar 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 armazena#em e para todos obNetos robo instan%iados passe o ponteiro desta %,asse auLi,iar %omo ar#umento do %onstrutor $ Assim esses obNetos podero mandar mensa#ens para esta %,asse de armazena#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' 6C,asse auLi,iar, armazene essa in)ormao para mim7$ 6C,asse auLi,iar, me mande uma mensa#em daXui a %in%o se#undos, estou passando o ponteiro para mim mesmo G thisH7 , 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 obNetiRo' Contar, )azer estat+sti%as das %0amadas de m"todos da %,asse$ 1se o Xue )oi aprendido sobre 6static Rariab,es7 no pro#rama %ontas, o obNetiRo " armazenar in)ormaWes sobre os moRimentos de todas as %ontas num obNeto static$ (ara Xue a modi)i%ao )iXue a %ontento Ro%V pode pre%isar tornar o eLemp,o mais prPLimo 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 armazena#em a#re#ada em %onta, ou no$ Ten0a em mente a Xuesto do taman0o em b.tes do obNeto$ 4.3. TRATAMENTO DE E8CEWES %M,%u,os matemMti%os %omo -*C,

:K

?K

Se os %on%eitos de orientao a obNetos dados at" a#ora )ossem su)i%ientes para mode,ar Xua,Xuer atiRidade ou obNeto do mundo rea,, todos os prob,emas de pro#ramao estariam reso,Ridos$ O%orre Xue o mundo rea, " bem mais %omp,eLo Xue seu pro#rama pode ser$ Nem todos os obNetos e iteraWes entre e,es podem ser mode,ados ou preRistos$ Os me%anismos de tratamento de eL%eWes se en%aiLam Nustamente nessa ,a%una$ O mode,o de tratamento de eL%eWes adotado por Java " muito seme,0ante ao de C]]$ Se Ro%V NM teRe a,#uma eLperiVn%ia %om tratamento de eL%eWes, este tPpi%o serM bastante )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$ /azer uso deste re%urso tornarM seu so)tZare mais robusto, se#uro e bem estruturado$ So eLemp,os de %ondiWes anormais' a%esso a um +ndi%e inRM,ido de um Retor, tentatiRa de uso de um obNeto no ini%ia,izado, )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 obserRado nos de)i%ientes meios de tratamento de erros usados em ,in#ua#ens Xue no )orne%em 6eL%eption 0and,in#7$ Java " uma ,in#ua#em Xue )az )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 b,o%os de %Pdi#o tr> ;@ catch ;@ em pro#ramas anteriores$ 1m dos motiRos de o pro#ramador Java ter Xue saber tratamento de eL%eWes " Xue os m"todos de %,asses de)inidas na ,in#ua#em podem #erar eL%eWes e na maioria das Rezes o %ompi,ador nos obri#a a es%reRer tratadores Gb,o%os tr>;@ catch;@H para %0amadas destes m"todos$ Euando Ro%V )or estruturar seu %Pdi#o dessa )orma, 0aRero duas aWes bMsi%as Xue deRem ser tomadas' ,eRantar GNo#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 6des)eitas7, 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%ebe o nome de' 6termination mode,7, Nustamente por essas terminaWes de m"todos$ -as o Xue " uma No#ar uma eL%eo^ A suspender a eLe%uo do m"todo atua, e passar um obNeto para o b,o%o catch mais prPLimo 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 obNetos, 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 %uNo 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 No#ada e a %,asse de eL%eWes Xue o tratador diz 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 %apaz de tratar todas as eL%eWes Xue esteNam abaiLo de 2/ception Gna 0ierarXuiaH #eradas em tr> ; d$ *ispondo mais de um tratador Gb,o%o %at%0H em seXjVn%ia onde os primeiros sP tratam as %,asses eL%eWes mais baiLas da 0ierarXuia, " poss+Re, es%o,0er Xue %Pdi#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 sP 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 %Pdi#o imediatamente apPs 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 ,iberar re%ursos do sistema GeL$$')e%0ar um arXuiRoH antes do m"todo ser terminado^ A para isso Xue eListe em Java o b,o%o tr>; @ catch;@ finall>;@ Xue no eListe em C]], mas eListe por eLemp,o em -odu,aK!$ A %,Musu,a finall>; @ " op%iona,, seu %Pdi#o Rai ser eLe%utado o%orra ou no o%orra uma eL%eo no b,o%o tr>;@ $ ELemp,o %,Mssi%o de uso do b,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 Nane,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 abstrato 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 apPs ter ,ido os tPpi%os se#uintes$ 4.3.2. $ERANDO S7AS PRXPRIAS E8CEWES O eLemp,o a se#uir ensina %omo traba,0ar %om throw, a pa,aRra %0aRe usada para ,eRantar eL%eWes$ Este eLemp,o se baseia na %,asse Pracao de $C$ TA* /RAO$ Nossa eL%eo serM #erada Xuando nas operaWes de )raWes o%orrer uma diRiso por zero$ Em Java, eL%eWes so instYn%ias de %,asses Xue perten%em a 0ierarXuia Xue " ini%iada, en%abeada, pe,a %,asse Ihrowable$ Neste eLemp,o %onstruiremos nossa eL%eo 0erdando de 2/ception Xue por sua Rez 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: NPs 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 )azer isso$ Outro )ato importante " Xue um b,o%o catch tamb"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 )azer um throw de,a mesma ou mudar a %,asse da eL%eo e %ontinuar propa#ando G throw de outra eL%eoH, ou )azer o Xue Ro%V pode para reparar o erro e No#ar uma eL%eo para Xue o Xue Ro%V )ez seNa %omp,etado por outros m"todos$ 2embreKse Xue se Ro%V pe#ou uma eL%eo, e,a para de propa#ar$ EG*'(E(,0)/ K Imp,emente, tratamento de eL%eWes %omp,eto para o eLemp,o de $C$ TA* /RAO$ Antes )aa um ,eRantamento das eL%eWes Xue podem ser #eradas, ,embre das restriWes matemMti%as para o denominador em uma diRiso$ 2eRe em %onta tamb"m o oRer),oZ de RariMReis int Xue so uma representao %om nQmero de bits )inito da seXuVn%ia dos nQmeros inteiros G%onNunto o da matemMti%aH$ Compare este tratamento %om o de outros pro#ramas por eLemp,o na diRiso por zero, 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 memPria, mas no ne%essariamente$ 2embreKse de en%apsu,amento$ (ro%essos, os aRPs 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 )izemos at" a#ora sP tin0am um Qni%o %amin0o, )io, ),uLo, de eLe%uo$ Nen0um de,es eLe%utaRa duas %oisas Gdois pedaos de %Pdi#oH simu,taneamente$ <rande parte do so)tZare de Xua,idade es%rito 0oNe )az uso de mais de uma ,in0a de eLe%uo, mais de um t0read$ So os %0amados pro#ramas mu,tit0readed$ O seu broZser de 0iperteLto %onse#ue )azer 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 %Pdi#o$ Seu editor estM usando t0reads, essas atiRidades esto sendo )eitas em para,e,o$
01,

Se sua mMXuina sP 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,izardo e sua mMXuina tVm mais de um pro%essador, ento seu ambiente serM %apaz 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" %apaz Xue Ro%V en%ontre um desen0o de um %arrete, de ,in0a ou da ros%a de um para)uso, este nome " bastante )e,iz$ Ima#ine Xue seu pro#rama " %omposto por RMrias ,in0as de eLe%uo Xue )un%ionam em para,e,o Ga,#umas Rezes estas ,in0as podem se Nuntar, outras se diRidirH$ Cada ,in0a de eLe%uo %uida de uma tare)a' trans)erir um arXuiRo, tratar a entrada do usuMrio, mostrar sua Nane,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 Gbem pou%asH )orne%em )a%i,idades para ,idar %om t0reads, eLemp,o' -odu,aK!$Tamb"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, dizer Xue ou seu ambiente 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 bMsi%as de %riar t0reads em Java, usando inter)a%es e usando 0erana$ 1sando 0erana, sua %,asse NM " 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 %uNo 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 abaiLo, ReNa o desen0o ao ,ado$ NPs )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 obri#ados a )azer uma pausa por um interRa,o a,eatPrio at" %omp,etarem : ,oops' B, ,4,!,:$ No )ina,, pedimos ao pro#rama prin%ipa, Xue espere os T0reads terminarem seus %i%,os para se Nuntar 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 )azer ,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 Rez Xue nPs NM )izemos a introduo do assunto$ A,#uns assuntos, a eLemp,o de T0reads eLi#em um %on0e%imento tePri%o )orte, de modo Xue tamb"m a%onse,0amos Xue Ro%V adXuira um ,iRro sobre 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 abaiLo da %,asse T0reads em uma 0ierarXuia, as Rezes " 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 sP tem Xue dizer 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 )az %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 matriz ou )azer o 6espe,0o7 de uma ima#em GXue pode ser representada por uma matrizH so eLemp,os )M%eis de tare)as Xue podem ser diRididas em dois ou mais T0reads$ A ,P#i%o Xue aXui estaremos bus%ando tirar Ranta#em da poss+Re, eListVn%ia de mais de um pro%essador e tamb"m bus%ando ,iberar o T0read prin%ipa, dessa %omputao, para Xue e,e possa )azer 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 matriz Xue Rai armazenar o resu,tado, a re)erVn%ia para a matriz ori#ina, e os Ra,ores Xue indi%am em Xue Mrea da matriz este T0read deRe traba,0ar$ (or eLemp,o' no %aso da inRerso da ima#em um T0read traba,0aria em uma metade e o outro na outra metade$ Seria interessante imprimir na te,a os instantYneos da matriz resu,tado para Ro%V Rer o traba,0o sendo )eito em para,e,o$ 4.4.2. PENSANDO M7LTITHREADED Este tPpi%o dis%ute a,#uns dos prob,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 prob,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 b.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 b,oXueado porXue estM esperando o te%,ado ou o dis%o enXuanto poderia estar tentando transmitir parte de seu bu))er pe,a rede$ (ara ta, Ro%V diRidiu o seu pro#rama em dois t0reads Xue )i%am repetindo o mesmo %onNunto de aWes' T0read A, En)i,eirando Ra,ores do te%,ado G2eituraH' K2V Ra,or do )onte$ 4KConsu,ta o nQmero de e,ementos da )i,a$ !KSoma 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' KConsu,ta o taman0o da )i,a se )or maior Xue zero eLe%uta prPLimo passo 4KRetira e,emento da )i,a$ !K*e%rementa %ontador de e,ementos$ Os seus t0reads podem no rodar em interRa,os de)inidos, re#u,ares de tempo$ A,#uns prob,emas podem sur#ir pois a mesma re#io de memPria " a%essada por dois ),uLos de eLe%uo distintos Xue podem ter eLe%utados apenas a,#uns de seus 6passsos7' public class IhreadA ; //5eitura while %:fim5eitura( ; 2nfileraTm%(. public class IhreadE ; //2scrita while %:fim2scrita( ; 2screve%3esenfileraTm%((.
003

@ @ @

Atributo No e,ementos ! o 1KConsu,ta N e,ementosKKKKK ! 2KIn%rementa No e,ementosKK : $ : $ : $ ! $ ! T0read A

/i,a' T0read B pK_*`K_R`K_O`Kp $ pK_*`K_R`K_O`Kp $ 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 pK_*`K_R`Kp KKK*e%rementa No e,ementosKI pK_*`K_R`Kp $

A seXuVn%ia de operaWes 1,2,3,4,I %orrompe o estado de sua estrutura de dados$ Se um sP t0read estiResse eLe%utando sobre a mesma estrutura, ainda assim poderiam tamb"m 0aRer momentos em Xue o atributo nQmero de e,ementos no re),ete eLatamente Xuantos esto na )i,a, mas isso ,o#o seria %onsertado$ SP Xue %om dois t0reads, um outro t0read pode usar essa in)ormao in%onsistente sem Xue 0aNa tempo para e,a ser reparada$ Seu pro#rama pode )a,0ar Xuando Ro%V tentar retirar um e,emento de uma )i,a Razia$ 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 prPLimo %i%,o e Ri%e Rersa, ou seNa os %i%,os teriam Xue ser sin%ronizados, o%orrer um apPs 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 dizer Xue %ada %i%,o %ompWe um %onNunto de aWes indiRis+Re,$ A#ora Xue Ro%V NM sabe a so,uo, basta saber %omo imp,ementMK,a$ Os m"todos 2nfileraTmGHa e 3esenfileraTmGHa deRem ser espe%i)i%ados %omo sin%ronizados$ ERite espe%i)i%ar m"todos muito #randes %omo sin%ronizados, 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 sP deRe se preo%upar %om a sin%ronizao dos m"todos do seu pro#rama$ Os m"todos e as %,asses da ,in#ua#em NM so es%ritos para serem 6T0read sa)e7, o Xue #erou muito traba,0o para os pro#ramadores do 6JaRa team7$ $$COMEN<ARIO: A%abamos a#ora o tPpi%o sobre t0reads e tamb"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 NM pronta em um t0read, ,embreKse 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 distribu+dos, et%$ O importante " Xue para todos estes assuntos, Ro%V Rai ter Xue saber as t"%ni%as ensinadas neste teLto$

005

2.,(* '*;,)),?0/
A
A%op,amento dinYmi%o de mensa#ens$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$39 A#re#ao$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!:, !? A,o%ao$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ de matrizes$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9B de obNetos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 9 App,ets$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ de)inio$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C Ar#umentos de ,in0a de %omando$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:9 ArXuiRos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ estrutura de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C AtribuiWes entre %,asses$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$3@ Atributo$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Atributos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ : a%esso de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ @ de %,asse$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B! de instYn%ia$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ : de%,arao de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 9 disposio das de%,araWes de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$43 en%apsu,amento de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?B, ? Atributos e m"todos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4B (to-oRe$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9@, @ , @: (toRe),ete$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9@, @4, @: Reta$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?!, ?C Retan#u,o$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$3 Retan#u,o, eL$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@B Robo$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B! Strin# Bu))er$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C3 C,asses$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ atribuiWes entre$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$3@ e %omportamento$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C en%apsu,amento de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?9 C,asses Abstratas$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@, 3 , 3: C,asses Abstratas I Inter)a%es$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$3! C,asses e ObNetos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$3 Coero$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 Co,eta automMti%a de ,iLo$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!9, C Co,eta AutomMti%a de ,iLo$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 9 Comparao$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ %om (as%a,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$49 entre obNetos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!3, :B, :4, :! Compi,ao$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 4 Compi,adores$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C Comp,eLidade, ,idando %om$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9C Comportamento$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C , 3@ Con%eitos aRanados$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B! Con%orrVn%ia$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@ Constantes ,iterais$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 Construtores$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!4, !! de %opia$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@ e a#re#ao$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!:, !? e 0erana$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$99 Contas ban%Mrias$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B Contas ban%Mrias, eLer%+%io$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B ConRerso$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ de Strin#s para inteiros$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:C de tipos bMsi%os$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4B, :C ConRerso $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ de Strin#s para inteiros$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:@ Copia de obNetos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!3, :B, :4, :! Cop. %onstru%tors$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@ Cop.ri#0t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:

Ba%Sspa%e %ara%tere espe%ia,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 Ban%os de dados G%uriosidadeH$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9C Basi%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C B,o%os de %Pdi#o$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ : boo,ean$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 BroZsers$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9 Bus%a de pradWes em teLto$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C3 b.te$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 B.teK%ode$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9

C
C, di%a aos pro#ramadores$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$3 Capa%idades da ,in#ua#em$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9 Cara%teres espe%iais$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 Cara%teres 1NICO*E$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 Cara%ter+sti%as da ,in#ua#em$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9 Carria#e return, %ara%tere espe%ia,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 Case, )erramentas$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B %at%0$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B? Riso #era, sobre$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:C %0ar$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 %,ass$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 4 C,asse$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Cir%u,o$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ :, C, 9, 4:, 49, 4@ Contador$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4B, 4 *ataInputStream$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:? Espe%i)i%ando uma$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$3 De,,oInternet$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 4 motor$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$3 -ouse$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$! (onto$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!4, !! Reta$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!:, !? Reta eL$ :$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!: TraRa$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4C, 49 5etor 4*, eL$ !$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!: Arra.SerRi%es, eL$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$39 Cir%u,o$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?!, ?? de obNetos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!3, :B, :4, :! EL%eption$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B9, B3, , 4 /orma$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$3 /orma, eL$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@B /ra%ao$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C4, C?, @3 Iterador$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$3: 2ista$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?9, ?3 -atriz4*Int$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9B, 9: No$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?9, ?3 (onto$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?B, ?!, ?:, 99, @ , @:, 3 (onto, eL$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@B

*
*ata 0idin#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:@ *ebu##in#, di%a de pro#ramao$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9: *estrutores$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!C *ia#ramao do teLto$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$? *iretPrios, or#anizao de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C doub,e$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4B *.nami% bindin#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$39

E)i%iVn%ia$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@, ! Ei))e,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ , !, : En%apsu,amento$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:@ de atributos e m"todos %om pa%Sa#es$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?! de %,asses$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?9 de m"todos e atributos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:@ e 0erana$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@B e pa%Sa#es$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?4 modo pa%Sa#e$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:3 reRiso )ina,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@! Espe%ia,izaoT<enera,izao$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9C Eu%,ides$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C! EL%eWes$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #erandoKas$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B@ tratamento de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B? tratando$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B? ELpoentes em tipos nQmeri%os$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4B

/
/erramentas %ase$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B

006

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

< D

<enera,izaoTEspe%ia,izao$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9C De,,o Internet$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Derana$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9C e %onstrutores$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$99 e en%apsu,amento$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@B e inter)a%es$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@9 mQ,tip,a$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@? DierarXuias$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ de tipos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9C simp,es$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9C Domepa#e$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Nets%ape$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9 Sun$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C tutoria,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?

destrutores$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!C disposio das de%,araWes de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$43 en%apsu,amento de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?B Xuais e %omo de)inir, eLer%+%ios !,:,?$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4? rede)inio de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@: Rede)inio de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@ sintaLe de de%,arao de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$44 sobre%ar#a de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@ stati%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B: m"todos e atributos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4B -odu,o, resto da diRiso, ReNa m$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C!

N O

NQmeros %omp,eLos, eL$ 4$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C9 NQmeros ra%ionais$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C4 ObNetos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ %omparao de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!3, :B, :4, :! %opia de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!3, :B, :4, :! determinao da %,asse de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!3, :B, :4, :! a,o%ao de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 9 ini%ia,izao de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 9 OO-* ObNe%t Oriented -ode,in# and *esi#n$$$$$$$$$$$$$$$$$$$$ B Operador$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ sobre%ar#a de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$3 Operadores$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ sobre%ar#a de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@ Ordenao, eL$ !$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9? Orientao a obNetos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$3

Imprimindo$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ na te,a$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ @ tipos bMsi%os na te,a$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ @ In%,udes$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C InstYn%ias$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ int 3 Inter)a%e$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ImprimiRe,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@C Inter)a%es$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@? e 0erana$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@9 uma a,ternatiRa para 0erana mQ,tip,a$$$$$$$$$$$$$$$$$$$$$$$$$$$$@? Inter)a%es #rM)i%as$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$43 Inter)a%es I C,asses Abstratas$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$3! Internet e R+rus$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9: Introduo$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?

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

-a%TOs$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9 main$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ! -MXuinas de estado$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$44 -ar%as re#istradas$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$: -atriz$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ representao ,inear de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9B -atrizes$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!@ -MLimo diRisor %omum$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C! -*C, -aLimo diRisor %omum$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C! -ensa#ens$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4B a%op,amento dinYmi%o de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$39 -etain)ormao, ReNa stati%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B! -"todos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ %0amada de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$44 %onstrutores$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!4 Construtores$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!! #eren%iamento de %0amadas pe,o %ompi,ador$$$$$$$$$$$$$$$$$$4? retornando Ra,ores$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4C a%esso de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ @ %0amando m"todos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$43 de %,asse$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B!, B:

(a%Sa#e$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ <eometria$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?! (a%Sa#es$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?4, ?C e en%apsu,amento de %,asses$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?9 e estruturas de diretPrios$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$?! Riso #era, sobre$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$::, :? (as%a,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$43 %omparao %om$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$49 (,ata)ormas$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C (ointers$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!9 (o,imor)ismo$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@ de in%,uso$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@, B (onteiros$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!9 (onto ),utuante$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 priRate$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:3, ?B e 0erana$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$93 (ro%edimentos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$! ausVn%ia de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ (ro#rama, Comparao$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$43 prote%ted$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:3, @B pub,i%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:3, ?B, ?

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

Se#urana, Cara%ter+sti%as da ,in#ua#em$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@ Seno$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!: S0oppin# ,ist approa%0$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ para a %,asse -atriz4*Int$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9 S0oppin# 2ist Approa%0$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C4 s0ort$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 Sistemas distribu+dos$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@ Sobre%ar#a$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@, 3 So,aris$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9 stati%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B! Streams$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Riso #era, sobre$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:? Streams, Riso #era, sobre$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$::

00"

Strin#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!4 mat%0in#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9B Strin#Bu))er$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C3 Strin#s$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ %onRerso de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:C de)inio de$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C9 Sub%,asses, Super%,asses e %omportamento$$$$$$$$$$$$$$$$$$$$$$$$$$3@ Sun$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$: S.stem$in$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$::

tr. BC Riso #era, sobre$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:C t.pe %ast$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4B T.pe Cast$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ e %,asses$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ BB

1 5

1NICO*E$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 5a,ores ,iterais$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 5etores$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!@, !3 %omprimento de G,en#0tH$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:@ 5+deo$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ es%reRendo no$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ @ 5+rus$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ de %omputador$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9: Roid$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ! 5o,umes I, II, III$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C

Tabu,ao %ara%tere espe%ia,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 TA*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C /ra%ao$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C4 Te%,ado$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ,endo do$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:!, :: TeLto$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ReNa Strin#s$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C9 t0is$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$44 T0reads$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@ Tipo$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ %0ar$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 Tipo abstrato de dados$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$C Tipos bMsi%os$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3 Tratamento de eL%eWes$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ B?

U m

UindoZs$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$9 Zrappers$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!9, :9 m, operador de resto da diRiso$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$44

e e$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ C, @

00#

B,@>,0+'&4,&/ A,#uns dos tutoriais aXui men%ionados se tornaro ,iRros, de modo Xue " importante Xue Ro%V )aa uma bus%a pe,os nomes dos autores tamb"m$ _ ` _4` _!` _:` _?` _C` _9`
Rumbau#0, B,a0a -$, (remer,ani U$, Edd. /$ [ 2orensen U$ , JVb!ectQVriented 7odelin$ and 3esi$nK. (renti%e Da,,, 33 $ >erni#0am Brian U$ , Rit%0ie *ennis -$ , 6T0e C (ro#rammin# 2an#ua#e7 , En#,eZood C,i))s, N$J$'(renti%eK Da,, In%, 39@ Rubira, C$-$/$ 6Stru%turin# /au,tKTo,erant ObNe%t Oriented S.stems 1sin# In0eritan%e and *e,e#ation7, (0$*$ T0esis, *epartment o) Computin# S%ien%e, 1niRersit. o) NeZ%ast,e upon T.ne, O%tober 33:, see C0apter 4$ 2ema. 2aura, (erSins C0ar,es 2$, 6Tea%0 =ourse,) JA5A in 4 da.s7, samsnet, 33C Ran Do)) A$, S0aio S$, Starbu%S O$, Sun -i%ros.stems In%, 6DooSed on JaRa7, AddisonKUes,e., 33C Daro,d E,,iotte Rust., 6BreZin# JaRa' A Tutoria,7, 0ttp'TTsunsite$un%$eduTNaRa)aXTNaRatutoria,$0tm, Campione -ar., Ua,rat0 >at0., 6T0e JaRa Tutoria,\, ObNe%tKOriented (ro#rammin# )or t0e Internet7, 0ttp'TTZZZ$aZ$%om$T%pTNaRaseries$0tm,

00,

Você também pode gostar