Вы находитесь на странице: 1из 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 Introdu o a Programao OrientadaaObjetosdonossocurso,vistoqueorequisitob sicoparaquesepossaalcanartodosos 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,conseguir ultrapassarqualquer preconceitocontrao acessoaoconhecimentotecnolgico. Onossoobjetivoprincipalcomestematerial capacitaro alunoparaumentendimentocriticoarespeitodoParadigmadePrograma oOrientadaaObjetos. Vistoqueumadastendnciadomercadousaresseparadigmanodesenvolvimentodesistemasem geral. AliadoaoSoftwareLivreque umatendnciaeumaalternativaparaomundocorporativonoque serefereasoftwares,equetambmtemsidoatualmentedesenvolvido por programadores espalhados ao redor mundo, sendo que boa parte dessastecnologiasvemsendodesenvolvidasutilizandoferramentaslivres namaioriadeseusprojetos,contribuindoparaosavanosecolaborando paraoacessodemilharesdepessoasasinclusesdigitaisnoquetangeas tecnologiasdainformaonomundo.Daremostambmanossadisciplina uma nfasemaiornousodessetipodetecnologia,passandoparaosnossosalunosummodeloe umaalternativafantstica,queautilizaodasferramentaslivresdisponveisnainternet. Primeiramentevamosestudarumpoucosobreahist riadalinguagemdeprogramaojavaque iremosutilizarnanossadisciplina.Relatamosascaracter sticasprincipaisdalinguagemquepara 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 dessasperguntasdirijaseaoInstrutorquedever auxiliarmeuscolegas desala,osalunos! Alisprofessor,porondecomearemosaestudarjava?Nosdumadica! Calma!Muitacalmameuscolegas.Porqueoejavashowaindavaicome ar. 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.Javapossuiumasintaxeextremamentesimilar doC++,ecom diversascaractersticasherdadasdeoutraslinguagens,comoSmalltalkeModula3.antesdetudo umaboalinguagem,simples,comumambientedeexecuodealtaqualidadeeumavasta bibliotecadeclassesdisponveis.EssacombinaoquetornaJavaumapropostairresistvelpara tantosprogramadores.Almdecontarcomasseguintescaractersticas,totalmenteorientadaa objetos,fortementetipada,independentedearquitetura,robusta,segura,port vel,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. JamesGoslingespecificouumanovalinguagemdeprograma oparaoseunovoprojetoedecidiu batizladeOak,quequerdizercarvalho,uma rvorequeelepodia 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,na pocaerrada.Asorte queobomdaInternetaconteceu,erapidamenteuma granderedeinterativaestavaseestabelecendo.Eraestetipoderedeinterativaqueaequipedo*7 estava tentando vender para as empresas de TV a cabo. E, da noite para o dia, n o 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,on merode usurioscresceurapidamente,grandesplayers,comoaIBManunciaramsuporteparaatecnologia Java.

Projeto Ejovem Mdulo II

Java

1.2. Usodalinguagemnomercadoatualmente(especificaodas tecnologias).


Desdeseulanamento,emmaiode1995,aplataformaJavafoiadotadamaisrapidamentedo quequalqueroutralinguagemdeprogramaonahistriadacomputao.Em2003Javaatingiua marcade4milhesdedesenvolvedoresemtodomundo.Java continuouecontinuacrescendoe hoje comcerteza 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 execu o presente em web browsers, mainframes,SOs,celulares,palmtopsecartesinteligentes,entreoutrosdispositivos.

1.3. Principaiscaractersticasdalinguagemdeprogramaojava
ORIENTAOAOBJETOS: Java umalinguagemorientadaaobjetosqueseguealinhapurista iniciadapor Smalltalk que consideradapuramenteO.O equetudonestasoobjetos.Coma exceodostiposprimitivosdalinguagem(char,int,float,etc.),amaiorpartedoselementosdeum programajavasoobjetos. Noqueregeesseparadigma,oprojetoorientadoaobjetos uma tcnicadeprogramaoqueseconcentranosdados(=objetos)e nasinterfacesparaesteobjeto.Ocdigo organizadoemclasses, quepodemestabelecerrelacionamentosdeheranasimplesentre si,somenteaheranasimplespermitidaemjava.Humaformade"simular"heranamltiplaem Javacomousodeinterfaces. SIMPLICIDADE: Java muito parecida com C++, mas muito mais simples. Java n o possui sobrecargadeoperadores,structs,unions,aritmticadeponteiros,heranamltipla,arquivos.h, diretivas de prprocessamento e a memria alocada dinamicamente gerenciada pela prpria linguagem,queusaalgoritmosdegarbagecollectionparadesalocarregi esdememriaqueno estomaisemuso.OutroaspectodasimplicidadedoJava otamanhopequeno.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:Javafoielaboradaparaserusadaemambientesderededistribu da,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.Estasmedidassoparticularmente teisquandopensarmosemaplicaes 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 .Asaplica esJavapodem 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 n ofaz nenhum esforopara ser neutroemrelaoasplataformasnesseaspecto.Somenteocdigoparachamaro multhreading permaneceomesmoparatodasasmquinas. EXCEES: Todoprogramadoremgeralest bastanteacostumadocomocomputador"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,masquegeramexce esemprogramasJava.Em geral,aoescreverprogramasJavautilizandose deheranadeclassespredefinidas,forase em geralaoprogramadorescreveralgumasrotinasdetratamentodeexce o,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 mem ria alocado dinamicamente (com new, malloc ou funo similar) deveria ser liberado quando no fosse mais usado (com free, delete e parentes pr ximos). 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,que ode 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 rela o a arquitetura,o cdigo compilado executvelemvriosprocessadores,desdequehajaapresenadosistemaemtempo deexecuoJava.Ocompiladorjavaconsegueissogerandoinstru esbytecodequenotemnada avercomumaarquiteturacomputacionalespecfica.Aocontrrioelessoelaboradosparaserde fcil interpretao em qualquer mquina e de fcil traduo para cdigo de mquina nativo imediatamente. MQUINAVIRTUAL: umamquina imaginriaque implementadaatravsdeumsoftware 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)ouJavaSE umaferramenta dedesenvolvimentoparaaplataformaJava.Elacontmtodooambientenecessrioparaacriaoe execuodeaplicaesJava,incluindoamquinavirtualJava(JVM),ocompiladorJava,asAPIsdo Javaeoutrasferramentasutilitrias. JME,javaPlataforma,MicroEdition(JavaME),aindaconhecidaporJ2ME, umatecnologiaque possibilita o desenvolvimento de software para sistemaseaplica es embarcadas, ou seja, toda aquelaquerodaemumdispositivodepropsitoespecfico,desempenhandoalgumatarefaqueseja tilparaodispositivo. aplataformaJavaparadispositivoscompactos,comotelem veis,PDAs, controlesremotos,eumaoutragamadedispositivos. JavaEE(ouJ2EE,ouJava2EnterpriseEdition,ouemportugu sJavaEdioEmpresarial) 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).Tratasedeumconjuntodesoftwaresparaprogramadoresemjavaquevoc no 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.,al mdeseremindependentes 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 amquinaentendaeoprograma executado,poristoosprogramasemjavapodemexecutarem qualquerplataformadehardwareousoftwarequepossuaumavers odaJVM.AMquinaVirtual javadefinidacomoumamquinaimaginriaimplementadaatravsdaemulaoemumsoftware executado em uma mquina real. Ela possui uma arquitetura que permite garantir seguran a. QuandoumprogramaJava executado,seusbytecodessoverificadospelaJVMparaqueestejam de acordo com os seus requisitos de segurana, impedindo a execuo de cdigo com alguma irregularidade.Assim,cdigosfontecominstruesqueacessem reasrestritasdamemriaouat
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 classindicaqueumaclasseest sendodeclaradaeseu nomeHelloWorld.A{delimitaolimiteinicialdaclasse.

Apalavra public j foidescrita,portantopermitequeom todosejaacessadopublicamente.A palavra static ser descritaposteriormente.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:Umbloco formadopor uma ou mais instrues agrupadas entre chaves indicando que formam uma s unidade.Blocospodemserorganizadosem estruturasaninhadas Indefinidamente.Qualquerquantidadedeespaosembranco permitida.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: Estecomentrio utilizadonageraodadocumentaoem HTML dosprogramasescritosemJava.Parasecriarumcoment rioemestilo 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.

Nessesegundoexemplovamosusarumeditordetextoqualquerparaeditoroc digofontedo nossosegundoexemploevamoscompilarusandoterminal(Konsole)dosistemaoperacional.

Compilandonosso2exemplocomocomandojavac

Projeto Ejovem Mdulo II

Java

11

Executandonosso2exemplocomocomandojava

Obs.:Cuidadosimportantesaseremtomados:
SeojavacreclamarquenoachaaclasseHelloWorld.java, porquevoc noest no diretriocorretoousalvouoarquivoemoutrolugar. Seojavacreclamardealgumerronofonte, porquevoc digitoualgoerrado.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.Ocompiladorenviaasmensagensdeerroparaasa dapadro;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()Amaquinavirtualpodeserdefinidacomoumambientedeprograma o. 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,fa aumprogramaemjavaque imprimanatelaaseguintesfrases:EstudoPHPeEstudoJava.Por masfrasesdevemaparecer 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)Expliqueparaserveoargumentodutilizadojuntocomocomando javac?

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++.OprojetodoNetBeans apoiadoporumavibrantecomunidade dedesenvolvedoreseofereceumaextensadocumentaoetreinamentoderecursos,bemcomo umadiversificadaseleodeterceirosplugins. IDE6.9introduzoJavaFX,Compositorumaferramentavisualparaconstru odelayoutvisual JavaFXaplicativos,interfacegrficasemelhanteaoconstrutordeGUISwingparaaplica esJava. SE NetBeans Outros destaques incluem OSGi Plataforma de interoperabilidade para aplica es 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


