Sei sulla pagina 1di 135

Introduo a programao orientada a objeto

Java e DBDesigner

Verso 2010 / 2011 Fortaleza, Julho de 2011

Introduo a programao em java Caroaluno(as),sejambemvindo(as)!

Essa apostila tem como objetivo ajudar ao aluno na disciplina de Introduo a Programao OrientadaaObjetosdonossocurso,vistoqueorequisitobsicoparaquesepossaalcanartodosos objetivos do nosso curso nesta disciplina que o aluno tenha passado pela disciplina de Introduo a Lgica de ProgramaoparaComputadores.Masnonosatearemos em barrlos, sem o prrequisito bsico, isso porque confiamoseacreditamosnacapacidadedosnossosalunos que com muita fora, dedicao e vontade de vencer na vida,conseguirultrapassarqualquer preconceitocontrao acessoaoconhecimentotecnolgico. Onossoobjetivoprincipalcomestematerialcapacitaro alunoparaumentendimentocriticoarespeitodoParadigmadeProgramaoOrientadaaObjetos. Vistoqueumadastendnciadomercadousaresseparadigmanodesenvolvimentodesistemasem geral. AliadoaoSoftwareLivrequeumatendnciaeumaalternativaparaomundocorporativonoque serefereasoftwares,equetambmtemsidoatualmentedesenvolvido por programadores espalhados ao redor mundo, sendo que boa parte dessastecnologiasvemsendodesenvolvidasutilizandoferramentaslivres namaioriadeseusprojetos,contribuindoparaosavanosecolaborando paraoacessodemilharesdepessoasasinclusesdigitaisnoquetangeas tecnologiasdainformaonomundo.Daremostambmanossadisciplina umanfasemaiornousodessetipodetecnologia,passandoparaosnossosalunosummodeloe umaalternativafantstica,queautilizaodasferramentaslivresdisponveisnainternet. Primeiramentevamosestudarumpoucosobreahistriadalinguagemdeprogramaojavaque iremosutilizarnanossadisciplina.Relatamosascaractersticasprincipaisdalinguagemquepara muitosainda desconhecido, ouseja,conheceraferramenta antesdedominla deextrema importnciaparaosfuturosprogramadores. Obrigado professor! Eu sou o Tutor e os ajudarei, respondendo as perguntas que forem surgindo ao longo do nosso curso, mas, algumas dessasperguntasdirijaseaoInstrutorquedeverauxiliarmeuscolegas desala,osalunos! Alisprofessor,porondecomearemosaestudarjava?Nosdumadica! Calma!Muitacalmameuscolegas.Porqueoejavashowaindavaicomear. Apresentaremosnestaapostila,nofinaldecadacaptuloumalistacom exerccios,quemuitasvezessoaparentementerepetitivoseatmesmo redundantes.Issoproposital:Seoestudanteconseguirresolverumdos exercciosaparentementerepetidos,poderdeduzirasoluodeoutros maisfacilmente.Acriaodessesexercciosfacilitaacriaopelo instrutordelistasdeexercciosdistintasecomplementares. Claro!Comearemosaestudarsobreosfundamentosdeprogramaoefalaremosemseguidasobre asestruturasbsicasdalinguagemjava.

Projeto Ejovem Mdulo II

Java

Captulo1. Oquealinguagemjava.
Bemvindosaofuturo!Javanosomenteumalinguagemdeprogramao,massimuma tecnologiaquetemcomoobjetivoconstruirprogramasquepossamserutilizadosemqualquer plataformaoucomputador,comomnimopossveldedependnciacomumsistemaoperacionalou ambientededesenvolvimento.JavapossuiumasintaxeextremamentesimilardoC++,ecom diversascaractersticasherdadasdeoutraslinguagens,comoSmalltalkeModula3.antesdetudo umaboalinguagem,simples,comumambientedeexecuodealtaqualidadeeumavasta bibliotecadeclassesdisponveis.EssacombinaoquetornaJavaumapropostairresistvelpara tantosprogramadores.Almdecontarcomasseguintescaractersticas,totalmenteorientadaa objetos,fortementetipada,independentedearquitetura,robusta,segura,portvel,bemestruturada, suportaprogramaodistribuda,multithreadedecontacomgarbagecollection.

1.1. Histricodalinguagem.
Em 1991, na empresa Sun MicroSystems, foi iniciado o Green Project, o bero do Java uma linguagemdeprogramaoorientadaaobjetos.OsmentoresdoprojetoeramPatrickNaughton, MikeSheridan,eJamesGosling.Oobjetivodoprojetonoeraacriaodeumanovalinguagemde programao,masantecipareplanejaraprximaondadomundodigital.Elesacreditavamque em algum tempo haveria uma convergncia dos computadores com os equipamentos e eletrodomsticoscomumenteusadospelaspessoasnoseudiaadia. JamesGoslingespecificouumanovalinguagemdeprogramaoparaoseunovoprojetoedecidiu batizladeOak,quequerdizercarvalho,umarvorequeelepodia observar quando olhava pela sua janela. O prximo passo era encontrarummercadoparao*7.Aequipeachavaqueumaboaideia seriacontrolartelevisesevdeopordemanda comoequipamento. ElesconstruramumdemochamadoMovieWood,masinfelizmenteera muitocedoparaqueovdeopordemandabemcomoasempresasde TV acabopudessemviabilizaronegcio. Aideia queo*7tentava vender, hoje j realidade em programas interativos e tambm na televisodigital.Permitiraotelespectadorinteragircomaemissorae com a programao em uma grande rede a cabos,era algo muito visionrio e estava muito longe do que as empresas de TV a cabo tinhamcapacidadedeentenderecomprar. Oprottiposechamava*7(leiaseStarSeven),umcontroleremoto com uma interface grfica touchscreen. Para o *7 foi criado um mascote, hoje amplamente conhecido no mundo Java, o Duke. O trabalho do Duke no *7 era ser um guia virtual ajudando e ensinando o usurio a utilizar o equipamento. O *7 tinha a habilidadedecontrolardiversosdispositivoseaplicaes. Aideiacerta,napocaerrada.AsortequeobomdaInternetaconteceu,erapidamenteuma granderedeinterativaestavaseestabelecendo.Eraestetipoderedeinterativaqueaequipedo*7 estava tentando vender para as empresas de TV a cabo. E, da noite para o dia, no era mais necessrioconstruirainfraestruturaparaarede,emumgolpedesorte,elasimplesmenteestaval. GoslingfoiincumbidodeadaptaroOak paraaInterneteemjaneiro1995foilanadaumanova versodoOakquefoirebatizadaparaJava.AtecnologiaJavatinhasidoprojetadaparasemover pormeiodasredesdedispositivosheterogneos,redescomoaInternet.Agoraaplicaespoderiam serexecutadasdentrodosBrowsersnos AppletsJava etudoseria disponibilizadopela Internet instantaneamente. Foi o esttico HTML dos Browsers que promoveu a rpida disseminao da dinmicatecnologiaJava.Avelocidadedosacontecimentosseguintesfoiassustadora,onmerode usurioscresceurapidamente,grandesplayers,comoaIBManunciaramsuporteparaatecnologia Java.

Projeto Ejovem Mdulo II

Java

1.2. Usodalinguagemnomercadoatualmente(especificaodas tecnologias).


Desdeseulanamento,emmaiode1995,aplataformaJavafoiadotadamaisrapidamentedo quequalqueroutralinguagemdeprogramaonahistriadacomputao.Em2003Javaatingiua marcade4milhesdedesenvolvedoresemtodomundo.Java continuouecontinuacrescendoe hojecomcerteza umpadro paraomercadooferecendoqualidade,performanceesegurana ainda sem nenhum competidor a altura. Atualmente Java a escolha para construir sistemas robustos,confiveisedistribudos,rodandodesdegrandesservidores,porissotornousepopular pelo seu uso na Internet e hoje possui seu ambiente de execuo presente em web browsers, mainframes,SOs,celulares,palmtopsecartesinteligentes,entreoutrosdispositivos.

1.3. Principaiscaractersticasdalinguagemdeprogramaojava
ORIENTAOAOBJETOS: Javaumalinguagemorientadaaobjetosqueseguealinhapurista iniciadapor Smalltalk queconsideradapuramenteO.O equetudonestasoobjetos.Coma exceodostiposprimitivosdalinguagem(char,int,float,etc.),amaiorpartedoselementosdeum programajavasoobjetos. Noqueregeesseparadigma,oprojetoorientadoaobjetos uma tcnicadeprogramaoqueseconcentranosdados(=objetos)e nasinterfacesparaesteobjeto.Ocdigoorganizadoemclasses, quepodemestabelecerrelacionamentosdeheranasimplesentre si,somenteaheranasimplespermitidaemjava.Humaformade"simular"heranamltiplaem Javacomousodeinterfaces. SIMPLICIDADE: Java muito parecida com C++, mas muito mais simples. Java no possui sobrecargadeoperadores,structs,unions,aritmticadeponteiros,heranamltipla,arquivos.h, diretivas de prprocessamento e a memria alocada dinamicamente gerenciada pela prpria linguagem,queusaalgoritmosdegarbagecollectionparadesalocarregiesdememriaqueno estomaisemuso.OutroaspectodasimplicidadedoJavaotamanhopequeno.Umdosobjetivos do Java permitir a construo de software que possa rodar independentemente em qualquer mquinadepequenoporte.Otamanhodointerpretadorbsicoedosuporteaclassesdecercade 40K bytes; adicionando as bibliotecas bsicas padro e o suporte a linhas de execuo (essencialmenteummicrokenelautocontido),tmseoutros175K. SEGURA:Javafoielaboradaparaserusadaemambientesderededistribuda,por isso permite a construo de sistemas livres de vrus e intruses. A presena de coleta automtica de lixo, evita erros comuns que os programadores cometem quandosoobrigadosagerenciardiretamenteamemria(C,C++,Pascal). A eliminaodo uso de ponteiros, em favor do uso de vetores, objetos eoutras estruturassubstitutivas trazbenefciosemtermosdesegurana.Oprogramador proibidodeobteracessoamemriaquenopertenceaoseu programa,almde no ter chances de cometer erros comuns tais como reference aliasing e uso indevido de aritmticadeponteiros.Estasmedidassoparticularmenteteisquandopensarmosemaplicaes comerciaisdesenvolvidasparaainternet. ROBUSTA: Java foi elaborada para a produo de programas que devam ser confiveisem vriossentido. Java pebastante nfase na verificaorpida de possveisproblemas,naverificaodinmicaposterior(emtempodeexecuo),e emeliminarsituaespropensasaerros.AprincipaldiferenaentreJavaeC/C++ que Java possui um modelo de ponteiros que elimina a possibilidade de sobrescreveramemriaecorromperdados. PROCESSAMENTO DISTRIBUDO: A linguagem de programao Java possui uma extensa bibliotecaderotinasparalidarcomprotocolosTCP/IP ,comoHTTPeFTP .AsaplicaesJavapodem abrireacessarobjetosatravsdaredeviaURLs,comamesmafacilidadecomqueacessaumsistema dearquivoslocal.
Projeto Ejovem Mdulo II

Java

MULTITHREADING: Mltiplas linhas de execuo. Em Java uma surpresa agradvel e fcil. Linhas de execuo em Java podem tambm beneficiarse de sistemas multiprocessadores se o sistemaoperacionaldebaseofizer.Oladoruimqueasimplementaesdelinhasdeexecuonas plataformasmais importantes diferem radicalmente, eo Java nofaz nenhum esforopara ser neutroemrelaoasplataformasnesseaspecto.Somenteocdigoparachamaro multhreading permaneceomesmoparatodasasmquinas. EXCEES: Todoprogramadoremgeralestbastanteacostumadocomocomputador"travando" porcausadeumerroemumprograma.EmC++,porexemplo,asimplestentativadeaberturade umarquivoinexistentepodeobrigaraoprogramadorareiniciarocomputador.ProgramasJava, contudo, no "do pau" no computador, j que a mquina virtualJava faz uma verificao em tempodeexecuoquantoaosacessosdememria,aberturadearquivoseumasriedeeventosque podemgeraruma"travada"emoutraslinguagens,masquegeramexceesemprogramasJava.Em geral,aoescreverprogramasJavautilizandose deheranadeclassespredefinidas,forase em geralaoprogramadorescreveralgumasrotinasdetratamentodeexceo,umtrabalhoque,sede inciopodeparecerforado,irpouparoprogramadordebastantedordecabeanofuturo. GARBAGE COLLECTOR: Em Java, os programadores no necessitam preocuparse com o gerenciamento de memria como em C++. Em C++, todo bloco de memria alocado dinamicamente (com new, malloc ou funo similar) deveria ser liberado quando no fosse mais usado (com free, delete e parentes prximos). Isso acarretava diversos problemas mesmo ao programador mais experiente, que tinha que manter sempre um controle das reas de memria alocadas para poder liberlas em seguida. Java, ao contrrio, utilizase de um conceito j exploradopelalinguagemSmalltalk,queode garbagecollection (coletade lixo). Sua funo a de varrera memria de temposem tempos, liberando automaticamenteosblocosquenoestosendoutilizados.Seporumladoisso podedeixaroaplicativoumpoucomaislento,pormanterumathreadparalela que dura todo o tempo de execuo do programa, evita problemas como refernciasperdidaseavisosdefaltadememriaquandosabesequehmegas emegasdisponveisnamquina. COMPILADAEINTERPRETADA:UmadascaractersticasdeJavaquetornouaidealparaseuuso na elaborao de aplicativos distribudos foi a sua independncia de plataforma. Isso porque o compilador gera um formato de arquivo de objetos neutro em relao a arquitetura,o cdigo compiladoexecutvelemvriosprocessadores,desdequehajaapresenadosistemaemtempo deexecuoJava.Ocompiladorjavaconsegueissogerandoinstruesbytecodequenotemnada avercomumaarquiteturacomputacionalespecfica.Aocontrrioelessoelaboradosparaserde fcil interpretao em qualquer mquina e de fcil traduo para cdigo de mquina nativo imediatamente. MQUINAVIRTUAL: umamquina imaginriaqueimplementadaatravsdeumsoftware emuladoremumamquinareal.

Projeto Ejovem Mdulo II

Java

A JVM prov especificaes de plataforma de hardware na qual compilase todo cdigo de tecnologia Java. Essas especificaes permitem que o software Java seja uma plataforma independentepoisacompilaofeitaporumamquinagenricaconhecidacomoJVM. PORTVEL:AocontrriodoCeC++queno existemaspectosdaespecificaoquesejam dependentesdaimplementao.Ostamanhos dostiposdedadosprimitivossoespecificados, bemcomoocomportamentodaaritmtica neles.PorexemploemJavaumintsempre umnmerointeirode32bits,enquantoqueem C/C++,intpodesignificaruminteirode16 bitsouuminteirode32bits.Comotamanho fixoparatiposnumricoseliminaseacausade grandedoresdecabearelacionadasa portabilidade.Aportabilidadeemjava atingidaatravsdautilizaodebytecodes. Bytecodeumformatodecdigo intermedirioentreocdigofonte,otextoque oprogramadorconseguemanipular,eocdigo demquina,queocomputadorconsegue executar.NaplataformaJava,obytecode interpretadoporumamquinavirtualJava.AportabilidadedocdigoJavaobtidamedidaque mquinasvirtuaisJavaestodisponveisparadiferentesplataformas.Assim,ocdigojavaquefoi compiladoemumamquinapodeserexecutadoemqualquermquinavirtualJava, independentementedequalsejaosistemaoperacionalouoprocessadorqueexecutaocdigo. JAVAEAINTERNET:Osprogramasjavaquerodamempginaswebsochamadosapplets.Para usarapplets,vocprecisadeumnavegadorwebhabilitadoparaJava,oqualexecutarosbytecodes
Projeto Ejovem Mdulo II

Java

paravoc.Emparticularservidoresdeaplicaopodemusarascapacidadesdemonitoramentoda mquinavirtualjavapararealizaroequilbrioautomticodecarga,controledeconexesabanco dedados,sincronizaodeobjetos,desligamentoereinicializaoseguros,almdeoutrosservios necessriosparaaplicaesescalveisdeservios,masquesonotoriamentedifceisdese implementarcorretamente.Emjava,possvelescreveraplicaescompletas,inclusiveacessando bancosdedadosrelacionaisindependentementedoservidorweb,bemcomopossvelimplementar osnveisdeinterfacecomousurioedelgicadonegocio,utilizandoumservidordebancode dadosparaimplementaronveldeacessoaosdados.

Distribuiodatecnologiajava:OJ2SE(Java2StandardEdition)ouJavaSEumaferramenta dedesenvolvimentoparaaplataformaJava.Elacontmtodooambientenecessrioparaacriaoe execuodeaplicaesJava,incluindoamquinavirtualJava(JVM),ocompiladorJava,asAPIsdo Javaeoutrasferramentasutilitrias. JME,javaPlataforma,MicroEdition(JavaME),aindaconhecidaporJ2ME, umatecnologiaque possibilita o desenvolvimento de software para sistemaseaplicaes embarcadas, ou seja, toda aquelaquerodaemumdispositivodepropsitoespecfico,desempenhandoalgumatarefaqueseja tilparaodispositivo. aplataformaJavaparadispositivoscompactos,comotelemveis,PDAs, controlesremotos,eumaoutragamadedispositivos. JavaEE(ouJ2EE,ouJava2EnterpriseEdition,ouemportugusJavaEdioEmpresarial)uma plataforma de programao de computadores que faz parte da plataforma Java. O JEE (Java Enterprise Edition) aplataforma Java voltada para redes,internet, intranetseafins. Assim,ela contmbibliotecasespecialmentedesenvolvidasparaoacessoaservidores,asistemasdeemail,a banco de dados,etc. Por essas caractersticas,o JEE foi desenvolvido para suportar uma grande quantidadedeusuriossimultneos. AplataformaJEEcontmumasriedeespecificaes,cada umacomfuncionalidadesdistintas.Queso:

JDBC(JavaDatabaseConnectivity),utilizadonoacessoabancodedados. JSP(JavaServerPages),umtipodeservidorWeb.Osservidoreswebsoasaplicaesque permitemavocacessarumsitenainternet. Servlets, para o desenvolvimento de aplicaes Web,isto ,esse recurso "estende" o funcionamentodosservidoresweb,permitindoageraodecontedodinmiconossites.

1.4. Ambienteseferramentasdedesenvolvimentocomjava.
Atecnologiajavafornececomoambientededesenvolvimentoumgrandeconjuntodeferramentas queengloba:umcompilador,uminterpretador,umgeradordedocumentao,ferramentade empacotamentodeclassesdearquivoseoutros.

Projeto Ejovem Mdulo II

Java

1.4.1. InstalaodoJDKouSDKeJREesuasconfiguraes. ASunaempresaproprietriadoJavaqueatualmentepertenceaempresa(Oracle).Ela disponibiliza,basicamente,duasversesdesuamquina virtual:oJRE(JavaRuntimeEnvironment)eJDK(Java DevelopmentKit).OJREcontmamquinavirtualque permiterodarprogramasfeitosnalinguagemJavaem umamquina.OJDK,porsuavez,umpacotepara desenvolvedoresprogramaremsuasaplicaesemJava, possuindovriosutilitrios,inclusivecompiladore bibliotecas.UmadasversesmaisusadasdoJavafoia 1.4.x,quepossuainclusiveumvisualumpouco(paraser modesto)rstico.MaisparafrenteaSunlanouaverso 1.5.0,comvriasmelhoriasemtermosdeprogramaoe umvisualumpoucomelhor.Foilanadoemdezembrodo de2006oJava1.6.0,conhecidotambmcomoJava6, quetrouxe,finalmente,umaintegraototalcomo desktopemtermosvisuais,evriasmelhoriastambm paraquemprogramador. Mustangonomedadoparaanovaverso6deJava,quesaiunofinaldoanopassado.Entreas novidadesmaisconhecidasestoosuportealinguagensdescript,melhoresferramentasparao monitoramentodeaplicaesJavaemaisintegraocomosistemaoperacional.Masoqual realmenteadiferenaentreoJDKeJavaSDK?:Okitdedesenvolvimentoparajava(Software DevelopmentKit).Tratasedeumconjuntodesoftwaresparaprogramadoresemjavaquevocno precisainstalarsesuaintenoforapenasusarosprogramasfeitosemjava.Pararodaros programasemjavabastainstalaroJRE(JavaRuntimeEnvironment). http://www.guiadohardware.net/tutoriais/javalinux/

1.5. Meuprimeiroprogramaemjava
Como java uma linguagem que primeiramente compilada e em seguida interpretada. Para compilareexecutarumprogramaescritonessalinguagemdevemosoprimeiroconstruiroarquivo comoocdigofonte,quedevetercomoextenso.java. Quenocasodoexemplooarquivofoi chamadodeHelloWorld.java.Emseguida,ocdigofonte compiladoeumprogramafonteem bytecodes(HelloWorld.class)gerado.Duranteacompilao,humachecagemdeerrosdocdigo fonte.Ofonteembytecodesssergeradosenenhumerrotiversidodetectado.Porfim,qualquer dispositivo que execute java ser capaz de interpretar este novo arquivo fonte e executar a aplicao.Osbytecodessolidoseexecutados(ouseja,interpretados)pelaMquinaVirtualJava (JVMJavaVirtualMachine)emumcomputador,emumcelular,etc.,almdeseremindependentes deplataforma. A gerao dos bytecodes ou, para o exemplo,doarquivoHelloWorld.class feita a partir da execuo do comando javac HelloWorld.java. Ento, o prximo passo fazer com que a JVM execute o arquivo HelloWorld.java,atravsdocomando javaHelloWorld.class.Dessamaneira,aJVMtraduzocdigocompiladoparaumalinguagemque amquinaentendaeoprogramaexecutado,poristoosprogramasemjavapodemexecutarem qualquerplataformadehardwareousoftwarequepossuaumaversodaJVM.AMquinaVirtual javadefinidacomoumamquinaimaginriaimplementadaatravsdaemulaoemumsoftware executado em uma mquina real. Ela possui uma arquitetura que permite garantir segurana. QuandoumprogramaJavaexecutado,seusbytecodessoverificadospelaJVMparaqueestejam de acordo com os seus requisitos de segurana, impedindo a execuo de cdigo com alguma irregularidade.Assim,cdigosfontecominstruesqueacessemreasrestritasdamemriaouat
Projeto Ejovem Mdulo II

Java

mesmorecursosdohardwarenosoexecutadospelaJVM.

A palavra public indica que a classe ter um nvel de acesso pblico, ou seja, que ela ser acessvelporqualquerclasse.Apalavra classindicaqueumaclasseestsendodeclaradaeseu nomeHelloWorld.A{delimitaolimiteinicialdaclasse.

Apalavra public jfoidescrita,portantopermitequeomtodosejaacessadopublicamente.A palavra static serdescritaposteriormente.Olugarondefica apalavra void ondese deve indicar o tipo de retorno do mtodo. Neste caso, no retorna nenhum valor, dessa maneira o mtododeclaradocomovoid.OconjuntoString[]argspresentesentre()soosargumentos domtodo.Nesteexemplo,omtodopossuiumnicoargumento(umvetordeStringsdenominado args.A{delimitaolimiteinicialdomtodo. Aterceiralinhaconsistenocontedodomtodoprincipal,formadoapenasporumcomando,ou umainstruoquecompostadeumaoumaislinhasterminadasporpontoevrgula.Exemplo:

O System.out.println usado para exibir algo na sada padro, por padro, na linha de comando.Serexibidooquetiverentre(),nocaso,Helloworld.Nofinaldestecomando,tem seum;queofinaliza.Porfim,hduasfechachaves}},quedelimitamofimdomtodoeda classe,respectivamente. Blocosdecdigo:Umblocoformadopor uma ou mais instrues agrupadas entre chaves indicando que formam uma s unidade.Blocospodemserorganizadosem estruturasaninhadas Indefinidamente.Qualquerquantidadedeespaosembrancopermitida.Umexemplode bloco cdigomostradoaoladoilustraperfeitamentecomosoorganizadasasestruturasdeblocos.

1.5.1. ComentriosemJava:
Comentriossonotasescritaspeloprogramadorparafinsdedocumentao.Estasnotasnofazem parte do programa e no afetam o fluxo de controle. Java suporta trs tipos de comentrios: comentrio de linha estilo C++, comentrio de bloco estilo C e um comentrio estilo Javadoc (utilizadocomporadocumentaodoprograma). Comentriodelinha:ComentrioscomestiloemC++seiniciampor//.Todoequalquertexto colocadoapsas//ignoradopelocompiladoretratadocomocomentrio.Porexemplo:

Comentrio de bloco: Comentrios com estilo em C,tambm chamados de comentrios multi linhas,seiniciamcom/*eterminamcom*/.Todootextopostoentreosdoisdelimitadores tratadocomocomentrio.DiferentedocomentrioestiloC++,estepodeseexpandirparavrias

Projeto Ejovem Mdulo II

Java

10

linhas.Porexemplo:

ComentrioestiloJavadoc: Estecomentrioutilizadonageraodadocumentaoem HTML dosprogramasescritosemJava.Parasecriarumcomentrioemestilo Javadoc deveseiniciaro comentriocom /** eterminlocom */.AssimcomooscomentriosestiloC,estetambm pode conter vrias linhas. Este comentrio tambm pode conter certas tags que do mais informaesdocumentao.Porexemplo:

1.5.2. CompilandomeuprimeiroprogramaemJava
1Passo: ParacompilarmosonossoprimeiroprogramaemJavautilizamososeguintecomando javacseguindodonomedaclasse(ponto).java

2Passo: ParaexecutarmosonossoprimeiroprogramaemJavautilizamososeguintecomando Java,seguidodonomedaclasse.

Nessesegundoexemplovamosusarumeditordetextoqualquerparaeditorocdigofontedo nossosegundoexemploevamoscompilarusandoterminal(Konsole)dosistemaoperacional.

Compilandonosso2exemplocomocomandojavac

Projeto Ejovem Mdulo II

Java

11

Executandonosso2exemplocomocomandojava

Obs.:Cuidadosimportantesaseremtomados:
SeojavacreclamarquenoachaaclasseHelloWorld.java,porquevocnoestno diretriocorretoousalvouoarquivoemoutrolugar. Seojavacreclamardealgumerronofonte, porquevocdigitoualgoerrado.No troqueletrasmaisculasporminsculaseviceversa,emnenhumapartedocdigo! Finalmente,ANTESdechamaroseuinstrutorparaeleinserirum;oufecharumachave noseucdigo,revisemaisumavezoseucdigocompletamente.

1.5.3. Dicaspararesoluodeproblemasemprogramasjava
Sedigitaroprogramanamo,certifiquesedeprestaratenoasletrasmaisculase minsculas.Emparticularumnomedeclasseporexemplo. SereceberumamensagemcomoBadcommandorfilenameoujavaccommandnot found,volteeverifiquenovamenteasuainstalao,emparticularaconfiguraodocaminhode execuo. Ocompiladorrequerumnomedearquivo(Teste.java)porexemplo.Quandovocrodaro programa,vocespecificaumnomedeclasse(Teste)semaextenso.javanem.class. Seocompiladorjavacrelatarumerroconnotread:Teste.java,vocdeveverificarse essearquivoestpresentenodiretrio. Sehouvererrosdemaisemseuprograma,todasasmensagensdeerrosvoaropelasua telamuitorapidamente.Ocompiladorenviaasmensagensdeerroparaasadapadro;ento, umpoucocomplicadocapturlasseelasocuparemmaisespaodoqueajanelapodeexibir.

1.6. Erroscomumemprogramasjava 1.6.1. Errosemjava:


Duranteodesenvolvimento deprogramas,muitocomumqueerrospodemocorrer,emjavapode seremdoisdomnios:tempodecompilaoetempodeexecuo. 1.6.2. Erroemtempodecompilao: Errosocorridosduranteafasedecompilaoocorremquandose executaojavac,esofceisde corrigir.Hdoistipos: Errosdeprocessamentodoarquivo(parsing):pontoevrgulafaltando,parnteses,aspas, chavesoucolchetesdescasados.Identificaapenasoarquivoealinhaondeoerropodeteriniciado. Umerrocausavriosoutrosenemsempreamensagemprecisa. Errosdecompilaodocdigo,realizadadepoisdoparsing:almdalinhaedoarquivo, identificamaclasseemtodo.Geralmenteasmensagenssobastanteelucidativas. 1.6.3. Erroemtempodeexecuo: Erros que ocorrem durante o tempo de execuo (runtime) ocorrem quando se executa o interpretadorjava,esomuitomaisdifceisdelocalizareconsertar.

Projeto Ejovem Mdulo II

Java

12

Exceptioninthreadmain:NoClassDefFoundError:Classe:aclasse"Classe"nofoi encontradanoCLASSPATH. Exceptioninthread"main":NoSuchMethodError:main:osistematentouchamarmain() masnooencontrou. ArrayIndexOutOfBoundsException:programatentouacessarvetoralmdoslimites definidos,ounegativo. NullPointerException:refernciaparaobjetonula,ouvariveldeumtipoobjetofoi declaradamasnoinicializada.

1.7. Exercciosbsicos.
01)Nositensabaixoassinaleaalternativaquecorrespondeamaquinavirtualdojava(jdk): A()Amaquinavirtualpodeserdefinidacomoumambientedeprogramao. B()Amaquinavirtualpodeserdefinidacomoumprocessoqueexecutacdigosde extenso*.Java. C()AmaquinavirtualpermitequeasaplicaesJavaredesomenteemsistemasLinux. D()Amaquinavirtualumsoftwarequepermitecompilareinterpretareexecutar aplicaesJava. E()AmaquinavirtualumsimuladordeaplicaesfeitaemJava. 02)Citetrscaractersticasdalinguagemjava: 03)QuandoumcdigoJavainterpretadoeleconvertidoem: A()linguagemdedados. B()linguagemdealtonvel. C()linguagemdemaquinavirtual(jdk). D()linguagemdemaquinadocomputador. E()linguagemdebytecode. 04)DescrevaosprocessosparasefazerumpequenoprogramaemJava: 05)QualdosseguintescomandossoutilizadosparacompilareexecutarumprogramaemJava respectivamente. A()lsejava B()Javaejavac C()javacejavac D()javacejava E()cdels 06)Qualocomandoutilizadoparaimprimirumamensagemnatela. 07)ExpliqueaportabilidadeemprogramasJava? 08)ExpliqueedefinaoqueJDKeJREequalafinalidadedecadaum. 09)QuaisostiposdeerrospodeocorreremprogramasJava?Descrevaos.