OEclipse umaIDEparaodesenvolvimentoaplicaesJava,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)funcionacomSWTeSwingmasaindaest naverso0.5.Odesenvolvimento J2EE vivelcomousodepluginsobtidosdeterceiros.Nestaapostilan oiremosnosaprofunda nessaIDE,maspodebaixareinstalarnoseusistemaparcriarseusprojetodeprograma ocom javausandoaIDEEclipse.OEclipseatualmenteencontrasenavers o3.6chamadadeHELIOS, parabaixloacesseoseguintelinkaolado:http://www.eclipse.org/

2.2.2. AIDEBluej
BlueJ umambientededesenvolvimentojavaprojetadoespecificamente 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).OBlueJ umexcelenteambienteparaofima quesedestina:aaprendizagemdaprogramaoorientadapelosobjetos
Projeto Ejovem Mdulo II

Java

15

utilizandoalinguagemJava.Noentantoeespecialmentequando utilizadaumalinguagemmuito 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 aproxima o com uma ferramenta utilizada no mercado de trabalho atualmente, vai tornar o aluno mais preparadoparaenfrentarasdificuldadesdecorrentesdeprogramaremumsimpleseditor detextoeprompt,mas,tambm muitoimportantequevocsaprendamacompilarseus programanoConsole(promptdecomandos)paradaentoficaremhabilitadosaseguirem programandoemjava.Ficaaiorecadoebonstrabalhos.VamosusaraIDEnetbeans. Segueumtutorialsobreonetbeansqueserrepassadoantes.

2.3. Identificadoresepalavraschaves.
Java umalinguagemcentradanospacotes;osdesenvolvedoresdalinguagem assumiram que, para uma boa organizao de nomes, seria fundamental na estrutura de programas em java. Imagine o seguinte pesadelo: tr s programadores,namesmaempresa,mastrabalhandoemdiferentespartesdeum projeto,escrevemcadaumumaclassechamadaUtilitrios.Seessastrsclasses Utilitriosnotiveremsidodeclaradasemnenhumpacoteexplcito,eestiverem noclasspath,noseriapossveldizeraocompiladorou JVMqualdastrsclassesest tentando referenciar.

Projeto Ejovem Mdulo II

Java

16

Identificadoreslegaissoregrasqueocompiladorusaparadeterminarseumdadonome legal. Em Java, os identificadores devem ser compostos apenas por caracteres. Unicode, nmeros, smbolosdemoedasecaracteresdeconexocomounderscore. Regrasvlidas: Deveminiciarcomumaletra,smbolocomercialcifro($)ouunderscore(_); Apsoprimeirocarcterpodemterqualquercombinaodeletras,caracteresenmeros; Nopossuemlimitedetamanho; Nopodemserpalavrasreservadasrestritasdalinguagem; EmJavaosidentificadoresso casesensitive isto ,JAVA totalmentediferentede 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?Quandodizemosqueoc digodeumaclasse(a classeA)temacessoa(classeB),oqueestamosquerendodizer?AcessoDefault(Padr o):Uma classe com acesso default no tem nenhum modificador precedendoa na declarao. Esse o controledeacessoseobtmquandonodigitadonenhummodificadorparaaclassedeclarada.O acessodefaulttemqueserentendidocomonveldepacotes,porqueumaqueclassetenhaacesso defaults podeservistaporclassesdedentrodomesmopacote.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,umaclassequeestiveremoutropacotenotemacessoamembros default nemmesmoporherana.Exemplo02:

Esseoutroexemploabaixomostramoscomodeclararumarquivodec digofontedeprogramas escritosemjava,ondeumarquivocontmvriasclasse. Notequeemjavapodesedeclararduasoumaisclassesaninhadasnummesmoarquivodec digo 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,adeclara opackagedeveestarnaprimeiralinhado 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:Quandoummtodoouvarivel declarada comopblico.Issosignifica que,todasas classesindependentementedopacoteaoqualpertenampodemacessaromembro.

Private:Quandoummtodoouvarivel declaradacomomodificadorprivate,issosignificaque nenhumoutraclassepodeacessarosmembros,anoserapartirdaprpriaclasse.

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

Projeto Ejovem Mdulo II

Java

19

2.5. Exercciosbsicos.
01)Nositensabaixoassinaleaalternativaverdadeiraemrela oaoquecorrespondeaumarquivo decdigofontevlidoemjava: A()Emumarquivodecdigofonteemjavapodeserdefinidaduasclassespblicasnomesmo arquivodecdigofonte. B()Emumarquivodecdigofonteemjavapodeserdefinidaduasclassespblicas,emaisde duasclassesnopblicasnomesmoarquivodecdigofonte. C()Emumarquivodecdigofonteemjavasomentepodeexistirumaclassedefinidacomo pblicanomesmoarquivodecdigofonte,etambmpodemhavervriasclassesdefault(padro). D()Emumarquivodecdigofonteemjavapodeserdefinidavriasclassespblicasno mesmoarquivodecdigofonteevriasclassesdefault(padro). E()N.D.A 02)Quaisdosidentificadoresabaixopodemserusadoscomonomesdeclasses,campos,m todose variveisemJava?Quaisnopodem,eporqu? A)four B)for C)from D)4 E)FOR 03)Quaisdosidentificadoresabaixopodemserusadoscomonomesdeclasses,campos,m todose variveisemJava?Quaisnopodem,eporqu? A)dia&noite B)diaENoite C)dia&noite D)diaEnoite E)dia_e_noite 05)Quaisdosidentificadoresabaixopodemserusadoscomonomesdeclasses,campos,m todose 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.Issosignificaquetodavari vel deve ter um tipo declarado. Existem oito tipos primitivos em java. Quatro deles so do tipo inteiros;doissodotipodenmerosdepontoflutuante;um otipodecaractereschar,usadopara unidadesdecdigonoesquemadecodificaoUnicodeeumdeles dotipolgicoparavalores true/false(verdadeiro/falso).

3.1.1. Usodevaloresliteraisdetodosostiposdedadosexistentes.
Umliteralprimitivo simplesmentearepresentaodocdigofontedostiposdadosprimitivosem outrospalavrasuminteiro,umnmerodepontoflutuante,umbooleanoucaracteresquevoc digiteenquantoescreveumcdigo.

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

3.1.1.3. Literaisoctal: Osinteirosoctaisusamsomentedgitosde0a7.EmJava,ointeiro representadonaformaoctal


Projeto Ejovem Mdulo II

Java

21

comainclusodeumzeronafrentedonmero,vejaoexemploabaixo:

3.1.1.4. Literaishexadecimal: Osnmeroshexadecimaissoconstrudoscomousode16smbolosdistintos.J quenoforam criadossmbolosnumricosunitriosparaosalgarismosquevode10a15,usamoscaracteres alfanumricospararepresentaressesdgitos.

NaJavalinguagemtodososliteraisinteiros(octal,decimalehexadecimal)s odefinidoscomoint (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,tamb m oque 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 poss vel 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 desejarmosatribuirumliteraldepontoflutuanteaumavari velfloat(32bits),ter queanexaro 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: Oliteraldestring arepresentaodocdigofonteparaovalordeumobjetoString.Emboraas stringsnosejamprimitivas,foramincludasnestecapituloporquesoutilizadaspararepresentar valoresliterais,emoutraspalavras,digitadasdiretamentenoc digo.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.Afrasedeseratribu daaumavariveldeumtipoespecfico.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 m diaaritmticadosseguintes nmeros(12,14e16).Dicautilizeostipoprimitivosdedadosadequadoparaoproblema. Ex:media=(1+2+3)/3; 08)Faaumprogramaemjavaquecalculeemostrenatelaa m diaaritmticadosseguintes nmeros(12.52,14.54e16.56).Dicautilizeostipoprimitivosdedadosadequadoparaoproblema. Ex:media=(5.5+7.5+9.5)/3; 3.2.1.1. Desafio: 09)Faaumprogramaemjavaquecalculeemostrenatelaa m diaaritmticadosseguintes 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:Veremosnosprximoscaptulosdetalheseexemplosdetodosostiposdevari veis aquimostrado.Geralmentequandofalamosde"camposemgeral"(excluindovari veis locaiseparmetros),podemossimplesmentedizer"campos".Seadiscuss oseaplicaa 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;simplesmenteinsiraovalor direitadosinal (=)paraatribulovarivelqueestaresquerda.Exemplos:

Projeto Ejovem Mdulo II

Java

26

4.2. Variveisestticas:
ummembroquepertenceaclasse.Umavarivelestticacompartilhadaportodasasinstncias declasse,porqueapenasumacpiadavarivelesttica mantidaeaprpriaclasse suficiente 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.Asconvers es podemserimplcitasouexplcitasdasvariveisdetiposprimitivos.Umaconversoimplcitaocorre quandofazemosumatransformaoqueenvolveampliao.Emoutraspalavras,quandoinserimos um item menor (exemplo, um tipo byte) em um container maior(como um tipo int). A transformaovalormaioremumcontainermenor conhecidacomocompactaoerequeruma conversoexplcita,emqueser informadoaocompiladorqueconheceoperigoeaceitatodaa responsabilidade. OJavaconverteautomaticamentevaloresdeumtiponum ricoparaoutrotipo 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.Amaneirapeloqualocastingagedependedaprecis o 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: J atransfernciadedadosdeumtipomaisprecisoparaummenosprecisorequerumcasting 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. Umavariveldereferncia declaradacomosendodeumtipoespecfico,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?Essa umaperguntaqueserefereaoescopodasvari veis emjava.Oescopodefineondeumavarivel acessvelduranteaexecuodeumprogramae quando a varivel criada e destruda. A localizao de uma varivel dentro do programa estabeleceseuescopo.Existemquatrocategoriasdeescopodevari veisnalinguagemJava,so elas:

4.4.2. Variveisdeinstnciasdetiposprimitivos.
Asvariveisdeinstnciassodefinidasdentrodaclasse,masforadequalquerm todo,es so 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.Depoiscrieumavari veldotipo 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,osquaissoitens esquerdaoua 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 truncamento demorada.Poressarazo,alinguagemdeprogramaojavafoiatualizadapara reconhecerasexignciasconflitantesdedesempenhootimizadoereprodutibilidadeperfeita.

5.1. Operadores de atribuio composto.


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

Exemplosemusaroperadorcomposto:

Exemplousandooperadorcomposto:

Nota:Importantelembrarqueasduasatribui esmostradasdonomesmoresultadoqueasduas 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,porexemploseumtipoboolean igualaumtipo char.Existemquatrotiposdeitensquepodemostestar: Nmeros Caracteres Tiposbooleanosprimitivos Variveisderefernciasdeobjeto;porm importantelembrarqueooperador(==) 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 est o referenciando um objeto em comum. Mas muitoimportante ressaltar que omesmo operador estar examinandoosbitsdavarivel,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,issoporqueelecomparaosbitsdasvari veis,entoasreferncia dememriasdasvariveisnosoaiguais.

5.3.2. Operador Instanceof:


Permitenossaberseumobjetopertenceaumaclasseouno,ousejaseoobjetopassanoteste um.Esteoperador usadosomentecomvariveisderefernciasdeobjetos,epodeserempregado paraverificarseumobjeto dotipoespecfico.Quandotratamosdetipos,queremosdizertipode interface ou classe. Em outras palavras, se o objeto referenciado pela vari vel 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+atuar comoumoperadordeconcatenaodeStrings.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). Essevalorbooleano usadocommaisfrequnciaemteste if.Javapossuiquatrooperadoresde comparaoquepodemserusadosparacompararqualquervaloresinteiros,num ricosdepontos 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.
Ooperadorcondicional umoperadorternriotemtrsoperandosusadoparaavaliarexpresses 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
Operadorternrioouoperadorcondicionaltemobjetivodeatribuirumvaloraumavari velde 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,inicializeeimprimaasseguintesvari veis: 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.Asequncia simplesmentedefinidapelaexecuosequencialdos comandos,decimaparabaixo.