Projeto Ejovem Mdulo II

Java

13

1.8. Exercciosproposto.
01)Umprogramaescritoemjava: a)Interpretadopelocompilador.b)Interpretadoecompilado. c)CompiladoeExecutado.d)Compiladoeinterpretado. e)N.D.A 02) Faaumprogramausandoum editordetextoqualquereseguindocompilee executeesse programanoconsole.Oqueaconteciaaoesquecerdecolocarpontoevirgulanofinaldocomando System.out.println()?Comente:. 03)Utilizandoumeditordetexto,faaumprogramaemjavaqueimprimanatelaaseguintefrase: EuestudoJava.Emseguidacompileomesmonoconsoledoseusistemaoperacional. 12)Utilizandoumeditordetextoeoconsoledosistemaoperacional,faaumprogramaemjavaque imprimanatelaaseguintesfrases:EstudoPHPeEstudoJava.Pormasfrasesdevemaparecer umaabaixodaoutra. 04)QuaisostiposmaisdeerromaiscomunspodemocorreremumprogramaescritoemJava?Cite trsocasiesemquepodemocorreralgumtipodeerro. 05)Utilizandoumeditordetexto,faaumprogramaemjavaqueimprimanateladoconsolea seguintefrase:OBrasilopasdofuturo..Emseguidacompileomesmonoconsoledoseu sistemaoperacional.Utileosseguintescomandos:01:System.out.print()e02: System.out.println(),descrevaasprincipaisdiferenasobservadas. 06)Descrevaospassonecessriosparaainstalaodasferramentasnecessriasaprogramaoem java. 07)Expliqueparaserveoargumentodutilizadojuntocomocomandojavac?

Projeto Ejovem Mdulo II

Java

14

Captulo2. IDEsedeclaraodearquivofonte.

2.1. Netbeans
O termo IDE em ingls,que quer dizer(Integrated Development Environment). O NetBeans IDE um ambiente de desenvolvimento integrado e est disponvel para Windows, Mac, Linux e Solaris. O projetoNetBeansconsisteemumIDEdecdigofonte abertoeumaplataformadeaplicaesquepermitem que os desenvolvedores criem rapidamente aplicativos web, corporativos, desktop e aplicaes mveisutilizandoaplataformaJava,bemcomoJavaFX,PHP ,JavaScripteAjaxRubyeRubyon Rails,GroovyeGrails,eC/C++.OprojetodoNetBeansapoiadoporumavibrantecomunidade dedesenvolvedoreseofereceumaextensadocumentaoetreinamentoderecursos,bemcomo umadiversificadaseleodeterceirosplugins. IDE6.9introduzoJavaFX,Compositorumaferramentavisualparaconstruodelayoutvisual JavaFXaplicativos,interfacegrficasemelhanteaoconstrutordeGUISwingparaaplicaesJava. SE NetBeans Outros destaques incluem OSGi Plataforma de interoperabilidade para aplicaes NetBeanseapoioparaodesenvolvimentodebundlesOSGicomMaven,oapoio JavaFXSDK, Framework Zend para PHP e Ruby on Rails 3.0, bem como melhorias no editor de Java, Java Debuggerproblemaderastreamento,emuitomais.Parabaixaronetbeansacesseositedolink: http://www.netbeans.org/

2.2. VisodeoutrasIDEsparaodesenvolvimentocomjava 2.2.1. IDEEclipse


OEclipseumaIDEparaodesenvolvimentoaplicaesJava,ele tambm pode ser usado para o desenvolvimento de aplicaes utilizandooutraslinguagenscomoPHP ,C++,etc.OAmbientede desenvolvimentomultilinguagensdeprogramaocujoprojeto patrocinado pela IBM. bastante flexvel e integra com vrios projetosbastantecomunsnacomunidadejavataiscomocvs(versionamento),ant(scripts)ejunit (testesunitrios).Nopossuiaindaumbomeditorvisualdeinterfacegrfica.Oatual,chamado visualeditor(VE)funcionacomSWTeSwingmasaindaestnaverso0.5.Odesenvolvimento J2EEvivelcomousodepluginsobtidosdeterceiros.Nestaapostilanoiremosnosaprofunda nessaIDE,maspodebaixareinstalarnoseusistemaparcriarseusprojetodeprogramaocom javausandoaIDEEclipse.OEclipseatualmenteencontrasenaverso3.6chamadadeHELIOS, parabaixloacesseoseguintelinkaolado:http://www.eclipse.org/

2.2.2. AIDEBluej
BlueJumambientededesenvolvimentojavaprojetadoespecificamente para o ensino em um nvel introdutrio. BlueJ foi projetado e implementado pelas equipes das universidade Monash University, Melbourne, Australia e The University of Southern Denmark, Odense. Maiores informaes sobre BlueJ esto disponveis no site oficial (http://www.bluej.org).OBlueJumexcelenteambienteparaofima quesedestina:aaprendizagemdaprogramaoorientadapelosobjetos
Projeto Ejovem Mdulo II

Java

15

utilizandoalinguagemJava.Noentantoeespecialmentequandoutilizadaumalinguagemmuito popularcomoalinguagemJava,odesenvolvimentodeprogramas feitoutilizandoIDEsmuito mais complexos e sofisticados. Tal necessrio para lidar com a complexidade de muitos dos programasatuais. Estesatingemfrequentementedezenasdemilharesdelinhasdecdigoe,emalgunscasos,muitas, muitas mais. Tal implica a utilizao de vrias ferramentas de auxlio ao desenvolvimento de cdigo. BlueJ 3.0.4, uma verso de manuteno que inclui uma srie de correes de erros importantes,estagoradisponvelparadownload.

2.2.3. AIDEGel
um editor pequeno e rpido. Escritoo em Delphi para computadores com Windows. Destaca sintaxe para java,jsp,xml, html entre outras gramticas, facilita o gerenciamento de projetos, mantm histrico local de mudanas, possui suporteaCVS,juniteAntentreoutrasfacilidades.Livreparausocomercial. MaisinformaessobreessaIDEvisiteosite:http://www.dukeduck.com.br/

2.2.4. AIDEJdeveloper
Umadasprincipaisopesopensource,umaterceiraboaopoexiste desdequeaOracletornouseuIDEJdevelopertotalmentegratuito. IssodevidoaofatodeaOracletornaropensourcedoisframeworks de desenvolvimento Java: o mecanismo de persistncia Oracle TopLink(setornouabasedaimplementaoderefernciaJPAdo Glassfish)eoscomponentesJavaServerFaces(JSF)OracleADFFaces,partedoOracleAplication DevelopmentFramework.Sodoistimosrecursoseoseuusonodesenvolvimentoesttotalmente integradoesuportadonoOracleJDeveloper. O Oracle JDeveloper assim uma opo gratuita abrangente e amadurecida para o desenvolvimento Java corporativo, principalmente em ambientes onde produtos Oracle j so utilizados(DatabaseServer,BI,ApplicationServer,Portal).http://www.oracle.com/

Nota:Muitobem!Apartirdaquificaacritriodeseuinstrutorautilizaoounodeuma IDEdedesenvolvimentodesoftwareduranteocursodanossadisciplina.UsodeumaIDE vai nos facilitar em muito pontos importantes,dentre eles a aproximao com uma ferramenta utilizada no mercado de trabalho atualmente, vai tornar o aluno mais preparadoparaenfrentarasdificuldadesdecorrentesdeprogramaremumsimpleseditor detextoeprompt,mas,tambmmuitoimportantequevocsaprendamacompilarseus programanoConsole(promptdecomandos)paradaentoficaremhabilitadosaseguirem programandoemjava.Ficaaiorecadoebonstrabalhos.VamosusaraIDEnetbeans. Segueumtutorialsobreonetbeansqueserrepassadoantes.

2.3. Identificadoresepalavraschaves.
Javaumalinguagemcentradanospacotes;osdesenvolvedoresdalinguagem assumiram que, para uma boa organizao de nomes, seria fundamental na estrutura de programas em java. Imagine o seguinte pesadelo: trs programadores,namesmaempresa,mastrabalhandoemdiferentespartesdeum projeto,escrevemcadaumumaclassechamadaUtilitrios.Seessastrsclasses Utilitriosnotiveremsidodeclaradasemnenhumpacoteexplcito,eestiverem noclasspath,noseriapossveldizeraocompiladorouJVMqualdastrsclassesesttentando referenciar.

Projeto Ejovem Mdulo II

Java

16

Identificadoreslegaissoregrasqueocompiladorusaparadeterminarseumdadonomelegal. Em Java, os identificadores devem ser compostos apenas por caracteres. Unicode, nmeros, smbolosdemoedasecaracteresdeconexocomounderscore. Regrasvlidas: Deveminiciarcomumaletra,smbolocomercialcifro($)ouunderscore(_); Apsoprimeirocarcterpodemterqualquercombinaodeletras,caracteresenmeros; Nopossuemlimitedetamanho; Nopodemserpalavrasreservadasrestritasdalinguagem; EmJavaosidentificadoresso casesensitive isto,JAVAtotalmentediferentede javaissoporqueocompiladordiferenciamaisculosdeminsculos.

Palavraschave:Soidentificadoresque,emJava,foramprdefinidascompropsitosespecficos. Nosepodeusaressesidentificadorescomonomesdevariveis,mtodos,classes,etc.Aseguir, temosalistacomaspalavraschaveemJava. Nota:true,falseenull nosopalavraschave,porm, sopalavrasreservadas, e,da mesmamaneira,nopermitidoseuusonaatribuioanomesdevariveis,mtodosou classes.

2.4. Declararclasses,visibilidadeeregrasparaarquivosfonte.

2.4.1. Declaraesemodificadoresdeacessodeclasses.
Ento!Maisoquesignificaacessarumaclasse?Quandodizemosqueocdigodeumaclasse(a classeA)temacessoa(classeB),oqueestamosquerendodizer?AcessoDefault(Padro):Uma classe com acesso default no tem nenhum modificador precedendoa na declarao. Esse o controledeacessoseobtmquandonodigitadonenhummodificadorparaaclassedeclarada.O acessodefaulttemqueserentendidocomonveldepacotes,porqueumaqueclassetenhaacesso defaultspodeservistaporclassesdedentrodomesmopacote.Vejamoscomoseguenoexemplo abaixo. Acesso public (pblico): Uma declarao de classe com a palavrachave public d a todas as classes, de todos os pacotes, acesso classe pblica, ou seja todas as classesdo universo Java (UJ)temacessoaclasse(as)pblicas.Noentanto,noseesquea,dequeseaclassequeestiver tentando usar estiver em um pacote diferente do da classe que est escrevendo, ainda assim precisarimportaraclassepblica.Vejamoscomoseguenoexemploabaixo.Exemplo01:

Projeto Ejovem Mdulo II

Java

17

Acesso Default(padro) : Osmembrosdefaultsobastantesemelhantesaoprotect,masaqui noexistemexcees,umaclassequeestiveremoutropacotenotemacessoamembrosdefault nemmesmoporherana.Exemplo02:

Esseoutroexemploabaixomostramoscomodeclararumarquivodecdigofontedeprogramas escritosemjava,ondeumarquivocontmvriasclasse. Notequeemjavapodesedeclararduasoumaisclassesaninhadasnummesmoarquivodecdigo fonte, porm importante frisar que apenas uma delas pode conter o modificador de acesso publico(public)e asrestantes seguem somente com a palavrachave (class) e omodificador de acessopadro(default). Exemplo04:

Regrasparaarquivofonte: Spoderexistirumaclassepublicemcadaarquivofonte. Oscomentriospodemaparecernoincioounofimdequalquerlinhanoarquivo do cdigofonte;elessoindependentesdequaisquerregrasdeposicionamento. Seexistirumaclasse public emumarquivo,onomedearquivodeveseromesmoda classepublic.Exemplo:UmaclassedeclaradacomopublicclassDog{}precisaestaremumarquivo decdigofontechamadoDog.java. Sehouverdeclaraesimport,elasdevemficarentreadeclaraopackage(seexistir)ea declaraodaclasse.Senohouverumadeclaraopackage,entoasdeclaraes import devem
Projeto Ejovem Mdulo II

Java

18

estarnaprimeiradoarquivodocdigofonte.Senohouverdeclaraespackagenem import,a declaraodaclassedeveestarnaprimeiralinhadoarquivodocdigofonte. Seaclassefazpartedeumpacote,adeclaraopackagedeveestarnaprimeiralinhado arquivodocdigofonte,antesdequaisquerdeclaraoimportqueestejampresentes. Umaclassepodetermaisdeumaclassenopublic. Arquivos que no tenham classes public podem ter um nome que seja o mesmo de nenhumadasclassesdoarquivo.

2.4.2. Modificadoresdeacesso:
public,protectedeprivate. Public:Quandoummtodoouvariveldeclarada comopblico.Issosignifica que,todasas classesindependentementedopacoteaoqualpertenampodemacessaromembro.

Private:Quandoummtodoouvariveldeclaradacomomodificadorprivate,issosignificaque nenhumoutraclassepodeacessarosmembros,anoserapartirdaprpriaclasse.

Protected:Temessencialmente,acessodenveldopacoteoupadroatodasasclasses,excetoas subclasses:Queassubclassesdeforadopacotepodemherdarummembroprotected.Parauma subclassedeforadopacote,omembro protected spodeseracessadoatravsdaheranaque veremosmaisadiantenodecorrerdocurso.

Projeto Ejovem Mdulo II

Java

19

2.5. Exercciosbsicos.
01)Nositensabaixoassinaleaalternativaverdadeiraemrelaoaoquecorrespondeaumarquivo decdigofontevlidoemjava: A()Emumarquivodecdigofonteemjavapodeserdefinidaduasclassespblicasnomesmo arquivodecdigofonte. B()Emumarquivodecdigofonteemjavapodeserdefinidaduasclassespblicas,emaisde duasclassesnopblicasnomesmoarquivodecdigofonte. C()Emumarquivodecdigofonteemjavasomentepodeexistirumaclassedefinidacomo pblicanomesmoarquivodecdigofonte,etambmpodemhavervriasclassesdefault(padro). D()Emumarquivodecdigofonteemjavapodeserdefinidavriasclassespblicasno mesmoarquivodecdigofonteevriasclassesdefault(padro). E()N.D.A 02)Quaisdosidentificadoresabaixopodemserusadoscomonomesdeclasses,campos,mtodose variveisemJava?Quaisnopodem,eporqu? A)four B)for C)from D)4 E)FOR 03)Quaisdosidentificadoresabaixopodemserusadoscomonomesdeclasses,campos,mtodose variveisemJava?Quaisnopodem,eporqu? A)dia&noite B)diaENoite C)dia&noite D)diaEnoite E)dia_e_noite 05)Quaisdosidentificadoresabaixopodemserusadoscomonomesdeclasses,campos,mtodose variveisemJava?Quaisnopodem,eporqu? A)contador B)count C)1contador D)contadordelinhas E)Contador

Projeto Ejovem Mdulo II

Java

20

Captulo3. TiposdeDadosprimitivosemjava.
3.1. Tiposprimitivos:
Todo programa de computador deve ser capaz de lidar com dados para conseguir fazer seus processos como, por exemplo, somar, multiplicar, dividir, etc. Usar atributos a melhor forma de manipularosdados.Ostiposdedadossooque definemaquantidadedememriadocomputador que ser utilizado para guardar tal dado. As variveis primitivas pode ser declaradas como variveis de classe(static), variveis instncias, parmetros de mtodos ou variveis locais. Uma vezdeclarado,seutipoprimitivonopodenunca sermodificado,emboranamaioriadoscasosseu valor possa se modificar. Java um linguagem fortementetipada.Issosignificaquetodavarivel deve ter um tipo declarado. Existem oito tipos primitivos em java. Quatro deles so do tipo inteiros;doissodotipodenmerosdepontoflutuante;umotipodecaractereschar,usadopara unidadesdecdigonoesquemadecodificaoUnicodeeumdelesdotipolgicoparavalores true/false(verdadeiro/falso).

3.1.1. Usodevaloresliteraisdetodosostiposdedadosexistentes.
Umliteralprimitivosimplesmentearepresentaodocdigofontedostiposdadosprimitivosem outrospalavrasuminteiro,umnmerodepontoflutuante,umbooleanoucaracteresquevoc digiteenquantoescreveumcdigo.

3.1.1.1. LiteraisInteiros: HtrsmaneirasderepresentarnmerosnalinguagemJava:decimal(base10),octal(base8)e hexadecimal(base16). 3.1.1.2. Literaisdecimal: Osinteirosdecimaisnoprecisamdeexplicao,elessorepresentadosdamaneiratradicional,sem prefixodenenhumtipo,comonoexemploabaixo:

3.1.1.3. Literaisoctal: Osinteirosoctaisusamsomentedgitosde0a7.EmJava,ointeirorepresentadonaformaoctal


Projeto Ejovem Mdulo II

Java

21

comainclusodeumzeronafrentedonmero,vejaoexemploabaixo:

3.1.1.4. Literaishexadecimal: Osnmeroshexadecimaissoconstrudoscomousode16smbolosdistintos.Jquenoforam criadossmbolosnumricosunitriosparaosalgarismosquevode10a15,usamoscaracteres alfanumricospararepresentaressesdgitos.

NaJavalinguagemtodososliteraisinteiros(octal,decimalehexadecimal)sodefinidoscomoint (ousejainteiros)porpadro,mastambmpodemserrepresentadoscomoLongcomainclusode umsufixoLouldepoisdonmero: Exemplos.

Ostiposdedadosinteirosquesoosmaisconhecidosemaissimples.EmJava,osnmerosinteiros sodivididosemquatrotipos:byte,short,intelong. Otipo byte odemenoralcanceentreosinteiros.Comooprprionomesugere,eleconsome apenasumbyte(8bits)epodeguardarvaloresentre128e127.

Otiposhortguardainteirosde2bytes(16bits)epodeguardarnmerosentre32.768a32.767.

Otipo int otipode dado mais comum. Ele consome 4 bytes (32 bits) e guarda valores entre 2.147.483.648 e 2.147.483.647.

Long otipodedadocommaioralcanceentreosinteiros.Consequentemente,tambmoque ocupamaisespao(8bytesou64bits).Temumgrandealcancequeficaentre9.22E+18(exatos 9.223.372.036.854.775.808)e9.22E+18(exatos9.223.372.036.854.775.807).

3.1.1.5. Literaisdepontoflutuante: Osnmerosdepontoflutuantesodefinidoscomumnmero,umsmbolodecimaleosoutros nmerosque representam a frao. Para nmero decimaisfracionrioscom grandepreciso ou
Projeto Ejovem Mdulo II

Java

22

valoresextraordinrios(geralmenteutilizadosemmatemticaaplicadaecomplexacomoclculos fsicos,qumicos,astrolgicos,meteorolgicos,etc)utilizamosotipodedadodouble. Double o tipo de dado mais complexo que existe em Java e o maior valor possvel de se armazenar1.797.693.134.862.315.7E+308.Muitomaisdoquequalquerprogramadorprecisa.

Float os literais de ponto flutuante so definidos Double (64 bits) por padro, portanto, se desejarmosatribuirumliteraldepontoflutuanteaumavarivelfloat(32bits),terqueanexaro sufixoFoufaonmero.Senoofizer,ocompiladorreclamardeumapossvelfaltadepreciso, porqueestartentandoinseriremumcontainer(potencialmente)menospreciso.

3.1.1.6. Literaisbooleanos: Osliteraisbooleanossoarepresentaodocdigofonteparavaloresboolean.Umvalorboolean spoderserdefinidocomotrueoufalse.

3.1.1.7. Literaisdecaracteres: O literalchar representado porum nico caractere entre aspassimples. Eles podem tambm representarvaloresUnicodedocaractere,usandoanotaoUnicodequeacrescentaoprefixo\u aovalor,atribuirumliteralnumrico,contantoqueeleestejanointervalode16bitssemsinal (65535oumenor). Vlidos:

Invlidos:

Projeto Ejovem Mdulo II

Java

23

3.1.1.8. LiteraisparaString: OliteraldestringarepresentaodocdigofonteparaovalordeumobjetoString.Emboraas stringsnosejamprimitivas,foramincludasnestecapituloporquesoutilizadaspararepresentar valoresliterais,emoutraspalavras,digitadasdiretamentenocdigo.VeremosmaissobreStringsno capitulo9. Exemplo01:

3.2. Exercciospropostos
01)Umprogramaescritoemjavapodeaceitarquetiponoprimitivodedadopararepresentarum asequnciadecaracteres. a)Stringechar.b)doubleefloat. c)String.d)chareString. e)inteString 02) Faaumprogramausandoum editordetextoqualquereseguindocompilee executeesse programanoconsole.Oprogramadevemostrarosseguintesvalores:{nome:RobertoCarlos,idade =46,altura=1.74cm,cordepele:pardo}. 03)Utilizandoumeditordetexto,faaumprogramaemjavaqueimprimanatelaaseguintefrase: EuestudoJavanoeJovem.Afrasedeseratribudaaumavariveldeumtipoespecfico.Em seguidaessavariveldeveserimpressaemostradanasadapadro. 04)Faaumprogramaemjavaquesomeosseguintesnmeros25.86e2586.123.Dicautilizeos tipoprimitivosdedadosadequadoparaoproblema. 05)Qualotipoprimitivosdedadoemjavaadequadoquesedeveusarparaconfigurareimprimir natelaavogal'u'? a)shortefloatb)intelong c)Stringechard)chareString e)charg)byte

06)Qualotipoprimitivosdedadoemjavaadequadoquesedeveusarparaconfigurareimprimira
Projeto Ejovem Mdulo II

Java

24

onmero123456? a)shortefloatb)intelong c)Stringd)chareString e)charg)byte 07)Faaumprogramaemjavaquecalculeemostrenatelaa mdiaaritmticadosseguintes nmeros(12,14e16).Dicautilizeostipoprimitivosdedadosadequadoparaoproblema. Ex:media=(1+2+3)/3; 08)Faaumprogramaemjavaquecalculeemostrenatelaa mdiaaritmticadosseguintes nmeros(12.52,14.54e16.56).Dicautilizeostipoprimitivosdedadosadequadoparaoproblema. Ex:media=(5.5+7.5+9.5)/3; 3.2.1.1. Desafio: 09)Faaumprogramaemjavaquecalculeemostrenatelaa mdiaaritmticadosseguintes nmeros(10,12en).Importante:numastringigualan=14utilizeostipoprimitivosdedados adequadoparaoproblema,masnoesqueadefazerocasting,assuntoquevamosestudaradiante. Ex:media=(5+7+n)/3; n = 9; int x = Integer.parseInt(n); media=(5+7+x)/3;

Projeto Ejovem Mdulo II

Java

25

Captulo4. Operadoresdeatribuio.
4.1. Oqueumavarivel:
Varivel:umespaonamemriausadoparaarmazenaroestadodeum objeto.Umavariveldeveterumnomeeumtipo.Otipodavarivel indicaotipodedadoqueelapodeconter.Onomedasvariveisdeve seguirasmesmasregrasdenomenclaturaqueosidentificadores.

4.1.1. TiposdeVariveis:
Variveisdeinstncia: Estasvariveissonoestticas,ouseja,declaradassemomodificador static.Variveisdeinstnciasoassimchamadasporqueseusvaloressonicosparacadainstncia daclasse.Assim,asvariveis podemarmazenarvaloresdiferentesparacadacpiadeobjetosda classe. Variveisdeclasses: Estasvariveissodeclaradascomomodificador static.Issoinformaao compilador que h exatamente uma nica cpia desta varivel, independente do nmero de instnciasdaclasse. Variveislocais: Sousadasparaarmazenaroestadotemporriodeummtodo.Variveislocais soacessveissomentedentrodomtodoemquesodeclaradas,eautomaticamenteabandonadas nasadadomtodo. Parmetros:Soosparmetrosdemtodos.Taisvariveissoacessveissomenteaocdigono corpodomtodo. Nota:Veremosnosprximoscaptulosdetalheseexemplosdetodosostiposdevariveis aquimostrado.Geralmentequandofalamosde"camposemgeral"(excluindovariveis locaiseparmetros),podemossimplesmentedizer"campos".Seadiscussoseaplicaa todasasvariveisacima,usamos"variveis".Seocontextopedeumadistino,usamos termosespecficos(campoesttico,varivellocal,etc)comoapropriado.Podemosainda usarotermo"membro".Oscampos,mtodosetiposaninhadosdeumtipopodemser chamadosdeseusmembros. Exemplodevariveislocais:

Na linguagem de programao Java no permitido o uso de variveis indefinidas. Variveis definidasdentrodomtodosochamadasdevariveislocais,temporriasouestticasedevemser inicializadasantesdouso.Vejamosatabelaabaixocomosseguintesvaloresiniciais. Exemplo02: Atribuirumvaloraumavarivelparecebemsimples;simplesmenteinsiraovalordireitadosinal (=)paraatribulovarivelqueestaresquerda.Exemplos:

Projeto Ejovem Mdulo II

Java

26

4.2. Variveisestticas:
ummembroquepertenceaclasse.Umavarivelestticacompartilhadaportodasasinstncias declasse,porqueapenasumacpiadavarivelestticamantidaeaprpriaclassesuficiente paraacessaravarivelmarcadacomoesttica. Exemplo01:

Exemplo02:

Exemplo03: Neste exemplo vamos mostrar atravs de um programa como usar as variveis estticas.

Projeto Ejovem Mdulo II

Java

27

4.3. Conversooucast(explcitaeimplcitadasvariveisdetipos primitivos).


Aconversopermitirquesejatransformadovaloresprimitivosdeumtipoemoutro.Asconverses podemserimplcitasouexplcitasdasvariveisdetiposprimitivos.Umaconversoimplcitaocorre quandofazemosumatransformaoqueenvolveampliao.Emoutraspalavras,quandoinserimos um item menor (exemplo, um tipo byte) em um container maior(como um tipo int). A transformaovalormaioremumcontainermenorconhecidacomocompactaoerequeruma conversoexplcita,emqueserinformadoaocompiladorqueconheceoperigoeaceitatodaa responsabilidade. OJavaconverteautomaticamentevaloresdeumtiponumricoparaoutrotipo maior.Vejamosalgumasconversesvlidasemjava.

Utilizamosocastingparaconverterumobjetoouumavariveldeumtipoprimitivoparaoutrade umtipotambmprimitivo.Podemosconverterumdoubleemumint,ouumasubclasseemuma superclasse. A regra fundamental para o cast : o casting no modifica o objeto ou valor que est sendo moldado;porm,oreceptordocastconstituiumnovoobjetoouumnovotipo.Ocastingdedados primitivosocorrecombastantefrequncia.Amaneirapeloqualocastingagedependedapreciso dosdadosenvolvidos.Porsuavez,aprecisodependedaquantidadedeinformaesqueumtipo podeconter;assim,umtipodepontoflutuantedoubletemmaiorprecisoqueumfloat,poiso primeiroumtipode64bitseosegundo,de32bits. Umbytepodeserconvertidoemumshort,int,long,floatoudouble Umshortpodeserconvertidoemumint,long,floatoudouble Umcharpodeserconvertidoemumint,long,floatoudouble Umintpodeserconvertidoemumlong,floatoudouble Umlongpodeserconvertidoemumfloatoudouble Umfloatpodeserconvertidoemumdouble Semprequehouverumatransfernciadedadosdeumtipomenosprecisoparaummaispreciso,o castingexplcitonoobrigatrio.

Projeto Ejovem Mdulo II

Java

28

Regrasparacasting: Jatransfernciadedadosdeumtipomaisprecisoparaummenosprecisorequerumcasting explcito.Issoocorreporquepodehaverperdadedadosduranteamoldagem.Javapretendealertar oprogramadordopossvelperigodeumaconversodessetipo: Exemplo01:

Exemplo02:

Exemplo03:

Exemplo04:

Exemplo05:

OJavanofazautomaticamenteodowncast.
Projeto Ejovem Mdulo II

Java

29

Ocastingentreobjetosrequerumpoucomaisdecuidado.Nocapitulo6veremoscomofazero castingdeobjetos.

4.4. Atribuindoumavarivelderefernciaaoutra.
Asvariveisderefernciassousadasparasereferir(ouacessar)umobjeto. Umavarivelderefernciadeclaradacomosendodeumtipoespecfico,e essetiponopodenuncasermodificado.Umavariveldepodeserusada parareferirseaqualquerobjetodotipodeclarado,oudeumsubtipodotipo declarado(umcompatvel).Variveisderefernciapodemserdeclaradascomo variveis estticas, variveis de instncias, parmetros de mtodos ou

variveislocais.

4.4.1. Escopodevariveis.
Depoisquedeclarou einicializou uma varivel, umaquestonaturalemuitoimportante por quantotempoessavarivelvaiexistir?Essaumaperguntaqueserefereaoescopodasvariveis emjava.Oescopodefineondeumavarivelacessvelduranteaexecuodeumprogramae quando a varivel criada e destruda. A localizao de uma varivel dentro do programa estabeleceseuescopo.ExistemquatrocategoriasdeescopodevariveisnalinguagemJava,so elas:

4.4.2. Variveisdeinstnciasdetiposprimitivos.
Asvariveisdeinstnciassodefinidasdentrodaclasse,masforadequalquermtodo,esso inicializadasquandoaclasseinstanciada.Asvariveisdeinstnciassooscampoquepertencema cadaobjetonico. Exemplos:

Ou

Projeto Ejovem Mdulo II

Java

30

4.5. Exercciospropostos.
01)Declareumavarivelquerepresenteumnmerointeiroeiniciecomovalor5.Mostrenatela ovalordavarivel. 02)Declaretrsvariveiscomtiposdiferentes,sematribuirvalor.Depoisatribuaumvalorqualquer aelas.Mostrenatelaseusvalores. 03)Crieumavariveldotipoint,atribuaumvalorqualqueraela.Depoiscrieumavariveldotipo double, atribuaa ela ovalordaprimeiravarivelaquefoi criada. Mostre natelao valorda varivel. 04)DeclareumavariveldotipoStringcomafraseCursodeJavadoejovem. 05)ConcatenenavarivelcriadaacimaafraseExemploString. 06)Imprimanatela(console)onmerodecaracteresdaString. 07)Crieumprogramaemjava,aqualseratribudoovalor12aumavariveldotipointeovalor 13.23aumavariveldotipodouble.Apsatribuirosvaloresmostrena telaasomadasduas variveis. 08)Faaumprogramaemjavaquesomeessesdoisnmeros:125e12.5:Faaesseprogramade trsformasdiferentes. 09)Faaomesmoprogramadoexerccioanteriorsqueatribuindoessesvaloresaduasvariveise resultadodeveseratribudoaumaoutravarivel.Nofinaloprogramadeveimprimircomo resultadoovaloriguala137.5: 10)Faaumprogramaemjavaquemostreareaeopermetrodeumretnguloabaixo: Obs.:areaepermetrodoretngulodevemserexpressoem umtipodedadodepontoflutuante(floatoudouble).

Projeto Ejovem Mdulo II

Java

31

Captulo5. OperadoresemJava:
OsoperadoresemJavaproduzemnovosvaloresapartirde umoumaisoperandos,osquaissoitensesquerdaoua direitadooperador.Oresultadodamaioriadasoperaes umvalorbooleanoounumrico.importantelembrarque na linguagem Java no possvel sobrecarregar os operadores. Um dos objetivos da linguagem java a portabilidade.poristomuitosprocessadoresdaintelcomputamx*yedeixamemregistradorde80 bits,emseguidadividemporzefinalmentetruncamoresultadodevoltapara64bits.Issopode gerarumresultadomaisprecisoepodeevitaroestourodeexponentes.Masoresultadopodeser diferentedeumacomputaoqueusa64bitsotempotodo. Poressemotivoaespecificaoinicialdamquinavirtualjavaexigiaquetodasascomputaes fossemtruncadas.Nosomenteascomputaestruncadaspodemcausarestouro,comotambm so, na verdade mais lentas do que as computaes mais precisas, porque a operao de truncamentodemorada.Poressarazo,alinguagemdeprogramaojavafoiatualizadapara reconhecerasexignciasconflitantesdedesempenhootimizadoereprodutibilidadeperfeita.

5.1. Operadores de atribuio composto.


Osoperadoresdeatribuiocompostospermitemqueosprogramadorespreguiososeconomizem algumtrabalhodedigitao.Naverdade,existemcercade11operadoresdeatribuiocomposto, masapenasosquatromaiscomumenteusadosso:(+=,=,*=,/=).

Exemplosemusaroperadorcomposto:

Exemplousandooperadorcomposto:

Nota:Importantelembrarqueasduasatribuiesmostradasdonomesmoresultadoqueasduas primeiras.

Projeto Ejovem Mdulo II

Java

32

5.2. Operadoresdecomparao.
==iguala. !=diferentede. Nalinguagemjavasoutilizadosdoisoperadoresdecomparao(chamadostambmdeoperadores deigualdadeoudesigualdade)quecomparadoisitenssemelhanteseretornamumvalorbooleano querepresentaoqueverdadeirosobreosdoisitensseremiguais. Exemploutilizandoooperadordeigualdade:

Exemplo02:

Exemploutilizandoooperadordediferente:

Exemplo 02:

5.3. Igualdade de tipos primitivos:


Amaioriadosprogramadoresjavaestofamiliarizadoscomacomparaodevaloresprimitivos. Issoporquecada comparaopodeenvolverdoisvaloresnmeros(incluindo otipochar),dois valoresbooleanosouduasvariveisderefernciasdeobjetos.Oquenopodesercomparado:no possvelcomparartiposdadosincompatveis,porexemploseumtipobooleanigualaumtipo char.Existemquatrotiposdeitensquepodemostestar: Nmeros Caracteres Tiposbooleanosprimitivos Variveisderefernciasdeobjeto;pormimportantelembrarqueooperador(==) examinaovalordavarivel,ousejaopadrodebits.

Projeto Ejovem Mdulo II

Java

33

5.3.1. Igualdadedevariveisdereferncias:
As variveis de referncias podem ser testadas com o operador (==) para sabermos se esto referenciando um objeto em comum. Mas muitoimportante ressaltar que omesmo operador estarexaminandoosbitsdavarivel,portantocomrelaoasvariveisdereferncias,seosbits dasduasvariveisforemidnticos,elasestaroreferenciando(apontando)omesmoobjeto.

Neste exemplo do cdigo acima, foi criado trs variveis de referncia a partir da classe Funcionrio.Asduasprimeirasf1ef2,soobjetosdeFuncionriodiferentes,queporacasotemo mesmovalorinicial,aterceiravarivelderefernciaf3,inicializadaparareferenciaromesmo objeto que a varivel f1 est referenciando. O operador == no testar se dois objetos so significativamenteequivalentes,issoporqueelecomparaosbitsdasvariveis,entoasreferncia dememriasdasvariveisnosoaiguais.

5.3.2. Operador Instanceof:


Permitenossaberseumobjetopertenceaumaclasseouno,ousejaseoobjetopassanoteste um.Esteoperadorusadosomentecomvariveisderefernciasdeobjetos,epodeserempregado paraverificarseumobjetodotipoespecfico.Quandotratamosdetipos,queremosdizertipode interface ou classe. Em outras palavras, se o objeto referenciado pela varivel esquerda do operadorpassarianotesteumdotipodeinterfaceouclassedoladodireitodooperador. Exemplo01.

Projeto Ejovem Mdulo II

Java

34

Exemplo02.

Nota:Nesteexemploaconteceumerrodecompilao;issoporqueavarivel[e]dotipoStringe nodotipoFuncionrio,nessecasoasclassesnoparticipamdarvoredeherana. Exemplo03:

5.3.3. Operador concatenao de strings:


Osinaldeadio(+)tambmpodeserusadoparaconcatenarduasstrings.Seumdosoperandos forumaString,ooperador+atuarcomoumoperadordeconcatenaodeStrings.Eseosdois operandosforemnmeros,ooperando+funcionarcomoooperadordeadio. Exemplo01.

Resultadodocdigoacima,executadodentrodeumaclassequepossuaomtodomain().

Exemplo 02. Resultado do cdigo ser mostrado ao lado, executado dentro de uma classe que possuaomtodomain().

Projeto Ejovem Mdulo II

Java

35

5.4. Operadoresaritmticos.

Elespodemserusadosdamaneirapadro.Exemplos:

5.4.1. Operadorresto(%):
Ooperadorrestodadivisodivideooperandoaesquerdapelodireitocomoresultadosendoo restodessadiviso.

5.4.2. OperadoresdeIncrementoeDecremento:
Soosoperadoresquenospermitemincrementarasvariveisemumaunidade.Podemserusados dianteouatrsdavariveldependendodoquequisermos,ouseja,sequisermosqueseincremente ouviceversaantesdeutilizarouocontrrio.

Projeto Ejovem Mdulo II

Java

36

Exemplo01:

Exemplo 02:

Resultado.

Exemplo 03:

Resultado.

Projeto Ejovem Mdulo II

Java

37

5.4.3. Operadoresrelacionais.

5.4.4. Operadores relacionais:


Osoperadoresderelacionaisdecomparaosempreresultaemumvalorbooleano(trueoufalse). Essevalorbooleanousadocommaisfrequnciaemteste if.Javapossuiquatrooperadoresde comparaoquepodemserusadosparacompararqualquervaloresinteiros,numricosdepontos flutuantesoucaracteres. Exemplo01:

5.4.5. Operadoreslgicos.
Expresses lgicas so aquelas que realizam uma operao lgica (ou, e, no, etc...) e retorna verdadeirooufalso.Alinguagemjavaespecificamseisoperadoreslgicos(!,&,|,^,&&,||).

Projeto Ejovem Mdulo II

Java

38

5.4.6. Os operadores Bitware:


Osoperadores(^,&,|)sochamadosdeoperadoresdeBitwre.Essesoperadorescomparam duasvariveisbitporbit,eretornamumavarivelcujosbitsforamdefinidoscombaseemseas duasvariveissendocomparadastinhambitscorrespondentesqueestavamouambosligados(&), ouumoutroligado(|),ououexatamenteumligado(^).

5.4.7. Operadores lgicos de abreviao:


Ooperadordeabreviao(&&)consistenofatodeelenoperderseutempoavaliaesinteis.O operador de abreviao (&&) avaliar o lado esquerdo da operao (operando um) e se esse operandotiverumresultadofalse,elenoexaminaroladodireitodaequao(operandodois),j queooperadorsaberqueaexpressocompletanosertrue. ANDabreviao(&&) ORabreviao(||) Exemplos:

5.4.8. Operadores lgicos ^ e !:


Ooperadorlgico^(ouexclusivo)avaliavaloresbooleanos.Ooperador^relacionasecomos operadoresdenoabreviao,nosentidodequesempreavaliaambososoperandos,odolado direito e o do lado esquerdo, em uma expresso. Para uma expresso OU exclusivo(^) ser verdadeira,exatamenteumoperandoprecisasertrue.Exemplo. ^ORexclusivo(xor) !inversobooleana.

Projeto Ejovem Mdulo II

Java

39

Exemplos:

Nota: A expresso acima avalia como false porque tanto o primeiro operando (2<3) quantoosegundo(4>3)avaliamcomotrue. Exemplos01:

Exemplos02:

5.4.9. Operadorescondicionais.
Ooperadorcondicionalumoperadorternriotemtrsoperandosusadoparaavaliarexpresses booleanasdemodosemelhanteainstruoIF,excetoporemvezdeexecutarumblocodecdigose oresultadodotestefortrue,atribuirumvalorvarivel.Ousejaobjetivodooperadorcondicional decidir qual dos valores atribuir a uma varivel. Ele constitudo dos smbolos? (ponto de interrogao)e(doispontos),osparntesessoopcionais.Vejaasintaxe: X=(expressobooleana)?valoraatribuirsetrue:valoratribuirsefalse

Exemplo01.

Exemplo02.

Projeto Ejovem Mdulo II

Java

40

Exemplo03.

5.4.10.OperadorTernrio
Operadorternrioouoperadorcondicionaltemobjetivodeatribuirumvaloraumavarivelde acordocomoresultadodeumtestelgico. Vejamosasintaxe: Testelgico(?)valorseforverdadeiro(:)valorseforfalso. Otestelgicoqualquerexpressoquepodeseravaliadocomoverdadeirooufalso Exemplo01:

5.4.11.PrecednciadeOperadores
Aprecednciaserveparaindicaraordemnaqualocompiladorinterpretarosdiferentestipos deoperadores,paraqueelesempretenhacomosadaumresultadocoerenteenoambguo. ordem 1 2 3 4 5 6 7 operador ()parnteses ++psincrementoepsdecremento ++princrementoeprdecremento !negaolgica *Multiplicaoe/diviso %Restodadiviso +somaesubtrao
Projeto Ejovem Mdulo II

Java

41

8 9 10 11 12 13 14 15 16

<menorque,<=menorigual,>maiorque,>=maiorigual ==iguale!=noigual &ANDbinrio |OUbinrio ^OUexclusivobinrio &&ANDlgico ||OUlgico ?:condicional =atribuio

5.4.10. ExerccioResolvido
01Faaumprogramautilizandoosoperadoresdisponveisnalinguagemjava,excetooternrio.
public class AritmeticaDemo{ public static void main(String[] args){ int i = 37; int j = 42; int k = 42; double x = 23.435; double y = 17.12; System.out.println("Adio."); System.out.println("Subtrao"); /**VARIVEL DO TIPO INT*/ /**VARIVEL DO TIPO INT*/ /**VARIVEL DO TIPO INT*/ /**VARIVEL DO TIPO double*/ /**VARIVEL DO TIPO double*/ /**adio de dois nmeros*/ /**subtrao dos nmeros*/

System.out.println("i + j = "+(i + j)); System.out.println("j - i = " +(j - i)); System.out.println("Multiplicao"); /**multiplicao dos nmeros*/ System.out.println("i * j = " + (i * j)); System.out.println("Diviso."); /**diviso dos nmeros*/ System.out.println("i / j = " + (i / j)); System.out.println("Resto da diviso."); /**resto da diviso*/ System.out.println("i % j = " + (i % j)); System.out.println("Maior que"); //maior que System.out.println("i >j = "+(i > j)); //false System.out.println("j > i = "+(j > i)); //true System.out.println("k > j = "+(k > j)); //false System.out.println("Maior igual a"); //maior igual a System.out.println("i >= j ="+(i >= j)); //false System.out.println(" j >= i = "+(j >= i)); //true System.out.println(" k >= j = "+(k >= j)); //true Projeto Ejovem Mdulo II

Java System.out.println("Menor que.."); //menor que

42

System.out.println(" i < j = "+(i < j)); //true System.out.println("j < i = "+(j < i)); //false System.out.println("k < j = "+(k < j)); //false System.out.println("Menor igual a.."); //menor igual a System.out.println("i <= j = "+(i <= j)); //true System.out.println("j <= i = "+(j <= i)); //false System.out.println("k <= j = "+(k <= j)); //true System.out.println("Igualdade.."); //igual a System.out.println("i == j = "+(i == j)); //false System.out.println("k == j = "+(k == j)); //true System.out.println("Diferente.."); //diferente System.out.println("i != j = "+(i != j)); //true System.out.println("k != j = "+(k != j)); //false } }

5.5. Exercciosdefixao.
01Escrevaumprogramaqueimprimaoresultadodasexpressesabaixo: a)531+2+4+3 b)3x25x4 c)2+63/7x9 d)13%48 02Escrevaumprogramaquedeclare,inicializeeimprimaasseguintesvariveis: Inteiroide32bitscomvalor1 Inteirojde64bitscomvalor2 Pontoflutuantepde32bitscomvalor20.0 Pontoflutuanteqde64bitscomvalor30.0 Booleanbcomvalorverdadeiro Carcterccomvalork 03)Naempresaondetrabalhamos,htabelascomoquantofoigastoemcadams.Para fecharobalanodoprimeirotrimestre,precisamossomarogastototal.Sabendose que,emJaneiro,foramgastos15000reais,emFevereiro,23000reaiseemMaro, 17000reais,faaumprogramaquecalculeeimprimaogastototalnotrimestre. Sigaopassoapasso: 1.CrieumaclassechamadaBalancoTrimestralcomumblocomain,comonos exemplosanteriores; 2.Dentrodomain(omiolodoprograma),declareumavarivelinteirachamada gastosJaneiroeinicializeacom15000; 3.CrietambmasvariveisgastosFevereiroegastosMarco,inicializandoas com23000e17000,respectivamente,utilizeumalinhaparacadadeclarao;
Projeto Ejovem Mdulo II

Java

43

4.CrieumavarivelchamadagastosTrimestreeinicializeacomasomadasoutras 3variveis:intgastosTrimestre=gastosJaneiro+gastosFevereiro+gastosMarco; 5.ImprimaavarivelgastosTrimestre. 04)Crieumprogramaquepeaonome,aalturaeopesodeduaspessoase apresenteonomedamaispesadaeonomedamaisalta. 05)Crieumprogramaquepea10nmerosinteiroseapresente:mdia,omaioreomenor.

Captulo6. Controledefluxoemjava.
As estruturas de controle definem a sequncia de execuo das instrues. No possvel implementarumalgoritmoquenosejatrivialemumalinguagemdeprogramaoquenotenha umconjuntomnimodeestruturasdecontrole.Asestruturasdecontrolepodemserdivididasem seleo, repetio e sequncia.Asequnciasimplesmentedefinidapelaexecuosequencialdos comandos,decimaparabaixo.

6.1. Utilizarcdigoqueuseinstruesif
A expresso entre parnteses deve ter como resultado um valor booleano true ou false. Normalmentetestaralgoparasaberseverdadeiro,seguidaexecutarumblocodecdigo(uma oumaisinstrues)seoresultadoformesmoverdadeiroeopcionaloutroblocodecdigoseno false.Sintaxedadeclaraoif:

Fluxogramadadeclaraoif.

Projeto Ejovem Mdulo II

Java

44

6.1.1. Expressesvlidasparainstruesif
Exemplos01: Nesteexemploambasasinstruessoavaliadascomoverdadeiratantoadoladodireitoquantoa doladoesquerdo,pois,ovalordavarivelxformaiordoqueovalordavarively,entooblocode instruoexecutado,eamensagemserimprimidanasadapadro.

Exemplos02:

Nesteoutroexemploainstruoavaliadacomotrue,pois,ovalordavariveltestefalse,mais quandoofluxoentranoifavariveltesterecebetrue,logoblocodeinstruoserexecutadoe resultandoimpressonasadapadro.

6.1.2. Expressesvlidasparainstruesifelse
Adeclarao ifelse usadaquandoqueremosexecutardeterminadoconjuntodeinstrues sea condioforverdadeiraeoutroconjuntoseacondioforfalsa. Sintaxe da declarao if-else.

Fluxogramadadeclaraoifelse.

Projeto Ejovem Mdulo II

Java

45

Notas:Nestesexemplosainstruodoladoesquerdoavaliadacomoverdadeira,pois,ovalorda varivelxnomaiordoqueovalordavarivelyeainstruodoladodireitotambmavaliada comoverdadeira,poisavariveltestetinhavalorinicialfalse,masdentrodainstruoatribudo umnovovalorigualatrue,logoblocodeinstruotantodaesquerdacomoodadireitasero executados,atribuindoumnovovalorparaavarivelyiguala25imprimindoovalordeynasada padro. Exemplos01:

Notas:Nestesexemplosambasoscdigodoifseroavaliadacomoverdadeira,entoelaexecutaa instruoimprimindoteste1.Seasinstruoiffossefalsaeleexecutariamoeles,imprimindoteste 2,masnonossocasoforamverdadeiras.

Regraparaousodoelseedeelseif Podeterumounenhumelseparaif,eeledevevirdepoisdequaisquerinstrueselseif. Podeterdemuitosounenhumelseifparaumif,eelesdevemvirantesdoelse. Depoisqueumelsetemsucesso,nenhumdosdemaiselseifouelsesertestado.

6.1.3. Expressesvlidasparainstruesifelseif.
Adeclaraoelsepodeconteroutraestruturaifelse.Estecascateamentodeestruturaspermiteter deciseslgicasmuitomaiscomplexas. Asintaxedadeclaraoifelseif:

Podemostervriasestruturaselseifdepoisdeumadeclaraoif.Aestruturaelseopcionalepode seromitida.Noexemplomostradoacima,seaexpresso_lgica1verdadeira,oprogramaexecuta ainstruo1esaltaasoutrasinstrues.Casocontrrio,seaexpresso_lgica1falsa,ofluxode controlesegueparaaanlisedaexpresso_lgica2.Seestaforverdadeira,oprogramaexecutaa instruo2esaltaainstruo3.Casocontrrio,seaexpresso_lgica2falsa,entoainstruo3 executada.

Projeto Ejovem Mdulo II

Java

46

Fluxogramadainstruoifelseif

Exemplo01:

6.1.4. Expressesvlidasparainstruesswitchecase.
Sintaxedadeclaraoswitch. Onde,varivel_inteiraumavarivelde tipobyte,short,charouint.valor1,valor2, eassimpordiante,sovaloresconstantes queestavarivelpodeassumir.Quandoa declaraoswitchencontrada,ofluxode controleavaliainicialmentea varivel_inteiraesegueparaocaseque possuiovalorigualaodavarivel.O programaexecutatodasinstruesapartirdesteponto,mesmoasdoprximocase,atencontrar umainstruobreak,queinterromperaexecuodoswitch. Senenhumdosvalorescaseforsatisfeito,oblocodefaultserexecutado.Esteumblocoopcional. Oblocodefaultnoobrigatrionadeclaraoswitch.
Projeto Ejovem Mdulo II

Java

47

Fluxogramadadeclaraoswitch.

Exemplos01:

AsconstantesCASEsoavaliadasdecimaparabaixo,eaprimeiraconstanteCASEque batercomaexpressoSWITCHseropontodeentradadaexecuo. Exemplos02:

SoluoIncorreta.

Projeto Ejovem Mdulo II

Java

48 SoluoCorreta.

Esteexemploperfeitamentevlidoparaadeclaraoswitchcase,mesmoavarivelsendodotipo String.Pormquandoentrarnainstruoswitch,omtodoinvocadopelavarivels.lengthretornar umvalorinteiro,ousejaotamanhodastringquenonossocasoiguala7. Exemplo03:

Noexemploacima,quandofornecidoargumento,aaplicaoidentificaseoprimeirocaracteredeste umavogal.Seoargumentonoforiniciadoporumavogalocorreaexecuodaseodefaultda diretiva switch. Caso no exista argumentos fornecido o programa imprime uma mensagem correspondente. Regrasparausodainstruoswitchcase: Cadainstruocasedeveserseguidadeumainstruobreak. Certifiquesedequeumavarivelcharsejadeclaradaantesdainstruoswitch. Ovalordefaultpodeserinseridonofim,nametadeounoincio.

6.2. Loopseiteradores(usandoosloopsfor,whileedowhile).
Oscomandosderepetio,oudeiterao,executamumcomandoouumblocodecomandosvrias vezes.umadasformasparaexecutarrepetidamenteumcomando.Aoutraarecursoquea chamadadiretaouindiretadeummtododuranteaexecuodoprpriomtodo.EmJavaexistem trsformasdecomandosderepetio:owhile;odowhile;eofor.

Projeto Ejovem Mdulo II

Java

49

Sintaxe:loopwhileFluxogramadoloopwhile

Adeclarao whileexecuta repetidas vezesum blocodeinstruesenquantouma determinada condiolgicaforverdadeira. Exemplo01:

Comoemtodososloopsaexpresso(teste)terqueresultaremumvalorbooleano.Ocorpode loopwhilesserexecutadoseaexpresso(tambmconhecidacomocondio)resultaremum valor true(verdadeiro). Uma vez que entramos no loop, seu contedo ser repetido at que a condionopossamaisseratendidaesejaavaliadacomofalse(falsa),encerrandooloop. Exemplo02:

Nesteexemploavarivelxinicializadacom0aoentrarnoloopacondioverificadacomo sendo verdadeira, isso porque 0 menor do que 5, ento o bloco de cdigo executado, imprimindonatelaastringxeovalordavarivelxquenocaso0,depoisaexecuodocdigo passaparaaprximalinhaqueoincrementodavarivelx,passandoavaler1.Agoraaexecuo voltaaoiniciodoloopparaverificarnovamenteacondioeassimpordianteatqueacondio sejaavaliadacomofalsa. Sintaxe:dowhile:fluxogramadoloopdowhile

Projeto Ejovem Mdulo II

Java

50

6.2.1. Loopdowhile:
Adeclarao dowhilesimilaraowhile.Asinstruesdentrodolao dowhileseroexecutadas pelomenosumavez.Inicialmente,asinstruesdentrodolaodowhilesoexecutadas.Ento,a condionaexpressolgicaavaliada.Seforverdadeira,asinstruesdentrodolaodowhile seroexecutadasnovamente. Exemplo01:

Nesteexemploavarivelxinicializadacom0,oblocodecdigoexecutadopelomenosuma vezantesqueacondiosejaverificada.Apsacondioseravaliadacomoverdadeira,avarivel serincrementadaem1eaexecuodocdigovoltaparaoiniciodoblocoeissoserepetirat queacondiosejaavaliadacomofalsa.

6.2.2. Loopfor:
Adeclaraofor,comonasdeclaraesanteriores,permiteaexecuodomesmoblocodecdigo umaquantidadedeterminadadevezes. Sintaxe:doloopfor:

FluxogramaFor

Projeto Ejovem Mdulo II

Java

51

Exemplo01:

Exemplo02:

6.3. Loopforaprimordo(paraarrays).
O comando FOREACH utilizado por voc quando precisar fazer a iterao quantas vezes for necessria. Ele composto por trs expresses, sendo elas: a) Declarao e inicializao, b) Expressocondicionalec)Expressodeinterao. Exemplo01:

Exemplo02:

Projeto Ejovem Mdulo II

Java

52

Nota: A sada dos exemplos anteriores, aps compilado e executado, dever ser uma exibio dos nmeros inteiros do arranjo com nome semana. Esta estrutura otimiza a interao no arranjo ou coleo passada para a expresso podendo ser efetuada a navegao sem a necessidade de ndices ou interadores.

6.4. Usodebreak,continueereturn. 6.4.1. A instruo Break:


A instruo break far com que o programa encerre a execuo do loop atual e inicie o processamento na linha de cdigo posterior ao bloco. Isso porque este comando serve para interromperasequnciadeexecuodoscomandoesairdocomandoswitch.Istonoacontece apenasnocomandoswitch.Todavezqueumbreakencontrado,ofluxodeexecuosaltapara foradoblocoondeestcontidoobreak,sendoretomadonocomandoapsobloco. adeclaraodedesviousadaparasairdeumlaoantesdonormal.Otipodeterminaparaonde transferidoocontrole.Obreaktransfereocontroleparaofinaldeumaconstruodelao(for,do, while ou switch). O lao vai encerrar independentemente de seu valor de comparao e a declaraoapsolaoserexecutada.Exemplo:

Nota:Vamosanalisaresteexemploacimaquetemcomoresultadoaimpressodetodososnmeros cujaomdulodadivisopor10sejaiguala0.Daoresultadoomostradoabaixo: [i=100,i=90,i=80,i=70,i=60,i=50,i=40,i=30,i=20,i=10] Exemplo02: Agoravamosanalisaroexemplo02,quemostraomesmoprogramacomumapequenadiferena queainclusodocomandobreakdepoisdocomandoSystem.out.println();

Projeto Ejovem Mdulo II

Java

53

Nota:Depoisdeanalisarmoschegamosaseguinteconcluso:Estecomandointerrompeaexecuo doloopsatisfazendoacondionoblocoif.Entooresultadoaimpressodeapenasoprimeiro quesatisfazacondio,quenonossocasoo100. [i=100]

6.4.2. AinstruoContinue:
Ainstruocontinuefarcomquesomenteaiteraoatualdoloopsejaencerradaequeaprxima iteraodomesmoloopsejainiciadadestequeforatendida.Quandousarumainstruocontinue emumloopfor,vocterqueconsiderarseusefeitosnaiteraodoloop.Adeclaraocontinue fazcomqueaexecuodoprogramavolteimediatamenteparaoinciodolao, pormparaa prximainterao.Ocontinuefazointerpretadorpularparaaprximaiteraoeobrigaoatestar acondio. Exemplo:

Apergunta:Esseumloopinfinito?Arespostano.Quandoainstruocontinueforatingida,a expresso de iterao ainda ser executada! Ela ser exatamente como se a iterao atual terminassedemaneiranatural.Portanto,noexemploanterior,aindaaumentarovalorantesda condio(i<10)serverificadanovamente.Masgeralmenteainstruocontinueusadadentrode umtesteifcomosegueabaixo:

Nota: Este dois comando tambm podem ser usados como instrues rotuladas. As instrues rotuladasestoalmdoescopodonossocurso,mas,emboramuitasinstruesemjavapossamser rotuladas,maiscomumusarrtuloscominstrueslooptaiscomoforewhile,emconjuntocom instruesbreakecontinue.Umainstruodertulodevesercolocadaantesdainstruosendo rotulada, e consiste de um identificador vlido que termina com dois pontos(:). As instrues rotuladasseronecessriassomentenassituaesemquevoctiverumloopaninhadoeprecisa indicarqualgostariadeencerrarouapartirdoqualdesejacontinuaraprximaiterao.
Projeto Ejovem Mdulo II

Java

54

6.4.3. Return:
A declarao return utilizada para sair de um mtodo. O fluxo de controle retorna para a declaraoquesegueachamadadomtodooriginal.Adeclaraoderetornopossuidoismodos:o queretornaumvaloreoquenoretornanada. Exemplo:

6.5. Exercciospropostos
01)Crieumprogramaqueobtenhaamdiade3nmeros.Considereovalorparaostrsnmeros comosendo10,20e45.Oresultadoesperadodoexerccio: nmero1comovalor10 nmero2comovalor20 nmero3comovalor45 Amdia25 02)Dadostrsnmeros,crieumprogramaqueexibaomaiordentreosnmerosinformados.Useo operador?:quejfoiestudado(dica:sernecessrioutilizardoisoperadores?:parasechegarao resultado).Porexemplo,dadososnmeros10,23e5,oresultadoesperadodoexercciodeveser: nmero1comovalor10 nmero2comovalor23 nmero3comovalor5 Omaiornmero23 03)Crieumprogramaquemostreseunomevintevezes.Faatrsversesdesteprograma: a.Useumadeclaraowhilepararesolveresteproblema b.Useumadeclaraodowhilepararesolveresteproblema c.Useumadeclaraoforpararesolveresteproblema 04)Recebacomoentradaumnmeroeumexpoente.Calculeestenmeroelevadoaoexpoente. Faatrsversesdesteprograma.Dados:onmero3eoexpoente2. a.Useumadeclaraowhilepararesolveresteproblema b.Useumadeclaraodowhilepararesolveresteproblema c. Useumadeclaraoforpararesolveresteproblema

05)Imprimatodososnmerosde150a300.
06)Imprimaasomade1at1000. 07)Imprimatodososmltiplosde3,entre1e100.

Projeto Ejovem Mdulo II

Java

55

Captulo7. Orientaoaobjetos:
Na linguagem de programao orientado a objetos java, um programa principalmente uma coleodeobjetosfalandounscomosoutrospormeiodainvocao(mensagem)dosmtodosuns dosoutros.Cadaobjetodeumtipo,eessetipodefinidoporumaclasseouumainterface.A maioriadosprogramasJavausacoleesdeobjetosdemuitostiposdiferentes.

7.1. O que objeto e atributos.

TiposdeDadosAbstratos:Representamapartecentraldametodologiaorientadaaobjetos.Umtipo dedadoabstratoummodeloformadoporpropriedades(atributos)eoperaes(mtodos),onde estasdefinemocomportamentobsicodomesmo.Tipodedadoabstratopermiteamodelagemde entidades do mundo real de uma forma mais natural, pois estamos acostumados a lidar com "objetos"osquaispossuemcaractersticas"atributos"efuncionalidades"mtodos".

7.2. Objeto:
entedomundorealqueabstradoparaomundovirtual,ousejaumainstnciadeumaclasse. Nomomentodaexecuo,quandoamquinavirtualJava(JVM)encontraapalavrachave new, elausaaclasseapropriadaparacriarumobjetoqueserumainstnciadessaclasse.Esseobjeto teroseuprprioestadoeteracessoatodososcomportamentosdefinidospelasuaclasse. Os objetospodemconterobjetos,ousejaosatributosdeumobjetopodemserobjetos, damesma classeouno.Objetospodemserpassadospelaredeearmazenadosemmeiofsico.Exemplode objetosdomudoreal.

Projeto Ejovem Mdulo II

Java

56

7.3. Atributo:
Refereseaoelementodosdadosdeumobjeto.Elearmazenainformaessobreoobjeto.tambm conhecidocomodadodoobjeto,atributodoobjeto,propriedadeoucampo.Noprojetoderegistro doaluno, algunsatributosdaentidadealunoincluemonome, nmerodoestudanteenvelde escolaridade.

7.4. Mensagem:
Umamensagemaformadecomunicaoentreosobjetos.Paraissoprecisocriarumobjeto, identificar o nome do mtodo a ser executado e, caso necessrio, identificar tambm os parmetrosqueomtodorecebeouretorna.Depoisdeteressesdadosemmospodemosenviar mensagensparao(s)objeto(os). Exemplo01:

Nesteexemploumdeterminadoobjetoestinvocandoomtodocorrer()deumoutroobjeto,ou sejaenviandoumamensagemparaoutroobjetoquecontmoseguintemtodo.

7.5. Oqueoestadodeumobjeto.

7.5.1. Estado(variveisdeinstncias):
O estado do objeto define como o objeto reage quando aplicado aos mtodos. Cada objeto (instnciadeumaclasse)teroseuconjuntonicodevariveisdeinstnciasconformedefinidona classe.Coletivamente,osvaloresatribudosasvariveisdeinstncias deumobjeto,compemo estadodoobjeto.

Projeto Ejovem Mdulo II

Java

57

7.6. Conceituandoclasses,construtor,ousodedonew,thiseclasses abstratas.

Umaoperaopodeseraplicadaaouporobjetosnumaclasse.Amesmaoperaopodeseaplicara vriasclassesdiferentes(polimorfismo).Ummtodoaimplementaodeumaoperaoparauma classequeonossoassuntonestecapitulo.

7.6.1. Classe:
modeloquedescreveostiposdeestadosecomportamentoqueseusobjetospodemter.Essetipo dedadodefinidopelousurioquecontmomolde,aespecificaoparaosobjetos,algomaisou menoscomootipointeirocontmomoldeparaasvariveisdeclaradascomointeiros.Aclasse envolve,associafunesedados,controlandooacessoaestes,definilaimplicaemespecificaros seus atributos (dados) e seus mtodos (funes). importante considerar que uma classe no representanenhumobjetoemparticular,poissummodelo. Nota: Na modelagem orientada a objetos utilizamos as classesem programao para conseguir modelarosobjetosaseremrepresentadoseaimplementaodomodelo.Modelarumobjetocriar uma descrio geral para um conjunto de objetos que se deseja utilizar no programa. Vamos considerar,porexemplo,umadisciplinatemsuaforma,seucdigo,seunome,seuscrditoseetc. Esteconjuntodeelementosquedescrevemadisciplinapoderiamseragrupados,constituindoum modeloparadisciplinas.Podamosaindaformaroutrosobjetosqueiriampossuiroutrosatributos, uma certa combinao de atributos tornase conveniente para descrever apenas um conjunto particulardeobjetos.Levamostambmemconsideraoqueumobjetopodesermodeladoporseu tipodeutilizaoenoapenasporseusatributos.Vejamosabaixoomodelodediagramadeclasse daUMLpararepresentaraclasseDisciplina.

Aseosuperiorusadapararegistraronomedaclasse.Aseointermediriareservadapara registrodaspropriedadesdaclasse,casoexistam,enaseoinferiorregistradoaassinaturados mtodosquepertencemclasse,casoexistam.Porassinaturadomtodoqueremosdizeronomedo mtodo, juntamente com seus argumentos e valor de retorno. A figura abaixo mostra uma representaodaclassedasdisciplinas.Emumadeclaraodeumaclassenormalmentesecolocaa declaraodemtodosdepoisdadeclaraodosatributos,pormpodemosfazerintercalaesou adotar qualquer ordem que nos convenha. Uma boa tcnica de programao, que podemos aconselharavocadotaremseusprogramasusarlinhasdecomentriosparadelimitarumarea docdigodesuasclassesqueenglobetudooqueinteressaaumusuriodesta.
Projeto Ejovem Mdulo II

Java

58

Exemplo01:

7.6.2. Construtor:
Osobjetossoconstrudos.Nosepodecriarum novo objeto em Java sem chamamos um construtor. O construtor so o cdigo que ser executadosemprequeusarapalavrachavenew. Todas as classes, incluindo as classes abstratas(abstract), precisa ter um construtor. Mas s porque uma classe precisa de um construtor, no significa que o construtor que o programador tenha que digitlo. Exemplo de declaraesvlidasparaconstrutores:

Exemplo 01:Nesteexemplovamosmostraralgumasdasformasdeseconstruirumobjeto,apartir doconstrutor:

Projeto Ejovem Mdulo II

Java

59

This:Ojavaassociaautomaticamenteatodasasvariveisemtodosreferenciadoscomapalavra this.Porisso,namaioriadoscasostornaseredundanteousoemtodasasvariveisdapalavrathis. Existem casos em sefaz necessrio ouso da palavras this. Por exemplo, voc pode necessitar chamarapenasumapartedomtodopassandoumainstnciadoargumentodoobjeto.(chamarum classedeformalocalizada). New:Ainstanciaoapalavrachave newumoperadoremJavaquecriaonovoobjeto(aloca espaoousejareservaespaoparaoobjeto).Exemplo01:

Exemplo02:

Exemplo03:

Regrasparaosconstrutores: Os construtores podem usar qualquer modificador de acesso, inclusive private(um construtorprivatesignificaquesomenteocdigoqueestiverdentrodaprpriaclassepoder instanciarumobjetodessetipo). Onomedomtodoprecisaserigualaonomedaclasse. Nodeveretornarumtipodeclaradoparaomtodo. Osconstrutorespodemsersobrecarregados.

7.6.3. Visualizandoomundodosobjetosemjava.
Classe a estrutura que, quando construda, produzirosobjetos,dizemosentoquetodoobjeto instnciadealgumaclasse.Vamosentomodelar umaclassechamadadeConta. Objeto umentedomundorealquepodeser abstradoparaomundovirtual?

Projeto Ejovem Mdulo II

Java

60

Exemplo01: Atributos: 1.nmerodaconta 2.nomedodonodaconta 3.saldo 4.limite Nota:Percebemosquetodaclassecontatemonmerodaconta,nomedodonodaconta, saldo,limite,dentreoutrosatributos.Estessoosatributosquetodaconta,quandocriada, vaiter.Quandoumavariveldeclaradadiretamentedentrodoescopodaclasse, chamadadevariveldeobjeto,ouatributo. Mtodosaformadefazerumaoperaocomosobjetos.Especificaremosissodentro daprpriaclassenonossocaso,aclasseConta,enoemumlocaldesatreladodas informaesdaprpriaConta.porissoqueessasfunessochamadasemJavade mtodos. Mtodos: 1.sacarumvalorxdeumaconta. 2.depositarumvalorxemumaconta. 3.imprimironomedodonodaconta. 4.devolverosaldoatualdacont. 5.transferirumvalorxparaumaoutracontay. VejamosodiagramadeclassequerepresentaaclasseConta. Dentro da classe, tambm declararemoso que cada conta faz e comoistofeitooscomportamentosquecadaclassetem,isto,o que ela faz. Por exemplo, de que maneira que uma Conta saca dinheiroedemaisoperaesrelativassobreosobjetosquesero criadosapartirdaclasse? VejamosagoraocdigodaclasseConta:

Projeto Ejovem Mdulo II

Java

61

Exemplo02: NesteexemplomostraremosocdigodaclasseFuncionrioeoseurespectivodiagramadeclasse, descrevendoseusatributosemtodosmodificadoreseassessoresdasinformaes.

Executandoatrocademensagensentreosobjetos:vamoscriardentrodaclasseTesteFuncionario umobjetoapartirdaclasseFuncionarioefazermosalgumasalteraesnoestadodesteobjeto.

Projeto Ejovem Mdulo II

Java

62

Exemplo03:

Executandoatrocademensagensentreosobjetos:vamoscriardentrodaclasseTesteAnimal,um objetoapartirdaclasseAnimalefazermosalgumasalteraesnoestadodesteobjeto. Exemplo04:

7.7. Modificadoresnoreferentesaacessode:(classes,mtodose variveis).


Modificadoresnoreferentesaclasses Abstract : Asdeclaraesabstractsovalidassomenteparaclassesemtodosenopossuemcorpo, ouseja,nopossuemimplementaes.Umaclasseabstractnopodeserinstanciadanunca,seu nico propsito, misso na vida ser estendida (subclassificada). As declaraes abstract para mtodospossuemum;(pontoevirgula)aoinvsdechavesnofinaldadeclarao,domtodo.Uma classe abstract pode ter mtodos no abstracts (concretos, podendo ser at mesmo todos no abstract),porm,seumaclassepossuirapenasummtodoabstract,estaclassedeveserdeclarada como abstract.Ummtodomarcadocomo abstract paraobrigarasclassesqueaestenderema implementaremomesmomtodo.Todaclassequeestenderumaclasseabstractdeveimplementar todososseusmtodos,amenosqueestasubclassesejadeclaradacomoabstracttambm. Strictfp : Esta declarao fora a utilizao do padro IEEE 754 (no importante saber este
Projeto Ejovem Mdulo II

Java

63

padroparaoexame)compontosflutuanteseoperaescompontoflutuante.possveldeclarar umaclassecomostrictfpoumtodosindividuais. Final:Nalinguagemjavaasvariveiscomomodificadorfinalindicaqueovalordeumavarivel nopoder seralterado apsamesma tersidoinicializada, ouseja, permitidosomenteuma atribuionestetipodevarivel.

Modificadoresreferentesaosmtodos:(synchronized,native). Synchronized: Estadeclaraoindicaqueummtodospodeseracessadoporumthreaddecada vez,podendosercombinadoporqualquerumdosquatromodificadoresdeacessoscitadosacimano tpicoModificadoresreferentesacontroledeacesso.

Native : A declarao native s pode ser usada para mtodos e dependente da plataforma. Assimcomomtodosabstractsosmtodosnativedevempossuirumpontoevirgulanofinaldasua declarao,omitindoaimplementao.

7.8. Declarao de mtodos e membros de acesso dos mtodos.


Mtodos: Os mtodos realizam operaes sobre os atributos de uma classe ou criam aes ou transformaespossveisparaoobjeto.Permitematribuirumcarterdinmicoaosobjetoseem muitoscasospodemimitarocomportamentorealdoobjeto.Asintaxedosmtodoscompostade umespecificadordeacessotalqualutilizamosnasclasses,umtipoderetorno,sefordotipovoido mtodo no ir retornar nada, um nome, uma lista de parmetros (vazia, com um ou mais parmetros)eumcorpodefinindonoblocodechaves.DeclaraodemtodosemJava: Exemplo01:

Projeto Ejovem Mdulo II

Java

64

Exemplo02:

Final: A palavrachave impede que um mtodo possa ser substitudo em uma subclasse, e frequentementeusadaparaforarosrecursosAPIdeummtodo.

Mtodoscomparmetros:Muitasdasvezesprecisamosdeclararmtodoscomalgumainformao dentrodosparnteses,oqueserpassadodentrodomtodochamadodeargumentodomtodo (ouparmetro).Essavarivelumavarivelcomum,chamadatambmdetemporriaoulocal, pois,aofinaldaexecuodessemtodo,eladeixardeexistir. Exemplo01:

Exemplo02:

Exemplo03:

7.9. Passagemdeparmetrosemjava.
Quandovocpassarumavarivelderefernciadeobjetoparaummtodo,terqueselembrarque seestarpassandoarefernciaaoobjetoenooprprioobjeto.Lembresedequeumavarivelde refernciacontmbitsquerepresentamumamaneiradeacessarumobjetonamemria(noheap). Omaisimportantequevocprecisalembrarquenoestarpassandonemmesmoumavarivel derefernciareal,mas,emvezdisso,umacpiadosbitsdessavarivel,portanto,quandopassar umavariveldereferncia,estarpassandoumacpiadosbitsquerepresentamcomooobjeto especficopodeseracessado.

Projeto Ejovem Mdulo II

Java

65

7.9.1. PassagemdeParmetrosporvalor.
Nestemodo,natransfernciadeexecuodomtodochamadorparaachamadorealizadouma cpiadovalordoparmetrorealparaoformaleomtodochamadonoconseguemodificaro valordo parmetrorealpassado.Estemodoforneceapenasvaloresdeentradaparaumcerto mtodochamado.Exemplo01:

7.9.2. PassagemdeParmetrosporReferncia.
Nestemodo,natransfernciadeexecuodomtodochamadorparaachamadooparmetro formalpassaaserumsinnimodoparmetroreal.Comisso,qualquermodificaodoparmetro formalalteraoparmetroreal.Usualmente,estemodopreferidoemrelaoaomodoporvalor porcausadapossveloperaocustosadeclonarumobjetos.Exemplosdepassagemporreferncia: Exemplos01:

Notaimportante: DentrodamesmamquinavirtualJavaosparmetrosfornecidosaosmtodos sopassadosporvalor.Isto,quandoumdeterminadoparmetropassadoaummtodoojava criaumacpiadesseparmetroecolocaanastackdomtodoinvocado.Paraostiposprimitivos (int, float, boolean,...) esta operao no levanta qualquer problema mas quando se tratam de objetosascoisasnofuncionamexatamentedamesmamaneira.Naverdade,emJavanoselida diretamentecomobjetos,quepermanecemnaheap,mascomassuasreferncias. Stringstr="JAVA"; obtemsestrqueumarefernciaparaumobjetodaclasseStringcriadonaheap.Apassagemdos objetosamtodosentofeitoporcpiadarefernciaenopelacpiadoprprioobjeto.Assim,o mtodo:System.out.prinln(str);recebeumacpiadarefernciaastrenoumacpiaaoprprio objeto.OnmeroderefernciasaumdeterminadoobjetoguardadopelaJVM,quandonoexiste maisnenhumarefernciaaoobjeto,estepodeserseguramenteremovidodaheap,processoque efetuadoautomaticamentepelosistemadecoletadelixo(GarbageCollection).

Projeto Ejovem Mdulo II

Java

66

7.10. Tiposderetornosdemtodos. 7.10.1. Retornodemtodos:


Ummtodoemjavasempretemqueretornaralgumacoisa,nemqueessacoisasejanada,usandoa palavrachavevoid,quandoummtodonoretornanada.Ummtodopoderetornarumvalorpara ocdigoqueochamou.Ummtodotambmpodedevolverumvalordotipobyte,short,char,int, long,booleanoeString,indicandoqueoresultadoderetornodaoperaodevetercomovalor.A declaraodomtodomudaumpouconaassinaturadomtodo.Masparaistousamosapalavra chavereturnindicaqueomtodovaiterminarali,retornandotalinformao. Exemplo01:

Exemplo02:

7.10.2. Declaraodemtodosestticos.
7.10.2.1. Mtodosestticos: Osmtodosmarcadoscomomodificadornoreferenteaoacessostaticpertencemclasseenode umainstnciaespecficadaclasse.Estemembropodeserusadosemternenhumainstnciadessa classe.Paraestestiposmembrossomenteaclassesuficienteparachamar(invocar)ummtodo esttico. Exemplo01:

Exemplo02:

Projeto Ejovem Mdulo II

Java

67

Exemplo03:

7.11. Declaraodeinterfacesemjava
Declarao de Interfaces: Interface uma espcie de superclasse 100% abstrata que define os mtodosqueumasubclassedevesuportar,masnocomoessesuportedeveserimplementado.Isso porqueaocriarumainterface,estardefinindoumcontratocomoqueaclassepodefazer,sem mencionarnadasobrecomoofar.Umainterfaceumcontrato.Qualquertipodeclasse(concreta) edequalquerrvoredeheranapodeimplementarumainterface. Exemplo01:

Exemplo02:

Exemplo 03:

Regrasparaasinterfaces:

UmainterfaceemJavaumacoleodemtodosabstratosquepodemserimplementadas porumaclasse. Umainterfacenopodeimplementaroutrainterfaceouclasse. Ostiposdeinterfacepodemserusadospolimorficamente. Osmtodosdeuminterfacenodevemserestticos. Umainterfacedeveserdeclaradacomapalavrachaveinterface. Todososmtodosdeumainterfacesoimplicitamentepubliceabstract.Asinterfacess podemserdeclaradas.Umainterfacepodeestenderumaoumaisinterfacesdiferentes. Todasasvariveisdefinidasemumainterfacedevemserpublic,staticefinal.Asinterfaces spodemserdeclararconstantesenovariveisdeinstncia.

Projeto Ejovem Mdulo II

Java

68

7.12. Classesabstratas:
Abstraoestdefinidacomoumacaractersticasessencialdeumaentidadequedistingueestade todasasoutrasespciesdeentidades.Esteumtipoderepresentaoqueincluiapenasascoisas quesoimportantesouinteressantesdeumpontodevistaparticular.Esteumdomnioe dependentedaperspectiva,ouseja,oqueimportanteemumcontextoequepodeno necessariamenteseremoutro.Istonospermitegerenciaracomplexidadedosistemanos concentrandoapenasnascaractersticasquesoessenciaisouimportantesparaosistema,e Ignoramosoudescartamosascaractersticasquenosonestemomento.Objetossorepresentados atravsdessascaractersticasquesoconsideradasrelevantesparaopropsitoemquesto,eso desconsideradasascaractersticasquenoso.

Regrasparaasclassesabstratas: Uma classe abstrata no pode ser instanciada nunca, seu nico propsito ser estendida(subclassificada). permitidocompilareexecutarumaclasseabstrata,desdequenotentecriaruma instnciadela. Neste exemplos que iremos mostrar abaixo, damos, inicio a um assunto bastante utilizado no paradigmadeprogramaorientadaaobjetosqueaherana(liodonossoprximocaptulo): Imagine que voc tenha uma classe Carros que tenha mtodos genricos comuns a todos os veculos.Masvocnoquerquealgumdefatocrieumobjetocarrogenrico,abstrato.Comose inicializariaoseuestado?Dequecoreleseria?Quantosassentos?Potnciadomotor?Direo hidrulicaouno?ou,maisimportante,dequeformaelesecomportaria?Emoutraspalavra,como osmtodosseriamimplementados?Oquevocprecisadeinstnciasreaisdecarros,comoBMW, FERRARI,GOL,FIAT,etc.TemoscertezadequeodonodeumaBMWlhediriaqueocarrodele capazdefazercoisasqueoGOLapenassonhaemfazer. Exemplo01:

Projeto Ejovem Mdulo II

Java

69

Anotaes:

Aimplementaopodeserdessaformamostradaacima,comotambmpodeser comoseguenoexemploabaixo:

Projeto Ejovem Mdulo II

Java

70

7.12.1. Encapsulamento:
tambm conhecido como ocultao de informao. So caractersticas embutidas dentro de uma caixapreta abstrata que ocultaaimplementaodestascaractersticasatrsdeumainterface. Isto permite que outros objetos interajam com ele sem ter conhecimento de como a implementao realiza a interface. Esta interaorealizadaatravsdasmensagensdeinterfacedoobjeto. Estainterfaceumconjuntoprdefinidodeoperaesutilizadaspor outrosobjetosquesecomunicamcomele.Istogarantequeosdadoseosatributosdoobjetosso acessveisatravsdasoperaesdoobjeto.Nenhumoutroobjetopodeacessardiretamenteestes atributosealterarseusvalores. Encapsulartemafunobsicadeprotegerumaclassedecoisasestranhas,ouseja,mantlade formamaisprotegidacontraousoindevidodecertosusurios.Vamosveroseguintecdigopara entenderistomelhor: Exemplo01:

Nesteexemploacimaasvariveisdeinstnciaestoencapsuladascomomodificadordeacesso private,permiteassimquesejamacessadassomentedentrodaprpriaclasseaqualestosendo declaradas.Foradaclasseoacessoaessasvariveis,somenteatravsdemtodomodificadorese recuperadores.