6.1. Utilizarcdigoqueuseinstruesif
A expresso entre parnteses deve ter como resultado um valor booleano true ou false. Normalmentetestar algoparasaberse verdadeiro,seguidaexecutar umblocodecdigo(uma oumaisinstrues)seoresultadoformesmoverdadeiroeopcionaloutroblocodec digoseno false.Sintaxedadeclaraoif:

Fluxogramadadeclaraoif.

Projeto Ejovem Mdulo II

Java

44

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

Exemplos02:

Nesteoutroexemploainstruo avaliadacomotrue,pois,ovalordavari velteste false,mais quandoofluxoentranoifavariveltesterecebetrue,logoblocodeinstru oser executadoe resultandoimpressonasadapadro.

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

Fluxogramadadeclaraoifelse.

Projeto Ejovem Mdulo II

Java

45

Notas:Nestesexemplosainstruodoladoesquerdo avaliadacomoverdadeira,pois,ovalorda varivelxnomaiordoqueovalordavarivelyeainstruodoladodireitotambmavaliada comoverdadeira,poisavariveltestetinhavalorinicialfalse,masdentrodainstru oatribudo umnovovalorigualatrue,logoblocodeinstru otantodaesquerdacomoodadireitasero executados,atribuindoumnovovalorparaavarivelyiguala25imprimindoovalordeynasada padro. Exemplos01:

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

Regraparaousodoelseedeelseif Podeterumounenhumelseparaif,eeledevevirdepoisdequaisquerinstru eselseif. Podeterdemuitosounenhumelseifparaumif,eelesdevemvirantesdoelse. Depoisqueumelsetemsucesso,nenhumdosdemaiselseifouelseser testado.

6.1.3. Expressesvlidasparainstruesifelseif.
Adeclaraoelsepodeconteroutraestruturaifelse.Estecascateamentodeestruturaspermiteter deciseslgicasmuitomaiscomplexas. Asintaxedadeclaraoifelseif:

Podemostervriasestruturaselseifdepoisdeumadeclaraoif.Aestruturaelseopcionalepode seromitida.Noexemplomostradoacima,seaexpresso_lgica1verdadeira,oprogramaexecuta ainstruo1esaltaasoutrasinstrues.Casocontrrio,seaexpresso_lgica1 falsa,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,omtodoinvocadopelavarivel s.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.Aoutra arecursoque a chamadadiretaouindiretadeummtododuranteaexecuodoprpriomtodo.EmJavaexistem trsformasdecomandosderepetio:owhile;odowhile;eofor.

Projeto Ejovem Mdulo II

Java

49

Sintaxe:loopwhileFluxogramadoloopwhile

Adeclarao whileexecuta repetidas vezesum blocodeinstruesenquantouma determinada condiolgicaforverdadeira. Exemplo01:

Comoemtodososloopsaexpresso(teste)ter queresultaremumvalorbooleano.Ocorpode loopwhiles ser executadoseaexpresso(tambmconhecidacomocondio)resultaremum valor true(verdadeiro). Uma vez que entramos no loop, seu conte do ser repetido at que a condionopossamaisseratendidaesejaavaliadacomofalse(falsa),encerrandooloop. Exemplo02:

Nesteexemploavarivelx inicializadacom0aoentrarnoloopacondi o verificadacomo sendo verdadeira, isso porque 0 menor do que 5, ento o bloco de cdigo executado, imprimindonatelaastringxeovalordavari velxquenocaso 0,depoisaexecuodocdigo passaparaaprximalinhaqueoincrementodavarivelx,passandoavaler1.Agoraaexecuo voltaaoiniciodoloopparaverificarnovamenteacondi oeassimpordianteat queacondio sejaavaliadacomofalsa. Sintaxe:dowhile:fluxogramadoloopdowhile

Projeto Ejovem Mdulo II

Java

50

6.2.1. Loopdowhile:
Adeclarao dowhile similaraowhile.Asinstruesdentrodolao dowhileseroexecutadas pelomenosumavez.Inicialmente,asinstruesdentrodolaodowhilesoexecutadas.Ento,a condionaexpressolgica avaliada.Seforverdadeira,asinstruesdentrodolaodowhile seroexecutadasnovamente. Exemplo01:

Nesteexemploavarivelx inicializadacom0,oblocodecdigo executadopelomenosuma vezantesqueacondiosejaverificada.Apsacondioseravaliadacomoverdadeira,avarivel ser incrementadaem1eaexecuodocdigovoltaparaoiniciodoblocoeissoserepetir at 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.Todavezqueumbreak encontrado,ofluxodeexecuosaltapara foradoblocoondeestcontidoobreak,sendoretomadonocomandoapsobloco. adeclaraodedesviousadaparasairdeumlaoantesdonormal.Otipodeterminaparaonde transferidoocontrole.Obreaktransfereocontroleparaofinaldeumaconstru odelao(for,do, while ou switch). O lao vai encerrar independentemente de seu valor de comparao e a declaraoapsolaoserexecutada.Exemplo:

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

Projeto Ejovem Mdulo II

Java

53

Nota:Depoisdeanalisarmoschegamosaseguinteconclus o:Estecomandointerrompeaexecuo doloopsatisfazendoacondionoblocoif.Entooresultado aimpressodeapenasoprimeiro quesatisfazacondio,quenonossocasoo100. [i=100]

6.4.2. AinstruoContinue:
Ainstruocontinuefarcomquesomenteaiteraoatualdoloopsejaencerradaequeaprxima iteraodomesmoloopsejainiciadadestequeforatendida.Quandousarumainstru ocontinue emumloopfor,voc ter queconsiderarseusefeitosnaiteraodoloop.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,aindaaumentar ovalorantesda condio(i<10)serverificadanovamente.Masgeralmenteainstruocontinueusadadentrode umtesteifcomosegueabaixo:

Nota: Este dois comando tambm podem ser usados como instrues rotuladas. As instrues rotuladasestoalmdoescopodonossocurso,mas,emboramuitasinstru esemjavapossamser rotuladas, maiscomumusarrtuloscominstrueslooptaiscomoforewhile,emconjuntocom instruesbreakecontinue.Umainstruodertulodevesercolocadaantesdainstruosendo rotulada, e consiste de um identificador vlido que termina com dois pontos(:). As instrues rotuladasseronecessriassomentenassituaesemquevoc tiverumloopaninhadoeprecisa 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 coleodeobjetosfalandounscomosoutrospormeiodainvoca o(mensagem)dosmtodosuns dosoutros.Cadaobjeto deumtipo,eessetipo definidoporumaclasseouumainterface.A maioriadosprogramasJavausacoleesdeobjetosdemuitostiposdiferentes.

7.1. O que objeto e atributos.