7.13. Exercciospropostos
01)Definaclasse?Ecitetrsexemplosdeclasses. 02)Definaobjetoeatributos. 03)Comoconstitudooestadodeumobjeto? A)()peloosvaloresquepassarcomoparmetrosnoconstrutordaclasse. B)()peloosvaloresquesoatribudosnoparmetrosnoconstrutordaclasse. C)()peloosvaloresquesoatribudosasvariveisinstncia. D)()Todososvaloresatribudosasvariveisdeinstnciasetambmasvariveislocais. 04.Qualadiferenaentreclasseeobjeto?Exemplifique: 05)Crieumprogramaquerecebaumnmerointeirocomoargumentodeummtodoeretorne essenmeromultiplicadopor3. 06)Crieumprogramaquerecebadoisnmerosinteiroscomoargumentosdeummtodoeretorne ocomoresultadoasomadosnmerosrecebidos. 07)Faaomesmoprogramaquerecebadoisnmerosfracionrioscomoargumentosdeummtodo eretorneocomoresultadoasomadosnmerosrecebidos. 08)Umaclassemarcadacomofinalpodeseralterada?Justifiquesuaresposta.

Projeto Ejovem Mdulo II

Java

71

09)Oqueumaclasseabstrata?Faaumacdigodeexemplodeumaclasseabstrata. 10)ModeleumaclassechamadaAluno,nestaclassedeveterosseguintesatributos(nome,idade, altura,cordapele,umaidentificaonica)epossuiparacadaatributoummtodoquemodifique eummtodoqueretorneasinformaessobreoaluno,almdepossuitambmumconstrutorque recebaaidentificaoenomedoalunocomoparmetros. 11)Descrevacomsuapalavrasoquevocentendeporpolimorfismo,citetrsexemplodousode polimorfismoemjava.

7.14. Exercciosdefixao
01)Modeleumaclassechamada(Pessoa)comosseguintesatributos(nome,idade,cpf,sexo,raae altura) e todos com os modificadores de acesso (private).Para est classe instancie trs objetos diferentesapartirdaclassePessoa. 02)Quantosobjetospodemoscriar(instanciar)apartirdaclassePessoa? 03)Definaclasseabstrata?Ecitetrsexemplosdeclassesabstratascomalgunsmtodos. 04)Definaclasseencapsulamento?Ecitedoisexemplosdemembrosencapsulados. 05)Comofuncionaapassagemdeparmetrosemjava?Descrevadetalhadamenteesteprocesso. 06)Porqueeudeveriausaremmeuprogramajavaummtodoouumavarivelquepertencea classeenoaumainstnciadaclasse?

7.15. Exerccioscomplementares.
01) Crie uma classe abstrata que represente um quadriltero e receba como parmetros do construtorosquatrovaloresreferentesacadalado. 02)Estendaaclassecriadanoexerccio01,asubclassedeverepresentarumquadradoeportanto recebercomoparmetroumnicovalorreferenteaosseuslados. 03)Estendanovamenteaclassecriadanoexerccio01,asubclassedeverepresentarumretnguloe portantodeverecebercomoparmetrosdoisvaloresdiferentes.

Projeto Ejovem Mdulo II

Java

72

Captulo8. Herana
8.1. Pacotes:
Java permite que voc agrupe classes em uma coleo chamada pacotes. Os pacotes so convenientesparaorganizarseutrabalhoeparasepararseutrabalhodasbibliotecasdecdigos fornecidasporterceiros.Abibliotecajavapadrodistribudasemumasriedepacotes,incluindo java.lang,java.util,java.neteassimpordiante.Ospacotesjavapadrosoexemplosdepacotes hierrquicos. Da mesma forma como voc tem subdiretrios aninhados em seu disco rgido, possvelorganizarospacotesusandonveisdeaninhamento.Todosospacotesjavapadroficam dentrodashierarquiasdepacotesjavaejavax.Suponhaquedoisprogramadorestenhamaboa ideiadefornecerumaclasseExemplo.Desdequecadaumcoloquesuaclassedentrodepacotes diferentes,nohaverconflitos,casocontrrioaconfusoestarmada.Exemplo01:

8.1.1. Importaesdeclasses:
Umaclassepodeusartodasasclassesseuprpriopacoteetodasasclassespblicasdeoutros pacotes diferentes. Voc pode acessar as classes pblicas de outros pacotes da seguinte forma. Simplesmenteimportetodasasclassesdopacoteousomenteumaclassesemespecfico. Exemplo01:

8.2. Herana:
fundamentalparaJavaeoutraslinguagensdeprogramaoorientadasaobjetos,oconceitode herana,quepermiteaocdigodefinidoemumaclasseserreutilizadoemoutrasclasses.

Sintaxedeheranaemjava: classNomeDaClasseASerCriadaextendsNomeDaClasseASerHerdada Em Java, pode ser definido uma superclasse geral (mais abstrata), e depois estendla com subclassesmaisespecficas.Asuperclassenosabenadasobreasclassesqueherdamdela,mas todasassubclassesprecisamdeclararexplicitamentearelaodeherana.Umasuperclasserecebe
Projeto Ejovem Mdulo II

Java

73

automaticamenteasvariveisdeinstnciasacessveiseosmtodosdefinidospelasuperclasse,mas tambmlivreparasubstituirmtodosdasuperclasseparadefinircomportamentomaisespecficos. Osobjetosdeumamesmaclassepodemtirarproveitoderelaesdeherana,ondeobjetosrecm criadosabsorvemcaractersticasdeoutrosjexistenteseadicionamsenovascaractersticas.

8.3. Object: A superclasse csmica do java


AclassObject:AclasseObjectoltimoancestraltodaclasseemjavaestendedeObject. Entretanto,nuncaserprecisoescrever: A superclasse terminal Object automaticamente inclusa se nenhuma superclasse for mencionada explicitamente. Pelo fato de todas as classes em java estenderem Object, importantefamiliarizarsecomosserviosfornecidospelaclasseObject.Remeteremosaoleitora pesquisarememartigosnainternetouatmesmoveradocumentaoonlinequelistaosvrios mtodosdaclasseObject,masquesaparecemquandolidamoscomthreads(linhasdeexecuo). VocpodeusarvariveisdotipoObjectparareferirseaobjetosdequalquertipo: claroqueumavariveldotipoObjectsomentesertilcomoummarcadorgenricoparavalores arbitrrios.Parafazerqualquercoisaespecficacomovalor,vocprecisateralgumconhecimento sobreotipooriginale,ento,aplicarumaconverso:Emjava,somenteostipos primitivos(nmeros,caracteresevaloreslgicos)nosoobjetos.Todosostiposdearras, independentementedeseremarrasdeobjetosouarrasdetiposprimitivos,sotiposdeclassesque estendemaclasseObject. Super: Apalavrasuperseguidaimediatamentedeparnteseschamaoconstrutordasuperclassede mesmaassinatura.Estedeveseraprimeirainstruodentrodeumconstrutordasubclasse. Superclasse: umaclassedaqualseherdaoutrasclasses. Aclusulaopcionalestendeemuma declarao de classe especifica a superclasse direta da classe atual. Uma classe dito ser uma subclassediretadaclasse,queseestende.Asuperclassediretaaclasseapartirdecujaaplicaoa implementaodaclasseatualderivada.Aclusulaextendsnodeveaparecernadefinioda classe java.lang.Object,poisprimordialaclasseenotemnenhumasuperclassedireta.Sea declaraodeclasseparaqualqueroutraclassenotemnenhumaclusulaextends,entoaclasse temaclassejava.lang.Objectcomoimplcitadasuperclassedireta. Subclasses: uma classequeherda de uma classe ou de uma interface. Uma subclasse herda estadoecomportamentodetodososseusantepassados.Asuperclasseotermorefereseancestral diretodeumaclasse,assimcomotodasassuasclassesascendentes.Essahierarquiadeclassessegue umaapresentaonaformadervore,emquearaizasuperclassedetodoosistema.Cadanvel abaixodessasuperclassedosistemaacrescentafunesespecficas. Exemplo01: Nesteexemplovamosmostrarcomoprocedercomessepoderosorecursodojavaquechamamosde heranasimples.
Projeto Ejovem Mdulo II

Java

74

CdigodasuperclasseConta.

CdigodasubclasseCPoupancaqueestendedasuperclasseConta.

CdigodasubclasseCEspecialqueestendedasuperclasseConta.

Projeto Ejovem Mdulo II

Java

75

Diagramadeclassesrepresentandoaheranaentreasclassescitadasacima.

Nota:Javapermitequeumaclasseherdeapenasascaractersticasdeumanicaclasse, ouseja,nopodehaverheranasmltiplas.Porm,permitidoheranasemcadeias,por exemplo:seaclasseMamiferoherdaaclasseAnimal,quandofizermosaclasseCachorro herdaraclasseMamifero,aclasseCachorrotambmherdarascaractersticasdaclasse Animal.

Como estamos tratando deherana de classes, todaclassetemseumtodoconstrutor.Portanto, seestamostrabalhandocomduasclasses,temos dois mtodos construtores. Para acessarmos o mtodo construtor da classe que est sendo
Projeto Ejovem Mdulo II

Java

76

herdadausamososuper(). Exemplo02: Parademonstrarcomodefinirorelacionamentodeherana,consideraseocontextodeterque desenvolverumprogramaquesimuleocomportamentodevriostiposdeanimaiscomomostrado nafiguraaoladoemumdeterminadoambiente. Inicialmente,apenasumgrupodeanimais estar presente neste ambiente e cada animal deve ser representado por um objeto. Alm disso, os animais movemse no ambiente ao seu modo e podem fazer umconjuntodecoisas.Oprogramadever preverquenovostiposdeanimaispodero serincludosnoambiente.

Oprimeiropassoobservarcadaanimaledefiniroquecadaobjetodotipoanimaltememcomum noquedizrespeitoaosatributosecomportamentos(mtodos).Devesedefinirtambmcomoos tipos de animais se relacionam. Inicialmente, o programa deve simular o comportamento dos animaisilustradosnafigura,ouseja,deumleo,deumlobo,deumgato,deumhipoptamo,de umtigreedeumcachorro.

Osegundopassoconsisteemprojetarasuperclasse,ouseja,aclassequerepresentaoestadoeo comportamento em comum a todos os animais. Para este exemplo, como todos os objetos so animais,asuperclassefoidenominadacomoAnimaleasvariveisemtodosemcomunsatodosos animaisforamatribudosaela,comoilustradonaFigura. Nesteexemplo,cincovariveisforam definidas:(otipodecomidaqueoanimalcome),(onveldefomedoanimal),(representaoda alturaelarguradoespaoqueoanimalvagaraoseuredor)e(ascoordenadasXeYdoanimalno espao).Almdisso,quatromtodosforamdefinidosparadefinirocomportamentodosanimais: (comportamento do animal ao fazer algum rudo), (comportamento 57 do animal ao comer), (comportamento do animal dormindo) e (comportamento do animal quando no est nem dormindonemcomendo,provavelmentevagueandonoambiente). O terceiro passo o de decidir se alguma subclasse precisa de comportamentos (mtodos) especficosaoseutipodesubclasse.AnalisandoaclasseAnimal,podeseextrairqueosmtodos devemterimplementaesdiferentesemcadaclassedeanimais,afinal,cadatipodeanimaltem comportamentodistintoaocomerefazerrudos.Assim,essesmtodosdasuperclassedevemser sobrescritos nas subclasses, ou seja, redefinidos. Os mtodos no foram escolhidos para serem redefinidos por achar que esses comportamentos podem ser generalizados a todos os tipos de animais.

Projeto Ejovem Mdulo II

Java

77

8.3.1. Construtoresdasubclasse

Osconstrutoresdasuperclassenosoherdadospelasubclasse,logo,estadeverterseusprprios construtoresparainicializarseusatributos.Todavia,aoinstanciarumobjetodasubclasse,devemos inicializaraquelesatributosqueelaestherdando,eofazemoschamandoalgumconstrutorda superclasse,usandoachamadasuper(...).

8.4. Relacionamentosumetemum. 8.4.1. UM:


Na programao orientada a objetos, o conceito um baseado na herana de classesouimplementaodeinterfaces.Otermoumumamaneiradedizeresse itemumtipodesseoutro. Exemplo01:

Nota:NesteexemploacimaaclasseMamferoestendaaclasseAnimal,poressemotivo dizemosqueaclasseMamferoumanimal. Exemplo02:

Projeto Ejovem Mdulo II

Java

78

Nota:NesteoutroexemploacimaaclasseMamferoimplementaainterfaceAnimal,por essemotivotambmdizemosqueaclasseMamferoumanimal.

8.4.2. TEMUM:
Osrelacionamentostemumsobaseadosnautilizao,emvezdeherana.Emoutraspalavras,a classeAtemumBocorrerseocdigodaclasseAapresentarumarefernciaaumainstnciada classeB.Porexemploafigurademostraorelacionamentotemumentreosobjetos:

Exemplo01:

Nota:Nesteexemplodemostramoscomofuncionaorelacionamentotemum,noqualuma classeutilizaumobjetoapartirdeoutraclasse.

8.5. Polimorfismode:(mtodossubscritosemtodossobrecarregados). 8.5.1. Polimorfismo:


Permitequeumarefernciadeumtipodeumasuperclassetenhaseucomportamentoalteradode acordo com a instncia da classe filha a ela associada. O polimorfismo permite a criao de superclassesabstratas,ouseja,commtodosdefinidos(declarados)enoimplementados,ondea implementaoocorresomentenassubclassesnoabstratas. importantelembrarquequalquerobjetoemjavaquepassaremmaisdeumteste,UMpode ser considerado polimrfico. Fora os objetos do tipo OBJECT, todos os objetos java so polimrficos,nosentidodequepassamnotesteUMfeitoemrelaoaoseuprpriotipoeem relaoclasseOBJECT.

Projeto Ejovem Mdulo II

Java

79

Exemplo01:

O polimorfismo como foi apresentado aqui , para a maioria dos programadores, o verdadeiro

polimorfismo.Sexisteemhierarquiasdeheranaouinterface.Todavia,asobrecargatambm um tipodepolimorfismo. Alguns autoresdestacam os doistipos, caso em quechamase oque estudamosdepolimorfismotiposobreposio(ligaotardia,dinmicaoudynamicbinding)eo outro depolimorfismo tipo sobrecarga (ligao precoce, esttica ou early binding). A diferena principal que na sobrecarga quem escolhe o mtodo a ser acionado o compilador e no polimorfismocomligaodinmicaquemdecideaJVM. Regrasparaopolimorfismo. Paraquepossarmosacessarumobjetoemjavautilizamosumavariveldereferencia.Ehalgumas regrasimportantesamemorizarsobreasvariveisdereferncias: Umavarivelderefernciaspodeserdeumtipoe,umavezdeclarada,essetiponunca podesermodificado(emboraoobjetoquereferenciepossasemodificar). Umarefernciaumavarivel,deformaquepodeserreatribudaparaoutrosobjetos(a noserquearefernciasejamarcadacomofinal). Otipodeumavarivelderefernciadeterminaosmtodoquepodemserchamadosno objetooqualavarivelestreferenciando. Umavarivelderefernciapodeapontarparaqualquerobjetodomesmotipoquea refernciadeclarada,oupodesereferiraqualquersubtipodotipodeclarado. Umavarivelderefernciapodeserdeclaradacomoumtipodeclasseouumtipode
Projeto Ejovem Mdulo II

Java

80

interface.Seavarivelfordeclaradacomoumtipodeinterface,elapodereferenciarqualquer objetodequalquerclassequeimplementeainterface. Umaclassenopodeestendermaisdoqueumaclasse.Issosignificaumparenteporclasse.Uma classepodetermltiplosancestrais,noentanto,umavezqueaclasseBpoderiaestenderaclasseA, a classe C poderia estender a classe B e assim por diante. Ento, qualquer classe poderia ter mltiplasclassesacimadesinarvoredeherana,masissonoomesmoquedizerqueuma classeestendediretamenteduasclasses.

8.5.2. Mtodos subrescritos:


Umaclassequeherdeomtododeumasuperclasse,podersobrescreveressemtodo(amenosque, como aprendeu anteriormente, ele tenha sido marcado com final). O benefcio chave de sobrescreverorecursodedefinirumcomportamentoquesejaespecficodedeterminadotipode subclasse. O exemplo a seguir demonstra a subclasse Cachorro pertencente classe Animal sobrescrevendoaversodomtodocomer()dessaclasse. 1criaasuperclassechamadadeAnimal:

2criaasubclassechamadadeCachorroqueestendedasuperclasseAnimal:

3 cria a classe de teste para invocar o mtodo comer(), mais especializado que est sendo sobrescritonaCachorro:

Regrasparamtodossobrescritos: Otipoderetornodeveseromesmo,ouumsubtipodotipoderetornodeclaradonomtodo originalsobrescritodasuperclasse. Alistadeparmetrosdevecoincidirexatamentecomadomtodosobrescrito. Onveldeacessonodevesermaisrestritoqueodomtodosobrescritoesimmenos restritoqueodomtodosobrescrito. Omtodosobrescritonodevelanarexceesverificadasnovasoumenosabrangentesque asdeclaradaspelomtodoqueestsendosobrescrito.Porexemplo,ummtodoquedeclare umaexceoFileNotFoundExceptionnopodersersobrescritoporummtodoquedeclare

Projeto Ejovem Mdulo II

Java

81

umaSQLException,Exceptionouqualqueroutraexceoqueomtodonodetempode execuo,amenosqueelasejaumasubclassedeFileNotFoundException. Vocnopodesobrescreverummtodomarcadocomfinal.Nemosmtodomarcadoscom static. Se um mtodo no puder se herdado, no poder sobrescrevlo. Lembrese de que sobrescreverimplicaemestreimplementandoummtodoherdado.

8.5.3. Mtodossobrecarregados:
OsmtodossobrecarregadosDEVEMalteraralistadeargumentos; OsmtodossobrecarregadosPODEMalterarotipoderetorno; OsmtodossobrecarregadosPODEMalteraromodificadordeacesso; OsmtodossobrecarregadosPODEMdeclararexceesverificadasoumaisabrangentes; Ummtodopodesersobrecarregadonamesmaclasseouemumasubclasse; Exemplo01:

Nota:Podemosobservarquenesteexemploomtodocalc(),estsendosobrecarregado.Porque existe trs verses do mesmo mtodo mais cada uma especificando um mtodo diferente, com argumentoetipoderetornototalmentediferentes.

8.5.4. Implementao de Interfaces na linguagem java.


Interface: Alinguagemjavatambmofereceoutraestrutura,denominadainterface,comsintaxe similardeclassesmascontendoapenasaespecificaodafuncionalidadequeumaclassedeve conter,semdeterminarcomoessafuncionalidadedeveserimplementada.UmainterfaceJava umaclasseabstrataparaaqualtodososmtodossoimplicitamentepblicoseabstratos,etodos osatributossoimplicitamentestaticefinal.

Projeto Ejovem Mdulo II

Java

82

Vejamos abaixo em um exemplo o cdigo de implementao de uma interface em java, como funcionaadeclaraodainterfaceedetodosseusmtodos,oquepodeserpermitidoequeno podeserpermitidonumadeclaraodeinterface. Exemplo01:

8.5.5. Usandoclassequeimplementainterfaces
Umavezcriadaainterface,precisamosterumaclasseondeseroimplementadososmtodosque foramdeclarados.Nonossoexemplo,aclasseexatamenteaclasseMeuVeiculomostradaabaixo. Mastemosdeindicar naclassedeimplementaoqueestamosimplementando umainterface,e dizer tambm qual a interfaceou quais as interfaces (pois, a linguagem java suporta mltiplas interfacesnumanicaclasse).

Comentrios:Umavantagemdousodeinterface,quepodemosdeclararobjetosdeinterfacese depoisescolherumaclassedeimplementaoparainstancila.Vejaesteartigosobreadeclaraoe instanciao de objetos em Java. Por exemplo, para o caso da nossa classe de MeuVeiculo, poderamosfazeroseguintenaclasseAppVeiculo:

Projeto Ejovem Mdulo II

Java

83

8.6. Conversodevariveisdereferncias.
EmJavaPEpossvelutilizamostiposgenricosdevariveisderefernciaparaapontarparatiposde objetosmaisespecficos.Issoformaabasedopolimorfismo.Porexemplo: Animalanimal=newCachorro();

Nota:Masoqueacontecequandovocdesejausaravarivelderefernciadoanimalafimde chamar um mtodo que apenas a classe Cachorro possui? Voc sabe que est referindo a um Cachorro,edesejaalgoqueespecficoaCachorro. Oblocodecdigoaoladocontmumcast,quenestecasoasvezeschamadodedowncast,porque estamos convertendo para baixo na rvore de herana, de uma classe geral para uma mais especfica. Agora, ocompiladorficarfeliz. Antesdetentarmoschamaromtodocomer(), ns convertemosavariveldoaparaotipoCachorro.Oqueestamosquerendodizeraocompilador: sabemosqueelanaverdadeserefereaumobjetoCachorro,entonotemproblemaemcriaruma novavarivelderefernciadotipoCachorroparapontarparaesteobjeto.Nestecaso,nossafamos porque,antesdesequertentarmosaconverso,fazemosumtesteinstanceofparatermoscerteza.

8.7. Pilhaeheap.
Paraamaioriadaspessoas,entenderosfundamentossobreapilhaeoheapfacilitabastantea compreensodetpicoscomoapassagemdeargumentos,opolimorfismo,threadsecoletadelixo. Emgeralasvriaspartes(mtodos,variveiseobjetos)dosprogramasemjavaresidememumdos doisseguinteslugaresdamemria:Napilhaounaheap. 1:Asvariveisdeinstnciaseosobjetosresidemnoheap.
Projeto Ejovem Mdulo II

Java

84

2:Asvariveislocaiseosmtodosresidemnopilha. Vejamosailustraonafiguraabaixo,quedemonstracomofuncionatudoisso.

8.8. Exercciospropostos
01)Defina(digaoqueeparaqueserve): IHerana IIPolimorfismo IIIEncapsulamento 02)Oquediferenciaumtipoprimitivodeumaclasse? 03)Exemplifiqueatravsdeumdiagramadeclassesdoisusosparaheranaedoisusospara associao. 04)Qualadiferenaentreassociaoeagregao?Mostreexemplosdecadaumdoscasos. 05)Quantosparmetrosummtodopodeter(mnimoemximo)?Quantosatributosemtodos umaclassepodeter(mnimoemximo)? 06)Oqueumtipoderetorno?Todomtodoprecisaterum? 07)Oscomponentesdeumobjetoso:identidade,estadoecomportamento.Definacadaumdeles. 08)Mostreatravsdeumdiagramadeclassesumexemplodeumaclassedeassociao.Expliqueo diagrama. 09)Qualquerconjuntodeobjetospodeserconsideradoumaclasse?Justifique. 10)Porqueodiagramadeobjetosdinmico? 11)Descrevacomsuapalavracomofuncionaosrelacionamentos(umetemum):Citeexemplos desserelacionamentosemumprograma,(utilizandoherana). 12)Oqueumainterfaceemjava?Porqueutilizarumainterfacenomeuprograma?Qualasuareal funcionalidade? 13)FaaumainterfacechamadaAlunos,quecontmosmtodosabstratos(nomeDoAluno(String nome);,omtodoverNomeDoAluno();,mediaFinal((floatn1,floatn2,floatn3)/3.0f);)ea implementenaclasseconcretachamadaAlunoDeGraduao.

8.9. Exercciosfixao
01)CrieumainterfacedenominadaFiguraGeometrica,adicioneosmtodoscalcularreaecalcular
Projeto Ejovem Mdulo II

Java

85

permetro. 02)Modifiqueaclasseabstratacriadanoexerccio01deformaqueelaimplementeainterface FiguraGeomtrica. 03)ImplementeosmtodosdefinidosnainterfaceFiguraGeometricanasclasses QuadradoeRetngulo. 04)Identifiqueasuperclasseeasubclassenosparesabaixo: a)ClienteEspecialeCliente.b)VeculoeCaminho c)MotoristaeFuncionrio.d)QuadrilteroeQuadrado.

8.10. Exerccioscomplementares
01)Oqueumaclasseexclusiva?Eumaclasseconcreta?Dumexemplo. 02)Paraqueservemospacotes? 03)Definaedigaparaqueserveotratamentodeexceesemjava. 04)Descrevaemumprogramacomofuncionaotratamentodeexceesemjava. 05)Faaumprogramaemjavaqueutilizeasclausulastry{}catch(){}ethrowsnotratamentode algumaexceoquepoderocorrer.

8.11. Capturandoumaexceousandoobloco(tryecatch).
Alinguagemjavaforneceaosdesenvolvedoresummecanismosofisticadopara manipulao de erros que produz cdigos de manipulao eficientes e organizados:amanipulaodeexcees.Amanipulaodeexceespermite que os desenvolvedores detectem erros facilmente sem escrever um cdigo especial para testar valores retornados. Permite tambm manter o cdigo de manipulaodeexceesnitidamenteseparadodocdigoquegeraraexceo. Almdisso,permitequeomesmocdigodemanipulaodeexceeslidecom asdiferentesexceespossveis. AclasseThrowableanicaclassecujasinstnciasdiretasouindiretaspodemserusadaspara serem lanadas. A classe Throwable prdefinida na linguagem Java, juntamente com vrias outrasclassesdefinindoum grandenmerodecategoriasdeerro.OsprogramadoresJava, por conveno, caso queiram criar novas excees devem estender a classe Exception que uma subclassedeThrowable.DuasclassesdescendentesdaclasseThrowablepodemserconsideradas especiais: a classe Error e a classe RuntimeException. A linguagem java no obriga o programadoratrataroslanamentosdeexceoenvolvendoinstnciasdaclasseError,daclasse RuntimeExceptionedasclassesdelasderivadas,todososoutroslanamentosdeexceodevemser tratadospeloprogramador.Capturandoumaexceocomoblocotryecatch. Vejamosasintaxe.

Projeto Ejovem Mdulo II

Java

86

Otermoexceessignificacondioexcepcional,eumaocorrnciaquealteraofluxonormaldo programa.Vriascoisaspodemlevaraexcees,incluindofalhasdohardware,exaustoderecurso eosfamososerros.Quandoissoacontece,ousejaquandoocorreumeventoexcepcionalocorreem Java,dizsequeumaexceoserlanada. Exemplo01:

Nota:Omtodocalcseforchamadocomyigualzero(0),gerarumerroeumaexceo ser lanada, esse erro poder ser sinalizado no bloco trycatch,ento a execuo do mtodopularparaablocodecdigocatch,ondesermostradoumamensagemdeerro. Exemplo02: Caso01:NesteexemplovamoschamaromtodoconverteStr(),passandoumastringnumrica,que nonossocaso8eoresultadoaconversodastringemumnmerodepontoflutuante,daa divisofeitaeaexecuodoprogramaacontecesemnenhumproblema.

Caso02:NestemesmoexemplovamoschamaragoraomtodoconverteStr(),passandoumastring nonumrica,quenonossocasoacaractere'n'eoresultadoolanamentodeumaexceo, jogandoofluxodeexecuodoprogramaparaoblococatch,ondeimprimeumamensagemnano console.

Projeto Ejovem Mdulo II

Java

87

8.11.1. Finally
Finally:otrechodecdigofinal.Afunobsicadefinallysempreexecutarseublocode dadosmesmoqueumaexceosejalanada.muitotilparaliberarrecursosdosistemaquando utilizamos,porexemplo,conexesdebancodedadoseaberturadebufferparaleituraouescritade arquivos.

Resultadodocdigoacima:

8.11.2. Lanadoumaexceocomothrows.
OobjetodeexceoumainstnciadaclasseExceptionoudeumadeumadesuassubclasses.A clusula catch usa, como parmetro, uma instncia de objeto de uma tipo derivado da classe Exception.Alinguagemjavaexigequetodomtodocaptureaexceoverificadaquepodevira lanarou ento declare que lanar a exceo. Adeclarao da exceo fazparteda interface pblicadomtodo.Nadeclaraodeumaexceoquepoderserlanada,apalavrachavethrows usadaemumadefiniodomtodo,juntocomumalistadetodasasexceesverificadasque poderoserlanadas. Exemplo01:

Exemplo02:

Projeto Ejovem Mdulo II

Java

88

8.11.3. Criandoumaexceocomthrow.
AmquinaVirtualJavalanarefernciasparainstnciasdemaneiraimplcitautilizandoasclasses prdefinidas.Oprogramadorpodeutilizarocomandothrowdeformaexplcita.Quandoofluxode controle atinge o comando throw <expresso>, a expresso avaliada. Esta expresso corresponde, em geral criao de um objeto e resulta numa referncia, p. ex. throw new ErroDoTipoX();. A partir da o fluxo de controle ser desviado para uma clusula catch apropriadadealgumcomandotrycatch. O fluxo de controle segue a cadeia dinmica dos registros deativaodasinvocaesdos mtodos,ousejaaexecuode um mtodo pode terminar (i) por que o fluxo de controle atingiu o final do mtodo (return implcito, somente no casodemtodosdotipovoid!),(ii)porqueofluxodecontroleatingiuumcomandoreturn,ou(iii) porquefoiexecutadoumtrowimplcitoouexplcitoquenofoiapanhadoporumcomandotry catchdaquelemtodo.Aprocuraporumtrycatchapropriadopropagadaatopontoemqueh um retorno para o mtodo main, neste caso a execuo do programa ser finalizada, com mensagemdeerroprovidapelaMVJdizendoqueumaexceofoilanadasemquefosseapanhada. Edeversermostradoalgocomo:

Exemplosdeexceesjdefinidasnopacotejava.lang: ArithmeticException:indicasituaesdeerrosemprocessamentoaritmtico,talcomoumadiviso inteirapor0.Adivisodeumvalorrealpor0nogeraumaexceo(oresultadoovalorinfinito). NumberFormatException: indica que tentouse a converso de uma string para um formato numrico,masseucontedonorepresentavaadequadamenteumnmeroparaaqueleformato. umasubclassedeIllegalArgumentException; IndexOutOfBounds:indicaatentativadeacessoaumelementodeumagregadoaqumoualm dos limites vlidos. a superclasse de ArrayIndexOutOfBoundsException, para arranjos, e de StringIndexOutOfBounds,parastrings. NullPointerException:indicaqueaaplicaotentouusarumarefernciaaumobjetoquenofoi aindadefinida. ClassNotFoundException:indicaqueamquinavirtualJavatentoucarregarumaclassemasno foipossvelencontrladuranteaexecuodaaplicao.

Projeto Ejovem Mdulo II

Java

89

8.12. Exerccioscomplementares
01)Oqueumaclasseexclusiva?Dumexemplo. 02)Paraqueservemospacotes? 03)Definaedigaparaqueserveotratamentodeexceesemjava. 04)Descrevaemumprogramacomofuncionaotratamentodeexceesemjava. 05)Faaumprogramaemjavaqueutilizeasclausulastry{}catch(){}ethrowsnotratamentode algumaexceoquepoderocorrer.

Projeto Ejovem Mdulo II

Java

90

Captulo 9. Arrays e matrizes: 9.1. Declarao, inicializao e atribuio de valores em arrays.


Array : Um array ou vetor um conjunto de posies sequenciais na memria que possuem o mesmo nome e o mesmotipo.Podeserformadoportiposprimitivosouobjetos (referncias). Construirumarraysignificacriaroobjetoarrynaheap(onde todos os objetos java residem), em outras palavrass, usar a palavrachavenewcomotipodoarray.Paracriarumobjetode arrayalinguagemjavaterquesaberquantoespaoalocarna heap, portanto, preciso especificar o tamanho do array na horadaconstruo.Essetamanhoserigualaquantidadede elementosqueoarrayarmazenar. Regrasparaosvetores: - Quantidade mxima de elementos obtida atravs da propriedade length (comprimento do vetor). Verificadosemtempodeexecuo.Tentativadeacessarndiceinexistenteprovocaumerrona execuo. Tipodefinido.Podeserestringirotipodoselementosquepodemserarmazenados. ParadeclararumvetoremJava,bastautilizaroscolchetes([]).Observasequebastaadicionar[] nadeclaraodavarivel,podendoserantesoudepoisdonomedavarivel.Nosexemplosabaixo, sodeclaradosumvetordeinteiros,vetordestringeumvetordevaloresdouble. Os vetores ocupam espao em memria. Alm de definirotipodovetor,necessriodefinironmero de elementos que ele vai suportar. Isso feito a partirdooperador new,duranteainicializaodo vetor. Quando o tamanho do vetor definido, automaticamente,asvariveisnumricasdotipodedadosprimitivosoinicializadascomzero;as variveisbooleanassoinicializadascomfalse;easreferncias(variveisdetiposnoprimitivo) soinicializadascomnull.NoexemplodaListadoabaixosoalocados10elementosparaumvetor deinteiros.

Projeto Ejovem Mdulo II

Java

91

9.1.1. Declaraoeinicializandovetor
Exemplo01:

Exemplo02:

Exemplo03:

9.1.2. Acessando elemento de um vetor:


Oselementosdeumvetorsoacessadosfornecendoonomedovetorseguidopelonmeroda posiodoelementoparticularentrecolchetes([]).Oprimeiroelementodovetorencontrasena posiozero. Exemplo01:Declaraoeinicializandoarrayannimo.

Exemplo02:

Projeto Ejovem Mdulo II

Java

92

Novetorrepresentadoacimatemos,porexemplo,armazenadono ndice2ovalor9.3.Note que, comodeclaramosum vetor com 10 posies, os ndicesvariam de 0a 9. Mas, resta uma dvida:como referenciarasposiesdo vetorearmazenardados nas mesmas? Asintaxepara utilizarumaposiodovetor:nome_do_vetor[ndice];

9.1.3. Atributolength.

TodovetoremJavapossuioatributolengthquedefineoseunmerodeelementos.Esseatributo podeserusadaporqualquerprogramaemjava.

Agoravamosanalisaroresultadodessecdigoacima:

9.1.4. Construodearraysmultidimensionais.
Os arrays multidimensionais so simplesmente arrays com outros arrays. Portanto, um array bidimensionaldetipoint,naverdade,serumobjetocomotipodearrayint(int[]),emquecada elementodessearrayfarumarefernciaaoutroarrayint. Matrizes multidimensionais so matrizes de matrizes com mesmo tamanho. Ficou complicado? Entoobserveafiguraabaixo.

Projeto Ejovem Mdulo II

Java

93

Oexemploabaixodeclaraeconstriumarraybidimensionaldetipoint.

Osarraysmultidimensionaissotambmchamadosdematrizes:AsmatrizesemJavaequivalema vetoresdevetores,ouseja,emcadacluladeumvetorprincipalarmazenadooendereodeoutro vetor.

Abaixomostradooresultadodofragmentodecdigodoprogramaacima:

9.1.5. Acessando elemento de uma matriz:


Matrizes soestruturasindexadasutilizadaspararepresentarcertaquantidadedevaloresdeum mesmotipo.Sevocestiveratento,deveestarseperguntando:Masessenoo
Projeto Ejovem Mdulo II

Java

94

conceitodevetor?.Naverdade,vetorumtipoespecialdematriz.Dizemosquevetor umamatrizunidimensional.Ouseja,enquantoovetortemapenasumadimenso,amatrizpodeter tantasdimensesquantasforemnecessrias.Mas,nestecursotrabalharemossemprecommatrizes deduasdimenses.Assim,nestetexto,semprequenosreferirmosamatrizes,estaremos falando de matrizes bidimensionais. Para facilitar o entendimento, a Figura 34 apresenta uma matrizcapazdearmazenarduasnotasdeumaturmadecincoalunos.

Nota:SuponhaqueoprimeiroalunodalistadechamadadeumaturmasejaoAndreosegundo sejaoBruno.Assim,suponhaqueamatrizdaFiguraacimaestejaarmazenandoasnotasdessa turma.AnotadoAndr(ndice0nadimensodealunos)naprimeiraprova(ndice0nadimenso denotas)foi7.8.JanotadoBruno(ndice1nadimensodealunos)nasegundaprova(ndice1 nadimensodenotas)foi5.3. Regraparaarraysmultidimensionais: Soimplementadoscomoarraysdentrodearrays. So criados adicionandose mais um conjunto de colchetes aps o nome do array declarado.

9.1.6. Atribuiodevariveisderefernciaaarray.
Seotipodeclaradoparaoarrayforumaclasse,podeseinserirneleobjetosdequalquersubclasse dotipodeclarado.Porexemplo,seCachorroforumasubclassedeAnimal,entopoderinserir tantoobjetosCachorroquantoobjetosAnimalnoarray. Exemplo01:

Projeto Ejovem Mdulo II

Java

95

Nota:NesteexemploforaminseridosquatronovosobjetosAnimalnaheapeosatribuia trsposies(elementos)dendicedoarray.

9.1.7. Capturandodadosdousuriopeloteclado.
UtilizamosaclasseScannerparacapturamosentradasdedadosdousurio,digitadaspeloteclado, aclassemesmaoferecediversosmtodosquepodemserutilizadospararealizaresteservio. lembrarqueaclasseScannerumaclassedaAPIdoJavaeprecisaserimportadaantesdeusla. Osprincipaismtodosquepodemosutilizarsooslistadosabaixo: next()paralerStringdetextos. nextInt()paralernmerosinteiros. nextFloat()paralernmerosreaisounmerosdepontoflutuante. nextDouble()paralernmerosreaisounmerosdepontoflutuantecomdupla preciso. RegraparautilizarmosaclasseScanner: Inicialmente,definimosachamadaaopacotequecontmaclasseScanner:etodosos seusmtodoutilitrios. Definimosumavarivel,denominadasc,quesercriadaapartirdaclasseScannere direcionadaparaaentradapadro:

VejamosnesteprogramadeexemplocomofuncionaaclasseScannernaprtica: Exemplo01:

Projeto Ejovem Mdulo II

Java

96

Exemplo02:

Exemplo 03:

Exemplo04:

9.1.8. Argumentos de linha de comando


UmaaplicaoemJavaaceitaqualquerquantidadedeargumentospassadospelalinhadecomando. Argumentosdelinhadecomandopermitemaousuriomodificaraoperaodeumaaplicaoa partir de sua execuo. O usurio insere os argumentos na linha de comando no momento da execuodaaplicao.Deveselembrarqueosargumentosdelinhadecomandosoespecificados depoisdonomedaclasseaserexecutada.
Projeto Ejovem Mdulo II

Java

97

Exemplo:

1Passo:Entovamosprimeirocompilaroprogramaacima.utilizamososeguintecomandojavac seguindodonomedaclasse(ponto).java

2Passo:Depoisdecompilarmosoprograma,iremosexecutlousandocomandojava seguindo donomedaclassecomosargumentoqueseropassadosparaomtodomain.

Resultado: Aps de compilarmos e executarmos o programa passando os argumento dever apresentaralgocomomostradoabaixo.

NalinguagemJava,quandoumaaplicaoexecutada,osistemarepassaosargumentosda linhadecomandoparaaomtodomaindaaplicaoatravsdeumarraydeString.Cada elementodestearrayconterumdosargumentosdelinhadecomandopassados. importante lembrardadeclaraodomtodomain:

Projeto Ejovem Mdulo II

Java

98

OsargumentoquesopassadosparaoprogramasosalvosemumarraydeStringcomo identificadorargs.Noexemploanterior,osargumentosdelinhadecomandopassadosparaa aplicaoSortestaroemumarrayquecontercincostrings:"5","4","3","2"e"1". possvelconheceronmerodeargumentospassadospelalinhadecomandoutilizandoseo atributolengthdoarray.

Seoprogramaprecisamanipularargumentodelinhadecomandonumrico,ento,devese converteroargumentodotipoString,querepresentaumnmero,assimcomo"34",paraum nmero.Aquiestapartedocdigoqueconverteumargumentodelinhadecomandopara inteiro:

9.2. Exercciosdefixao.
01)Crieumprogramaquepercorraumarrayde10posieseimprimaoseucontedo. 02)Escrevaumprogramaquesometodososvalorescontidosemumarraydeinteirosecalculea mdia. 03)Desenvolvaumprogramaquedadoumarrayde10nmerosinteirosmultipliqueoprimeiro elementopeloseguinte,oresultadodeveentosermultiplicadopeloprximoelementoatque todososelementossejampercorridos.Imprimaovalorfinal. 04)Faaumprogramaqueinvertaasposiesdeumarraycom5elementos. 05)DefinaumaclassechamadaArray1. Estaclassedeverconterapenasomtodomain. Dentrodomtodomaindeclareumavarivelarrayinteirachamadadadoscom6elementos e,usandouminicializadordearray,inicializeacomosvalores1,4,9,16,25,36. Emseguida,utilizeumloopforparaimprimirosvaloresdecadaumdesteselementos.A sadadoseuprogramadeverseraseguinte: Oelementodendice0vale1. Oelementodendice1vale4. Oelementodendice2vale9. Oelementodendice3vale16. Oelementodendice4vale25. Oelementodendice5vale36.

Projeto Ejovem Mdulo II

Java

99

9.3. Exercciosresolvidos
01Implementeumprogramaquemostrenatelaasomadosonzeprimeirosnmerosprimos.

Resultado do programa:

02 - Implemente um programa que mostre na tela uma matriz 3x4 inicializada.

Projeto Ejovem Mdulo II

Java

100

9.4. Exercciosproposto.
01 Implemente um programa que recebe um nmero de 1 a 7 e imprime o dia da semana correspondente. 02Altereoprogramadoexerccioanteriorparaficarrecebendoonmerodentrodeumlao enquantoonmerofordiferentede0(zero). 03Implementeumprogramaquereceberepetidamenteumnmerode1a12,enquantoesse nmerofordiferentede0(zero),eimprimeomscorrespondente. Quando o nmero estiver fora do intervalo permitido, a mensagem ms invlido dever ser exibida. 04Escrevaumlaowhilequeexecute20vezes,imprimindoovalordavarivelxqueinicialmente estcomvalor10.Convertaestelaoparaumdowhile. 05Escrevaumprogramaqueimprimanatelaasomadosnmerosmparesentre1e30ea multiplicaodosnmerosparesentre1e30. 06Escrevaumprogramaquepercorradoislaosde0a10,uminternoaooutro,imprimindoos contadores,equandoestesforemiguais,oprogramadevepassarprximainteraodolaomais externo,casocontrrio,deveimprimirosvaloresdoscontadoresdosdoislaos. 07Desenvolvaumprogramaquesolicitaaousurioumnmerointeirodenomximo4dgitos. Invertaessenmero. 08Desenvolvaumprogramaquedadoumnmerointeirooprogramainformeseomesmoum nmeroprimo. 09)Faaumprogramaquecalculeoprodutoescalardedoisvetoresdedouble,isto,multiplique cadaelementopeloseurespectivonooutrovetoresomeosresultados. 11) Utilizando a classeScanner, j apresentada em mdulos anteriores, faa um programa que permitaousurioefetuaraentradade10nmerosquaisquer.Ordeneestesnmerosutilizandoa classeArrayseimprimaoresultado. 12)Faaumprogramaquerecebaumparmetroqualqueratravsdomtodomaineinformeao usurioatravsdeumacaixadedilogoqualfoioparmetropassado. 13)Crieumprogramaquemostreumdilogo,informandoquenoexistemparmetros,casono sejapassadonenhumparmetroatravsdalinhadecomando. 13)UtilizandoaclasseScannerfaaumprogramaquesoliciteaentradade10nmerosinteiros, logoapssoliciteaentradademais5nmerosinteiroscompareosnmerosobtidoseverifiqueseo segundovetorestcontidodentrodoprimeiro. 14)UtilizandoaclasseScannerfaaumprogramaquesoliciteaentradade10nmerosinteiros, verifiqueafreqnciadeocorrnciadecadanmeronovetor. 15) Crieumprogramaquerecebacomoparmetrodeentrada16valores,coloqueosemuma matriz4x4efaaatransposiodosvalores. 16)Desenvolvaumprogramaquereceba10parmetrosporlinhadecomando,invertatodasas posieseimprimaoresultado. 17)Desenvolvaumprograma,utilizandoaclasseScanner,queobtenha10valoresdeentradae verifiqueseelesformamumaprogressoaritmtica. 18)Desenvolvaumprograma,utilizandoaclasseScanner,queobtenha10valoresdeentradae identifiqueomaiorvalor,omenoreadiferenaentreosvalores. 19)Faaumalgoritmoparaordenarumvetordaseguinteforma,oalgoritmoidentificaomaior valor e o coloca na ltima posio livre de um outro vetor. Na prxima iterao este valor descartado,repetindoatnosobraremmaisvalores.
Projeto Ejovem Mdulo II

Java

101

20)Recebacomoentradadousurioumnmeroeumexpoente.Calculeestenmeroelevadoao expoente.Faatrsversesdesteprograma: a.Useumadeclaraowhilepararesolveresteproblema b.Useumadeclaraodowhilepararesolveresteproblema c.Useumadeclaraoforpararesolveresteproblema 21)CriarumarraydeStringsinicializadocomosnomesdossetediasdasemana.Porexemplo: Stringdias[]={"segunda","tera","quarta","quinta","sexta","sbado","domingo"}; Usandoumadeclaraowhile,imprimatodoocontedodoarray.Faaomesmoprogramaparaas declaraesdowhileefor. 22)EscrevaumprogramaemJavaquecalculaeimprimenatelaosalrioproporcionaldeum funcionrioquetrabalhouapenasNdiasnummsde22diasteis.Onmerodediastrabalhados bemcomoosalriointegraldofuncionriodevemserlidosdoteclado.Oresultadodeveserum nmeropontoflutuante. 23)Escreva umprogramaemJavaqueleiarepetidamenteumnmerodotecladoatqueseja digitado o nmero zero (0) e determine se o nmero lido perfeito ou no, imprimindo o resultado.Umnmeroditoperfeitoquandoigualasomadosseusdivisoresmenoresdoqueele, porexemplo,6perfeito,umavezque6=3+2+1. 13Faaumprogramaquecontenhaummenucom4opes: 1calcularofatorialdeumnmerodado 2calculararaizquadradade3nmerosdados 3imprimiratabuadacompletade1a10 4sairdoprograma

Projeto Ejovem Mdulo II

Java

102

Captulo10. ClassesString,Math,System.
10.1. Utilizao da classe String e seus mtodos. 10.1.1. A classe String.
AclasseStringrepresentaumconjuntodecaracteresUnicode.Eladeclaradacomofinale, portantonopodeserestendida.Istopreservaestetipodedado,reforandosuaimutabilidadee assegurandoqueumaStringsempreserumaString(elesdecidiramquevocnopodeherdarde char,nemdedoubleenemdeString,almdediversasoutras).

10.1.2. ComoDeclararumobjetoString?
AprimeiracoisaquetemosqueentenderqueaclasseStringimutvel.Masoquequerdizer imutvel?exatamenteoqueapalavradiz. Imutvel,isto,nomuda,seuestado nicoe imodificvel.QuandocriamosumobjetodotipoString,estamosnaverdadecriandoumobjetoque jamais ter seu valor modificado, porm, sua referncia pode ser compartilhada com demais variveis.Assim,podemospassarestevalornicoeimutveldenossastringcriadaparadiversas outrasvariveisderefernciaastrings.Paraentendermosmelhor,vamoscomearcomumsimples. exemplo01:

OsobjetosStringparecemestarsecomportarexatamentecomoosoutrosobjetos,portanto,porque todaaconfuso?Inalterabilidade!UmavezquevoctiveratribudovaloraumaString,essevalor numcapoderpoderseralterado,eleinaltervel,estcongelado,nosemover,acabouse,est concludotambmdiscutiremosasrazesposteriormente,nonosdeixeesquecer.Aboanovaque emboraoobjetoStringsejainaltervel,suavarivelderefernciapodeser. Observaremosesteexemplo:

Oqueestacontecendoaqui?AVMcrioumaisumobjetoStringnamemria,comoseguintevalor java.

Projeto Ejovem Mdulo II

Java

103

AgoravamosinseriraStringsumnovovalor=show!.Oobservequesercriadooutroobjeto noheapeavarivelderefernciaapontarparaessenovoobjeto.

dessaformaqueosobjetosStringsecomportaronamemria.IssoporqueaclasseString representaumconjuntodecaracteresUnicode,cadaumcontendo16bits.Eladeclaradacomo finale,portantonopodeserestendida.Istopreservaestetipodedado,reforandosua imutabilidadeeassegurandoqueumaStringsempreserumaString(elesdecidiramquevocno podeherdardechar,nemdedoubleenemdeString,almdediversasoutras).

10.1.3. MtodosdaclasseString:
AclasseStringdefineumasriedemtodosparamanipularasfuncionalidadesstrings,taiscomo: Obteronmerodecaracteresemumastring: intlength(); Exemplo01:

Projeto Ejovem Mdulo II

Java

104 Concatenarstrings: Stringconcat(Stringoutro); Exemplo02:

Compararstrings: booleanequals(Stringoutro); booleanequalsIgnoreCase(Stringoutro); Exemplo 01:

Extraircaracteresesubstrings: intcharAt(intposio); Stringsubstring(intpos_inicial); Stringsubstring(intpos_inicial,intpos_final); Localizarsubstrings: intindexOf(Stringsubstring); intindexOf(Stringsubstring,intpos_inicial); intlastIndexOf(Stringsubstring); intlastindexOf(Stringsubstring,intpos_inicial); booleanstartsWith(Stringprefixo); booleanendsWith(Stringsufixo);

10.1.4. Utilizao da classe Math e seus mtodos.


AclasseMathnosproporcionaumasriedeoperaeseconstantesmatemticasquesofacilmente acessadasestaticamente,ouseja,noprecisamos instnciar umobjeto parapodermosusarseus mtodos.

Projeto Ejovem Mdulo II

Java

105

10.1.4.1. Mtodos da classe Math:


Math.sqrt(a)retornaaraizquadradadea.. Math.pow(x,y)retornaovalorxelevadopotnciay. Math.round(a)retornaovalormaisprximodea. Math.random()retornaumvaloraleatrioentre0e1. Math.abs(a)retornaovalorabsolutodea(|a|). Math.max(a,b)retornaomaiorvalorentreaeb. Math.min(a,b)retornaomenorvalorentreaeb. OsmtodosdaclasseMathemjavadisponibilizamcertosclculosmatemticoscomuns,parausar osmtodosdaclasseMathnonecessrioimportaramesmapoiselafazpartedaclasseLangque importadaautomaticamentenahoradacompilao,osmtodosdaclasseMathsostaticelesso chamadosprecedendoseonomedomtodocomonomedaclasseMatheumoperadorponto(.). Paragerarumasadapodemosescrever: Exemplo01:Math.sqrt();

10.1.5. UtilizaodaclasseSystemeseusmtodos.
10.1.5.1. System.in : System.in um InputStream que normalmente ligada entrada de teclado do console programas.System.innousadocomfreqncia,poisosdadosnormalmentepassadaparaum aplicativo Java de linha de comando via linha de comando argumentos, ou arquivos de configurao.Nasaplicaescominterfacegrficaacontribuioparaaaplicaodadaatravsdo GUI.EsteummecanismodeentradaseparadadoJavaio. 10.1.6. System.out : System.out um PrintStream . System.out normalmentegeraosdadosquevocescrever paraelaparaoconsole.Issomuitasvezesutilizadoapartirdeapenasprogramasdeconsolecomo ferramentas de linha de comando. Esta tambm muitas vezes utilizado para imprimir as declaraes de depurao de um programa (embora possa no ser indiscutivelmente o melhor caminhoparaobterinformaesdedepuraodeumprograma). 10.1.7. System.err : System.err um PrintStream , System.err funciona como System.out exceto que normalmenteutilizadoapenasparatextosdeerrodesada.Algunsprogramas(comooEclipse)vai mostrarasadaparaSystem.errcomtextoemvermelho,paratornlomaisbvioqueotexto deerro.

Projeto Ejovem Mdulo II

Java

106

10.2. Exerccioscomplementares.
01)Escrevaumprogramaquecalculeeapresenteafrequnciadesadadecada facedeumdado,lanado6000vezesconsecutivas.Afrequnciadesadadecadafacedeveser armazenadanumarrayeapresentadanofinal.Dicauseomtodorandam()daclasseMathpara facilitarseutrabalho. 02.Escrevaumprogramaquegereumarrayden.osinteiros(entre0e100)eordeneestearraypor ordemcrescente. 03) Crie uma classe que representa um funcionrio, registrando seu nome, salrio e data de admisso. Em seguida, crie uma classe que represente um departamento de uma empresa, registrando o nome e os funcionrios que nele trabalham (para uso de vetores, considere um mximode100funcionrios).Porfim,crieumaclassequerepresentaumaempresa,registrando seunome,CNPJedepartamentos(considereummximode10departamentos).Faaumprograma que: a)Crieumaempresa; b)Adicioneaestaempresaalgunsdepartamentos; c)Adicioneaosdepartamentosalgunsfuncionrios; d)Daumentode10%atodososfuncionriosdeumdeterminadodepartamento; e)Transfiraumfuncionriodeumdepartamentoparaoutro. Obs.: esperado que seu cdigo seja bem encapsulado. Por exemplo, para adicionar um departamentoemumaempresa(ouumfuncionrioaumdepartamento),nosedeveacessaro vetor(oulista)dedepartamentosdiretamente,massimterummtodonaclassequerepresentaa empresaparaadicionarumdepartamento. 04) Crie uma classe para representar uma contacorrente, com mtodos para depositar uma quantia,sacarumaquantiaeobterosaldo.Paracadasaqueserdebitadatambmumataxade operaoequivalente0,5%dovalorsacado.Crie,emseguida,umasubclassedestaclasseanterior para representar uma contacorrente de um cliente especial. Clientes especiais pagam taxas de operao de apenas 0,1% do valor sacado. Faa testes com as duas classes e verifique seus resultados. 05)Crieaseguintehierarquiadeclasses: a)Umainterfacepararepresentarqualquerformageomtrica,definindomtodosparaclculodo permetroeclculodareadaforma; b)Umaclasseabstratapararepresentarquadrilteros.Seuconstrutordevereceberostamanhos dos4ladoseomtododeclculodopermetrojpodeserimplementado; c)Classespararepresentarretngulosequadrados.Aprimeiradevereceberotamanhodabasee daalturanoconstrutor,enquantoasegundadevereceberapenasotamanhodolado; d)Umaclassepararepresentarumcrculo.Seuconstrutordevereceberotamanhodoraio.No programaprincipal,criequadrados,retngulosecrculoscomtamanhosdiferentesearmazenenum vetor.Emseguida,imprimaosdados(ladosouraio),ospermetroseasreasdetodasasformas. Projetoorientadaaobjetos

Projeto Ejovem Mdulo II

Java

107

Captulo11. Javaeoprojetoorientadoaobjeto
Sealinguagemorientadaaobjetosmuitoprovavelmentevocprecisacriaressesobjetos.Esseo papeldenew.Parapodercriaroobjetonecessriodefinirprimeiroasuaclasse(class)ouasua interface(interface).Javacontmaindadoisoutrostiposespeciais.Umdelesumaclasse especialemqueosseusmembrossoobjetosimutveiseconstantes.OJavadeclaraesteoutrotipo declassecomapalavrareservadaenum.Ooutrotipo,aAnotaodefinidacomoumtipoespecial deinterfaceeasuadeclaraononecessitadenovaspalavrasreservadas)adeclaraofeita com@interfacereaproveitandoapalavrareservadajaexistente. Comoestamosfalandodeorientaoaobjetostemosquetratarherana.Aclassequetemqueser herdada(eportantonopodeserinstanciadadirectamente)ditaabstrata(abstract).Paradizer quehaumarelaodeheranacomoutraclasseusadoextendseparadizerqueaclasse implementaumainterfaceusadoimplements. Todasasclassespertencememalgumpacote.Opacoteaqueaclassepertence declaradocom packageequandoumaclasseutilizaoutraclasseelapodedeclararissocomimporttornandoo cdigomaissimplesdeler.