TiposdeDadosAbstratos:Representamapartecentraldametodologiaorientadaaobjetos.Umtipo dedadoabstrato ummodeloformadoporpropriedades(atributos)eopera es(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, elausaaclasseapropriadaparacriarumobjetoqueser umainstnciadessaclasse.Esseobjeto ter oseuprprioestadoeter acessoatodososcomportamentosdefinidospelasuaclasse. Os objetospodemconterobjetos,ousejaosatributosdeumobjetopodemserobjetos, damesma classeouno.Objetospodemserpassadospelaredeearmazenadosemmeiof sico.Exemplode objetosdomudoreal.

Projeto Ejovem Mdulo II

Java

56

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

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

Nesteexemploumdeterminadoobjetoest invocandoomtodocorrer()deumoutroobjeto,ou sejaenviandoumamensagemparaoutroobjetoquecontmoseguintemtodo.

7.5. Oqueoestadodeumobjeto.

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

Projeto Ejovem Mdulo II

Java

57

7.6. Conceituandoclasses,construtor,ousodedonew,thiseclasses abstratas.

Umaoperaopodeseraplicadaaouporobjetosnumaclasse.Amesmaopera opodeseaplicara 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 programa o para conseguir modelarosobjetosaseremrepresentadoseaimplementaodomodelo.Modelarumobjetocriar uma descrio geral para um conjunto de objetos que se deseja utilizar no programa. Vamos considerar,porexemplo,umadisciplinatemsuaforma,seuc digo,seunome,seuscrditoseetc. Esteconjuntodeelementosquedescrevemadisciplinapoderiamseragrupados,constituindoum modeloparadisciplinas.Podamosaindaformaroutrosobjetosqueiriampossuiroutrosatributos, uma certa combinao de atributos tornase conveniente para descrever apenas um conjunto particulardeobjetos.Levamostambmemconsideraoqueumobjetopodesermodeladoporseu tipodeutilizaoenoapenasporseusatributos.Vejamosabaixoomodelodediagramadeclasse daUMLpararepresentaraclasseDisciplina.

Aseosuperior usadapararegistraronomedaclasse.Aseointermediria reservadapara registrodaspropriedadesdaclasse,casoexistam,enase oinferior registradoa assinaturados 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 aconselharavocadotaremseusprogramas usarlinhasdecomentriosparadelimitaruma rea 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,namaioriadoscasostornaseredundanteousoemtodasasvari veisdapalavrathis. Existem casos em sefaz necessrio ouso da palavras this. Por exemplo, voc pode necessitar chamarapenasumapartedomtodopassandoumainstnciadoargumentodoobjeto.(chamarum classedeformalocalizada). New:Ainstanciaoapalavrachave new umoperadoremJavaquecriaonovoobjeto(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.Ummtodo marcadocomo 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)compontosflutuanteseopera escompontoflutuante. possveldeclarar umaclassecomostrictfpoumtodosindividuais. Final:Nalinguagemjavaasvariveiscomomodificadorfinalindicaqueovalordeumavari vel 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 a es ou transformaespossveisparaoobjeto.Permitematribuirumcarterdinmicoaosobjetoseem muitoscasospodemimitarocomportamentorealdoobjeto.Asintaxedosm todos compostade 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,oqueser passadodentrodomtodo chamadodeargumentodomtodo (ouparmetro).Essavarivel umavarivelcomum,chamadatambmdetemporriaoulocal, pois,aofinaldaexecuodessemtodo,eladeixardeexistir. Exemplo01:

Exemplo02:

Exemplo03:

7.9. Passagemdeparmetrosemjava.
Quandovocpassarumavarivelderefernciadeobjetoparaummtodo,terqueselembrarque seestarpassandoarefernciaaoobjetoenooprprioobjeto.Lembresedequeumavarivelde refernciacontmbitsquerepresentamumamaneiradeacessarumobjetonamem ria(noheap). Omaisimportantequevocprecisalembrarquenoestarpassandonemmesmoumavarivel derefernciareal,mas,emvezdisso,umacpiadosbitsdessavarivel,portanto,quandopassar umavariveldereferncia,estar passandoumacpiadosbitsquerepresentamcomooobjeto especficopodeseracessado.

Projeto Ejovem Mdulo II

Java

65

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

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

Notaimportante: DentrodamesmamquinavirtualJavaosparmetrosfornecidosaosmtodos sopassadosporvalor.Isto ,quandoumdeterminadoparmetro passadoaummtodoojava criaumacpiadesseparmetroecolocaanastackdomtodoinvocado.Paraostiposprimitivos (int, float, boolean,...) esta operao no levanta qualquer problema mas quando se tratam de objetosascoisasnofuncionamexatamentedamesmamaneira.Naverdade,emJavan oselida 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,indicandoqueoresultadoderetornodaopera odevetercomovalor.A declaraodomtodomudaumpouconaassinaturadomtodo.Masparaistousamosapalavra chavereturnindicaqueomtodovaiterminarali,retornandotalinformao. Exemplo01:

Exemplo02:

7.10.2. Declaraodemtodosestticos.
7.10.2.1. Mtodosestticos: Osmtodosmarcadoscomomodificadornoreferenteaoacessostaticpertencemclasseenode umainstnciaespecficadaclasse.Estemembropodeserusadosemternenhumainst nciadessa classe.Paraestestiposmembrossomenteaclasse suficienteparachamar(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,estar definindoumcontratocomoqueaclassepodefazer,sem mencionarnadasobrecomoofar.Umainterfaceumcontrato.Qualquertipodeclasse(concreta) edequalquerrvoredeheranapodeimplementarumainterface. Exemplo01:

Exemplo02:

Exemplo 03:

Regrasparaasinterfaces:

UmainterfaceemJava umacoleodemtodosabstratosquepodemserimplementadas 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.Este umdomnioe 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,desdequen otentecriaruma 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.Masvoc noquerquealgumdefatocrieumobjetocarrogenrico,abstrato.Comose inicializariaoseuestado?Dequecoreleseria?Quantosassentos?Pot nciadomotor?Direo hidrulicaouno?ou,maisimportante,dequeformaelesecomportaria?Emoutraspalavra,como osmtodosseriamimplementados?Oquevocprecisa deinstnciasreaisdecarros,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 interao realizadaatravsdasmensagensdeinterfacedoobjeto. Estainterface umconjuntoprdefinidodeoperaesutilizadaspor outrosobjetosquesecomunicamcomele.Istogarantequeosdadoseosatributosdoobjetoss o acessveisatravsdasoperaesdoobjeto.Nenhumoutroobjetopodeacessardiretamenteestes atributosealterarseusvalores. Encapsulartemafunobsicadeprotegerumaclassedecoisasestranhas,ouseja,mant lade formamaisprotegidacontraousoindevidodecertosusu rios.Vamosveroseguintecdigopara entenderistomelhor: Exemplo01:

Nesteexemploacimaasvariveisdeinstnciaestoencapsuladascomomodificadordeacesso private,permiteassimquesejamacessadassomentedentrodapr priaclasseaqualestosendo 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)Descrevacomsuapalavrasoquevoc entendeporpolimorfismo,citetrsexemplodousode polimorfismoemjava.

7.14. Exercciosdefixao
01)Modeleumaclassechamada(Pessoa)comosseguintesatributos(nome,idade,cpf,sexo,ra ae 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,asubclassedeverepresentarum quadradoeportanto 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 convenientesparaorganizarseutrabalhoeparasepararseutrabalhodasbibliotecasdec digos fornecidasporterceiros.Abibliotecajavapadrodistribudasemumasriedepacotes,incluindo java.lang,java.util,java.neteassimpordiante.Ospacotesjavapadr osoexemplosdepacotes 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:
fundamentalparaJavaeoutraslinguagensdeprograma oorientadasaobjetos,oconceitode herana,quepermiteaocdigodefinidoemumaclasseserreutilizadoemoutrasclasses.

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

Java

73

automaticamenteasvariveisdeinstnciasacessveiseosmtodosdefinidospelasuperclasse,mas tambmlivreparasubstituirmtodosdasuperclasseparadefinircomportamentomaisespecficos. Osobjetosdeumamesmaclassepodemtirarproveitoderela esdeherana,ondeobjetosrecm criadosabsorvemcaractersticasdeoutrosjexistenteseadicionamsenovascaractersticas.

8.3. Object: A superclasse csmica do java


AclassObject:AclasseObject o ltimoancestraltodaclasseemjavaestendede Object. 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 pesquisarememartigosnainternetouat mesmoveradocumentaoonlinequelistaosvrios 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 implementaodaclasseatual derivada.Aclusulaextendsnodeveaparecernadefinioda classe java.lang.Object,pois primordialaclasseenotemnenhumasuperclassedireta.Sea declaraodeclasseparaqualqueroutraclassenotemnenhumaclusulaextends,entoaclasse temaclassejava.lang.Objectcomoimplcitadasuperclassedireta. Subclasses: uma classequeherda de uma classe ou de uma interface. Uma subclasse herda estadoecomportamentodetodososseusantepassados.Asuperclasseotermorefereseancestral diretodeumaclasse,assimcomotodasassuasclassesascendentes.Essahierarquiadeclassessegue umaapresentaonaformade rvore,emquearaiz asuperclassedetodoosistema.Cadanvel abaixodessasuperclassedosistemaacrescentafunesespecficas. Exemplo01: Nesteexemplovamosmostrarcomoprocedercomessepoderosorecursodojavaquechamamosde heranasimples.
Projeto Ejovem Mdulo II

Java

74

CdigodasuperclasseConta.

CdigodasubclasseCPoupancaqueestendedasuperclasseConta.

CdigodasubclasseCEspecialqueestendedasuperclasseConta.

Projeto Ejovem Mdulo II

Java

75

Diagramadeclassesrepresentandoaheranaentreasclassescitadasacima.

Nota:Javapermitequeumaclasseherdeapenasascaractersticasdeuma nicaclasse, ouseja,nopodehaverheranasmltiplas.Porm,permitidoheranasemcadeias,por exemplo:seaclasseMamiferoherdaaclasseAnimal,quandofizermosaclasseCachorro herdaraclasseMamifero,aclasseCachorrotambmherdar ascaractersticasdaclasse 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(m todos).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 s o animais,asuperclassefoidenominadacomoAnimaleasvari veisemtodosemcomunsatodosos animaisforamatribudosaela,comoilustradonaFigura. Nesteexemplo,cincovariveisforam definidas:(otipodecomidaqueoanimalcome),(on veldefomedoanimal),(representaoda alturaelarguradoespaoqueoanimalvagaraoseuredor)e(ascoordenadasXeYdoanimalno espao).Almdisso,quatromtodosforamdefinidosparadefinirocomportamentodosanimais: (comportamento do animal ao fazer algum ru do), (comportamento 57 do animal ao comer), (comportamento do animal dormindo) e (comportamento do animal quando n o est nem dormindonemcomendo,provavelmentevagueandonoambiente). O terceiro passo o de decidir se alguma subclasse precisa de comportamentos (m todos) especficosaoseutipodesubclasse.AnalisandoaclasseAnimal,podeseextrairqueosm todos devemterimplementaesdiferentesemcadaclassedeanimais,afinal,cadatipodeanimaltem comportamentodistintoaocomerefazerru dos.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 inicializaraquelesatributosqueelaest herdando,eofazemoschamandoalgumconstrutorda superclasse,usandoachamadasuper(...).

8.4. Relacionamentosumetemum. 8.4.1. UM:


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

Nota:NesteexemploacimaaclasseMamferoestendaaclasseAnimal,poressemotivo dizemosqueaclasseMamferoumanimal. Exemplo02:

Projeto Ejovem Mdulo II

Java

78

Nota:NesteoutroexemploacimaaclasseMam feroimplementaainterfaceAnimal,por essemotivotambmdizemosqueaclasseMamferoumanimal.

8.4.2. TEMUM:
Osrelacionamentostemumsobaseadosnautilizao,emvezdeherana.Emoutraspalavras,a classeAtemumBocorrer seocdigodaclasseAapresentarumarefernciaaumainstnciada 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 cria o 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.S existeemhierarquiasdeheranaouinterface.Todavia,asobrecarga tambm 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. Paraquepossarmosacessarumobjetoemjavautilizamosumavari veldereferencia.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. Ent o, qualquer classe poderia ter mltiplasclassesacimadesina rvoredeherana,masissono omesmoquedizerqueuma classeestendediretamenteduasclasses.

8.5.2. Mtodos subrescritos:


Umaclassequeherdeomtododeumasuperclasse,podersobrescreveressemtodo(amenosque, como aprendeu anteriormente, ele tenha sido marcado com final). O benef cio chave de sobrescrever orecursodedefinirumcomportamentoquesejaespecficodedeterminadotipode 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,ouumsubtipodotipoderetornodeclaradonom todo originalsobrescritodasuperclasse. Alistadeparmetrosdevecoincidirexatamentecomadomtodosobrescrito. Onveldeacessonodevesermaisrestritoqueodomtodosobrescritoesimmenos restritoqueodomtodosobrescrito. Omtodosobrescritonodevelanarexceesverificadasnovasoumenosabrangentesque asdeclaradaspelomtodoqueest sendosobrescrito.Porexemplo,ummtodoquedeclare umaexceoFileNotFoundExceptionnopoder sersobrescritoporummtodoquedeclare

Projeto Ejovem Mdulo II

Java

81

umaSQLException,Exceptionouqualqueroutraexce oqueomtodonodetempode 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(),est sendosobrecarregado.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 similar declassesmascontendoapenasaespecificaodafuncionalidadequeumaclassedeve conter,semdeterminarcomoessafuncionalidadedeveserimplementada.UmainterfaceJava umaclasseabstrataparaaqualtodososm todossoimplicitamentepblicoseabstratos,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,precisamosterumaclasseondeser oimplementadososmtodosque foramdeclarados.Nonossoexemplo,aclasse exatamenteaclasseMeuVeiculomostradaabaixo. Mastemosdeindicar naclassedeimplementaoqueestamosimplementando umainterface,e dizer tambm qual a interfaceou quais as interfaces (pois, a linguagem java suporta m ltiplas 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:Masoqueacontecequandovoc desejausaravarivelderefernciadoanimalafimde 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, ocompiladorficar feliz. Antesdetentarmoschamaromtodocomer(), ns convertemosavariveldoaparaotipoCachorro.Oqueestamosquerendodizeraocompilador : sabemosqueelanaverdadeserefereaumobjetoCachorro,ent onotemproblemaemcriaruma 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,adicioneosm todoscalcularreaecalcular
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. AclasseThrowable a nicaclassecujasinstnciasdiretasouindiretaspodemserusadaspara 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,todososoutroslan amentosdeexceodevemser tratadospeloprogramador.Capturandoumaexceocomoblocotryecatch. Vejamosasintaxe.

Projeto Ejovem Mdulo II

Java

86

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

Nota:Omtodocalcseforchamadocomyigualzero(0),gerar umerroeumaexceo ser lanada, esse erro poder ser sinalizado no bloco trycatch,ento a execuo do mtodopularparaablocodecdigocatch,ondesermostradoumamensagemdeerro. Exemplo02: Caso01:NesteexemplovamoschamaromtodoconverteStr(),passandoumastringnumrica,que nonossocaso 8eoresultado aconversodastringemumnmerodepontoflutuante,da a divisofeitaeaexecuodoprogramaacontecesemnenhumproblema.

Caso02:Nestemesmoexemplovamoschamaragoraom todoconverteStr(),passandoumastring nonumrica,quenonossocaso acaractere'n'eoresultado olanamentodeumaexceo, jogandoofluxodeexecuodoprogramaparaoblococatch,ondeimprimeumamensagemnano console.

Projeto Ejovem Mdulo II

Java

87

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

Resultadodocdigoacima:

8.11.2. Lanadoumaexceocomothrows.
Oobjetodeexceo umainstnciadaclasseExceptionoudeumadeumadesuassubclasses.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.Oprogramadorpodeutilizarocomando throwdeformaexplcita.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.Aprocuraporumtrycatchapropriado propagadaatopontoemqueh 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:indicaatentativadeacessoaumelementodeumagregadoaqu moualm 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.Essetamanhoser igualaquantidadede elementosqueoarrayarmazenar. Regrasparaosvetores: - Quantidade mxima de elementos obtida atravs da propriedade length (comprimento do vetor). Verificadosemtempodeexecuo.Tentativadeacessar ndiceinexistenteprovocaumerrona 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.

TodovetoremJavapossuioatributolengthquedefineoseun merodeelementos.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,enquantoovetortemapenasumadimens o,amatrizpodeter tantasdimensesquantasforemnecessrias.Mas,nestecursotrabalharemossemprecommatrizes deduasdimenses.Assim,nestetexto,semprequenosreferirmosamatrizes,estaremos falando de matrizes bidimensionais. Para facilitar o entendimento, a Figura 34 apresenta uma matrizcapazdearmazenarduasnotasdeumaturmadecincoalunos.

Nota:SuponhaqueoprimeiroalunodalistadechamadadeumaturmasejaoAndr eosegundo 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 ap s o nome do array declarado.

9.1.6. Atribuiodevariveisderefernciaaarray.
Seotipodeclaradoparaoarrayforumaclasse,podeseinserirneleobjetosdequalquersubclasse dotipodeclarado.Porexemplo,seCachorroforumasubclassedeAnimal,ent opoder inserir tantoobjetosCachorroquantoobjetosAnimalnoarray. Exemplo01:

Projeto Ejovem Mdulo II

Java

95

Nota:NesteexemploforaminseridosquatronovosobjetosAnimalnaheapeosatribuia trsposies(elementos)dendicedoarray.

9.1.7. Capturandodadosdousuriopeloteclado.
UtilizamosaclasseScannerparacapturamosentradasdedadosdousurio,digitadaspeloteclado, aclassemesmaoferecediversosmtodosquepodemserutilizadospararealizaresteservio. lembrarqueaclasseScanner umaclassedaAPIdoJavaeprecisaserimportadaantesdeus la. Osprincipaismtodosquepodemosutilizarsooslistadosabaixo: next()paralerStringdetextos. nextInt()paralernmerosinteiros. nextFloat()paralernmerosreaisounmerosdepontoflutuante. nextDouble()paralernmerosreaisounmerosdepontoflutuantecomdupla preciso. RegraparautilizarmosaclasseScanner: Inicialmente,definimosachamadaaopacotequecont maclasseScanner:etodosos seusmtodoutilitrios. Definimosumavarivel,denominadasc,queser criadaapartirdaclasse Scannere 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.Deveselembrarqueosargumentosdelinhadecomandos oespecificados depoisdonomedaclasseaserexecutada.
Projeto Ejovem Mdulo II

Java

97

Exemplo:

1Passo:Entovamosprimeirocompilaroprogramaacima.utilizamososeguintecomando javac seguindodonomedaclasse(ponto).java

2Passo:Depoisdecompilarmosoprograma,iremosexecut lousandocomando java seguindo donomedaclassecomosargumentoqueseropassadosparaomtodomain.

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

NalinguagemJava,quandoumaaplicaoexecutada,osistemarepassaosargumentosda linhadecomandoparaaomtodomaindaaplicaoatravsdeumarraydeString.Cada elementodestearrayconter umdosargumentosdelinhadecomandopassados. 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,oresultadodeveentosermultiplicadopeloprximoelementoat que 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 m s invlido dever ser exibida. 04Escrevaumlaowhilequeexecute20vezes,imprimindoovalordavarivelxqueinicialmente estcomvalor10.Convertaestelaoparaumdowhile. 05Escrevaumprogramaqueimprimanatelaasomadosnmeros mparesentre1e30ea multiplicaodosnmerosparesentre1e30. 06Escrevaumprogramaquepercorradoislaosde0a10,uminternoaooutro,imprimindoos contadores,equandoestesforemiguais,oprogramadevepassar prximainteraodolaomais externo,casocontrrio,deveimprimirosvaloresdoscontadoresdosdoislaos. 07Desenvolvaumprogramaquesolicitaaousu rioumnmerointeirodenomximo4dgitos. Invertaessenmero. 08Desenvolvaumprogramaquedadoumnmerointeirooprogramainformeseomesmo um 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 funcionrioquetrabalhouapenasNdiasnummsde22dias teis.Onmerodediastrabalhados bemcomoosalriointegraldofuncionriodevemserlidosdoteclado.Oresultadodeveserum nmeropontoflutuante. 23)Escreva umprogramaemJavaqueleiarepetidamenteumnmerodotecladoat queseja 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?
Aprimeiracoisaquetemosqueentender queaclasseString imutvel.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,podemospassarestevalor nicoeimutveldenossastringcriadaparadiversas 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.Ela declaradacomo 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.inno usadocomfreqncia,poisosdadosnormalmente passadaparaum 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 normalmentegeraosdadosquevoc escrever 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 normalmenteutilizadoapenasparatextosdeerrodesa da.Algunsprogramas(comooEclipse)vai mostrarasadaparaSystem.errcomtextoemvermelho,paratornlomais bvioque otexto 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,massimterumm todonaclassequerepresentaa empresaparaadicionarumdepartamento. 04) Crie uma classe para representar uma contacorrente, com m todos para depositar uma quantia,sacarumaquantiaeobterosaldo.Paracadasaqueser debitadatambmumataxade 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),osper metroseas reasdetodasasformas. 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 packageequandoumaclasseutilizaoutraclasseelapodedeclararissocom importtornandoo cdigomaissimplesdeler.