11.1.1. OqueUML?
A UML umalinguagempadroparaaestruturaodeprojetosdesoftware.Nasuaverso 2.0 aUMLqueumasiglaquevemdotermoeminglsUnifiedModelingLanguage(Linguagemde modelagemunificada)queumaumalinguagemparaespecificao,documentao,visualizao edesenvolvimentodesistemasorientadosaobjetos. A importncia da modelagem dentro do desenvolvimento de um sistema indiscutvel. A modelagemapartecentraldetodasasatividadesquelevamimplantaodeumbomsistema. Somente com o auxlio da modelagem podemos visualizar e controlar o desenvolvimento de sistemasdemaneiraeficaz,identificandoegerenciandoriscos,estipulandoecumprindoprazos, dentro das estimativas de custo. Partindo deste princpio vrias metodologias para o desenvolvimentodesistemasforamcriadas.Asprimeirasmetodologias,classificadascomo metodologiasestruturadas,caracterizamodesenvolvimentodesistemasemtornodeprocedimentos efunes. Muitossistemasaindahojeso desenvolvidos com base em metodologias estruturadas, o que os torna instveis, pelo fatodequeamedidaemque requisitossemodificam(oque acontece com muita frequncia)eosistemacresce, o trabalho de manuteno do mesmosetornacadavezmais difcil. Comaevoluodasmetodologias,avisodedesenvolvimentodesistemaspassouaadotaruma perspectiva diferente. Surgiram ento as metodologias orientadas a objetos, quecaracterizam o desenvolvimento desistemas em torno declasses eobjetos. Estas metodologias tiveram grande aceitaonacomunidadededesenvolvedores,tendoemvistaqueomtodoorientadoaobjetos possibilitavaaconstruodesistemasemtodosostiposdedomniosde problemas, abrangendo todos os graus de tamanho e complexibilidade. O sucesso dos mtodos orientados a objetos foi fator primordial para que o nmero de metodologias criadas sob essa

Projeto Ejovem Mdulo II

Java

108

perspectivacrescessedemaneiradesordenadaemumcurtoespaodetempo.Inmerosmtodos surgiram,cadaumcomsuaspeculiaridadesefalhas,esemnenhumrelacionamentocomosdemais. Destaforma,osusuriosdestesmtodossentiramdificuldadesemencontrarumalinguagemde modelagemcapazdeatenderinteiramentessuasnecessidades,oqueocasionouachamada guerrademtodos. Objetivo:Projetarsistemasusandoobjetosautocontidoseclassesdeobjetos.

11.1.2. CaractersticasdeProjetoOrientadoaobjetos
Projetoorientadoaobjetosumaestratgiadeprojetoemqueosprojetistaspensamemtermosde coisas,emvezdefunes. 1.Afuncionalidadedosistemaexpressaemtermosdeserviosoferecidospelosobjetos. 2.Objetossoabstraesdomundorealouentidadesdosistemaqueseautogerenciam. 3.Objetossoindependenteseencapsulamrepresentaesdeinformaoeestado. 4. reas de dados compartilhado so eliminadas. Objetos se comunicam por passagem de mensagem. 5.Projetoorientadoaobjetopartedodesenvolvimentoorientadoaobjeto: 6.Anliseorientadaaobjetos:Sededicaadesenvolverummodeloorientadoaobjetododomnio daaplicao.Osobjetosidentificadosrefletementidadeseoperaesassociadascomoproblemaa serresolvido. 7.ProjetoOOsededicaadesenvolverummodeloorientadoaobjetodeumsistemadesoftware paraimplementarosrequisitos.OsobjetosemumprojetoOOestorelacionadossoluodo problemaqueestsendoresolvido. 8.ProgramaoOOrealizaumprojetodesoftwareemumalinguagemdeprogramaoP .O.O,que aceitaaimplementaodiretadeobjetosefornecerecursosparadefinirasclassesdeobjeto.

11.1.3. VantagensdoProjetoorientadoaobjetos
1.Facilidadedemanuteno.Objetospodemserentendidoscomoentidadesindependentes. 2.Osobjetossocomponentespotencialmentereutilizveis.Paravriossistemas,existeumntido mapeamentoentreasentidadesdomundorealparaobjetosnosistema.

11.1.4. NoesdoUsodaUML

umareaquevemseexpandindo continuamente e um padro controlado pelo OMG (Grupo de Gerncia de Objeto). Sua abrangnciavaidesdeamodelagem de sistemas de informao corporativos a serem distribudos a aplicaes baseadas em Web, at sistemas complexos embutidos de tempo real. Para cumprir seu objetivo, a UML permite que seus usuriosmodelemumsistemasobdiferentesperspectivas.
Projeto Ejovem Mdulo II

Java

109

Cada uma destas perspectivas uma abstrao apresentada pordiagramascriados a partir dos recursosoferecidospelalinguagemdemodelagem.EmUML,acriaodestesdiagramasenvolvea identificaodeitensqueformamovocabulriodosistemaeaespecificaodecomoestesitens relacionamseentresi.Emsuma,umdiagramaemUMLumconjuntodeitenserelacionamentos.

11.1.5. FerramentasparaModelagemdeSistemas.
Umadasferramentasmaisutilizadasparaamodelagemdesistemasnomercadodesoftware o famosoeantigo(JUDE)maisqueagorasechama*astah. Queoastah*umeditorUMLleveintegradocom ERD,DFD,CRUDecaractersticasMentemapeamento paradesenvolvedoresdesoftwaretotalmentelivre. Desenvolvedores,analistas,testadoresegerentes podemsecomunicarunscomosoutrosdeforma eficazusandodiagramas*astahporquetodosos diagramassoconstantementearmazenadosemum modelo.Almdasediesstandalone",astah*partes"(umaediodeservidorweb)vaiaumentar acomunicao,proporcionandoumavisowebbrowserdodiagramascompartilhadaparaquea equipepodetrocarcomentrioscomoserviosderedesocial.

Projeto Ejovem Mdulo II

DBDesigner

110

Captulo12. IntroduoaoDBDesigner
DBDesignerumaferramentadesoftwarelivre,licenciadosobaGPL,desenvolvidapelafabFORCE quetemcomofunocriar,modelar,gerenciaregerarvisualizaogrficadeProjetosdebancode dados. Sua criao baseada em Delphi e Kylix com verses para Linux e Windows tendo compatibilidadecomprodutoscomoOracle'sDesigner,IBM'sRelationalRose,CAErwineMySql. PorPadro,osarquivossalvosnoDBDesigner,temoformado.xml umformatotambmusado paranormalizaodebancosdedados.Aextensoxml,significaextensiveMarkupLinguage, ouseja,linguagemdecriaoextensiva.UmalinguagemdemarcaorecomendadapelaW3C.Este formato reconhecido tando pelo MYSQL quanto pelo DBDesigner, uma das causas da sua compatibilidade.

12.1. InstalaoeConfigurao
Nositedodesenvolvedordoprograma:http://www.fabforce.net/podemosencontrarodownload. A verso que iremos trabalhar neste mdulo a verso 4 . Com o download feito, iremos descompactar o arquivo tar.gz feito e fazer a execuo do programa pelo cone executvel DBDesigner4ouentrarnapastadoterminaledigitar./DBDesigner4. OBS:noobrigatrioteralgumbancodedadosinstaladopararodaroDBDesigner,pormcomo passardasaulas,iremosusaroMYSQLeexportaremososmodelosgeradosparaoMySql,ento importantesuainstalaotambm.

12.1.1. PossveisproblemasdecompatibilidadecomLinux.
NoLinux,algunserrospodemsergeradosporfaltadealgunsarquivos.. Para solucionar o problema, precisamos do arquivo chamado libborqt6.9qt2.3.so ou verso superior.Coloquedentrodapasta#/usr/lib/.

Captulo13. InterfacedoDBDesigner

Projeto Ejovem Mdulo II

DBDesigner

111

MenuPrincipal:TratasobreconexocomBancodedados,exibeouocultaalgumasjanelas,Salvar, importar,exportar,instalaodePlugins.. BarradeFerramentas:Aquiiremosinserirtabelas,criarrelaesentreelas,Zoom. Navigator:EstabarraircontrolaavisualizaodoseuModelo,oquadradomenorsimbolizaoque estsendovisualizadonatelaprincipal,temutilidadequantotemosprojetosgrandes. DataBase:Aquipodervisualizarostiposdedadosutilizadosdastabelascriadas. DBModel:Podemosvisualizaroselementosesuasrelaesentretabelas.

Captulo14. CriandotabelascomDBDesigner.
Porserumprogramademodelagemdebancodedados,veremoscomocriaregerenciar tabelasdeumamaneiramaisfcileaprenderalgunsconceitosnovosparanosajudarcomprojetos commaiscomplexidadeembancodedados.

14.1. CriandoTabelas
NaBarradeferramenta,temumbotochamado:NewTable.Ou podemosusaratecladeatalho:CTRL+T.Emseguidadaremosumclique nopalcoprincipal.

Iraparecerumajanelacomoesta,representandoacriaodeumatabelaem branco,emseguidaclicamos2vezesneleparafazerasalteraesnascolunas queestatabelairapresentar.

NomedaTabela NomedaColuna

EspecificaotipodaTabelaCriada.

ComentriodaColuna TipodaColuna NOTNULL AutoIncremento ValorPadro

Marcadoresdetipodecolunaex:USENINGZEROFILL

Opesdeconfiguraodatabela

Especificaonomedaschavesestrangeiraseseutipo

Exerccio
ProcureCriaralgumascolunascomelescomo:

Projeto Ejovem Mdulo II

DBDesigner

112 PRIMARYKEY INTEGER VARCHAR INT INT NOTNULL/USENING NOTNULL USENING USENING

IdTable Nome Idade Matricula

Temosentoumatabelacomesteformato:

IdentificaodeChaveprimria

Pronto.. Criamosvriastabelascomcaractersticasdiferentesdeformarpidaeprticacomestaferramenta, pormsuaprincipalfunofacilitaracriaoderelaesentretabelas.Pontoqueveremosnos prximoscaptulos.

ExerccioRpido:
Comece criando uma tabela responsvel pelos registros de uma escola. Lembrese dos conceitosvistosemMySqlparasaberquaiscolunasprecisamsercolocadasemumatabelareferente umaescola.ComoNomedaEscola,Salas,Professor. Criar uma tabela com cadastro de Professores da Escola com suas respectivas colunas inseridas.Emseguida,nopodemosnosesquecerdosalunos,criarmaisumatabelaapenascomos dadosquevocsachamimportanteumalunotercomoregistrodeumadeterminadaescola.

Projeto Ejovem Mdulo II

DBDesigner

113

Captulo15. RelaoentreTabelas.
ComProjetosderelacionamentodetabelas,podemosdeixarasconsultasmaisintuitivas, commaiordesempenhoemaisinteligente,estemtodotambmusadoemempresasquetemuma arquiteturagrande,queprecisasersimplificada.

15.1. Conceito
At ento, nos mdulos passados criamos vrias tabelas diferentes. Tabelas de alunos, tabelasdeprofessores,tabelascomdadosdeumadeterminada escola, pormelassotabelas distintassemrelao.Entocomopodemosfazerainteraoentreessastabelas?Vamosimaginaro seguinteexemplo: UmadeterminadaEscolapodetervriosprofessoreseumdeterminadoprofessorpodeter vriosalunos.Jnonossoexemplo,umdeterminadoalunonopodertervriasescolas.Paraficar maisfcildeentender,observeaimagemabaixo:

Claroquedependendodosistema,podemoscriaroutrosexemploscomoumdeterminado professortermaisdeumaEscolaouumdeterminadoalunopodertervriosprofessores,porisso queexistemaistiposderelaes.Veremosnosprximostpicosostiposderelaesentretabelase comotrabalharcomelesusandocomandosnoMySqlparaconhecerecriaremmodoavanado,em seguidausaremosoDBDesignerparanosauxiliarnamodelagem.

15.2. StoregeEngine.
Antesdecomearmos ausarcomandosdo MySql pararelacionamentoentretabelas,temosque conhecer o conceito de Storege Engine. Traduzindo este termo ns temos motor de armazenamento. Ele responsvel por dar um formato as tabelas criadas. Depois que denominamosumformato,atabelairherdarvriaspropriedadespreviamentedefinidas.Existem vriasengines,pormiremosestudaremparticularaMYISAMeINNODB.

Projeto Ejovem Mdulo II

DBDesigner

114

15.2.1. MYISAM
Pormuitotempoestaenginefoiusadocomopadro,astabelascomessetipodeenginegeram respostacommelhordesempenhopelofatodesermaissimples.

15.2.2. InnoDB
Usadacomoenginepadroapartirdaverso5.5domysql,elapossuicontrolesmelhoradosque garantemaintegridadedobancopormesserecursoafetaodesempenhodasconsultas.

Resumindo:Noexisteenginemelhor,oqueexisteanecessidade,comoiremos tratarcomrelacionamentoentretabelas,iremostrabalharcomaengineinnoDB.

Captulo16. CONSTRAINTS
CONSTRAINTsocomandosquelimitamumacertacolunaoutabela.podeserusadonaInstruo CREATETABLE edaInstruo ALTERTABLE.Algumasinstrues,jconhecemosoutrasiremos conheceragora.

16.1. NOTNULL
Especificaqueacolunanopodecontervaloresnulos.

16.2. PRIMARYKEY
Especificaacolunaqueidentificaunicamenteumalinhadatabela.Acolunaidentificadadeveser definidacomoNOTNULL.UmINDEXinseridoautomaticamentenestacoluna.

16.3. UNIQUE
Especificaqueosvaloresnacolunadevemsernicos.EsteCampopoderserNulo.

16.4. FOREIGNKEY
Especificaqueosvaloresnacolunadevemcorresponderavaloresemumacolunadechaveprimria oudechavenicareferenciada,ouquesonulos. Cadainstruoserusadodeacordocomasnossasnecessidades,nosexemplosderelacionamento entretabelas,iremosverasinstruesnaconstruodenovastabelas.

Captulo17. Tiposderelaes.
17.1. RelacionamentosUmParaMuitos,ConhecidocomoOnetoMany.
Estetipoderelacionamentoomaisusadoentre2tabelas.Representamoscomorelao:1:n.A tabelarelacionadairganharumachaveestrangeiraprimaria.

Exemplo:
Projeto Ejovem Mdulo II

DBDesigner

115

Cada Escola poder ter vrias turmas. As turma sero cadastradas de acordo com as escolas existentes,simbolizadopelachaveestrangeira.Entotemos1Escolaquepoderternturmas, gerandoarelao1:n.

Turma1
Cada turma ter uma coluna com chave estrangeirada Escola. ex:escola_id

Escola

Turma2

Turma3
NonossocasopodemosdizerqueotermoEscolaatabelaPaipoisapartirdela,temosvrias outrasturmas. Otermo Turma atabela filha,poisirreceberumachaveestrangeirapara montararelao,nonossocasoachaveestrangeiraserumacolunaamais,elaserchamadade escola_id. Comoissoacontecenaprtica?Arepostaencontrasenosprximostpicos.

17.1.1. CriandoRelao1:nusandoMySQL.
VamosanalisaromodeloqueserfeitoatravsdecomandosSQL.

ImaginequevocirgerenciarasescolaspublicasdoCear.Representadonatabelaescolans precisamosdeumaidentificaonicaparacadaescolarepresentadocomoachaveprimriaide onomedasescolas.Temostambmatabelaturmas.Nelaprecisamosteronumerodasalaea sriequeestaturmarepresenta.Ex:Primeiroano,SegundoAno.Parafazerarelaoprecisamosde uma coluna que ir fazer relao com a tabela escola. Para isso criamos a coluna chamada: escola_id.Porteressacaracterstica,podemosdizerqueescola_idumaChaveEstrangeira. IremosveroscomandosnecessriosparafazeressarelaonoMYSQL. 1Passo:EntrarnoterminaldoLinuxeacessaromysql.

$mysqlu<usuario>p <senha>
2Passo:Criarumbancodedadosespecificoparanossoestudo: mysql>CREATEDATABASE`bancoEscolas`; mysql>usebancoEscolas; 3Passo:CriaratabelaescolasemalteraesdeacordocomnossoestudodeMYSQL.

mysql>CREATETABLE`escola`(`id`INTNOTNULLAUTO_INCREMENTPRIMARY
Projeto Ejovem Mdulo II

DBDesigner

116

KEY,`nome`VARCHAR(255)NOTNULL)ENGINE=INNODB; PercebaquenofinalusamosaengineINNODBparaprepararatabelapara relacionamentos.


4Passo:Criaratabelaturmascomorelacionamento:

1mysql>CREATETABLE`turmas`( 2idINTNOTNULLAUTO_INCREMENT, 3escola_idINTNOTNULL, 4numSalaINTNOTNULL, 5serieVARCHAR(255), 6PRIMARYKEY(id), 7INDEXturmas_chEstrang(escola_id), 8FOREIGNKEY(escola_id)REFERENCESescola(id)ONDELETECASCADE 9)ENGINE=INNODB; Percebaqueescola_idfoicriadacomasmesmaspropriedadesqueachave primariaiddatabelaescolaEssepadroterqueseraplicadoparaTODASas relaes.Vejaabaixo: Id INT NOTNULL escola_id INT NOTNULL

AmbasascolunassodoTipoInteiroenoNulo

Comopodemverno 4Passo,mostramosacriaodeumatabela.Oquetemosdenovidadeso apenasasultimas2linhasquetratasobreorelacionamento.Analisandoessas2linhastemos: INDEXturmas_chEstrang(escola_id): Nestalista,estamosindicandoqueescola_idseruma refernciaparaconsultas.Issoirotimizarnossasconsultas. FOREIGNKEY(escola_id)REFERENCESescola(id): Essalinhairfazerarelao, queremos dizerqueescola_idfazREFERENCIAcolunaiddatabelaescola. Traduzindoessecdigonstemos: CHAVEESTRANGEIRA(escola_id)REFERENCIA(ID)databelaescola. OtermoONDELETECASCATEpodesertraduzidoporDeletaremcascataeledefineque,caso sejadeletadoumaescoladatabelapai(tabelaescola),todasasturmasquetivercomoreferenciaa escolatambmserdeletanatabeladasturmas.OmesmoconceitoaplicaseparaAtualizaoem ONUPDADECASCATEquepodesertraduzidoporAtualizaremcascata.

17.1.2. InserindoregistrosSQLcomRelacionamentoOnetoMany.
1Passo:Inserindoregistrosnatabelaescola:

mysql>INSERTINTO`escola`VALUES(1,'LiceudeMessejana'); mysql>INSERTINTO`escola`VALUES(2,'FigueiredoCorreia');

Projeto Ejovem Mdulo II

DBDesigner

117

2Passo:Inserindoregistrosnatabelaturmas:

mysql>INSERTINTO`turmas`VALUES(1,1,345,'Primeiroano'); mysql>INSERTINTO`turmas`VALUES(2,1,346,'Segundoano'); mysql>INSERTINTO`turmas`VALUES(3,2,15,'TerceiroAno');


ExerccioRpido: 1Umclientetemumalocadoraepossuiosseguintesestilosdefilme:Terror,romanceeaventura. Sabendoquecadaestilodefilmetem:nomedofilme,dataquefoilanadoofilmeedurao,faa umbancodedadosparaconsultasdessefilmeenvolvendorelacionamentodetabelasestilo/filme. 2UmaLojadeRoupasvendebasicamente3produtos:Camisetas,calaseshorts,sabendoque cada produto pode ter: Cor, tamanho, marca e preo. Faa um banco de dados envolvendo relacionamentodetabelasTipo/Caractersticas.

17.2. UmparaUmrelacionamentos,ConhecidocomoOnetoOne.
Estetipoderelacionamentotemimportnciasparticulares,comoisolar partedeumatabelapor motivosdeseguranaoudividirtabelascomvriascolunas.Tambmchamadoderelacionamento 1:1.Ondeumachaveprimariasecomunicacomumaoutrachaveprimriaemumaoutratabela comobjetivodefazerumareferenciadecomplementao.sendoassim,pormotivosdesegurana, nenhumregistrodachaveprimariadatabelapaipoderserdeletadaoualterada,poisoregistro sempreterumareferenciaparaoutrastabelas. Exemplo: Imaginequetemosumclientecadastradoemumsite.Algunsdadosdele,sopblicos,comonome esobrenome,pormestacontatemalgunsdadosimportantesparausoprivado,comosenhada conta,senhasdealgunsemailsporexemplo.Ento,pormotivosdeseguranacriamosumanova tabelanovacomrelao1:1paraprotegerosdadossecretosdele(a).

17.2.1. CriandoRelao1:1usandoMySQL.
1Passo:EntrarnoterminaldoLinuxeacessaromysql.

$mysqlu<usuario>p <senha>

Projeto Ejovem Mdulo II

DBDesigner

118

2Passo:Criarumbancodedadosespecificoparanossoestudo: mysql>CREATEDATABASE`bancoCliente`; mysql>usebancoCliente; 3Passo:CriaratabeladadosLivressemalteraesdeacordocomnossoestudodeMYSQL.

mysql>CREATETABLEdadosLivres( IDClientesINTNOTNULLAUTO_INCREMENT, nomeVARCHAR(255)NOTNULL, sNomeVARCHAR(255)NOTNULL, PRIMARYKEY(IDClientes) )ENGINE=INNODB;


4Passo:Criaratabelaturmascomorelacionamento:

1mysql>CREATETABLEdadosPrivados( 2IDINTNOTNULLAUTO_INCREMENT, 3dadosLivres_IDClientesINTNOTNULL, 4sMsnINTNULL, 5sContaINTNULL, 6SBancoINTNULL, 7PRIMARYKEY(ID,dadosLivres_IDClientes), 8INDEXchave_estrangeira(dadosLivres_IDClientes), 9FOREIGNKEY(dadosLivres_IDClientes)REFERENCESdadosLivres(IDClientes) 10ONDELETENOACTION 11ONUPDATENOACTION 12)ENGINE=INNODB;
Vamosanalisaralinha8atalinha11paraentenderacriaodestatabela. 7 PRIMARY KEY(Sede_ID,Produto_ID) : Nesse momento estamos criando uma CHAVE PRIMARIACOMPOSTA.OndemaisdeumachavePrimriaencontrasenamesmatabela. 9FOREIGNKEY(dadosLivres_IDClientes)REFERENCESdadosLivres(IDClientes) PercebaqueachaveprimriadatabeladadosLivres_IDClientes,fazreferenciaumaoutrachave primriaIDClientesdatabeladadosLivres. 10,11ONDELETENOACTIONeONUPDATENOACTION. EssaslinhasiroimpedirquesejadeletadoeatualizadoqualquerregistrodatabelaPai,seoregistro tiveralgumaregistroderefernciacomatabelafilho.Iremosentendermelhor,quandoiserirmos alguns registros e analisarmos o comportamento desses registros.. Veja abaixo como Inserimos registrosenvolvendoessetipoderelacionamento.

17.2.2. InserindoregistroscomRelacionamentoOnetoOne.
1Passo:InserindoregistrosnatabeladadosLivres:

mysql>INSERTINTO`dadosLivres`VALUES(1,'Fabrcio','Rosal') mysql>INSERTINTO`dadosLivres`VALUES(2,'Jucimar','Lima') mysql>INSERTINTO`dadosLivres`VALUES(3,'Antonio','Filho')

Projeto Ejovem Mdulo II

DBDesigner

119

2Passo:InserindoregistrosnatabeladadosPrivados:

mysql>INSERTINTO`dadosPrivados`VALUES(1,1,123456,5555) mysql>INSERTINTO`dadosPrivados`VALUES(2,2,123321,123123,312321)

TabelaPai(dadosLivres)

Tabelafilha(dadosPrivados)

Perceba que o cliente Fabrcio e Jucimar, tm registros da tabela dadosPrivados por relacionamento,adicionandoocomandoONDELETENOACTIONeONUPDATENOACTION, estes2registrosnopoderoserdeletadosoualterados.ParafazeradevidaalteraonatabelaPai, teremosquelimparqualquerregistroquetiverfazendorelaoaelanatabelafilha. ExerccioRpido: 1Emumdeterminadosite,existeumcadastrodemembros.Dependendodocargodessemembro nosite, omembropodervisualizaralgunscontedos.Oseudeverapenasmontarumatabela quecontenhaosdadosprincipaisdessemembro(nome,email,login,senha,endereo)eemuma outra tabela protegida contento um cdigo do tipo de membro: (1Autor,2Editor,3Gerente,4Administrador). 2Emumdeterminadobancodedadosexisteumatabelacomvriosregistroscomo:(nome,idade, RG,CPF,email,Cidade,Estado,Pas,Rua,umacolunaparafumanteounofumanteeEstado Civil).Procuredividirosregistrospessoaisdosregistrosdelocalizaodapessoaemumaouta tabela. 3imaginequeemumadeterminadaescolatcnica,1coordenadorsejaresponsvelapenaspor1 determinadocursoqueaescolaoferece.Faaumarelaoentretabelasqueserresponsvelpelo gerenciamento.

Projeto Ejovem Mdulo II

DBDesigner

120

17.3. Relacionamentosmuitosparamuitos,conhecidocomoManyto Many.


Temosessetipoderelacionamentoquandoumregistrodeumatabela,podereferenciar vrias linhasdeumaoutratabela,eviceversa.Paraisso,criamosumanovatabelaquetem2chaves primariasestrangeiras,paraservircomopontedeconexoentreas2tabelas.Tambmchamadade tipoderelacionamenton:m. Exemplo: Imaginequevoctemumsupermercado,ondepodetervriossedes.Odonosupermercadodeseja terocontroledeestoquedetodosprodutosemtodasassedes.Temosagora1sedequepodeter vriosprodutose1determinadotipodeprodutoquepodeestemvriassedesdoSupermercado.

17.3.1. CriandoRelaon:musandoMySQL.
1Passo:EntrarnoterminaldoLinuxeacessaromysql.

$mysqlu<usuario>p <senha>
2Passo:Criarumbancodedadosespecificoparanossoestudo: mysql>CREATEDATABASE`bancoEstoque`; mysql>usebancoEstoque; 3Passo:CriaratabelaSedesemalteraesdeacordocomnossoestudodeMYSQL.

mysql>CREATETABLESede( IDINTNOTNULLAUTO_INCREMENT, NomeVARCHAR(255)NULL, BairroVARCHAR(255)NULL, TelefoneINTNULL, PRIMARYKEY(ID) ) ENGINE=InnoDB;

Projeto Ejovem Mdulo II

DBDesigner

121

4Passo:CriaratabelaProdutocomorelacionamento:

mysql>CREATETABLEProduto( IDINTNOTNULLAUTO_INCREMENT, nomeVARCHAR(255)NULL, ValidadeINTNULL, TipoProdutoINTNULL, PRIMARYKEY(ID) ) ENGINE=InnoDB;


5Passo:CriarumatabelaqueirfazerrelaoentraatabelaSedeeatabelaProduto.