11.1.1. OqueUML?
A UML umalinguagempadroparaaestruturaodeprojetosdesoftware.Nasuaverso 2.0 aUMLque umasiglaquevemdotermoeminglsUnifiedModelingLanguage(Linguagemde modelagemunificada)queumaumalinguagemparaespecificao,documentao,visualizao edesenvolvimentodesistemasorientadosaobjetos. A importncia da modelagem dentro do desenvolvimento de um sistema indiscutvel. A modelagemapartecentraldetodasasatividadesquelevam implantaodeumbomsistema. 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 m todos 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
Projetoorientadoaobjetos umaestratgiadeprojetoemqueosprojetistaspensamemtermosde 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:Sededicaadesenvolverummodeloorientadoaobjetododom nio daaplicao.Osobjetosidentificadosrefletementidadeseoperaesassociadascomoproblemaa serresolvido. 7.ProjetoOOsededicaadesenvolverummodeloorientadoaobjetodeumsistemadesoftware paraimplementarosrequisitos.OsobjetosemumprojetoOOestorelacionadossoluodo problemaqueestsendoresolvido. 8.ProgramaoOOrealizaumprojetodesoftwareemumalinguagemdeprograma oP .O.O,que aceitaaimplementaodiretadeobjetosefornecerecursosparadefinirasclassesdeobjeto.

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