1mysql>CREATETABLESede_em_Produto( 2Sede_IDINTNOTNULL, 3Produto_IDINTNOTNULL, 4QuantidadeINTNOTNULL, 5PRIMARYKEY(Sede_ID,Produto_ID), 6INDEXCh_estrang_SEDE(Sede_ID), 7FOREIGNKEY(Sede_ID)REFERENCESSede(ID), 8INDEXCh_estrang_PROD(Produto_ID), 9FOREIGNKEY(Produto_ID)REFERENCESProduto(ID)) 10ENGINE=InnoDB;
Vamosanalisarasprincipaislinhasqueindicamessetipoderelao. 5 PRIMARY KEY(Sede_ID,Produto_ID) : Nesse momento estamos criando uma CHAVE PRIMARIACOMPOSTA.ComessecomandousaremosascolunasSede_IDeProduto_IDcomo umaidentificaonica,ondepoderrepetirocdigodaSedeoudoproduto,pormnopoder repetiramesmarelaoentreaSedeeoprodutonestatabela.Iremosentendermelhordepoisde inserirregistrosnessatabela. 6INDEXCh_estrang_SEDE(Sede_ID): Nestalista,estamosindicandoqueSede_idseruma refernciaparaconsultas.Issoirotimizarnossasconsultas. 7FOREIGNKEY(Sede_ID)REFERENCESSede(ID):EstamoscriandoarelaoentreSede_ID databelaSede_em_ProdutocomIDdatabelaSede. Traduzindoessecdigonstemos: CHAVEESTRANGEIRA(SEDE_ID)REFERENCIA(ID)databelaSede. 9 FOREIGN KEY(Produto_ID) REFERENCES Produto(ID) : Estamos criando a relao entre Produto_IDdatabelaSede_em_ProdutocomIDdatabelaProduto. Traduzindoessecdigonstemos: CHAVEESTRANGEIRA(Produto_ID)REFERENCIA(ID)databelaProduto.

17.3.2. InserindoregistrosSQLcomRelacionamentoManytoMany.
1Passo:InserindoregistrosnatabelaSede:

mysql>INSERTINTO`Sede`VALUES(1,'SPMercado1','Aerolndia',555555); mysql>INSERTINTO`Sede`VALUES(2,'SPMercado2','DiasMacedo',4444444); mysql>INSERTINTO`dadosLivres`VALUES(3,'SPMercado3','Aldeota',66666666);


Projeto Ejovem Mdulo II

DBDesigner

122

2Passo:InserindoregistrosnatabelaProdutos:

mysql>INSERTINTO`Produto`VALUES(1,'leite',20110408,1); mysql>INSERTINTO`Produto`VALUES(2,'Cafe',20110415,1); mysql>INSERTINTO`Produto`VALUES(3,'Sabonete',20130505,2);


3Passo:InserindoregistrosnatabelaSede_em_Produto.

mysql>INSERTINTO`Sede_em_Produto`VALUES(1,1,40); mysql>INSERTINTO`Sede_em_Produto`VALUES(1,2,30); mysql>INSERTINTO`Sede_em_Produto`VALUES(2,1,200); mysql>INSERTINTO`Sede_em_Produto`VALUES(2,3,150); mysql>INSERTINTO`Sede_em_Produto`VALUES(3,3,400); mysql>INSERTINTO`Sede_em_Produto`VALUES(3,1,50);


ComoseriaVisualmentearelaoentreasedeeProduto:

Sede
ID=1/nome='SPMERCADO1' ID=2/nome='SPMERCADO2' ID=3/nome='SPMERCADO3'
ExercciosRpidos:

Produto
ID=1/nome='Leite'

ID=2/nome='Caf'

ID=3/nome='Sabonete'

1ImaginequevoctemumaumalistadeescolasPblicasnoCear,existeumatabelacom algunsdadosdaescolacomo:(nome,cidade,bairro,rua,numero,etc...)eumaoutracomdados dosprofessores:(nome,idade,matria,telefone,email,etc...)Algunsprofessoresdoaulaem maisdeumaescolaeemcadaescolatervriosprofessores.Comessasinformaesmonteuma tabelacomorelacionamentodedadosn:m. 2UmaempresadeRoupastemvriaslojasespalhadasPeloBrasil,emcadalojaexisteseusdados eumalistadeProdutosquepoderteremumlojaounodeacordocomaaalimentaodedados pelo empresrio... Seu Dever fazer um relacionamento de tabela relacionando Lojas com os Produtosqueaempresapodeoferecer.

Projeto Ejovem Mdulo II

DBDesigner

123

17.4. ConsultasSQLEnvolvendoRelacionamentoUsandoINNERJOIN.
Criamosnossorelacionamentoentretabelas,vamosagoracriarregistroserealizarconsultasno nossobancodedados UsaremosumaconsultaespecialincluindoocomandoINNERJOIN.Estecomandoexigequehaja umregistroquecorrespondaarelaonasduastabelas.Deacordocomonossoarelao temos escola_iddatabeladeturmascomiddatabelaescola.Observemocomandoabaixo:

SELECT`turmas`.*FROM`turmas`INNERJOIN`escola`ON`turmas`.`escola_id`= `escola`.`id`ORDERBY`turmas`.`id`ASC;
Traduzindoessecdigonstemos: SELECIONAR todasascolunasdaTABELA`turmas` UNIDOATABELA `escola` ONDE acoluna escola_id(databelaTurmas) IGUAL acoluna`id`(databelaescola) ORDENADOPOR `id` ASCENDENTEMENTE. Nesse momento fizemos uma consulta de relao entre a coluna `escola`.`id` e `turmas`.`escola_id`.Paravisualizarmosmelhornasada,iremosadicionaracolunareferenteao nomedaescolapararespostafinaldanossaconsultadoMYSQLparagarantindonossarelao entretabelas.

SELECT`turmas`.*,`escola`.`nome`AS`escola`FROM`turmas`INNERJOIN`escola` ON`turmas`.`escola_id`=`escola`.`id`ORDERBY`turmas`.`id`ASC;
Assim, quando escola_id encontrasecom o valor 1 oseu registroir procurara escola que encontrasecomidiguala1quenonossocasoaescola:LiceudeMessejanaouquandotemos escola_idigual2temosonomedaescolareferenteaoidigual2,nonossocaso:Figueiredo Correia.Vejaaimagem:

escola_id=1 escola_id=2
AInstruoINNERJOINfazpartedainstruoJOIN.Existemoutrosmtodosdeconsultacom essa instruo, nossa apostila no ir abordar todas. Caso se interesse, pesquise mais, uma refernciaqueindicamososite:http://dev.mysql.com/lvocencontraroutrasexplicaesdas instruesvistasnaapostilaeoutrasInstruesrelacionadas. ExerccioRpido: Use a Instruo INNER JOIN para realizar consultas especializadas nos exerccios anteriores. Exerccios da locadora, loja de roupas, membros do site. As colunas selecionada sero da sua escolha.

LiceudeMessejana FigueiredoCorreia

Projeto Ejovem Mdulo II

DBDesigner

124

Captulo18. Relacionamentoentretabelasusando DBDesigner4eMYSQL.


AprendemosnosPrimeiroscaptulosacriaodeumatabelasimplesusandoDBDesigner.Vamosver agoracomoaconteceorelacionamento: Antes de qualquer relacionamento, certifiquese queoCampo TableType estejacomo: InnoDB Transactionsafe Tables Para efetivar o relacionamento de tabela, por padro o DBDesignerdeixacomoMYISAM.

18.1. Relacionamento1:n,1:1en:menvolvendoDBDesigner.
NoDBDesginerorelacionamentosimples,bastacriarmosas2tabelascomseusrespectivosdados de acordocom a nossa necessidade, em seguida clicarcom os botes de relacionamentos que encontrasenabarradeferramentasaesquerda.Temosento:

Tiposderelacionamentos Relacionamento1:n Relacionamento1:1 Relacionamenton:m


Obs:Paraorelacionamento1:nOPrimeiroClique,natabelaPaieoSegundoCliqueserparaa tabelafilhoquereceberachaveestrangeira.Nasdemaistabelas,aordemlivre.

Captulo19. ConexocomBandodeDadosMysqle DBDesigner.


InicialmenteoDBDesignernoalteranenhumbancodedados,poisnoexistenenhumaconexo. Aprenderemos nessecapitulocomo fazera conexo, ea partir dela, fazerA Sincronizaoeo Reverse,quesomtodosdetransfernciadeinformaoentreoDBDesignereoMysql.

19.1. PossveisProblemascomaconexo.
Usando o Linux Educacional ou o Ubuntu com o bando de dados Mysql. Possivelmente encontraremosalgunsproblemasdecompatibilidadequeprecisamserarrumados.Precisamosdo arquivo chamado libsqlmda.so.4.70 ou uma verso superior e coloclo dentro da pasta #usr/lib/ Comoarquivoinstaladoiremoscriaraconexocomobancodedados.
Projeto Ejovem Mdulo II

DBDesigner

125

19.2. Conexo.
Podemos usar um banco de dados existente ou criarmos um novo banco de dados para nossa conexocomoDbdesigner. PrimeiroPasso:NoMenuPrincipaliremosclicar emDataBase>ConnecttoDatabase.

IremosVerajanelaAbaixo:

Inicialmentenotemosnenhumaconexoconfigurada,parainiciarumanovaconexocliqueem NewDatabaseConnect.Apareceraseguintejanela:

NomedaconexoparaDBDesigner
Endereodaconexo:Nonosso Caso:Localhost

NomedoBancodedadosexistente
UsuarioeSenhadoMysql

Descrioparaconexo

Driverdeconexoparabancode dados

Assimcriamosasconfiguraesbsicasdosistema.Sevocincluialiblibsqlmda.so.4.70 ter
Projeto Ejovem Mdulo II

DBDesigner

126

alteraralgumasconfiguraesavanadas.NaAbaAdvenceddessajanelatemos:

AlterarparagetSQLDriverMySQL Obs.:y(Minusculo)

AlterarLibraryNameeVendorLib para:libsqlmda.so.4.70 (Mesmo arquivo que foi incluso em usr/lib) Obs.: Altear a verso caso a verso da Lib foi superior ao da apostila

Feitoasconfiguraes,iremosclicarem OK parafinalizaraconfigurao.Aseguir,ajanelade Seleao de Conexo com banco de dados Ir aparecer com os dados criamos na configurao, apenas clicaremos na nova conexo criada e em seguida Connect. Veja a imagem da prxima pgina:

Podemosteroutrasconexescomoutrosbancosdedados,apenascriandoumanova conexo.

Projeto Ejovem Mdulo II

DBDesigner

127

Comaconexofeitapodemospassarnossamodelagemparaobancodedadosconfigurado,ouusar as tabelas criadas no MYSQL para Modelagem. Como Isso acontecer ? Veremos nos prximos tpicos.

19.3. DataBaseSynchronization
Mtodo desincronizaoquelevaamodelagem criadanoDBDesigner4paraobancodedados MYSQL.Criealgumastabelascomsuasrelaeseemseguida,nomenuprincipal: DataBase>DataBaseSynchronization. Depoisdaconexofeitacombancodedados,temosaseguintejanela:
NomedaConexoqueseraplicada

MetodosdeSincronizaodastabelas

Descriodastabelasexistentese transferncia

CliqueemExecuteparafazeratranfernciadastabelas paraoMySQL. Depois,bastaconferirnobancoastabelascriadas.

19.4. ReverseEngineering
Este Mtodo usando quando temos um banco de dados com as tabelas criadas no MySQL e queremosusaressacriaoparamodelagemnoDBDesigner,comobjetivodemelhorlo. ParaacessaroReverseEngineeringVamosemDataBase>ReverseEngineering. Depoisdaconexofeitacomobancodedados indicado, encontraremos a seguinte janela:

ListadeTabelasque encontrasenobancode dadosparaser implementadaspara Modelagemno DBDesigner

OpesdosTiposde importaodastabelas

Projeto Ejovem Mdulo II

DBDesigner

128

Captulo20. CriandoConexocomMysleJava
Nestetutorialiremosaprenderumpoucosobrecomointeragirojavacombancodedados,ser apresentadotambmumaparaconexocomosbancodedadosealgumasinterfacesdaAPIdojava demonstrandonaprticaumaconexodeumaplicativojavacomSGDB(gerenciadordebancode dado)mySQL.

20.1. OqueaAPIJDBC?
ApartirdaAPI(InterfacedeProgramaodeAplicativos)JDBCumaAPIdoJavaaqualpodemos utilizlaparaacessarqualquertipodedadostabulares,especialmenteosdadosarmazenadosem embancosdedadosrelacionais. OjavaediferentesdelinguagensdeprogramaocomoPHP,nosuportaoacessoabancode dadosdiretamente,eparaissoeleusaumaAPIparafazeresseservio.OJDBCincluiquatro componentesbsicoqueso: IAAPIJDBCAAPIJDBCforneceacessoprogramticoaosdadosrelacionaisapartirda linguagemdeprogramaoJava.UsandoaAPIJDBC,osaplicativospodemexecutarinstrues SQL,obterresultados,epropagaralteraesdevoltaaumafontededadossubjacentes.AAPIJDBC tambmpodeinteragircomvriasfontesdedadosemumambientedistribudoheterogneo. IIAAPIJDBCpartedaplataformaJava,queincluioJavaStandardEdition(JSE)eJava EnterpriseEdition(JEE).OJDBC4.0APIestdivididaemdoispacotes:java.sqlejavax.sql.Ambos ospacotesestoincludasnoJavaSEeplataformasJavaEE. IIIDriverJDBCManagerAclasseDriverManagerJDBCaquedefineosobjetosquepodem conectaraplicativosJavaparaumdriverJDBC.DriverManagertemsidotradicionalmenteaespinha dorsaldaarquiteturaJDBC.muitopequenoesimples. IVAextensopadroepacotesjavax.namingjavax.sqlpermitemquevocuseumDataSource registradocomumobjetoJavaNamingandDirectoryInterface(JNDI),serviodenomespara estabelecerumaconexocomumafontededados.Vocpodeusarummecanismodeligao,mas usandoumobjetoDataSourcerecomendadosemprequepossvel. importanteobservarmosquecomoDriverJDBCvocpoderescreveraplicaesJavaque gerenciamessastrsatividadesdeprogramao: 1. 2. 3. Ligaraumafontededados;comoumbancodedados. Enviarconsultaseatualizardeclaraesaobancodedados. Recuperareprocessarosresultadosrecebidosdobancodedadosemrespostaasuaconsulta

20.2. ParaqueserveoDriverJDBC?
importantesabermosqueexistemquatrotiposdedriversJDBC,masnesteartigovamosusaro tipo4porseromaisrecomendado.Issoporqueelejfaztodaconversoparaaschamadas diretamentenoprotocolodobancodedadosemquesto,dandoassimumaperformancemelhor, alm,claro,deseromaissimplesdeseusar.VerifiquequaltipodedrivervemcomoseuSGBD. JavaDBvemcomdoisdriverstipo4,umdriverincorporado,eumdriverclientedarede.OmySQL Connector/Jumdrivertipo4. Pormdeveseteralgunscuidados,porquepodeserencontradaumacertasemelhanaentreJDBC eODBC;Estoabsolutamentecorretos,podemosdizeragrossomodoqueasduasseguemamesma idia.AmbasfuncionamcomomeiodecomunicaoBancoXAplicao,porm,ODBCuma
Projeto Ejovem Mdulo II

DBDesigner

129

aplicaoWindowsrestritoapenasaele,enquantoaJDBC,porserescritaemjava, multiplataforma.Vejamosabaixoasprincipaisclasseseinterfacesdopacotejava.sql.*;

OutradasvantagensdaJDBCofatodelafuncionarcomoumacamadadeabstraodedados. IndependentedoSGBDutilizado,aAPIseramesma,facilitandomuitoavidadosprogramadores casohajaanecessidadedeumamigraodebanco.Tendoumainterfacequedefinemtodospara conexocomobancodedadosetambmoprovedordoSGBD(SistemaGerenciadordeBancode Dados)quefazumaimplementaodestainterface,criandoumaclassequerepresentaodriver JDBC. Parailustraressesfatos,vamosmontarumapequenaaplicaoconsole,apenasparavermoso funcionamentodaJDBC.UsaremosnesteexemploomySQL,porm,ospassospodemserseguidos comqualqueroutrobancodedados,desdequehajaodriveradequadoparatalao.Para entendermoscomofuncionanapraticaprecisosaberoquecadaumdessasclasseseinterfaces. Driver:ainterfacequedefinemtodosparaconexocomobancodedados,ondeoprovedordo SGBD(SistemaGerenciadordeBancodeDados)fazumaimplementaodestainterface,criando umaclassequerepresentaodriverJDBC. Connection:Umainterfaceparaacriaodeobjetosquerepresentamasinstruesparaobanco dedados(Statements)ocontroledetransaoealiberaoderecursos. Statements:InterfaceparaoenviodecomandosSQLaobancodedados,osStatementsso fabricadospormeiodachamadaamtodosdainterfaceConnection.Statement DriverManager:ClassequegerenciamltiplasimplementaesdainterfaceDrivereodriver carregadousando:Class.forName("nome_do_driver")

20.2.1. ResulSet:UmainterfacequeoferecemtodospararecuperarresultadosdecomandosSQL
executadossobreobancodedadoseanavegaonosresultadosdaspesquisas. deextremaimportnciaparaqualquerprofissionaldaquequeiraingressarouquejestevena readeTIsaberqueodriverConnector/JpermitetrabalhardesdeJavacombasesdedados mySQL.MysqlConnectorumdrivercriadoporMysqlABquetepermitirtrabalharcommysql desdeprogramasescritosemJava.Adiferenaemrelaoaoutrosdrivers,queestedelivre distribuio,etemumbomrendimento.OmySQLConnector/JumdrivernativodeJavaque converteaschamadasgeradasporJDBCnoprotocoloderedequeutilizaabasededadosMysql. PermitetrabalharcomalinguajemdeprogramaoJavaedestaformaconstruirprogramasque interactuamcomMysql.OMySQLConnector/JumdriverJDBCtipoIVecontemtodasas caractersticasdeJDBCparautilizarMysql.

Projeto Ejovem Mdulo II

DBDesigner

130

Nodesenvolvimentodasltimasversesincrementousebastanteavelocidadedodriver,ganhando tantoemrapidezcomoemeficcia.Odriversuportaresultadosdedados"streaming"oquepermite aousuriorecolherumgrandenmerodefilassemanecessidadedeutilizarumbufferde memria.Odriverimplementaumprotocolodepacksgrandesquepermitemenviarfilasecampos BLOBsdeat2GigaBytes.Naversodedesenvolvimentodomesmoimplementamseasnovas caractersticasacrescentadasnoAPI3.0deJDBC.

20.3. Fazendoumasimplesconexo.
Nesteexemploabaixovamosdemonstrarcomosefazumaconexodeumpequenoaplicativojava comobancodedadosmySQL.muitosimples,masobserveprimeiramenteostrechosdecdigo quesegue.
Class.forName("com.mysql.jdbc.Driver");

DefinimosaquiumachamadaaomtodoestticoClass.forName()daclasseClass,oClassLoader tentainicializarestaclasse.Estaclasse(queonossodriverjdbc)possuiumblocoinicializador esttico,queirregistraressaclassecomoumdriverJDBC,avisandoojava.sql.DriverManager,pelo mtodoregisterDriver.Masexistemoutrasmaneirasdecarregarodriver,comoporlinhade comando(bootstrap).Depoisqueodriverfoiregistrado,podemosabrirumaconexocomobanco dedados,passandoumaStringdeconexo.


Connection con = DriverManager.getConnection("jdbc:mysql://localhost/ banco_de_dados?user=root&password=1234");

DepoisqueoDriverfoiregistradofeitoumaperguntarparajava.sql.DriverManager,seeleaceitaa Stringdeconexoemquesto.SealgumdelesaceitaestaString,aconexoaberta(peloDriver), eretornada.Casocontrrio,umaexceolanada. Tambmpossvelpassarmuitosoutrosparmetrosalmdelogin,senhaenomedobancode dados,comonestecaso),amaioriadeinteressedoDriver,comoporexemplosaberseaquela conexodeveestaremmododeautoreconexocasoelacaia,emuitosoutros.

Connection con = DriverManager.getConnection("jdbc:mysql://localhost/ banco_de_dados?user=root&password=root"); Statement stm = conn.createStatement(); String sql = "SELECT coluna1,coluna2,coluna3 FROM tabela"; ResultSet rs = stm.executeQuery(sql);

Nessapartedocdigomostradaacimaestamosmostrandoomtodo Connection.createStatement();quedevolveumobjetojava.sql.Statement,erepresentaumasimples QueryoucomandoSQL.NsutilizamosdepoisoStatement.executeQuery(),quedevolveum java.sql.ResultSetcomoresultado.Casoaqueryfossealgoquenoretornassenada,tipoum INSERTouumUPDATE,vocdeveutilizaroStatement.executeUpdate().Agoratemosum java.sql.ResultSet,quecontmoresultadodanossaQueryeentopodemosdemonstrarumaclasse quefaztodaessasaes.


con.close( ); Projeto Ejovem Mdulo II

DBDesigner

131

Depoisdetermosfeitonossasalteraesnosdadosdonossobancodedadosprecisafinalizarmos anossaconexocomomesmopraissobastafazerumachamadaaomtodoclose();apartirda varivelcriadadaclasseConnection. Exemplo01:NesteexemplovamosfazerumaclassequeseconectaaobancodedadosmySQL, fazendousododriverJDBCdaAPIdojava.


import java.sql.*; public class Connect { public static void main(String[] args) { try{ Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql:localhost:\\meu_banco", "root","12345"); Statement stm = con.createStatement(); if(con!=null){ System.out.println(Conectado!"); }else{ System.out.println(Erro !"); } catch(Exception e){ System.out.println("Erro " + e.getMessage()); }

} }

Obs.:Todososcomandorelacionadoscombancoemjavadevemestardentrodeblocostrycatch. Issoporquequandoaotentarseconectaraobancodedadospodeocorreralgumaexceoe tratadapeloblocodetratamentodeexceesdojava.

20.4. Persistindodadosemumatabela. 20.4.1. Oquepersistirdados?


Capacidadedegravarmosdadosemmemriasnovolteis,necessidadebsica,99%dossoftwares corporativosnecessitam.Ex:harddisk,tapebackup,CD,DVD,pendrives,etc.Vejamosabaixocomo seprogramaumaclasseparapersistirdadosemumatabeladeumabancodedados,nonossocasoo gerenciadordebancodedadosmySQL. Exemplo01: NesteexemplocriamosaclassechamadaConnectaqualabreumaconexocomogerenciadorde bancodedadosmySQLeseconectaaobancodechamadomeu_banco,vejamoscomoficouo cdigodaclasse.
import java.sql.*; public class Connect { public static void main(String[] args) { try{ Class.forName("com.mysql.jdbc.Driver"); Connection con =

Projeto Ejovem Mdulo II

DBDesigner DriverManager.getConnection("jdbc:mysql:localhost:\\meu_banco", "root","12345"); Statement stm = con.createStatement(); String sql = INSERT INTO(campo1,campo2)nome_tabela VALUE('+valor1+','+valor2+'); ResultSet rs = con.executeUpdate(sql); if(con!=0){ System.out.println(Inserido com sucesso"); }else{ System.out.println(Erro ao gravar!"); } com.close(); catch(Exception e){ System.out.println("Erro " + e.getMessage()); } } }

132

20.5. Recuperandodadosemtebelas.
Noexemplomostradoabaixo,vamosdemonstrarcomoabrirumaconexocombancodedado mySQl,ondeiremosfazerumacurtainstnciadeumobjetoDriverManagerparaseconectaraum driverdebancodedados.elogparaobancodedados,instanciarumobjetoStatement,quecarrega asualinguagemdeconsultaSQLaobancodedados,instanciaumobjetoResultSetquerecuperaos resultadosdasuaconsulta,eexecutaumasimpleswhile,querecuperaeexibeosresultados.
import java.sql.*; public class Connect { public static void main(String[] args) { try{ Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql:localhost:\\meu_banco", "root","12345"); Statement stm = con.createStatement(); ResultSet rs = stm.executeQuery("select * from tabela"); while(rs.next()){ System.out.println("Imprimindo dados da coluna"+rs.getString(1)); } con.close(); } catch(Exception e){ System.out.println("Erro " + e.getMessage()); } } }

Analisandoocdigoacima:Nesteexemplofoicriadaumaclasseparaabrirumaconexocomo bancodedadoefoiinstanciadoumobjetodaclasseResulSetparaapartirdeumaconexoaberta executarumapesquisanosdadosemumatabeladobancodedados. Naclasseabaixovamosdemonstrarmaisumaformadefazermostudoissoedeformamais completausandoosconceitosdeorientaoaobjeto.

Projeto Ejovem Mdulo II

DBDesigner

133

20.6. Exercitandoateoria.
package pasta.banco; /**pacote para uso da API JDBC*/ import java.sql.*; import java.io.*; public class Database { private Connection con; private String url; private String usuario; private String senha; /**construtor da classe Database inicializando os atributos da classe*/ public Database() { con = null; url = "jdbc:mysql://localhost:3306/banco_teste"; usuario = "root"; senha = "12345"; } /**mtodo da classe Database responsvel por abrir uma *conexo com banco de dados,retornando um objeto da classe Connection*/ public Connection openDatabase() { try { /**Carregando o Driver*/ Class.forName("com.mysql.jdbc.Driver"); /**Efetuando a Conexao com o banco de dados*/ con = DriverManager.getConnection(url,usuario,senha); /**teste para verificar se tudo certo*/ if(con!=null){ System.out.println("Conectado!"); return con; }else{ System.out.println("Erro - 401!"); return null; } }catch(Exception e){ System.out.println("Erro no Driver"+e.getMessage()); } finally{ try{ con.close(); }catch(Exception e){ System.out.println("No foi possvel fechar "+e.getMessage()); } return null; } }

/**mtodo principal onde comea a execuo do programa*/ public static void main(String[] args) Database test = new Database(); System.out.println("Teste de conexo: "+test.openDatabase());

Projeto Ejovem Mdulo II

DBDesigner

134

Nestaclassebomexplicarquefoiutilizadoummtodoresponsvelporretornarumaconexo abertacomobancodedados,aquichamadodebano_testeetambmquetodososatributosforam inicializadosnoconstrutordaclasseparaquenomtodofosseapenasestabelecidaaconexo. simples,edemonstraumapossvelmaneiradeimplementarJavacombancodedados.Vale lembrar,queparausarJavacommySQL,necessrioteroconectormySQLinstalado,ounopath.

20.7. Exerccios.
01Paraqueserveumbancodedados? 02Paraqueserveumaconexocomumgerenciadordebancodedados?Justifiquesuaresposta: 03NalinguagemJAVAoacessoacamadadedadosnoutilizanenhumdriverparasuas conexes: 04Osgerenciadoresdebancosdedados(MYSQL,POSTGRES...)sopartesdalinguagemjava: 05Quaisosobjetosusadosparapersistirdadosemjava? 06DescrevaparaqueserveodriverJDBC: 07Estabeleaumasimplesconexojavabancodedados,usandoogerenciadordebancode dadosmySQL. 08Crieemjavaummtodocapazdeinteragircomumbancodedadosqualquer,executeuma querycapazdearmazenarosseguintesdadosemumatabeladeumbanco(nome,email): Obs.:Faa10inseresdiferentesnessatabela.

Projeto Ejovem Mdulo II

CidFerreiraGomes GovernadordoEstadodoCear MariaIzoldaCeladeArrudaCoelho SecretriadaEducaodoEstado MaurcioHolandaMaia SecretrioadjuntodaSecretariadaEducaodoEstado ProfessorCludioRicardoGomesdeLimaMsc. ReitordoInstitutoFederaldeEducao,CinciaeTecnologiadoCear ProfessorEdsondaSilvaAlmeidaMsc. DiretorExecutivodoCPQT AndreaArajoRocha CoordenadoraGeraldoProjetoeJovemSEDUC ProfessorCceroR.B.CalouMsc. CoordenadordoProjetoeJovemMduloIIIFCECPQT JlioCsarCavalcanteBezerra CoordenadordoProjetoeJovemMduloIISEDUC FabrcioSilvaRosal ProjetoeJovemMduloII EdiodeContedoDBDesigner AntonioHalysonSantosCastro ProjetoeJovemMduloII EdiodeContedoJava JosefaKatiaPereiraFragosomorais ProjetoeJovemMduloII

GerentedeProjetosdoCPQT

Reviso
JucimardeSouzaLimaJunior ProjetoeJovemMduloII

FormataoFinal

Potrebbero piacerti anche