11.1.4. NoesdoUsodaUML

uma reaquevemseexpandindo 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,acria odestesdiagramasenvolvea 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 umformatotamb musado 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,por mcomo passardasaulas,iremosusaroMYSQLeexportaremososmodelosgeradosparaoMySql,ent o 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, pormsuaprincipalfuno facilitaracriaoderelaesentretabelas.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, por melassotabelas distintassemrelao.Entocomopodemosfazerainteraoentreessastabelas?Vamosimaginaro seguinteexemplo: UmadeterminadaEscolapodetervriosprofessoreseumdeterminadoprofessorpodeter vriosalunos.Jnonossoexemplo,umdeterminadoalunonopodertervriasescolas.Paraficar maisfcildeentender,observeaimagemabaixo:

Claroquedependendodosistema,podemoscriaroutrosexemploscomoumdeterminado professortermaisdeumaEscolaouumdeterminadoalunopoderterv riosprofessores,porisso queexistemaistiposderelaes.Veremosnosprximostpicosostiposderelaesentretabelase comotrabalharcomelesusandocomandosno MySqlparaconhecerecriaremmodoavanado,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,atabelair herdarvriaspropriedadespreviamentedefinidas.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,j conhecemosoutrasiremos 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.Representamoscomorela o: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.Entotemos1Escolaquepoder ternturmas, 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,poisir receberumachaveestrangeirapara montararelao,nonossocasoachaveestrangeiraserumacolunaamais,elaserchamadade escola_id. Comoissoacontecenaprtica?Arepostaencontrasenosprximostpicos.

17.1.1. CriandoRelao1:nusandoMySQL.
VamosanalisaromodeloqueserfeitoatravsdecomandosSQL.

Imaginequevoc ir gerenciarasescolaspublicasdoCear.Representadonatabelaescolans precisamosdeumaidentificaonicaparacadaescolarepresentadocomoachaveprimriaide onomedasescolas.Temostambmatabelaturmas.Nelaprecisamosteronumerodasalaea sriequeestaturmarepresenta.Ex:Primeiroano,SegundoAno.Parafazerarela oprecisamosde 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.Oquetemosdenovidades o apenasasultimas2linhasquetratasobreorelacionamento.Analisandoessas2linhastemos: INDEXturmas_chEstrang(escola_id): Nestalista,estamosindicandoque escola_idser uma refernciaparaconsultas.Issoirotimizarnossasconsultas. FOREIGNKEY(escola_id)REFERENCESescola(id): Essalinhair fazerarelao, 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,dataquefoilan adoofilmeedurao,faa umbancodedadosparaconsultasdessefilmeenvolvendorelacionamentodetabelasestilo/filme. 2UmaLojadeRoupasvendebasicamente3produtos:Camisetas,cal aseshorts,sabendoque cada produto pode ter: Cor, tamanho, marca e pre o. Faa um banco de dados envolvendo relacionamentodetabelasTipo/Caractersticas.

17.2. UmparaUmrelacionamentos,ConhecidocomoOnetoOne.
Estetipoderelacionamentotemimportnciasparticulares,comoisolar partedeumatabelapor motivosdeseguranaoudividirtabelascomvriascolunas.Tambmchamadoderelacionamento 1:1.Ondeumachaveprimariasecomunicacomumaoutrachaveprim riaemumaoutratabela comobjetivodefazerumareferenciadecomplementao.sendoassim,pormotivosdesegurana, nenhumregistrodachaveprimariadatabelapaipoder serdeletadaoualterada,poisoregistro sempreterumareferenciaparaoutrastabelas. Exemplo: Imaginequetemosumclientecadastradoemumsite.Algunsdadosdele,s opblicos,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) Percebaqueachaveprimriadatabela dadosLivres_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, omembropoder visualizaralgunscontedos.Oseudever apenasmontarumatabela quecontenhaosdadosprincipaisdessemembro(nome,email,login,senha,endere o)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).Procuredividirosregistrospessoaisdosregistrosdelocaliza odapessoaemumaouta tabela. 3imaginequeemumadeterminadaescolatcnica,1coordenadorsejaresponsvelapenaspor1 determinadocursoqueaescolaoferece.Faaumarelaoentretabelasqueser responsvelpelo gerenciamento.

Projeto Ejovem Mdulo II

DBDesigner

120

17.3. Relacionamentosmuitosparamuitos,conhecidocomoManyto Many.


Temosessetipoderelacionamentoquandoumregistrodeumatabela,podereferenciar v rias 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 umaidentificao nica,ondepoder repetirocdigodaSedeoudoproduto,pormnopoder repetiramesmarelaoentreaSedeeoprodutonestatabela.Iremosentendermelhordepoisde inserirregistrosnessatabela. 6INDEXCh_estrang_SEDE(Sede_ID): Nestalista,estamosindicandoqueSede_idser uma 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'

1Imaginequevoc temumaumalistadeescolasPblicasnoCear,existeumatabelacom algunsdadosdaescolacomo:(nome,cidade,bairro,rua,numero,etc...)eumaoutracomdados dosprofessores:(nome,idade,matria,telefone,email,etc...)Algunsprofessoresdoaulaem maisdeumaescolaeemcadaescolater vriosprofessores.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 nomedaescolapararespostafinaldanossaconsultadoMYSQLparagarantindonossarela o 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_idigual2temosonomedaescolareferenteaoidigual 2,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 refernciaqueindicamos osite:http://dev.mysql.com/lvoc encontraroutrasexplicaesdas 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 ser o 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.
NoDBDesginerorelacionamento simples,bastacriarmosas2tabelascomseusrespectivosdados de acordocom a nossa necessidade, em seguida clicarcom os bot es 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.Sevoc incluialiblibsqlmda.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,osaplicativospodemexecutarinstru es 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),servi odenomespara 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,podemosabrirumaconex ocomobanco 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. Issoporquequandoaotentarseconectaraobancodedadospodeocorreralgumaexce oe 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

Вам также может понравиться