Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Java e DBDesigner
Essa apostila tem como objetivo ajudar ao aluno na disciplina de Introduo a Programao OrientadaaObjetosdonossocurso,vistoqueorequisitobsicoparaquesepossaalcanartodosos objetivos do nosso curso nesta disciplina que o aluno tenha passado pela disciplina de Introduo a Lgica de ProgramaoparaComputadores.Masnonosatearemos em barrlos, sem o prrequisito bsico, isso porque confiamoseacreditamosnacapacidadedosnossosalunos que com muita fora, dedicao e vontade de vencer na vida,conseguirultrapassarqualquer preconceitocontrao acessoaoconhecimentotecnolgico. Onossoobjetivoprincipalcomestematerialcapacitaro alunoparaumentendimentocriticoarespeitodoParadigmadeProgramaoOrientadaaObjetos. Vistoqueumadastendnciadomercadousaresseparadigmanodesenvolvimentodesistemasem geral. AliadoaoSoftwareLivrequeumatendnciaeumaalternativaparaomundocorporativonoque serefereasoftwares,equetambmtemsidoatualmentedesenvolvido por programadores espalhados ao redor mundo, sendo que boa parte dessastecnologiasvemsendodesenvolvidasutilizandoferramentaslivres namaioriadeseusprojetos,contribuindoparaosavanosecolaborando paraoacessodemilharesdepessoasasinclusesdigitaisnoquetangeas tecnologiasdainformaonomundo.Daremostambmanossadisciplina umanfasemaiornousodessetipodetecnologia,passandoparaosnossosalunosummodeloe umaalternativafantstica,queautilizaodasferramentaslivresdisponveisnainternet. Primeiramentevamosestudarumpoucosobreahistriadalinguagemdeprogramaojavaque iremosutilizarnanossadisciplina.Relatamosascaractersticasprincipaisdalinguagemquepara muitosainda desconhecido, ouseja,conheceraferramenta antesdedominla deextrema importnciaparaosfuturosprogramadores. Obrigado professor! Eu sou o Tutor e os ajudarei, respondendo as perguntas que forem surgindo ao longo do nosso curso, mas, algumas dessasperguntasdirijaseaoInstrutorquedeverauxiliarmeuscolegas desala,osalunos! Alisprofessor,porondecomearemosaestudarjava?Nosdumadica! Calma!Muitacalmameuscolegas.Porqueoejavashowaindavaicomear. Apresentaremosnestaapostila,nofinaldecadacaptuloumalistacom exerccios,quemuitasvezessoaparentementerepetitivoseatmesmo redundantes.Issoproposital:Seoestudanteconseguirresolverumdos exercciosaparentementerepetidos,poderdeduzirasoluodeoutros maisfacilmente.Acriaodessesexercciosfacilitaacriaopelo instrutordelistasdeexercciosdistintasecomplementares. Claro!Comearemosaestudarsobreosfundamentosdeprogramaoefalaremosemseguidasobre asestruturasbsicasdalinguagemjava.
Java
Captulo1. Oquealinguagemjava.
Bemvindosaofuturo!Javanosomenteumalinguagemdeprogramao,massimuma tecnologiaquetemcomoobjetivoconstruirprogramasquepossamserutilizadosemqualquer plataformaoucomputador,comomnimopossveldedependnciacomumsistemaoperacionalou ambientededesenvolvimento.JavapossuiumasintaxeextremamentesimilardoC++,ecom diversascaractersticasherdadasdeoutraslinguagens,comoSmalltalkeModula3.antesdetudo umaboalinguagem,simples,comumambientedeexecuodealtaqualidadeeumavasta bibliotecadeclassesdisponveis.EssacombinaoquetornaJavaumapropostairresistvelpara tantosprogramadores.Almdecontarcomasseguintescaractersticas,totalmenteorientadaa objetos,fortementetipada,independentedearquitetura,robusta,segura,portvel,bemestruturada, suportaprogramaodistribuda,multithreadedecontacomgarbagecollection.
1.1. Histricodalinguagem.
Em 1991, na empresa Sun MicroSystems, foi iniciado o Green Project, o bero do Java uma linguagemdeprogramaoorientadaaobjetos.OsmentoresdoprojetoeramPatrickNaughton, MikeSheridan,eJamesGosling.Oobjetivodoprojetonoeraacriaodeumanovalinguagemde programao,masantecipareplanejaraprximaondadomundodigital.Elesacreditavamque em algum tempo haveria uma convergncia dos computadores com os equipamentos e eletrodomsticoscomumenteusadospelaspessoasnoseudiaadia. JamesGoslingespecificouumanovalinguagemdeprogramaoparaoseunovoprojetoedecidiu batizladeOak,quequerdizercarvalho,umarvorequeelepodia observar quando olhava pela sua janela. O prximo passo era encontrarummercadoparao*7.Aequipeachavaqueumaboaideia seriacontrolartelevisesevdeopordemanda comoequipamento. ElesconstruramumdemochamadoMovieWood,masinfelizmenteera muitocedoparaqueovdeopordemandabemcomoasempresasde TV acabopudessemviabilizaronegcio. Aideia queo*7tentava vender, hoje j realidade em programas interativos e tambm na televisodigital.Permitiraotelespectadorinteragircomaemissorae com a programao em uma grande rede a cabos,era algo muito visionrio e estava muito longe do que as empresas de TV a cabo tinhamcapacidadedeentenderecomprar. Oprottiposechamava*7(leiaseStarSeven),umcontroleremoto com uma interface grfica touchscreen. Para o *7 foi criado um mascote, hoje amplamente conhecido no mundo Java, o Duke. O trabalho do Duke no *7 era ser um guia virtual ajudando e ensinando o usurio a utilizar o equipamento. O *7 tinha a habilidadedecontrolardiversosdispositivoseaplicaes. Aideiacerta,napocaerrada.AsortequeobomdaInternetaconteceu,erapidamenteuma granderedeinterativaestavaseestabelecendo.Eraestetipoderedeinterativaqueaequipedo*7 estava tentando vender para as empresas de TV a cabo. E, da noite para o dia, no era mais necessrioconstruirainfraestruturaparaarede,emumgolpedesorte,elasimplesmenteestaval. GoslingfoiincumbidodeadaptaroOak paraaInterneteemjaneiro1995foilanadaumanova versodoOakquefoirebatizadaparaJava.AtecnologiaJavatinhasidoprojetadaparasemover pormeiodasredesdedispositivosheterogneos,redescomoaInternet.Agoraaplicaespoderiam serexecutadasdentrodosBrowsersnos AppletsJava etudoseria disponibilizadopela Internet instantaneamente. Foi o esttico HTML dos Browsers que promoveu a rpida disseminao da dinmicatecnologiaJava.Avelocidadedosacontecimentosseguintesfoiassustadora,onmerode usurioscresceurapidamente,grandesplayers,comoaIBManunciaramsuporteparaatecnologia Java.
Java
1.3. Principaiscaractersticasdalinguagemdeprogramaojava
ORIENTAOAOBJETOS: Javaumalinguagemorientadaaobjetosqueseguealinhapurista iniciadapor Smalltalk queconsideradapuramenteO.O equetudonestasoobjetos.Coma exceodostiposprimitivosdalinguagem(char,int,float,etc.),amaiorpartedoselementosdeum programajavasoobjetos. Noqueregeesseparadigma,oprojetoorientadoaobjetos uma tcnicadeprogramaoqueseconcentranosdados(=objetos)e nasinterfacesparaesteobjeto.Ocdigoorganizadoemclasses, quepodemestabelecerrelacionamentosdeheranasimplesentre si,somenteaheranasimplespermitidaemjava.Humaformade"simular"heranamltiplaem Javacomousodeinterfaces. SIMPLICIDADE: Java muito parecida com C++, mas muito mais simples. Java no possui sobrecargadeoperadores,structs,unions,aritmticadeponteiros,heranamltipla,arquivos.h, diretivas de prprocessamento e a memria alocada dinamicamente gerenciada pela prpria linguagem,queusaalgoritmosdegarbagecollectionparadesalocarregiesdememriaqueno estomaisemuso.OutroaspectodasimplicidadedoJavaotamanhopequeno.Umdosobjetivos do Java permitir a construo de software que possa rodar independentemente em qualquer mquinadepequenoporte.Otamanhodointerpretadorbsicoedosuporteaclassesdecercade 40K bytes; adicionando as bibliotecas bsicas padro e o suporte a linhas de execuo (essencialmenteummicrokenelautocontido),tmseoutros175K. SEGURA:Javafoielaboradaparaserusadaemambientesderededistribuda,por isso permite a construo de sistemas livres de vrus e intruses. A presena de coleta automtica de lixo, evita erros comuns que os programadores cometem quandosoobrigadosagerenciardiretamenteamemria(C,C++,Pascal). A eliminaodo uso de ponteiros, em favor do uso de vetores, objetos eoutras estruturassubstitutivas trazbenefciosemtermosdesegurana.Oprogramador proibidodeobteracessoamemriaquenopertenceaoseu programa,almde no ter chances de cometer erros comuns tais como reference aliasing e uso indevido de aritmticadeponteiros.Estasmedidassoparticularmenteteisquandopensarmosemaplicaes comerciaisdesenvolvidasparaainternet. ROBUSTA: Java foi elaborada para a produo de programas que devam ser confiveisem vriossentido. Java pebastante nfase na verificaorpida de possveisproblemas,naverificaodinmicaposterior(emtempodeexecuo),e emeliminarsituaespropensasaerros.AprincipaldiferenaentreJavaeC/C++ que Java possui um modelo de ponteiros que elimina a possibilidade de sobrescreveramemriaecorromperdados. PROCESSAMENTO DISTRIBUDO: A linguagem de programao Java possui uma extensa bibliotecaderotinasparalidarcomprotocolosTCP/IP ,comoHTTPeFTP .AsaplicaesJavapodem abrireacessarobjetosatravsdaredeviaURLs,comamesmafacilidadecomqueacessaumsistema dearquivoslocal.
Projeto Ejovem Mdulo II
Java
MULTITHREADING: Mltiplas linhas de execuo. Em Java uma surpresa agradvel e fcil. Linhas de execuo em Java podem tambm beneficiarse de sistemas multiprocessadores se o sistemaoperacionaldebaseofizer.Oladoruimqueasimplementaesdelinhasdeexecuonas plataformasmais importantes diferem radicalmente, eo Java nofaz nenhum esforopara ser neutroemrelaoasplataformasnesseaspecto.Somenteocdigoparachamaro multhreading permaneceomesmoparatodasasmquinas. EXCEES: Todoprogramadoremgeralestbastanteacostumadocomocomputador"travando" porcausadeumerroemumprograma.EmC++,porexemplo,asimplestentativadeaberturade umarquivoinexistentepodeobrigaraoprogramadorareiniciarocomputador.ProgramasJava, contudo, no "do pau" no computador, j que a mquina virtualJava faz uma verificao em tempodeexecuoquantoaosacessosdememria,aberturadearquivoseumasriedeeventosque podemgeraruma"travada"emoutraslinguagens,masquegeramexceesemprogramasJava.Em geral,aoescreverprogramasJavautilizandose deheranadeclassespredefinidas,forase em geralaoprogramadorescreveralgumasrotinasdetratamentodeexceo,umtrabalhoque,sede inciopodeparecerforado,irpouparoprogramadordebastantedordecabeanofuturo. GARBAGE COLLECTOR: Em Java, os programadores no necessitam preocuparse com o gerenciamento de memria como em C++. Em C++, todo bloco de memria alocado dinamicamente (com new, malloc ou funo similar) deveria ser liberado quando no fosse mais usado (com free, delete e parentes prximos). Isso acarretava diversos problemas mesmo ao programador mais experiente, que tinha que manter sempre um controle das reas de memria alocadas para poder liberlas em seguida. Java, ao contrrio, utilizase de um conceito j exploradopelalinguagemSmalltalk,queode garbagecollection (coletade lixo). Sua funo a de varrera memria de temposem tempos, liberando automaticamenteosblocosquenoestosendoutilizados.Seporumladoisso podedeixaroaplicativoumpoucomaislento,pormanterumathreadparalela que dura todo o tempo de execuo do programa, evita problemas como refernciasperdidaseavisosdefaltadememriaquandosabesequehmegas emegasdisponveisnamquina. COMPILADAEINTERPRETADA:UmadascaractersticasdeJavaquetornouaidealparaseuuso na elaborao de aplicativos distribudos foi a sua independncia de plataforma. Isso porque o compilador gera um formato de arquivo de objetos neutro em relao a arquitetura,o cdigo compiladoexecutvelemvriosprocessadores,desdequehajaapresenadosistemaemtempo deexecuoJava.Ocompiladorjavaconsegueissogerandoinstruesbytecodequenotemnada avercomumaarquiteturacomputacionalespecfica.Aocontrrioelessoelaboradosparaserde fcil interpretao em qualquer mquina e de fcil traduo para cdigo de mquina nativo imediatamente. MQUINAVIRTUAL: umamquina imaginriaqueimplementadaatravsdeumsoftware emuladoremumamquinareal.
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
Distribuiodatecnologiajava:OJ2SE(Java2StandardEdition)ouJavaSEumaferramenta dedesenvolvimentoparaaplataformaJava.Elacontmtodooambientenecessrioparaacriaoe execuodeaplicaesJava,incluindoamquinavirtualJava(JVM),ocompiladorJava,asAPIsdo Javaeoutrasferramentasutilitrias. JME,javaPlataforma,MicroEdition(JavaME),aindaconhecidaporJ2ME, umatecnologiaque possibilita o desenvolvimento de software para sistemaseaplicaes embarcadas, ou seja, toda aquelaquerodaemumdispositivodepropsitoespecfico,desempenhandoalgumatarefaqueseja tilparaodispositivo. aplataformaJavaparadispositivoscompactos,comotelemveis,PDAs, controlesremotos,eumaoutragamadedispositivos. JavaEE(ouJ2EE,ouJava2EnterpriseEdition,ouemportugusJavaEdioEmpresarial)uma plataforma de programao de computadores que faz parte da plataforma Java. O JEE (Java Enterprise Edition) aplataforma Java voltada para redes,internet, intranetseafins. Assim,ela contmbibliotecasespecialmentedesenvolvidasparaoacessoaservidores,asistemasdeemail,a banco de dados,etc. Por essas caractersticas,o JEE foi desenvolvido para suportar uma grande quantidadedeusuriossimultneos. AplataformaJEEcontmumasriedeespecificaes,cada umacomfuncionalidadesdistintas.Queso:
JDBC(JavaDatabaseConnectivity),utilizadonoacessoabancodedados. JSP(JavaServerPages),umtipodeservidorWeb.Osservidoreswebsoasaplicaesque permitemavocacessarumsitenainternet. Servlets, para o desenvolvimento de aplicaes Web,isto ,esse recurso "estende" o funcionamentodosservidoresweb,permitindoageraodecontedodinmiconossites.
1.4. Ambienteseferramentasdedesenvolvimentocomjava.
Atecnologiajavafornececomoambientededesenvolvimentoumgrandeconjuntodeferramentas queengloba:umcompilador,uminterpretador,umgeradordedocumentao,ferramentade empacotamentodeclassesdearquivoseoutros.
Java
1.4.1. InstalaodoJDKouSDKeJREesuasconfiguraes. ASunaempresaproprietriadoJavaqueatualmentepertenceaempresa(Oracle).Ela disponibiliza,basicamente,duasversesdesuamquina virtual:oJRE(JavaRuntimeEnvironment)eJDK(Java DevelopmentKit).OJREcontmamquinavirtualque permiterodarprogramasfeitosnalinguagemJavaem umamquina.OJDK,porsuavez,umpacotepara desenvolvedoresprogramaremsuasaplicaesemJava, possuindovriosutilitrios,inclusivecompiladore bibliotecas.UmadasversesmaisusadasdoJavafoia 1.4.x,quepossuainclusiveumvisualumpouco(paraser modesto)rstico.MaisparafrenteaSunlanouaverso 1.5.0,comvriasmelhoriasemtermosdeprogramaoe umvisualumpoucomelhor.Foilanadoemdezembrodo de2006oJava1.6.0,conhecidotambmcomoJava6, quetrouxe,finalmente,umaintegraototalcomo desktopemtermosvisuais,evriasmelhoriastambm paraquemprogramador. Mustangonomedadoparaanovaverso6deJava,quesaiunofinaldoanopassado.Entreas novidadesmaisconhecidasestoosuportealinguagensdescript,melhoresferramentasparao monitoramentodeaplicaesJavaemaisintegraocomosistemaoperacional.Masoqual realmenteadiferenaentreoJDKeJavaSDK?:Okitdedesenvolvimentoparajava(Software DevelopmentKit).Tratasedeumconjuntodesoftwaresparaprogramadoresemjavaquevocno precisainstalarsesuaintenoforapenasusarosprogramasfeitosemjava.Pararodaros programasemjavabastainstalaroJRE(JavaRuntimeEnvironment). http://www.guiadohardware.net/tutoriais/javalinux/
1.5. Meuprimeiroprogramaemjava
Como java uma linguagem que primeiramente compilada e em seguida interpretada. Para compilareexecutarumprogramaescritonessalinguagemdevemosoprimeiroconstruiroarquivo comoocdigofonte,quedevetercomoextenso.java. Quenocasodoexemplooarquivofoi chamadodeHelloWorld.java.Emseguida,ocdigofonte compiladoeumprogramafonteem bytecodes(HelloWorld.class)gerado.Duranteacompilao,humachecagemdeerrosdocdigo fonte.Ofonteembytecodesssergeradosenenhumerrotiversidodetectado.Porfim,qualquer dispositivo que execute java ser capaz de interpretar este novo arquivo fonte e executar a aplicao.Osbytecodessolidoseexecutados(ouseja,interpretados)pelaMquinaVirtualJava (JVMJavaVirtualMachine)emumcomputador,emumcelular,etc.,almdeseremindependentes deplataforma. A gerao dos bytecodes ou, para o exemplo,doarquivoHelloWorld.class feita a partir da execuo do comando javac HelloWorld.java. Ento, o prximo passo fazer com que a JVM execute o arquivo HelloWorld.java,atravsdocomando javaHelloWorld.class.Dessamaneira,aJVMtraduzocdigocompiladoparaumalinguagemque amquinaentendaeoprogramaexecutado,poristoosprogramasemjavapodemexecutarem qualquerplataformadehardwareousoftwarequepossuaumaversodaJVM.AMquinaVirtual javadefinidacomoumamquinaimaginriaimplementadaatravsdaemulaoemumsoftware executado em uma mquina real. Ela possui uma arquitetura que permite garantir segurana. QuandoumprogramaJavaexecutado,seusbytecodessoverificadospelaJVMparaqueestejam de acordo com os seus requisitos de segurana, impedindo a execuo de cdigo com alguma irregularidade.Assim,cdigosfontecominstruesqueacessemreasrestritasdamemriaouat
Projeto Ejovem Mdulo II
Java
mesmorecursosdohardwarenosoexecutadospelaJVM.
A palavra public indica que a classe ter um nvel de acesso pblico, ou seja, que ela ser acessvelporqualquerclasse.Apalavra classindicaqueumaclasseestsendodeclaradaeseu nomeHelloWorld.A{delimitaolimiteinicialdaclasse.
Apalavra public jfoidescrita,portantopermitequeomtodosejaacessadopublicamente.A palavra static serdescritaposteriormente.Olugarondefica apalavra void ondese deve indicar o tipo de retorno do mtodo. Neste caso, no retorna nenhum valor, dessa maneira o mtododeclaradocomovoid.OconjuntoString[]argspresentesentre()soosargumentos domtodo.Nesteexemplo,omtodopossuiumnicoargumento(umvetordeStringsdenominado args.A{delimitaolimiteinicialdomtodo. Aterceiralinhaconsistenocontedodomtodoprincipal,formadoapenasporumcomando,ou umainstruoquecompostadeumaoumaislinhasterminadasporpontoevrgula.Exemplo:
O System.out.println usado para exibir algo na sada padro, por padro, na linha de comando.Serexibidooquetiverentre(),nocaso,Helloworld.Nofinaldestecomando,tem seum;queofinaliza.Porfim,hduasfechachaves}},quedelimitamofimdomtodoeda classe,respectivamente. Blocosdecdigo:Umblocoformadopor uma ou mais instrues agrupadas entre chaves indicando que formam uma s unidade.Blocospodemserorganizadosem estruturasaninhadas Indefinidamente.Qualquerquantidadedeespaosembrancopermitida.Umexemplode bloco cdigomostradoaoladoilustraperfeitamentecomosoorganizadasasestruturasdeblocos.
1.5.1. ComentriosemJava:
Comentriossonotasescritaspeloprogramadorparafinsdedocumentao.Estasnotasnofazem parte do programa e no afetam o fluxo de controle. Java suporta trs tipos de comentrios: comentrio de linha estilo C++, comentrio de bloco estilo C e um comentrio estilo Javadoc (utilizadocomporadocumentaodoprograma). Comentriodelinha:ComentrioscomestiloemC++seiniciampor//.Todoequalquertexto colocadoapsas//ignoradopelocompiladoretratadocomocomentrio.Porexemplo:
Comentrio de bloco: Comentrios com estilo em C,tambm chamados de comentrios multi linhas,seiniciamcom/*eterminamcom*/.Todootextopostoentreosdoisdelimitadores tratadocomocomentrio.DiferentedocomentrioestiloC++,estepodeseexpandirparavrias
Java
10
linhas.Porexemplo:
ComentrioestiloJavadoc: Estecomentrioutilizadonageraodadocumentaoem HTML dosprogramasescritosemJava.Parasecriarumcomentrioemestilo Javadoc deveseiniciaro comentriocom /** eterminlocom */.AssimcomooscomentriosestiloC,estetambm pode conter vrias linhas. Este comentrio tambm pode conter certas tags que do mais informaesdocumentao.Porexemplo:
1.5.2. CompilandomeuprimeiroprogramaemJava
1Passo: ParacompilarmosonossoprimeiroprogramaemJavautilizamososeguintecomando javacseguindodonomedaclasse(ponto).java
Nessesegundoexemplovamosusarumeditordetextoqualquerparaeditorocdigofontedo nossosegundoexemploevamoscompilarusandoterminal(Konsole)dosistemaoperacional.
Compilandonosso2exemplocomocomandojavac
Java
11
Executandonosso2exemplocomocomandojava
Obs.:Cuidadosimportantesaseremtomados:
SeojavacreclamarquenoachaaclasseHelloWorld.java,porquevocnoestno diretriocorretoousalvouoarquivoemoutrolugar. Seojavacreclamardealgumerronofonte, porquevocdigitoualgoerrado.No troqueletrasmaisculasporminsculaseviceversa,emnenhumapartedocdigo! Finalmente,ANTESdechamaroseuinstrutorparaeleinserirum;oufecharumachave noseucdigo,revisemaisumavezoseucdigocompletamente.
1.5.3. Dicaspararesoluodeproblemasemprogramasjava
Sedigitaroprogramanamo,certifiquesedeprestaratenoasletrasmaisculase minsculas.Emparticularumnomedeclasseporexemplo. SereceberumamensagemcomoBadcommandorfilenameoujavaccommandnot found,volteeverifiquenovamenteasuainstalao,emparticularaconfiguraodocaminhode execuo. Ocompiladorrequerumnomedearquivo(Teste.java)porexemplo.Quandovocrodaro programa,vocespecificaumnomedeclasse(Teste)semaextenso.javanem.class. Seocompiladorjavacrelatarumerroconnotread:Teste.java,vocdeveverificarse essearquivoestpresentenodiretrio. Sehouvererrosdemaisemseuprograma,todasasmensagensdeerrosvoaropelasua telamuitorapidamente.Ocompiladorenviaasmensagensdeerroparaasadapadro;ento, umpoucocomplicadocapturlasseelasocuparemmaisespaodoqueajanelapodeexibir.
Java
12
1.7. Exercciosbsicos.
01)Nositensabaixoassinaleaalternativaquecorrespondeamaquinavirtualdojava(jdk): A()Amaquinavirtualpodeserdefinidacomoumambientedeprogramao. B()Amaquinavirtualpodeserdefinidacomoumprocessoqueexecutacdigosde extenso*.Java. C()AmaquinavirtualpermitequeasaplicaesJavaredesomenteemsistemasLinux. D()Amaquinavirtualumsoftwarequepermitecompilareinterpretareexecutar aplicaesJava. E()AmaquinavirtualumsimuladordeaplicaesfeitaemJava. 02)Citetrscaractersticasdalinguagemjava: 03)QuandoumcdigoJavainterpretadoeleconvertidoem: A()linguagemdedados. B()linguagemdealtonvel. C()linguagemdemaquinavirtual(jdk). D()linguagemdemaquinadocomputador. E()linguagemdebytecode. 04)DescrevaosprocessosparasefazerumpequenoprogramaemJava: 05)QualdosseguintescomandossoutilizadosparacompilareexecutarumprogramaemJava respectivamente. A()lsejava B()Javaejavac C()javacejavac D()javacejava E()cdels 06)Qualocomandoutilizadoparaimprimirumamensagemnatela. 07)ExpliqueaportabilidadeemprogramasJava? 08)ExpliqueedefinaoqueJDKeJREequalafinalidadedecadaum. 09)QuaisostiposdeerrospodeocorreremprogramasJava?Descrevaos.
Java
13
1.8. Exercciosproposto.
01)Umprogramaescritoemjava: a)Interpretadopelocompilador.b)Interpretadoecompilado. c)CompiladoeExecutado.d)Compiladoeinterpretado. e)N.D.A 02) Faaumprogramausandoum editordetextoqualquereseguindocompilee executeesse programanoconsole.Oqueaconteciaaoesquecerdecolocarpontoevirgulanofinaldocomando System.out.println()?Comente:. 03)Utilizandoumeditordetexto,faaumprogramaemjavaqueimprimanatelaaseguintefrase: EuestudoJava.Emseguidacompileomesmonoconsoledoseusistemaoperacional. 12)Utilizandoumeditordetextoeoconsoledosistemaoperacional,faaumprogramaemjavaque imprimanatelaaseguintesfrases:EstudoPHPeEstudoJava.Pormasfrasesdevemaparecer umaabaixodaoutra. 04)QuaisostiposmaisdeerromaiscomunspodemocorreremumprogramaescritoemJava?Cite trsocasiesemquepodemocorreralgumtipodeerro. 05)Utilizandoumeditordetexto,faaumprogramaemjavaqueimprimanateladoconsolea seguintefrase:OBrasilopasdofuturo..Emseguidacompileomesmonoconsoledoseu sistemaoperacional.Utileosseguintescomandos:01:System.out.print()e02: System.out.println(),descrevaasprincipaisdiferenasobservadas. 06)Descrevaospassonecessriosparaainstalaodasferramentasnecessriasaprogramaoem java. 07)Expliqueparaserveoargumentodutilizadojuntocomocomandojavac?
Java
14
Captulo2. IDEsedeclaraodearquivofonte.
2.1. Netbeans
O termo IDE em ingls,que quer dizer(Integrated Development Environment). O NetBeans IDE um ambiente de desenvolvimento integrado e est disponvel para Windows, Mac, Linux e Solaris. O projetoNetBeansconsisteemumIDEdecdigofonte abertoeumaplataformadeaplicaesquepermitem que os desenvolvedores criem rapidamente aplicativos web, corporativos, desktop e aplicaes mveisutilizandoaplataformaJava,bemcomoJavaFX,PHP ,JavaScripteAjaxRubyeRubyon Rails,GroovyeGrails,eC/C++.OprojetodoNetBeansapoiadoporumavibrantecomunidade dedesenvolvedoreseofereceumaextensadocumentaoetreinamentoderecursos,bemcomo umadiversificadaseleodeterceirosplugins. IDE6.9introduzoJavaFX,Compositorumaferramentavisualparaconstruodelayoutvisual JavaFXaplicativos,interfacegrficasemelhanteaoconstrutordeGUISwingparaaplicaesJava. SE NetBeans Outros destaques incluem OSGi Plataforma de interoperabilidade para aplicaes NetBeanseapoioparaodesenvolvimentodebundlesOSGicomMaven,oapoio JavaFXSDK, Framework Zend para PHP e Ruby on Rails 3.0, bem como melhorias no editor de Java, Java Debuggerproblemaderastreamento,emuitomais.Parabaixaronetbeansacesseositedolink: http://www.netbeans.org/
2.2.2. AIDEBluej
BlueJumambientededesenvolvimentojavaprojetadoespecificamente para o ensino em um nvel introdutrio. BlueJ foi projetado e implementado pelas equipes das universidade Monash University, Melbourne, Australia e The University of Southern Denmark, Odense. Maiores informaes sobre BlueJ esto disponveis no site oficial (http://www.bluej.org).OBlueJumexcelenteambienteparaofima quesedestina:aaprendizagemdaprogramaoorientadapelosobjetos
Projeto Ejovem Mdulo II
Java
15
utilizandoalinguagemJava.Noentantoeespecialmentequandoutilizadaumalinguagemmuito popularcomoalinguagemJava,odesenvolvimentodeprogramas feitoutilizandoIDEsmuito mais complexos e sofisticados. Tal necessrio para lidar com a complexidade de muitos dos programasatuais. Estesatingemfrequentementedezenasdemilharesdelinhasdecdigoe,emalgunscasos,muitas, muitas mais. Tal implica a utilizao de vrias ferramentas de auxlio ao desenvolvimento de cdigo. BlueJ 3.0.4, uma verso de manuteno que inclui uma srie de correes de erros importantes,estagoradisponvelparadownload.
2.2.3. AIDEGel
um editor pequeno e rpido. Escritoo em Delphi para computadores com Windows. Destaca sintaxe para java,jsp,xml, html entre outras gramticas, facilita o gerenciamento de projetos, mantm histrico local de mudanas, possui suporteaCVS,juniteAntentreoutrasfacilidades.Livreparausocomercial. MaisinformaessobreessaIDEvisiteosite:http://www.dukeduck.com.br/
2.2.4. AIDEJdeveloper
Umadasprincipaisopesopensource,umaterceiraboaopoexiste desdequeaOracletornouseuIDEJdevelopertotalmentegratuito. IssodevidoaofatodeaOracletornaropensourcedoisframeworks de desenvolvimento Java: o mecanismo de persistncia Oracle TopLink(setornouabasedaimplementaoderefernciaJPAdo Glassfish)eoscomponentesJavaServerFaces(JSF)OracleADFFaces,partedoOracleAplication DevelopmentFramework.Sodoistimosrecursoseoseuusonodesenvolvimentoesttotalmente integradoesuportadonoOracleJDeveloper. O Oracle JDeveloper assim uma opo gratuita abrangente e amadurecida para o desenvolvimento Java corporativo, principalmente em ambientes onde produtos Oracle j so utilizados(DatabaseServer,BI,ApplicationServer,Portal).http://www.oracle.com/
Nota:Muitobem!Apartirdaquificaacritriodeseuinstrutorautilizaoounodeuma IDEdedesenvolvimentodesoftwareduranteocursodanossadisciplina.UsodeumaIDE vai nos facilitar em muito pontos importantes,dentre eles a aproximao com uma ferramenta utilizada no mercado de trabalho atualmente, vai tornar o aluno mais preparadoparaenfrentarasdificuldadesdecorrentesdeprogramaremumsimpleseditor detextoeprompt,mas,tambmmuitoimportantequevocsaprendamacompilarseus programanoConsole(promptdecomandos)paradaentoficaremhabilitadosaseguirem programandoemjava.Ficaaiorecadoebonstrabalhos.VamosusaraIDEnetbeans. Segueumtutorialsobreonetbeansqueserrepassadoantes.
2.3. Identificadoresepalavraschaves.
Javaumalinguagemcentradanospacotes;osdesenvolvedoresdalinguagem assumiram que, para uma boa organizao de nomes, seria fundamental na estrutura de programas em java. Imagine o seguinte pesadelo: trs programadores,namesmaempresa,mastrabalhandoemdiferentespartesdeum projeto,escrevemcadaumumaclassechamadaUtilitrios.Seessastrsclasses Utilitriosnotiveremsidodeclaradasemnenhumpacoteexplcito,eestiverem noclasspath,noseriapossveldizeraocompiladorouJVMqualdastrsclassesesttentando referenciar.
Java
16
Identificadoreslegaissoregrasqueocompiladorusaparadeterminarseumdadonomelegal. Em Java, os identificadores devem ser compostos apenas por caracteres. Unicode, nmeros, smbolosdemoedasecaracteresdeconexocomounderscore. Regrasvlidas: Deveminiciarcomumaletra,smbolocomercialcifro($)ouunderscore(_); Apsoprimeirocarcterpodemterqualquercombinaodeletras,caracteresenmeros; Nopossuemlimitedetamanho; Nopodemserpalavrasreservadasrestritasdalinguagem; EmJavaosidentificadoresso casesensitive isto,JAVAtotalmentediferentede javaissoporqueocompiladordiferenciamaisculosdeminsculos.
2.4. Declararclasses,visibilidadeeregrasparaarquivosfonte.
2.4.1. Declaraesemodificadoresdeacessodeclasses.
Ento!Maisoquesignificaacessarumaclasse?Quandodizemosqueocdigodeumaclasse(a classeA)temacessoa(classeB),oqueestamosquerendodizer?AcessoDefault(Padro):Uma classe com acesso default no tem nenhum modificador precedendoa na declarao. Esse o controledeacessoseobtmquandonodigitadonenhummodificadorparaaclassedeclarada.O acessodefaulttemqueserentendidocomonveldepacotes,porqueumaqueclassetenhaacesso defaultspodeservistaporclassesdedentrodomesmopacote.Vejamoscomoseguenoexemplo abaixo. Acesso public (pblico): Uma declarao de classe com a palavrachave public d a todas as classes, de todos os pacotes, acesso classe pblica, ou seja todas as classesdo universo Java (UJ)temacessoaclasse(as)pblicas.Noentanto,noseesquea,dequeseaclassequeestiver tentando usar estiver em um pacote diferente do da classe que est escrevendo, ainda assim precisarimportaraclassepblica.Vejamoscomoseguenoexemploabaixo.Exemplo01:
Java
17
Esseoutroexemploabaixomostramoscomodeclararumarquivodecdigofontedeprogramas escritosemjava,ondeumarquivocontmvriasclasse. Notequeemjavapodesedeclararduasoumaisclassesaninhadasnummesmoarquivodecdigo fonte, porm importante frisar que apenas uma delas pode conter o modificador de acesso publico(public)e asrestantes seguem somente com a palavrachave (class) e omodificador de acessopadro(default). Exemplo04:
Regrasparaarquivofonte: Spoderexistirumaclassepublicemcadaarquivofonte. Oscomentriospodemaparecernoincioounofimdequalquerlinhanoarquivo do cdigofonte;elessoindependentesdequaisquerregrasdeposicionamento. Seexistirumaclasse public emumarquivo,onomedearquivodeveseromesmoda classepublic.Exemplo:UmaclassedeclaradacomopublicclassDog{}precisaestaremumarquivo decdigofontechamadoDog.java. Sehouverdeclaraesimport,elasdevemficarentreadeclaraopackage(seexistir)ea declaraodaclasse.Senohouverumadeclaraopackage,entoasdeclaraes import devem
Projeto Ejovem Mdulo II
Java
18
estarnaprimeiradoarquivodocdigofonte.Senohouverdeclaraespackagenem import,a declaraodaclassedeveestarnaprimeiralinhadoarquivodocdigofonte. Seaclassefazpartedeumpacote,adeclaraopackagedeveestarnaprimeiralinhado arquivodocdigofonte,antesdequaisquerdeclaraoimportqueestejampresentes. Umaclassepodetermaisdeumaclassenopublic. Arquivos que no tenham classes public podem ter um nome que seja o mesmo de nenhumadasclassesdoarquivo.
2.4.2. Modificadoresdeacesso:
public,protectedeprivate. Public:Quandoummtodoouvariveldeclarada comopblico.Issosignifica que,todasas classesindependentementedopacoteaoqualpertenampodemacessaromembro.
Private:Quandoummtodoouvariveldeclaradacomomodificadorprivate,issosignificaque nenhumoutraclassepodeacessarosmembros,anoserapartirdaprpriaclasse.
Java
19
2.5. Exercciosbsicos.
01)Nositensabaixoassinaleaalternativaverdadeiraemrelaoaoquecorrespondeaumarquivo decdigofontevlidoemjava: A()Emumarquivodecdigofonteemjavapodeserdefinidaduasclassespblicasnomesmo arquivodecdigofonte. B()Emumarquivodecdigofonteemjavapodeserdefinidaduasclassespblicas,emaisde duasclassesnopblicasnomesmoarquivodecdigofonte. C()Emumarquivodecdigofonteemjavasomentepodeexistirumaclassedefinidacomo pblicanomesmoarquivodecdigofonte,etambmpodemhavervriasclassesdefault(padro). D()Emumarquivodecdigofonteemjavapodeserdefinidavriasclassespblicasno mesmoarquivodecdigofonteevriasclassesdefault(padro). E()N.D.A 02)Quaisdosidentificadoresabaixopodemserusadoscomonomesdeclasses,campos,mtodose variveisemJava?Quaisnopodem,eporqu? A)four B)for C)from D)4 E)FOR 03)Quaisdosidentificadoresabaixopodemserusadoscomonomesdeclasses,campos,mtodose variveisemJava?Quaisnopodem,eporqu? A)dia&noite B)diaENoite C)dia&noite D)diaEnoite E)dia_e_noite 05)Quaisdosidentificadoresabaixopodemserusadoscomonomesdeclasses,campos,mtodose variveisemJava?Quaisnopodem,eporqu? A)contador B)count C)1contador D)contadordelinhas E)Contador
Java
20
Captulo3. TiposdeDadosprimitivosemjava.
3.1. Tiposprimitivos:
Todo programa de computador deve ser capaz de lidar com dados para conseguir fazer seus processos como, por exemplo, somar, multiplicar, dividir, etc. Usar atributos a melhor forma de manipularosdados.Ostiposdedadossooque definemaquantidadedememriadocomputador que ser utilizado para guardar tal dado. As variveis primitivas pode ser declaradas como variveis de classe(static), variveis instncias, parmetros de mtodos ou variveis locais. Uma vezdeclarado,seutipoprimitivonopodenunca sermodificado,emboranamaioriadoscasosseu valor possa se modificar. Java um linguagem fortementetipada.Issosignificaquetodavarivel deve ter um tipo declarado. Existem oito tipos primitivos em java. Quatro deles so do tipo inteiros;doissodotipodenmerosdepontoflutuante;umotipodecaractereschar,usadopara unidadesdecdigonoesquemadecodificaoUnicodeeumdelesdotipolgicoparavalores true/false(verdadeiro/falso).
3.1.1. Usodevaloresliteraisdetodosostiposdedadosexistentes.
Umliteralprimitivosimplesmentearepresentaodocdigofontedostiposdadosprimitivosem outrospalavrasuminteiro,umnmerodepontoflutuante,umbooleanoucaracteresquevoc digiteenquantoescreveumcdigo.
Java
21
comainclusodeumzeronafrentedonmero,vejaoexemploabaixo:
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.
3.1.1.5. Literaisdepontoflutuante: Osnmerosdepontoflutuantesodefinidoscomumnmero,umsmbolodecimaleosoutros nmerosque representam a frao. Para nmero decimaisfracionrioscom grandepreciso ou
Projeto Ejovem Mdulo II
Java
22
valoresextraordinrios(geralmenteutilizadosemmatemticaaplicadaecomplexacomoclculos fsicos,qumicos,astrolgicos,meteorolgicos,etc)utilizamosotipodedadodouble. Double o tipo de dado mais complexo que existe em Java e o maior valor possvel de se armazenar1.797.693.134.862.315.7E+308.Muitomaisdoquequalquerprogramadorprecisa.
Float os literais de ponto flutuante so definidos Double (64 bits) por padro, portanto, se desejarmosatribuirumliteraldepontoflutuanteaumavarivelfloat(32bits),terqueanexaro sufixoFoufaonmero.Senoofizer,ocompiladorreclamardeumapossvelfaltadepreciso, porqueestartentandoinseriremumcontainer(potencialmente)menospreciso.
3.1.1.7. Literaisdecaracteres: O literalchar representado porum nico caractere entre aspassimples. Eles podem tambm representarvaloresUnicodedocaractere,usandoanotaoUnicodequeacrescentaoprefixo\u aovalor,atribuirumliteralnumrico,contantoqueeleestejanointervalode16bitssemsinal (65535oumenor). Vlidos:
Invlidos:
Java
23
3.2. Exercciospropostos
01)Umprogramaescritoemjavapodeaceitarquetiponoprimitivodedadopararepresentarum asequnciadecaracteres. a)Stringechar.b)doubleefloat. c)String.d)chareString. e)inteString 02) Faaumprogramausandoum editordetextoqualquereseguindocompilee executeesse programanoconsole.Oprogramadevemostrarosseguintesvalores:{nome:RobertoCarlos,idade =46,altura=1.74cm,cordepele:pardo}. 03)Utilizandoumeditordetexto,faaumprogramaemjavaqueimprimanatelaaseguintefrase: EuestudoJavanoeJovem.Afrasedeseratribudaaumavariveldeumtipoespecfico.Em seguidaessavariveldeveserimpressaemostradanasadapadro. 04)Faaumprogramaemjavaquesomeosseguintesnmeros25.86e2586.123.Dicautilizeos tipoprimitivosdedadosadequadoparaoproblema. 05)Qualotipoprimitivosdedadoemjavaadequadoquesedeveusarparaconfigurareimprimir natelaavogal'u'? a)shortefloatb)intelong c)Stringechard)chareString e)charg)byte
06)Qualotipoprimitivosdedadoemjavaadequadoquesedeveusarparaconfigurareimprimira
Projeto Ejovem Mdulo II
Java
24
onmero123456? a)shortefloatb)intelong c)Stringd)chareString e)charg)byte 07)Faaumprogramaemjavaquecalculeemostrenatelaa mdiaaritmticadosseguintes nmeros(12,14e16).Dicautilizeostipoprimitivosdedadosadequadoparaoproblema. Ex:media=(1+2+3)/3; 08)Faaumprogramaemjavaquecalculeemostrenatelaa mdiaaritmticadosseguintes nmeros(12.52,14.54e16.56).Dicautilizeostipoprimitivosdedadosadequadoparaoproblema. Ex:media=(5.5+7.5+9.5)/3; 3.2.1.1. Desafio: 09)Faaumprogramaemjavaquecalculeemostrenatelaa mdiaaritmticadosseguintes nmeros(10,12en).Importante:numastringigualan=14utilizeostipoprimitivosdedados adequadoparaoproblema,masnoesqueadefazerocasting,assuntoquevamosestudaradiante. Ex:media=(5+7+n)/3; n = 9; int x = Integer.parseInt(n); media=(5+7+x)/3;
Java
25
Captulo4. Operadoresdeatribuio.
4.1. Oqueumavarivel:
Varivel:umespaonamemriausadoparaarmazenaroestadodeum objeto.Umavariveldeveterumnomeeumtipo.Otipodavarivel indicaotipodedadoqueelapodeconter.Onomedasvariveisdeve seguirasmesmasregrasdenomenclaturaqueosidentificadores.
4.1.1. TiposdeVariveis:
Variveisdeinstncia: Estasvariveissonoestticas,ouseja,declaradassemomodificador static.Variveisdeinstnciasoassimchamadasporqueseusvaloressonicosparacadainstncia daclasse.Assim,asvariveis podemarmazenarvaloresdiferentesparacadacpiadeobjetosda classe. Variveisdeclasses: Estasvariveissodeclaradascomomodificador static.Issoinformaao compilador que h exatamente uma nica cpia desta varivel, independente do nmero de instnciasdaclasse. Variveislocais: Sousadasparaarmazenaroestadotemporriodeummtodo.Variveislocais soacessveissomentedentrodomtodoemquesodeclaradas,eautomaticamenteabandonadas nasadadomtodo. Parmetros:Soosparmetrosdemtodos.Taisvariveissoacessveissomenteaocdigono corpodomtodo. Nota:Veremosnosprximoscaptulosdetalheseexemplosdetodosostiposdevariveis aquimostrado.Geralmentequandofalamosde"camposemgeral"(excluindovariveis locaiseparmetros),podemossimplesmentedizer"campos".Seadiscussoseaplicaa todasasvariveisacima,usamos"variveis".Seocontextopedeumadistino,usamos termosespecficos(campoesttico,varivellocal,etc)comoapropriado.Podemosainda usarotermo"membro".Oscampos,mtodosetiposaninhadosdeumtipopodemser chamadosdeseusmembros. Exemplodevariveislocais:
Na linguagem de programao Java no permitido o uso de variveis indefinidas. Variveis definidasdentrodomtodosochamadasdevariveislocais,temporriasouestticasedevemser inicializadasantesdouso.Vejamosatabelaabaixocomosseguintesvaloresiniciais. Exemplo02: Atribuirumvaloraumavarivelparecebemsimples;simplesmenteinsiraovalordireitadosinal (=)paraatribulovarivelqueestaresquerda.Exemplos:
Java
26
4.2. Variveisestticas:
ummembroquepertenceaclasse.Umavarivelestticacompartilhadaportodasasinstncias declasse,porqueapenasumacpiadavarivelestticamantidaeaprpriaclassesuficiente paraacessaravarivelmarcadacomoesttica. Exemplo01:
Exemplo02:
Exemplo03: Neste exemplo vamos mostrar atravs de um programa como usar as variveis estticas.
Java
27
Utilizamosocastingparaconverterumobjetoouumavariveldeumtipoprimitivoparaoutrade umtipotambmprimitivo.Podemosconverterumdoubleemumint,ouumasubclasseemuma superclasse. A regra fundamental para o cast : o casting no modifica o objeto ou valor que est sendo moldado;porm,oreceptordocastconstituiumnovoobjetoouumnovotipo.Ocastingdedados primitivosocorrecombastantefrequncia.Amaneirapeloqualocastingagedependedapreciso dosdadosenvolvidos.Porsuavez,aprecisodependedaquantidadedeinformaesqueumtipo podeconter;assim,umtipodepontoflutuantedoubletemmaiorprecisoqueumfloat,poiso primeiroumtipode64bitseosegundo,de32bits. Umbytepodeserconvertidoemumshort,int,long,floatoudouble Umshortpodeserconvertidoemumint,long,floatoudouble Umcharpodeserconvertidoemumint,long,floatoudouble Umintpodeserconvertidoemumlong,floatoudouble Umlongpodeserconvertidoemumfloatoudouble Umfloatpodeserconvertidoemumdouble Semprequehouverumatransfernciadedadosdeumtipomenosprecisoparaummaispreciso,o castingexplcitonoobrigatrio.
Java
28
Exemplo02:
Exemplo03:
Exemplo04:
Exemplo05:
OJavanofazautomaticamenteodowncast.
Projeto Ejovem Mdulo II
Java
29
Ocastingentreobjetosrequerumpoucomaisdecuidado.Nocapitulo6veremoscomofazero castingdeobjetos.
4.4. Atribuindoumavarivelderefernciaaoutra.
Asvariveisderefernciassousadasparasereferir(ouacessar)umobjeto. Umavarivelderefernciadeclaradacomosendodeumtipoespecfico,e essetiponopodenuncasermodificado.Umavariveldepodeserusada parareferirseaqualquerobjetodotipodeclarado,oudeumsubtipodotipo declarado(umcompatvel).Variveisderefernciapodemserdeclaradascomo variveis estticas, variveis de instncias, parmetros de mtodos ou
variveislocais.
4.4.1. Escopodevariveis.
Depoisquedeclarou einicializou uma varivel, umaquestonaturalemuitoimportante por quantotempoessavarivelvaiexistir?Essaumaperguntaqueserefereaoescopodasvariveis emjava.Oescopodefineondeumavarivelacessvelduranteaexecuodeumprogramae quando a varivel criada e destruda. A localizao de uma varivel dentro do programa estabeleceseuescopo.ExistemquatrocategoriasdeescopodevariveisnalinguagemJava,so elas:
4.4.2. Variveisdeinstnciasdetiposprimitivos.
Asvariveisdeinstnciassodefinidasdentrodaclasse,masforadequalquermtodo,esso inicializadasquandoaclasseinstanciada.Asvariveisdeinstnciassooscampoquepertencema cadaobjetonico. Exemplos:
Ou
Java
30
4.5. Exercciospropostos.
01)Declareumavarivelquerepresenteumnmerointeiroeiniciecomovalor5.Mostrenatela ovalordavarivel. 02)Declaretrsvariveiscomtiposdiferentes,sematribuirvalor.Depoisatribuaumvalorqualquer aelas.Mostrenatelaseusvalores. 03)Crieumavariveldotipoint,atribuaumvalorqualqueraela.Depoiscrieumavariveldotipo double, atribuaa ela ovalordaprimeiravarivelaquefoi criada. Mostre natelao valorda varivel. 04)DeclareumavariveldotipoStringcomafraseCursodeJavadoejovem. 05)ConcatenenavarivelcriadaacimaafraseExemploString. 06)Imprimanatela(console)onmerodecaracteresdaString. 07)Crieumprogramaemjava,aqualseratribudoovalor12aumavariveldotipointeovalor 13.23aumavariveldotipodouble.Apsatribuirosvaloresmostrena telaasomadasduas variveis. 08)Faaumprogramaemjavaquesomeessesdoisnmeros:125e12.5:Faaesseprogramade trsformasdiferentes. 09)Faaomesmoprogramadoexerccioanteriorsqueatribuindoessesvaloresaduasvariveise resultadodeveseratribudoaumaoutravarivel.Nofinaloprogramadeveimprimircomo resultadoovaloriguala137.5: 10)Faaumprogramaemjavaquemostreareaeopermetrodeumretnguloabaixo: Obs.:areaepermetrodoretngulodevemserexpressoem umtipodedadodepontoflutuante(floatoudouble).
Java
31
Captulo5. OperadoresemJava:
OsoperadoresemJavaproduzemnovosvaloresapartirde umoumaisoperandos,osquaissoitensesquerdaoua direitadooperador.Oresultadodamaioriadasoperaes umvalorbooleanoounumrico.importantelembrarque na linguagem Java no possvel sobrecarregar os operadores. Um dos objetivos da linguagem java a portabilidade.poristomuitosprocessadoresdaintelcomputamx*yedeixamemregistradorde80 bits,emseguidadividemporzefinalmentetruncamoresultadodevoltapara64bits.Issopode gerarumresultadomaisprecisoepodeevitaroestourodeexponentes.Masoresultadopodeser diferentedeumacomputaoqueusa64bitsotempotodo. Poressemotivoaespecificaoinicialdamquinavirtualjavaexigiaquetodasascomputaes fossemtruncadas.Nosomenteascomputaestruncadaspodemcausarestouro,comotambm so, na verdade mais lentas do que as computaes mais precisas, porque a operao de truncamentodemorada.Poressarazo,alinguagemdeprogramaojavafoiatualizadapara reconhecerasexignciasconflitantesdedesempenhootimizadoereprodutibilidadeperfeita.
Exemplosemusaroperadorcomposto:
Exemplousandooperadorcomposto:
Nota:Importantelembrarqueasduasatribuiesmostradasdonomesmoresultadoqueasduas primeiras.
Java
32
5.2. Operadoresdecomparao.
==iguala. !=diferentede. Nalinguagemjavasoutilizadosdoisoperadoresdecomparao(chamadostambmdeoperadores deigualdadeoudesigualdade)quecomparadoisitenssemelhanteseretornamumvalorbooleano querepresentaoqueverdadeirosobreosdoisitensseremiguais. Exemploutilizandoooperadordeigualdade:
Exemplo02:
Exemploutilizandoooperadordediferente:
Exemplo 02:
Java
33
5.3.1. Igualdadedevariveisdereferncias:
As variveis de referncias podem ser testadas com o operador (==) para sabermos se esto referenciando um objeto em comum. Mas muitoimportante ressaltar que omesmo operador estarexaminandoosbitsdavarivel,portantocomrelaoasvariveisdereferncias,seosbits dasduasvariveisforemidnticos,elasestaroreferenciando(apontando)omesmoobjeto.
Neste exemplo do cdigo acima, foi criado trs variveis de referncia a partir da classe Funcionrio.Asduasprimeirasf1ef2,soobjetosdeFuncionriodiferentes,queporacasotemo mesmovalorinicial,aterceiravarivelderefernciaf3,inicializadaparareferenciaromesmo objeto que a varivel f1 est referenciando. O operador == no testar se dois objetos so significativamenteequivalentes,issoporqueelecomparaosbitsdasvariveis,entoasreferncia dememriasdasvariveisnosoaiguais.
Java
34
Exemplo02.
Resultadodocdigoacima,executadodentrodeumaclassequepossuaomtodomain().
Exemplo 02. Resultado do cdigo ser mostrado ao lado, executado dentro de uma classe que possuaomtodomain().
Java
35
5.4. Operadoresaritmticos.
Elespodemserusadosdamaneirapadro.Exemplos:
5.4.1. Operadorresto(%):
Ooperadorrestodadivisodivideooperandoaesquerdapelodireitocomoresultadosendoo restodessadiviso.
5.4.2. OperadoresdeIncrementoeDecremento:
Soosoperadoresquenospermitemincrementarasvariveisemumaunidade.Podemserusados dianteouatrsdavariveldependendodoquequisermos,ouseja,sequisermosqueseincremente ouviceversaantesdeutilizarouocontrrio.
Java
36
Exemplo01:
Exemplo 02:
Resultado.
Exemplo 03:
Resultado.
Java
37
5.4.3. Operadoresrelacionais.
5.4.5. Operadoreslgicos.
Expresses lgicas so aquelas que realizam uma operao lgica (ou, e, no, etc...) e retorna verdadeirooufalso.Alinguagemjavaespecificamseisoperadoreslgicos(!,&,|,^,&&,||).
Java
38
Java
39
Exemplos:
Nota: A expresso acima avalia como false porque tanto o primeiro operando (2<3) quantoosegundo(4>3)avaliamcomotrue. Exemplos01:
Exemplos02:
5.4.9. Operadorescondicionais.
Ooperadorcondicionalumoperadorternriotemtrsoperandosusadoparaavaliarexpresses booleanasdemodosemelhanteainstruoIF,excetoporemvezdeexecutarumblocodecdigose oresultadodotestefortrue,atribuirumvalorvarivel.Ousejaobjetivodooperadorcondicional decidir qual dos valores atribuir a uma varivel. Ele constitudo dos smbolos? (ponto de interrogao)e(doispontos),osparntesessoopcionais.Vejaasintaxe: X=(expressobooleana)?valoraatribuirsetrue:valoratribuirsefalse
Exemplo01.
Exemplo02.
Java
40
Exemplo03.
5.4.10.OperadorTernrio
Operadorternrioouoperadorcondicionaltemobjetivodeatribuirumvaloraumavarivelde acordocomoresultadodeumtestelgico. Vejamosasintaxe: Testelgico(?)valorseforverdadeiro(:)valorseforfalso. Otestelgicoqualquerexpressoquepodeseravaliadocomoverdadeirooufalso Exemplo01:
5.4.11.PrecednciadeOperadores
Aprecednciaserveparaindicaraordemnaqualocompiladorinterpretarosdiferentestipos deoperadores,paraqueelesempretenhacomosadaumresultadocoerenteenoambguo. ordem 1 2 3 4 5 6 7 operador ()parnteses ++psincrementoepsdecremento ++princrementoeprdecremento !negaolgica *Multiplicaoe/diviso %Restodadiviso +somaesubtrao
Projeto Ejovem Mdulo II
Java
41
8 9 10 11 12 13 14 15 16
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
42
System.out.println(" i < j = "+(i < j)); //true System.out.println("j < i = "+(j < i)); //false System.out.println("k < j = "+(k < j)); //false System.out.println("Menor igual a.."); //menor igual a System.out.println("i <= j = "+(i <= j)); //true System.out.println("j <= i = "+(j <= i)); //false System.out.println("k <= j = "+(k <= j)); //true System.out.println("Igualdade.."); //igual a System.out.println("i == j = "+(i == j)); //false System.out.println("k == j = "+(k == j)); //true System.out.println("Diferente.."); //diferente System.out.println("i != j = "+(i != j)); //true System.out.println("k != j = "+(k != j)); //false } }
5.5. Exercciosdefixao.
01Escrevaumprogramaqueimprimaoresultadodasexpressesabaixo: a)531+2+4+3 b)3x25x4 c)2+63/7x9 d)13%48 02Escrevaumprogramaquedeclare,inicializeeimprimaasseguintesvariveis: Inteiroide32bitscomvalor1 Inteirojde64bitscomvalor2 Pontoflutuantepde32bitscomvalor20.0 Pontoflutuanteqde64bitscomvalor30.0 Booleanbcomvalorverdadeiro Carcterccomvalork 03)Naempresaondetrabalhamos,htabelascomoquantofoigastoemcadams.Para fecharobalanodoprimeirotrimestre,precisamossomarogastototal.Sabendose que,emJaneiro,foramgastos15000reais,emFevereiro,23000reaiseemMaro, 17000reais,faaumprogramaquecalculeeimprimaogastototalnotrimestre. Sigaopassoapasso: 1.CrieumaclassechamadaBalancoTrimestralcomumblocomain,comonos exemplosanteriores; 2.Dentrodomain(omiolodoprograma),declareumavarivelinteirachamada gastosJaneiroeinicializeacom15000; 3.CrietambmasvariveisgastosFevereiroegastosMarco,inicializandoas com23000e17000,respectivamente,utilizeumalinhaparacadadeclarao;
Projeto Ejovem Mdulo II
Java
43
Captulo6. Controledefluxoemjava.
As estruturas de controle definem a sequncia de execuo das instrues. No possvel implementarumalgoritmoquenosejatrivialemumalinguagemdeprogramaoquenotenha umconjuntomnimodeestruturasdecontrole.Asestruturasdecontrolepodemserdivididasem seleo, repetio e sequncia.Asequnciasimplesmentedefinidapelaexecuosequencialdos comandos,decimaparabaixo.
6.1. Utilizarcdigoqueuseinstruesif
A expresso entre parnteses deve ter como resultado um valor booleano true ou false. Normalmentetestaralgoparasaberseverdadeiro,seguidaexecutarumblocodecdigo(uma oumaisinstrues)seoresultadoformesmoverdadeiroeopcionaloutroblocodecdigoseno false.Sintaxedadeclaraoif:
Fluxogramadadeclaraoif.
Java
44
6.1.1. Expressesvlidasparainstruesif
Exemplos01: Nesteexemploambasasinstruessoavaliadascomoverdadeiratantoadoladodireitoquantoa doladoesquerdo,pois,ovalordavarivelxformaiordoqueovalordavarively,entooblocode instruoexecutado,eamensagemserimprimidanasadapadro.
Exemplos02:
6.1.2. Expressesvlidasparainstruesifelse
Adeclarao ifelse usadaquandoqueremosexecutardeterminadoconjuntodeinstrues sea condioforverdadeiraeoutroconjuntoseacondioforfalsa. Sintaxe da declarao if-else.
Fluxogramadadeclaraoifelse.
Java
45
6.1.3. Expressesvlidasparainstruesifelseif.
Adeclaraoelsepodeconteroutraestruturaifelse.Estecascateamentodeestruturaspermiteter deciseslgicasmuitomaiscomplexas. Asintaxedadeclaraoifelseif:
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:
SoluoIncorreta.
Java
48 SoluoCorreta.
Noexemploacima,quandofornecidoargumento,aaplicaoidentificaseoprimeirocaracteredeste umavogal.Seoargumentonoforiniciadoporumavogalocorreaexecuodaseodefaultda diretiva switch. Caso no exista argumentos fornecido o programa imprime uma mensagem correspondente. Regrasparausodainstruoswitchcase: Cadainstruocasedeveserseguidadeumainstruobreak. Certifiquesedequeumavarivelcharsejadeclaradaantesdainstruoswitch. Ovalordefaultpodeserinseridonofim,nametadeounoincio.
6.2. Loopseiteradores(usandoosloopsfor,whileedowhile).
Oscomandosderepetio,oudeiterao,executamumcomandoouumblocodecomandosvrias vezes.umadasformasparaexecutarrepetidamenteumcomando.Aoutraarecursoquea chamadadiretaouindiretadeummtododuranteaexecuodoprpriomtodo.EmJavaexistem trsformasdecomandosderepetio:owhile;odowhile;eofor.
Java
49
Sintaxe:loopwhileFluxogramadoloopwhile
Comoemtodososloopsaexpresso(teste)terqueresultaremumvalorbooleano.Ocorpode loopwhilesserexecutadoseaexpresso(tambmconhecidacomocondio)resultaremum valor true(verdadeiro). Uma vez que entramos no loop, seu contedo ser repetido at que a condionopossamaisseratendidaesejaavaliadacomofalse(falsa),encerrandooloop. Exemplo02:
Nesteexemploavarivelxinicializadacom0aoentrarnoloopacondioverificadacomo sendo verdadeira, isso porque 0 menor do que 5, ento o bloco de cdigo executado, imprimindonatelaastringxeovalordavarivelxquenocaso0,depoisaexecuodocdigo passaparaaprximalinhaqueoincrementodavarivelx,passandoavaler1.Agoraaexecuo voltaaoiniciodoloopparaverificarnovamenteacondioeassimpordianteatqueacondio sejaavaliadacomofalsa. Sintaxe:dowhile:fluxogramadoloopdowhile
Java
50
6.2.1. Loopdowhile:
Adeclarao dowhilesimilaraowhile.Asinstruesdentrodolao dowhileseroexecutadas pelomenosumavez.Inicialmente,asinstruesdentrodolaodowhilesoexecutadas.Ento,a condionaexpressolgicaavaliada.Seforverdadeira,asinstruesdentrodolaodowhile seroexecutadasnovamente. Exemplo01:
6.2.2. Loopfor:
Adeclaraofor,comonasdeclaraesanteriores,permiteaexecuodomesmoblocodecdigo umaquantidadedeterminadadevezes. Sintaxe:doloopfor:
FluxogramaFor
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:
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.
Java
53
6.4.2. AinstruoContinue:
Ainstruocontinuefarcomquesomenteaiteraoatualdoloopsejaencerradaequeaprxima iteraodomesmoloopsejainiciadadestequeforatendida.Quandousarumainstruocontinue emumloopfor,vocterqueconsiderarseusefeitosnaiteraodoloop.Adeclaraocontinue fazcomqueaexecuodoprogramavolteimediatamenteparaoinciodolao, pormparaa prximainterao.Ocontinuefazointerpretadorpularparaaprximaiteraoeobrigaoatestar acondio. Exemplo:
Apergunta:Esseumloopinfinito?Arespostano.Quandoainstruocontinueforatingida,a expresso de iterao ainda ser executada! Ela ser exatamente como se a iterao atual terminassedemaneiranatural.Portanto,noexemploanterior,aindaaumentarovalorantesda condio(i<10)serverificadanovamente.Masgeralmenteainstruocontinueusadadentrode umtesteifcomosegueabaixo:
Nota: Este dois comando tambm podem ser usados como instrues rotuladas. As instrues rotuladasestoalmdoescopodonossocurso,mas,emboramuitasinstruesemjavapossamser rotuladas,maiscomumusarrtuloscominstrueslooptaiscomoforewhile,emconjuntocom instruesbreakecontinue.Umainstruodertulodevesercolocadaantesdainstruosendo rotulada, e consiste de um identificador vlido que termina com dois pontos(:). As instrues rotuladasseronecessriassomentenassituaesemquevoctiverumloopaninhadoeprecisa indicarqualgostariadeencerrarouapartirdoqualdesejacontinuaraprximaiterao.
Projeto Ejovem Mdulo II
Java
54
6.4.3. Return:
A declarao return utilizada para sair de um mtodo. O fluxo de controle retorna para a declaraoquesegueachamadadomtodooriginal.Adeclaraoderetornopossuidoismodos:o queretornaumvaloreoquenoretornanada. Exemplo:
6.5. Exercciospropostos
01)Crieumprogramaqueobtenhaamdiade3nmeros.Considereovalorparaostrsnmeros comosendo10,20e45.Oresultadoesperadodoexerccio: nmero1comovalor10 nmero2comovalor20 nmero3comovalor45 Amdia25 02)Dadostrsnmeros,crieumprogramaqueexibaomaiordentreosnmerosinformados.Useo operador?:quejfoiestudado(dica:sernecessrioutilizardoisoperadores?:parasechegarao resultado).Porexemplo,dadososnmeros10,23e5,oresultadoesperadodoexercciodeveser: nmero1comovalor10 nmero2comovalor23 nmero3comovalor5 Omaiornmero23 03)Crieumprogramaquemostreseunomevintevezes.Faatrsversesdesteprograma: a.Useumadeclaraowhilepararesolveresteproblema b.Useumadeclaraodowhilepararesolveresteproblema c.Useumadeclaraoforpararesolveresteproblema 04)Recebacomoentradaumnmeroeumexpoente.Calculeestenmeroelevadoaoexpoente. Faatrsversesdesteprograma.Dados:onmero3eoexpoente2. a.Useumadeclaraowhilepararesolveresteproblema b.Useumadeclaraodowhilepararesolveresteproblema c. Useumadeclaraoforpararesolveresteproblema
05)Imprimatodososnmerosde150a300.
06)Imprimaasomade1at1000. 07)Imprimatodososmltiplosde3,entre1e100.
Java
55
Captulo7. Orientaoaobjetos:
Na linguagem de programao orientado a objetos java, um programa principalmente uma coleodeobjetosfalandounscomosoutrospormeiodainvocao(mensagem)dosmtodosuns dosoutros.Cadaobjetodeumtipo,eessetipodefinidoporumaclasseouumainterface.A maioriadosprogramasJavausacoleesdeobjetosdemuitostiposdiferentes.
TiposdeDadosAbstratos:Representamapartecentraldametodologiaorientadaaobjetos.Umtipo dedadoabstratoummodeloformadoporpropriedades(atributos)eoperaes(mtodos),onde estasdefinemocomportamentobsicodomesmo.Tipodedadoabstratopermiteamodelagemde entidades do mundo real de uma forma mais natural, pois estamos acostumados a lidar com "objetos"osquaispossuemcaractersticas"atributos"efuncionalidades"mtodos".
7.2. Objeto:
entedomundorealqueabstradoparaomundovirtual,ousejaumainstnciadeumaclasse. Nomomentodaexecuo,quandoamquinavirtualJava(JVM)encontraapalavrachave new, elausaaclasseapropriadaparacriarumobjetoqueserumainstnciadessaclasse.Esseobjeto teroseuprprioestadoeteracessoatodososcomportamentosdefinidospelasuaclasse. Os objetospodemconterobjetos,ousejaosatributosdeumobjetopodemserobjetos, damesma classeouno.Objetospodemserpassadospelaredeearmazenadosemmeiofsico.Exemplode objetosdomudoreal.
Java
56
7.3. Atributo:
Refereseaoelementodosdadosdeumobjeto.Elearmazenainformaessobreoobjeto.tambm conhecidocomodadodoobjeto,atributodoobjeto,propriedadeoucampo.Noprojetoderegistro doaluno, algunsatributosdaentidadealunoincluemonome, nmerodoestudanteenvelde escolaridade.
7.4. Mensagem:
Umamensagemaformadecomunicaoentreosobjetos.Paraissoprecisocriarumobjeto, identificar o nome do mtodo a ser executado e, caso necessrio, identificar tambm os parmetrosqueomtodorecebeouretorna.Depoisdeteressesdadosemmospodemosenviar mensagensparao(s)objeto(os). Exemplo01:
Nesteexemploumdeterminadoobjetoestinvocandoomtodocorrer()deumoutroobjeto,ou sejaenviandoumamensagemparaoutroobjetoquecontmoseguintemtodo.
7.5. Oqueoestadodeumobjeto.
7.5.1. Estado(variveisdeinstncias):
O estado do objeto define como o objeto reage quando aplicado aos mtodos. Cada objeto (instnciadeumaclasse)teroseuconjuntonicodevariveisdeinstnciasconformedefinidona classe.Coletivamente,osvaloresatribudosasvariveisdeinstncias deumobjeto,compemo estadodoobjeto.
Java
57
7.6.1. Classe:
modeloquedescreveostiposdeestadosecomportamentoqueseusobjetospodemter.Essetipo dedadodefinidopelousurioquecontmomolde,aespecificaoparaosobjetos,algomaisou menoscomootipointeirocontmomoldeparaasvariveisdeclaradascomointeiros.Aclasse envolve,associafunesedados,controlandooacessoaestes,definilaimplicaemespecificaros seus atributos (dados) e seus mtodos (funes). importante considerar que uma classe no representanenhumobjetoemparticular,poissummodelo. Nota: Na modelagem orientada a objetos utilizamos as classesem programao para conseguir modelarosobjetosaseremrepresentadoseaimplementaodomodelo.Modelarumobjetocriar uma descrio geral para um conjunto de objetos que se deseja utilizar no programa. Vamos considerar,porexemplo,umadisciplinatemsuaforma,seucdigo,seunome,seuscrditoseetc. Esteconjuntodeelementosquedescrevemadisciplinapoderiamseragrupados,constituindoum modeloparadisciplinas.Podamosaindaformaroutrosobjetosqueiriampossuiroutrosatributos, uma certa combinao de atributos tornase conveniente para descrever apenas um conjunto particulardeobjetos.Levamostambmemconsideraoqueumobjetopodesermodeladoporseu tipodeutilizaoenoapenasporseusatributos.Vejamosabaixoomodelodediagramadeclasse daUMLpararepresentaraclasseDisciplina.
Aseosuperiorusadapararegistraronomedaclasse.Aseointermediriareservadapara registrodaspropriedadesdaclasse,casoexistam,enaseoinferiorregistradoaassinaturados mtodosquepertencemclasse,casoexistam.Porassinaturadomtodoqueremosdizeronomedo mtodo, juntamente com seus argumentos e valor de retorno. A figura abaixo mostra uma representaodaclassedasdisciplinas.Emumadeclaraodeumaclassenormalmentesecolocaa declaraodemtodosdepoisdadeclaraodosatributos,pormpodemosfazerintercalaesou adotar qualquer ordem que nos convenha. Uma boa tcnica de programao, que podemos aconselharavocadotaremseusprogramasusarlinhasdecomentriosparadelimitarumarea docdigodesuasclassesqueenglobetudooqueinteressaaumusuriodesta.
Projeto Ejovem Mdulo II
Java
58
Exemplo01:
7.6.2. Construtor:
Osobjetossoconstrudos.Nosepodecriarum novo objeto em Java sem chamamos um construtor. O construtor so o cdigo que ser executadosemprequeusarapalavrachavenew. Todas as classes, incluindo as classes abstratas(abstract), precisa ter um construtor. Mas s porque uma classe precisa de um construtor, no significa que o construtor que o programador tenha que digitlo. Exemplo de declaraesvlidasparaconstrutores:
Java
59
This:Ojavaassociaautomaticamenteatodasasvariveisemtodosreferenciadoscomapalavra this.Porisso,namaioriadoscasostornaseredundanteousoemtodasasvariveisdapalavrathis. Existem casos em sefaz necessrio ouso da palavras this. Por exemplo, voc pode necessitar chamarapenasumapartedomtodopassandoumainstnciadoargumentodoobjeto.(chamarum classedeformalocalizada). New:Ainstanciaoapalavrachave newumoperadoremJavaquecriaonovoobjeto(aloca espaoousejareservaespaoparaoobjeto).Exemplo01:
Exemplo02:
Exemplo03:
Regrasparaosconstrutores: Os construtores podem usar qualquer modificador de acesso, inclusive private(um construtorprivatesignificaquesomenteocdigoqueestiverdentrodaprpriaclassepoder instanciarumobjetodessetipo). Onomedomtodoprecisaserigualaonomedaclasse. Nodeveretornarumtipodeclaradoparaomtodo. Osconstrutorespodemsersobrecarregados.
7.6.3. Visualizandoomundodosobjetosemjava.
Classe a estrutura que, quando construda, produzirosobjetos,dizemosentoquetodoobjeto instnciadealgumaclasse.Vamosentomodelar umaclassechamadadeConta. Objeto umentedomundorealquepodeser abstradoparaomundovirtual?
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:
Java
61
Executandoatrocademensagensentreosobjetos:vamoscriardentrodaclasseTesteFuncionario umobjetoapartirdaclasseFuncionarioefazermosalgumasalteraesnoestadodesteobjeto.
Java
62
Exemplo03:
Java
63
padroparaoexame)compontosflutuanteseoperaescompontoflutuante.possveldeclarar umaclassecomostrictfpoumtodosindividuais. Final:Nalinguagemjavaasvariveiscomomodificadorfinalindicaqueovalordeumavarivel nopoder seralterado apsamesma tersidoinicializada, ouseja, permitidosomenteuma atribuionestetipodevarivel.
Native : A declarao native s pode ser usada para mtodos e dependente da plataforma. Assimcomomtodosabstractsosmtodosnativedevempossuirumpontoevirgulanofinaldasua declarao,omitindoaimplementao.
Java
64
Exemplo02:
Final: A palavrachave impede que um mtodo possa ser substitudo em uma subclasse, e frequentementeusadaparaforarosrecursosAPIdeummtodo.
Exemplo02:
Exemplo03:
7.9. Passagemdeparmetrosemjava.
Quandovocpassarumavarivelderefernciadeobjetoparaummtodo,terqueselembrarque seestarpassandoarefernciaaoobjetoenooprprioobjeto.Lembresedequeumavarivelde refernciacontmbitsquerepresentamumamaneiradeacessarumobjetonamemria(noheap). Omaisimportantequevocprecisalembrarquenoestarpassandonemmesmoumavarivel derefernciareal,mas,emvezdisso,umacpiadosbitsdessavarivel,portanto,quandopassar umavariveldereferncia,estarpassandoumacpiadosbitsquerepresentamcomooobjeto especficopodeseracessado.
Java
65
7.9.1. PassagemdeParmetrosporvalor.
Nestemodo,natransfernciadeexecuodomtodochamadorparaachamadorealizadouma cpiadovalordoparmetrorealparaoformaleomtodochamadonoconseguemodificaro valordo parmetrorealpassado.Estemodoforneceapenasvaloresdeentradaparaumcerto mtodochamado.Exemplo01:
7.9.2. PassagemdeParmetrosporReferncia.
Nestemodo,natransfernciadeexecuodomtodochamadorparaachamadooparmetro formalpassaaserumsinnimodoparmetroreal.Comisso,qualquermodificaodoparmetro formalalteraoparmetroreal.Usualmente,estemodopreferidoemrelaoaomodoporvalor porcausadapossveloperaocustosadeclonarumobjetos.Exemplosdepassagemporreferncia: Exemplos01:
Notaimportante: DentrodamesmamquinavirtualJavaosparmetrosfornecidosaosmtodos sopassadosporvalor.Isto,quandoumdeterminadoparmetropassadoaummtodoojava criaumacpiadesseparmetroecolocaanastackdomtodoinvocado.Paraostiposprimitivos (int, float, boolean,...) esta operao no levanta qualquer problema mas quando se tratam de objetosascoisasnofuncionamexatamentedamesmamaneira.Naverdade,emJavanoselida diretamentecomobjetos,quepermanecemnaheap,mascomassuasreferncias. Stringstr="JAVA"; obtemsestrqueumarefernciaparaumobjetodaclasseStringcriadonaheap.Apassagemdos objetosamtodosentofeitoporcpiadarefernciaenopelacpiadoprprioobjeto.Assim,o mtodo:System.out.prinln(str);recebeumacpiadarefernciaastrenoumacpiaaoprprio objeto.OnmeroderefernciasaumdeterminadoobjetoguardadopelaJVM,quandonoexiste maisnenhumarefernciaaoobjeto,estepodeserseguramenteremovidodaheap,processoque efetuadoautomaticamentepelosistemadecoletadelixo(GarbageCollection).
Java
66
Exemplo02:
7.10.2. Declaraodemtodosestticos.
7.10.2.1. Mtodosestticos: Osmtodosmarcadoscomomodificadornoreferenteaoacessostaticpertencemclasseenode umainstnciaespecficadaclasse.Estemembropodeserusadosemternenhumainstnciadessa classe.Paraestestiposmembrossomenteaclassesuficienteparachamar(invocar)ummtodo esttico. Exemplo01:
Exemplo02:
Java
67
Exemplo03:
7.11. Declaraodeinterfacesemjava
Declarao de Interfaces: Interface uma espcie de superclasse 100% abstrata que define os mtodosqueumasubclassedevesuportar,masnocomoessesuportedeveserimplementado.Isso porqueaocriarumainterface,estardefinindoumcontratocomoqueaclassepodefazer,sem mencionarnadasobrecomoofar.Umainterfaceumcontrato.Qualquertipodeclasse(concreta) edequalquerrvoredeheranapodeimplementarumainterface. Exemplo01:
Exemplo02:
Exemplo 03:
Regrasparaasinterfaces:
UmainterfaceemJavaumacoleodemtodosabstratosquepodemserimplementadas porumaclasse. Umainterfacenopodeimplementaroutrainterfaceouclasse. Ostiposdeinterfacepodemserusadospolimorficamente. Osmtodosdeuminterfacenodevemserestticos. Umainterfacedeveserdeclaradacomapalavrachaveinterface. Todososmtodosdeumainterfacesoimplicitamentepubliceabstract.Asinterfacess podemserdeclaradas.Umainterfacepodeestenderumaoumaisinterfacesdiferentes. Todasasvariveisdefinidasemumainterfacedevemserpublic,staticefinal.Asinterfaces spodemserdeclararconstantesenovariveisdeinstncia.
Java
68
7.12. Classesabstratas:
Abstraoestdefinidacomoumacaractersticasessencialdeumaentidadequedistingueestade todasasoutrasespciesdeentidades.Esteumtipoderepresentaoqueincluiapenasascoisas quesoimportantesouinteressantesdeumpontodevistaparticular.Esteumdomnioe dependentedaperspectiva,ouseja,oqueimportanteemumcontextoequepodeno necessariamenteseremoutro.Istonospermitegerenciaracomplexidadedosistemanos concentrandoapenasnascaractersticasquesoessenciaisouimportantesparaosistema,e Ignoramosoudescartamosascaractersticasquenosonestemomento.Objetossorepresentados atravsdessascaractersticasquesoconsideradasrelevantesparaopropsitoemquesto,eso desconsideradasascaractersticasquenoso.
Regrasparaasclassesabstratas: Uma classe abstrata no pode ser instanciada nunca, seu nico propsito ser estendida(subclassificada). permitidocompilareexecutarumaclasseabstrata,desdequenotentecriaruma instnciadela. Neste exemplos que iremos mostrar abaixo, damos, inicio a um assunto bastante utilizado no paradigmadeprogramaorientadaaobjetosqueaherana(liodonossoprximocaptulo): Imagine que voc tenha uma classe Carros que tenha mtodos genricos comuns a todos os veculos.Masvocnoquerquealgumdefatocrieumobjetocarrogenrico,abstrato.Comose inicializariaoseuestado?Dequecoreleseria?Quantosassentos?Potnciadomotor?Direo hidrulicaouno?ou,maisimportante,dequeformaelesecomportaria?Emoutraspalavra,como osmtodosseriamimplementados?Oquevocprecisadeinstnciasreaisdecarros,comoBMW, FERRARI,GOL,FIAT,etc.TemoscertezadequeodonodeumaBMWlhediriaqueocarrodele capazdefazercoisasqueoGOLapenassonhaemfazer. Exemplo01:
Java
69
Anotaes:
Aimplementaopodeserdessaformamostradaacima,comotambmpodeser comoseguenoexemploabaixo:
Java
70
7.12.1. Encapsulamento:
tambm conhecido como ocultao de informao. So caractersticas embutidas dentro de uma caixapreta abstrata que ocultaaimplementaodestascaractersticasatrsdeumainterface. Isto permite que outros objetos interajam com ele sem ter conhecimento de como a implementao realiza a interface. Esta interaorealizadaatravsdasmensagensdeinterfacedoobjeto. Estainterfaceumconjuntoprdefinidodeoperaesutilizadaspor outrosobjetosquesecomunicamcomele.Istogarantequeosdadoseosatributosdoobjetosso acessveisatravsdasoperaesdoobjeto.Nenhumoutroobjetopodeacessardiretamenteestes atributosealterarseusvalores. Encapsulartemafunobsicadeprotegerumaclassedecoisasestranhas,ouseja,mantlade formamaisprotegidacontraousoindevidodecertosusurios.Vamosveroseguintecdigopara entenderistomelhor: Exemplo01:
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.
Java
71
7.14. Exercciosdefixao
01)Modeleumaclassechamada(Pessoa)comosseguintesatributos(nome,idade,cpf,sexo,raae altura) e todos com os modificadores de acesso (private).Para est classe instancie trs objetos diferentesapartirdaclassePessoa. 02)Quantosobjetospodemoscriar(instanciar)apartirdaclassePessoa? 03)Definaclasseabstrata?Ecitetrsexemplosdeclassesabstratascomalgunsmtodos. 04)Definaclasseencapsulamento?Ecitedoisexemplosdemembrosencapsulados. 05)Comofuncionaapassagemdeparmetrosemjava?Descrevadetalhadamenteesteprocesso. 06)Porqueeudeveriausaremmeuprogramajavaummtodoouumavarivelquepertencea classeenoaumainstnciadaclasse?
7.15. Exerccioscomplementares.
01) Crie uma classe abstrata que represente um quadriltero e receba como parmetros do construtorosquatrovaloresreferentesacadalado. 02)Estendaaclassecriadanoexerccio01,asubclassedeverepresentarumquadradoeportanto recebercomoparmetroumnicovalorreferenteaosseuslados. 03)Estendanovamenteaclassecriadanoexerccio01,asubclassedeverepresentarumretnguloe portantodeverecebercomoparmetrosdoisvaloresdiferentes.
Java
72
Captulo8. Herana
8.1. Pacotes:
Java permite que voc agrupe classes em uma coleo chamada pacotes. Os pacotes so convenientesparaorganizarseutrabalhoeparasepararseutrabalhodasbibliotecasdecdigos fornecidasporterceiros.Abibliotecajavapadrodistribudasemumasriedepacotes,incluindo java.lang,java.util,java.neteassimpordiante.Ospacotesjavapadrosoexemplosdepacotes hierrquicos. Da mesma forma como voc tem subdiretrios aninhados em seu disco rgido, possvelorganizarospacotesusandonveisdeaninhamento.Todosospacotesjavapadroficam dentrodashierarquiasdepacotesjavaejavax.Suponhaquedoisprogramadorestenhamaboa ideiadefornecerumaclasseExemplo.Desdequecadaumcoloquesuaclassedentrodepacotes diferentes,nohaverconflitos,casocontrrioaconfusoestarmada.Exemplo01:
8.1.1. Importaesdeclasses:
Umaclassepodeusartodasasclassesseuprpriopacoteetodasasclassespblicasdeoutros pacotes diferentes. Voc pode acessar as classes pblicas de outros pacotes da seguinte forma. Simplesmenteimportetodasasclassesdopacoteousomenteumaclassesemespecfico. Exemplo01:
8.2. Herana:
fundamentalparaJavaeoutraslinguagensdeprogramaoorientadasaobjetos,oconceitode herana,quepermiteaocdigodefinidoemumaclasseserreutilizadoemoutrasclasses.
Sintaxedeheranaemjava: classNomeDaClasseASerCriadaextendsNomeDaClasseASerHerdada Em Java, pode ser definido uma superclasse geral (mais abstrata), e depois estendla com subclassesmaisespecficas.Asuperclassenosabenadasobreasclassesqueherdamdela,mas todasassubclassesprecisamdeclararexplicitamentearelaodeherana.Umasuperclasserecebe
Projeto Ejovem Mdulo II
Java
73
Java
74
CdigodasuperclasseConta.
CdigodasubclasseCPoupancaqueestendedasuperclasseConta.
CdigodasubclasseCEspecialqueestendedasuperclasseConta.
Java
75
Diagramadeclassesrepresentandoaheranaentreasclassescitadasacima.
Como estamos tratando deherana de classes, todaclassetemseumtodoconstrutor.Portanto, seestamostrabalhandocomduasclasses,temos dois mtodos construtores. Para acessarmos o mtodo construtor da classe que est sendo
Projeto Ejovem Mdulo II
Java
76
herdadausamososuper(). Exemplo02: Parademonstrarcomodefinirorelacionamentodeherana,consideraseocontextodeterque desenvolverumprogramaquesimuleocomportamentodevriostiposdeanimaiscomomostrado nafiguraaoladoemumdeterminadoambiente. Inicialmente,apenasumgrupodeanimais estar presente neste ambiente e cada animal deve ser representado por um objeto. Alm disso, os animais movemse no ambiente ao seu modo e podem fazer umconjuntodecoisas.Oprogramadever preverquenovostiposdeanimaispodero serincludosnoambiente.
Oprimeiropassoobservarcadaanimaledefiniroquecadaobjetodotipoanimaltememcomum noquedizrespeitoaosatributosecomportamentos(mtodos).Devesedefinirtambmcomoos tipos de animais se relacionam. Inicialmente, o programa deve simular o comportamento dos animaisilustradosnafigura,ouseja,deumleo,deumlobo,deumgato,deumhipoptamo,de umtigreedeumcachorro.
Osegundopassoconsisteemprojetarasuperclasse,ouseja,aclassequerepresentaoestadoeo comportamento em comum a todos os animais. Para este exemplo, como todos os objetos so animais,asuperclassefoidenominadacomoAnimaleasvariveisemtodosemcomunsatodosos animaisforamatribudosaela,comoilustradonaFigura. Nesteexemplo,cincovariveisforam definidas:(otipodecomidaqueoanimalcome),(onveldefomedoanimal),(representaoda alturaelarguradoespaoqueoanimalvagaraoseuredor)e(ascoordenadasXeYdoanimalno espao).Almdisso,quatromtodosforamdefinidosparadefinirocomportamentodosanimais: (comportamento do animal ao fazer algum rudo), (comportamento 57 do animal ao comer), (comportamento do animal dormindo) e (comportamento do animal quando no est nem dormindonemcomendo,provavelmentevagueandonoambiente). O terceiro passo o de decidir se alguma subclasse precisa de comportamentos (mtodos) especficosaoseutipodesubclasse.AnalisandoaclasseAnimal,podeseextrairqueosmtodos devemterimplementaesdiferentesemcadaclassedeanimais,afinal,cadatipodeanimaltem comportamentodistintoaocomerefazerrudos.Assim,essesmtodosdasuperclassedevemser sobrescritos nas subclasses, ou seja, redefinidos. Os mtodos no foram escolhidos para serem redefinidos por achar que esses comportamentos podem ser generalizados a todos os tipos de animais.
Java
77
8.3.1. Construtoresdasubclasse
Java
78
Nota:NesteoutroexemploacimaaclasseMamferoimplementaainterfaceAnimal,por essemotivotambmdizemosqueaclasseMamferoumanimal.
8.4.2. TEMUM:
Osrelacionamentostemumsobaseadosnautilizao,emvezdeherana.Emoutraspalavras,a classeAtemumBocorrerseocdigodaclasseAapresentarumarefernciaaumainstnciada classeB.Porexemploafigurademostraorelacionamentotemumentreosobjetos:
Exemplo01:
Nota:Nesteexemplodemostramoscomofuncionaorelacionamentotemum,noqualuma classeutilizaumobjetoapartirdeoutraclasse.
Java
79
Exemplo01:
O polimorfismo como foi apresentado aqui , para a maioria dos programadores, o verdadeiro
polimorfismo.Sexisteemhierarquiasdeheranaouinterface.Todavia,asobrecargatambm um tipodepolimorfismo. Alguns autoresdestacam os doistipos, caso em quechamase oque estudamosdepolimorfismotiposobreposio(ligaotardia,dinmicaoudynamicbinding)eo outro depolimorfismo tipo sobrecarga (ligao precoce, esttica ou early binding). A diferena principal que na sobrecarga quem escolhe o mtodo a ser acionado o compilador e no polimorfismocomligaodinmicaquemdecideaJVM. Regrasparaopolimorfismo. Paraquepossarmosacessarumobjetoemjavautilizamosumavariveldereferencia.Ehalgumas regrasimportantesamemorizarsobreasvariveisdereferncias: Umavarivelderefernciaspodeserdeumtipoe,umavezdeclarada,essetiponunca podesermodificado(emboraoobjetoquereferenciepossasemodificar). Umarefernciaumavarivel,deformaquepodeserreatribudaparaoutrosobjetos(a noserquearefernciasejamarcadacomofinal). Otipodeumavarivelderefernciadeterminaosmtodoquepodemserchamadosno objetooqualavarivelestreferenciando. Umavarivelderefernciapodeapontarparaqualquerobjetodomesmotipoquea refernciadeclarada,oupodesereferiraqualquersubtipodotipodeclarado. Umavarivelderefernciapodeserdeclaradacomoumtipodeclasseouumtipode
Projeto Ejovem Mdulo II
Java
80
interface.Seavarivelfordeclaradacomoumtipodeinterface,elapodereferenciarqualquer objetodequalquerclassequeimplementeainterface. Umaclassenopodeestendermaisdoqueumaclasse.Issosignificaumparenteporclasse.Uma classepodetermltiplosancestrais,noentanto,umavezqueaclasseBpoderiaestenderaclasseA, a classe C poderia estender a classe B e assim por diante. Ento, qualquer classe poderia ter mltiplasclassesacimadesinarvoredeherana,masissonoomesmoquedizerqueuma classeestendediretamenteduasclasses.
2criaasubclassechamadadeCachorroqueestendedasuperclasseAnimal:
3 cria a classe de teste para invocar o mtodo comer(), mais especializado que est sendo sobrescritonaCachorro:
Java
81
umaSQLException,Exceptionouqualqueroutraexceoqueomtodonodetempode execuo,amenosqueelasejaumasubclassedeFileNotFoundException. Vocnopodesobrescreverummtodomarcadocomfinal.Nemosmtodomarcadoscom static. Se um mtodo no puder se herdado, no poder sobrescrevlo. Lembrese de que sobrescreverimplicaemestreimplementandoummtodoherdado.
8.5.3. Mtodossobrecarregados:
OsmtodossobrecarregadosDEVEMalteraralistadeargumentos; OsmtodossobrecarregadosPODEMalterarotipoderetorno; OsmtodossobrecarregadosPODEMalteraromodificadordeacesso; OsmtodossobrecarregadosPODEMdeclararexceesverificadasoumaisabrangentes; Ummtodopodesersobrecarregadonamesmaclasseouemumasubclasse; Exemplo01:
Nota:Podemosobservarquenesteexemploomtodocalc(),estsendosobrecarregado.Porque existe trs verses do mesmo mtodo mais cada uma especificando um mtodo diferente, com argumentoetipoderetornototalmentediferentes.
Java
82
Vejamos abaixo em um exemplo o cdigo de implementao de uma interface em java, como funcionaadeclaraodainterfaceedetodosseusmtodos,oquepodeserpermitidoequeno podeserpermitidonumadeclaraodeinterface. Exemplo01:
8.5.5. Usandoclassequeimplementainterfaces
Umavezcriadaainterface,precisamosterumaclasseondeseroimplementadososmtodosque foramdeclarados.Nonossoexemplo,aclasseexatamenteaclasseMeuVeiculomostradaabaixo. Mastemosdeindicar naclassedeimplementaoqueestamosimplementando umainterface,e dizer tambm qual a interfaceou quais as interfaces (pois, a linguagem java suporta mltiplas interfacesnumanicaclasse).
Comentrios:Umavantagemdousodeinterface,quepodemosdeclararobjetosdeinterfacese depoisescolherumaclassedeimplementaoparainstancila.Vejaesteartigosobreadeclaraoe instanciao de objetos em Java. Por exemplo, para o caso da nossa classe de MeuVeiculo, poderamosfazeroseguintenaclasseAppVeiculo:
Java
83
8.6. Conversodevariveisdereferncias.
EmJavaPEpossvelutilizamostiposgenricosdevariveisderefernciaparaapontarparatiposde objetosmaisespecficos.Issoformaabasedopolimorfismo.Porexemplo: Animalanimal=newCachorro();
Nota:Masoqueacontecequandovocdesejausaravarivelderefernciadoanimalafimde chamar um mtodo que apenas a classe Cachorro possui? Voc sabe que est referindo a um Cachorro,edesejaalgoqueespecficoaCachorro. Oblocodecdigoaoladocontmumcast,quenestecasoasvezeschamadodedowncast,porque estamos convertendo para baixo na rvore de herana, de uma classe geral para uma mais especfica. Agora, ocompiladorficarfeliz. Antesdetentarmoschamaromtodocomer(), ns convertemosavariveldoaparaotipoCachorro.Oqueestamosquerendodizeraocompilador: sabemosqueelanaverdadeserefereaumobjetoCachorro,entonotemproblemaemcriaruma novavarivelderefernciadotipoCachorroparapontarparaesteobjeto.Nestecaso,nossafamos porque,antesdesequertentarmosaconverso,fazemosumtesteinstanceofparatermoscerteza.
8.7. Pilhaeheap.
Paraamaioriadaspessoas,entenderosfundamentossobreapilhaeoheapfacilitabastantea compreensodetpicoscomoapassagemdeargumentos,opolimorfismo,threadsecoletadelixo. Emgeralasvriaspartes(mtodos,variveiseobjetos)dosprogramasemjavaresidememumdos doisseguinteslugaresdamemria:Napilhaounaheap. 1:Asvariveisdeinstnciaseosobjetosresidemnoheap.
Projeto Ejovem Mdulo II
Java
84
2:Asvariveislocaiseosmtodosresidemnopilha. Vejamosailustraonafiguraabaixo,quedemonstracomofuncionatudoisso.
8.8. Exercciospropostos
01)Defina(digaoqueeparaqueserve): IHerana IIPolimorfismo IIIEncapsulamento 02)Oquediferenciaumtipoprimitivodeumaclasse? 03)Exemplifiqueatravsdeumdiagramadeclassesdoisusosparaheranaedoisusospara associao. 04)Qualadiferenaentreassociaoeagregao?Mostreexemplosdecadaumdoscasos. 05)Quantosparmetrosummtodopodeter(mnimoemximo)?Quantosatributosemtodos umaclassepodeter(mnimoemximo)? 06)Oqueumtipoderetorno?Todomtodoprecisaterum? 07)Oscomponentesdeumobjetoso:identidade,estadoecomportamento.Definacadaumdeles. 08)Mostreatravsdeumdiagramadeclassesumexemplodeumaclassedeassociao.Expliqueo diagrama. 09)Qualquerconjuntodeobjetospodeserconsideradoumaclasse?Justifique. 10)Porqueodiagramadeobjetosdinmico? 11)Descrevacomsuapalavracomofuncionaosrelacionamentos(umetemum):Citeexemplos desserelacionamentosemumprograma,(utilizandoherana). 12)Oqueumainterfaceemjava?Porqueutilizarumainterfacenomeuprograma?Qualasuareal funcionalidade? 13)FaaumainterfacechamadaAlunos,quecontmosmtodosabstratos(nomeDoAluno(String nome);,omtodoverNomeDoAluno();,mediaFinal((floatn1,floatn2,floatn3)/3.0f);)ea implementenaclasseconcretachamadaAlunoDeGraduao.
8.9. Exercciosfixao
01)CrieumainterfacedenominadaFiguraGeometrica,adicioneosmtodoscalcularreaecalcular
Projeto Ejovem Mdulo II
Java
85
8.10. Exerccioscomplementares
01)Oqueumaclasseexclusiva?Eumaclasseconcreta?Dumexemplo. 02)Paraqueservemospacotes? 03)Definaedigaparaqueserveotratamentodeexceesemjava. 04)Descrevaemumprogramacomofuncionaotratamentodeexceesemjava. 05)Faaumprogramaemjavaqueutilizeasclausulastry{}catch(){}ethrowsnotratamentode algumaexceoquepoderocorrer.
8.11. Capturandoumaexceousandoobloco(tryecatch).
Alinguagemjavaforneceaosdesenvolvedoresummecanismosofisticadopara manipulao de erros que produz cdigos de manipulao eficientes e organizados:amanipulaodeexcees.Amanipulaodeexceespermite que os desenvolvedores detectem erros facilmente sem escrever um cdigo especial para testar valores retornados. Permite tambm manter o cdigo de manipulaodeexceesnitidamenteseparadodocdigoquegeraraexceo. Almdisso,permitequeomesmocdigodemanipulaodeexceeslidecom asdiferentesexceespossveis. AclasseThrowableanicaclassecujasinstnciasdiretasouindiretaspodemserusadaspara serem lanadas. A classe Throwable prdefinida na linguagem Java, juntamente com vrias outrasclassesdefinindoum grandenmerodecategoriasdeerro.OsprogramadoresJava, por conveno, caso queiram criar novas excees devem estender a classe Exception que uma subclassedeThrowable.DuasclassesdescendentesdaclasseThrowablepodemserconsideradas especiais: a classe Error e a classe RuntimeException. A linguagem java no obriga o programadoratrataroslanamentosdeexceoenvolvendoinstnciasdaclasseError,daclasse RuntimeExceptionedasclassesdelasderivadas,todososoutroslanamentosdeexceodevemser tratadospeloprogramador.Capturandoumaexceocomoblocotryecatch. Vejamosasintaxe.
Java
86
Nota:Omtodocalcseforchamadocomyigualzero(0),gerarumerroeumaexceo ser lanada, esse erro poder ser sinalizado no bloco trycatch,ento a execuo do mtodopularparaablocodecdigocatch,ondesermostradoumamensagemdeerro. Exemplo02: Caso01:NesteexemplovamoschamaromtodoconverteStr(),passandoumastringnumrica,que nonossocaso8eoresultadoaconversodastringemumnmerodepontoflutuante,daa divisofeitaeaexecuodoprogramaacontecesemnenhumproblema.
Java
87
8.11.1. Finally
Finally:otrechodecdigofinal.Afunobsicadefinallysempreexecutarseublocode dadosmesmoqueumaexceosejalanada.muitotilparaliberarrecursosdosistemaquando utilizamos,porexemplo,conexesdebancodedadoseaberturadebufferparaleituraouescritade arquivos.
Resultadodocdigoacima:
8.11.2. Lanadoumaexceocomothrows.
OobjetodeexceoumainstnciadaclasseExceptionoudeumadeumadesuassubclasses.A clusula catch usa, como parmetro, uma instncia de objeto de uma tipo derivado da classe Exception.Alinguagemjavaexigequetodomtodocaptureaexceoverificadaquepodevira lanarou ento declare que lanar a exceo. Adeclarao da exceo fazparteda interface pblicadomtodo.Nadeclaraodeumaexceoquepoderserlanada,apalavrachavethrows usadaemumadefiniodomtodo,juntocomumalistadetodasasexceesverificadasque poderoserlanadas. Exemplo01:
Exemplo02:
Java
88
8.11.3. Criandoumaexceocomthrow.
AmquinaVirtualJavalanarefernciasparainstnciasdemaneiraimplcitautilizandoasclasses prdefinidas.Oprogramadorpodeutilizarocomandothrowdeformaexplcita.Quandoofluxode controle atinge o comando throw <expresso>, a expresso avaliada. Esta expresso corresponde, em geral criao de um objeto e resulta numa referncia, p. ex. throw new ErroDoTipoX();. A partir da o fluxo de controle ser desviado para uma clusula catch apropriadadealgumcomandotrycatch. O fluxo de controle segue a cadeia dinmica dos registros deativaodasinvocaesdos mtodos,ousejaaexecuode um mtodo pode terminar (i) por que o fluxo de controle atingiu o final do mtodo (return implcito, somente no casodemtodosdotipovoid!),(ii)porqueofluxodecontroleatingiuumcomandoreturn,ou(iii) porquefoiexecutadoumtrowimplcitoouexplcitoquenofoiapanhadoporumcomandotry catchdaquelemtodo.Aprocuraporumtrycatchapropriadopropagadaatopontoemqueh um retorno para o mtodo main, neste caso a execuo do programa ser finalizada, com mensagemdeerroprovidapelaMVJdizendoqueumaexceofoilanadasemquefosseapanhada. Edeversermostradoalgocomo:
Exemplosdeexceesjdefinidasnopacotejava.lang: ArithmeticException:indicasituaesdeerrosemprocessamentoaritmtico,talcomoumadiviso inteirapor0.Adivisodeumvalorrealpor0nogeraumaexceo(oresultadoovalorinfinito). NumberFormatException: indica que tentouse a converso de uma string para um formato numrico,masseucontedonorepresentavaadequadamenteumnmeroparaaqueleformato. umasubclassedeIllegalArgumentException; IndexOutOfBounds:indicaatentativadeacessoaumelementodeumagregadoaqumoualm dos limites vlidos. a superclasse de ArrayIndexOutOfBoundsException, para arranjos, e de StringIndexOutOfBounds,parastrings. NullPointerException:indicaqueaaplicaotentouusarumarefernciaaumobjetoquenofoi aindadefinida. ClassNotFoundException:indicaqueamquinavirtualJavatentoucarregarumaclassemasno foipossvelencontrladuranteaexecuodaaplicao.
Java
89
8.12. Exerccioscomplementares
01)Oqueumaclasseexclusiva?Dumexemplo. 02)Paraqueservemospacotes? 03)Definaedigaparaqueserveotratamentodeexceesemjava. 04)Descrevaemumprogramacomofuncionaotratamentodeexceesemjava. 05)Faaumprogramaemjavaqueutilizeasclausulastry{}catch(){}ethrowsnotratamentode algumaexceoquepoderocorrer.
Java
90
Java
91
9.1.1. Declaraoeinicializandovetor
Exemplo01:
Exemplo02:
Exemplo03:
Exemplo02:
Java
92
Novetorrepresentadoacimatemos,porexemplo,armazenadono ndice2ovalor9.3.Note que, comodeclaramosum vetor com 10 posies, os ndicesvariam de 0a 9. Mas, resta uma dvida:como referenciarasposiesdo vetorearmazenardados nas mesmas? Asintaxepara utilizarumaposiodovetor:nome_do_vetor[ndice];
9.1.3. Atributolength.
TodovetoremJavapossuioatributolengthquedefineoseunmerodeelementos.Esseatributo podeserusadaporqualquerprogramaemjava.
Agoravamosanalisaroresultadodessecdigoacima:
9.1.4. Construodearraysmultidimensionais.
Os arrays multidimensionais so simplesmente arrays com outros arrays. Portanto, um array bidimensionaldetipoint,naverdade,serumobjetocomotipodearrayint(int[]),emquecada elementodessearrayfarumarefernciaaoutroarrayint. Matrizes multidimensionais so matrizes de matrizes com mesmo tamanho. Ficou complicado? Entoobserveafiguraabaixo.
Java
93
Oexemploabaixodeclaraeconstriumarraybidimensionaldetipoint.
Abaixomostradooresultadodofragmentodecdigodoprogramaacima:
Java
94
conceitodevetor?.Naverdade,vetorumtipoespecialdematriz.Dizemosquevetor umamatrizunidimensional.Ouseja,enquantoovetortemapenasumadimenso,amatrizpodeter tantasdimensesquantasforemnecessrias.Mas,nestecursotrabalharemossemprecommatrizes deduasdimenses.Assim,nestetexto,semprequenosreferirmosamatrizes,estaremos falando de matrizes bidimensionais. Para facilitar o entendimento, a Figura 34 apresenta uma matrizcapazdearmazenarduasnotasdeumaturmadecincoalunos.
Nota:SuponhaqueoprimeiroalunodalistadechamadadeumaturmasejaoAndreosegundo sejaoBruno.Assim,suponhaqueamatrizdaFiguraacimaestejaarmazenandoasnotasdessa turma.AnotadoAndr(ndice0nadimensodealunos)naprimeiraprova(ndice0nadimenso denotas)foi7.8.JanotadoBruno(ndice1nadimensodealunos)nasegundaprova(ndice1 nadimensodenotas)foi5.3. Regraparaarraysmultidimensionais: Soimplementadoscomoarraysdentrodearrays. So criados adicionandose mais um conjunto de colchetes aps o nome do array declarado.
9.1.6. Atribuiodevariveisderefernciaaarray.
Seotipodeclaradoparaoarrayforumaclasse,podeseinserirneleobjetosdequalquersubclasse dotipodeclarado.Porexemplo,seCachorroforumasubclassedeAnimal,entopoderinserir tantoobjetosCachorroquantoobjetosAnimalnoarray. Exemplo01:
Java
95
Nota:NesteexemploforaminseridosquatronovosobjetosAnimalnaheapeosatribuia trsposies(elementos)dendicedoarray.
9.1.7. Capturandodadosdousuriopeloteclado.
UtilizamosaclasseScannerparacapturamosentradasdedadosdousurio,digitadaspeloteclado, aclassemesmaoferecediversosmtodosquepodemserutilizadospararealizaresteservio. lembrarqueaclasseScannerumaclassedaAPIdoJavaeprecisaserimportadaantesdeusla. Osprincipaismtodosquepodemosutilizarsooslistadosabaixo: next()paralerStringdetextos. nextInt()paralernmerosinteiros. nextFloat()paralernmerosreaisounmerosdepontoflutuante. nextDouble()paralernmerosreaisounmerosdepontoflutuantecomdupla preciso. RegraparautilizarmosaclasseScanner: Inicialmente,definimosachamadaaopacotequecontmaclasseScanner:etodosos seusmtodoutilitrios. Definimosumavarivel,denominadasc,quesercriadaapartirdaclasseScannere direcionadaparaaentradapadro:
VejamosnesteprogramadeexemplocomofuncionaaclasseScannernaprtica: Exemplo01:
Java
96
Exemplo02:
Exemplo 03:
Exemplo04:
Java
97
Exemplo:
1Passo:Entovamosprimeirocompilaroprogramaacima.utilizamososeguintecomandojavac seguindodonomedaclasse(ponto).java
Java
98
9.2. Exercciosdefixao.
01)Crieumprogramaquepercorraumarrayde10posieseimprimaoseucontedo. 02)Escrevaumprogramaquesometodososvalorescontidosemumarraydeinteirosecalculea mdia. 03)Desenvolvaumprogramaquedadoumarrayde10nmerosinteirosmultipliqueoprimeiro elementopeloseguinte,oresultadodeveentosermultiplicadopeloprximoelementoatque todososelementossejampercorridos.Imprimaovalorfinal. 04)Faaumprogramaqueinvertaasposiesdeumarraycom5elementos. 05)DefinaumaclassechamadaArray1. Estaclassedeverconterapenasomtodomain. Dentrodomtodomaindeclareumavarivelarrayinteirachamadadadoscom6elementos e,usandouminicializadordearray,inicializeacomosvalores1,4,9,16,25,36. Emseguida,utilizeumloopforparaimprimirosvaloresdecadaumdesteselementos.A sadadoseuprogramadeverseraseguinte: Oelementodendice0vale1. Oelementodendice1vale4. Oelementodendice2vale9. Oelementodendice3vale16. Oelementodendice4vale25. Oelementodendice5vale36.
Java
99
9.3. Exercciosresolvidos
01Implementeumprogramaquemostrenatelaasomadosonzeprimeirosnmerosprimos.
Resultado do programa:
Java
100
9.4. Exercciosproposto.
01 Implemente um programa que recebe um nmero de 1 a 7 e imprime o dia da semana correspondente. 02Altereoprogramadoexerccioanteriorparaficarrecebendoonmerodentrodeumlao enquantoonmerofordiferentede0(zero). 03Implementeumprogramaquereceberepetidamenteumnmerode1a12,enquantoesse nmerofordiferentede0(zero),eimprimeomscorrespondente. Quando o nmero estiver fora do intervalo permitido, a mensagem ms invlido dever ser exibida. 04Escrevaumlaowhilequeexecute20vezes,imprimindoovalordavarivelxqueinicialmente estcomvalor10.Convertaestelaoparaumdowhile. 05Escrevaumprogramaqueimprimanatelaasomadosnmerosmparesentre1e30ea multiplicaodosnmerosparesentre1e30. 06Escrevaumprogramaquepercorradoislaosde0a10,uminternoaooutro,imprimindoos contadores,equandoestesforemiguais,oprogramadevepassarprximainteraodolaomais externo,casocontrrio,deveimprimirosvaloresdoscontadoresdosdoislaos. 07Desenvolvaumprogramaquesolicitaaousurioumnmerointeirodenomximo4dgitos. Invertaessenmero. 08Desenvolvaumprogramaquedadoumnmerointeirooprogramainformeseomesmoum nmeroprimo. 09)Faaumprogramaquecalculeoprodutoescalardedoisvetoresdedouble,isto,multiplique cadaelementopeloseurespectivonooutrovetoresomeosresultados. 11) Utilizando a classeScanner, j apresentada em mdulos anteriores, faa um programa que permitaousurioefetuaraentradade10nmerosquaisquer.Ordeneestesnmerosutilizandoa classeArrayseimprimaoresultado. 12)Faaumprogramaquerecebaumparmetroqualqueratravsdomtodomaineinformeao usurioatravsdeumacaixadedilogoqualfoioparmetropassado. 13)Crieumprogramaquemostreumdilogo,informandoquenoexistemparmetros,casono sejapassadonenhumparmetroatravsdalinhadecomando. 13)UtilizandoaclasseScannerfaaumprogramaquesoliciteaentradade10nmerosinteiros, logoapssoliciteaentradademais5nmerosinteiroscompareosnmerosobtidoseverifiqueseo segundovetorestcontidodentrodoprimeiro. 14)UtilizandoaclasseScannerfaaumprogramaquesoliciteaentradade10nmerosinteiros, verifiqueafreqnciadeocorrnciadecadanmeronovetor. 15) Crieumprogramaquerecebacomoparmetrodeentrada16valores,coloqueosemuma matriz4x4efaaatransposiodosvalores. 16)Desenvolvaumprogramaquereceba10parmetrosporlinhadecomando,invertatodasas posieseimprimaoresultado. 17)Desenvolvaumprograma,utilizandoaclasseScanner,queobtenha10valoresdeentradae verifiqueseelesformamumaprogressoaritmtica. 18)Desenvolvaumprograma,utilizandoaclasseScanner,queobtenha10valoresdeentradae identifiqueomaiorvalor,omenoreadiferenaentreosvalores. 19)Faaumalgoritmoparaordenarumvetordaseguinteforma,oalgoritmoidentificaomaior valor e o coloca na ltima posio livre de um outro vetor. Na prxima iterao este valor descartado,repetindoatnosobraremmaisvalores.
Projeto Ejovem Mdulo II
Java
101
20)Recebacomoentradadousurioumnmeroeumexpoente.Calculeestenmeroelevadoao expoente.Faatrsversesdesteprograma: a.Useumadeclaraowhilepararesolveresteproblema b.Useumadeclaraodowhilepararesolveresteproblema c.Useumadeclaraoforpararesolveresteproblema 21)CriarumarraydeStringsinicializadocomosnomesdossetediasdasemana.Porexemplo: Stringdias[]={"segunda","tera","quarta","quinta","sexta","sbado","domingo"}; Usandoumadeclaraowhile,imprimatodoocontedodoarray.Faaomesmoprogramaparaas declaraesdowhileefor. 22)EscrevaumprogramaemJavaquecalculaeimprimenatelaosalrioproporcionaldeum funcionrioquetrabalhouapenasNdiasnummsde22diasteis.Onmerodediastrabalhados bemcomoosalriointegraldofuncionriodevemserlidosdoteclado.Oresultadodeveserum nmeropontoflutuante. 23)Escreva umprogramaemJavaqueleiarepetidamenteumnmerodotecladoatqueseja digitado o nmero zero (0) e determine se o nmero lido perfeito ou no, imprimindo o resultado.Umnmeroditoperfeitoquandoigualasomadosseusdivisoresmenoresdoqueele, porexemplo,6perfeito,umavezque6=3+2+1. 13Faaumprogramaquecontenhaummenucom4opes: 1calcularofatorialdeumnmerodado 2calculararaizquadradade3nmerosdados 3imprimiratabuadacompletade1a10 4sairdoprograma
Java
102
Captulo10. ClassesString,Math,System.
10.1. Utilizao da classe String e seus mtodos. 10.1.1. A classe String.
AclasseStringrepresentaumconjuntodecaracteresUnicode.Eladeclaradacomofinale, portantonopodeserestendida.Istopreservaestetipodedado,reforandosuaimutabilidadee assegurandoqueumaStringsempreserumaString(elesdecidiramquevocnopodeherdarde char,nemdedoubleenemdeString,almdediversasoutras).
10.1.2. ComoDeclararumobjetoString?
AprimeiracoisaquetemosqueentenderqueaclasseStringimutvel.Masoquequerdizer imutvel?exatamenteoqueapalavradiz. Imutvel,isto,nomuda,seuestado nicoe imodificvel.QuandocriamosumobjetodotipoString,estamosnaverdadecriandoumobjetoque jamais ter seu valor modificado, porm, sua referncia pode ser compartilhada com demais variveis.Assim,podemospassarestevalornicoeimutveldenossastringcriadaparadiversas outrasvariveisderefernciaastrings.Paraentendermosmelhor,vamoscomearcomumsimples. exemplo01:
Oqueestacontecendoaqui?AVMcrioumaisumobjetoStringnamemria,comoseguintevalor java.
Java
103
AgoravamosinseriraStringsumnovovalor=show!.Oobservequesercriadooutroobjeto noheapeavarivelderefernciaapontarparaessenovoobjeto.
10.1.3. MtodosdaclasseString:
AclasseStringdefineumasriedemtodosparamanipularasfuncionalidadesstrings,taiscomo: Obteronmerodecaracteresemumastring: intlength(); Exemplo01:
Java
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);
Java
105
10.1.5. UtilizaodaclasseSystemeseusmtodos.
10.1.5.1. System.in : System.in um InputStream que normalmente ligada entrada de teclado do console programas.System.innousadocomfreqncia,poisosdadosnormalmentepassadaparaum aplicativo Java de linha de comando via linha de comando argumentos, ou arquivos de configurao.Nasaplicaescominterfacegrficaacontribuioparaaaplicaodadaatravsdo GUI.EsteummecanismodeentradaseparadadoJavaio. 10.1.6. System.out : System.out um PrintStream . System.out normalmentegeraosdadosquevocescrever paraelaparaoconsole.Issomuitasvezesutilizadoapartirdeapenasprogramasdeconsolecomo ferramentas de linha de comando. Esta tambm muitas vezes utilizado para imprimir as declaraes de depurao de um programa (embora possa no ser indiscutivelmente o melhor caminhoparaobterinformaesdedepuraodeumprograma). 10.1.7. System.err : System.err um PrintStream , System.err funciona como System.out exceto que normalmenteutilizadoapenasparatextosdeerrodesada.Algunsprogramas(comooEclipse)vai mostrarasadaparaSystem.errcomtextoemvermelho,paratornlomaisbvioqueotexto deerro.
Java
106
10.2. Exerccioscomplementares.
01)Escrevaumprogramaquecalculeeapresenteafrequnciadesadadecada facedeumdado,lanado6000vezesconsecutivas.Afrequnciadesadadecadafacedeveser armazenadanumarrayeapresentadanofinal.Dicauseomtodorandam()daclasseMathpara facilitarseutrabalho. 02.Escrevaumprogramaquegereumarrayden.osinteiros(entre0e100)eordeneestearraypor ordemcrescente. 03) Crie uma classe que representa um funcionrio, registrando seu nome, salrio e data de admisso. Em seguida, crie uma classe que represente um departamento de uma empresa, registrando o nome e os funcionrios que nele trabalham (para uso de vetores, considere um mximode100funcionrios).Porfim,crieumaclassequerepresentaumaempresa,registrando seunome,CNPJedepartamentos(considereummximode10departamentos).Faaumprograma que: a)Crieumaempresa; b)Adicioneaestaempresaalgunsdepartamentos; c)Adicioneaosdepartamentosalgunsfuncionrios; d)Daumentode10%atodososfuncionriosdeumdeterminadodepartamento; e)Transfiraumfuncionriodeumdepartamentoparaoutro. Obs.: esperado que seu cdigo seja bem encapsulado. Por exemplo, para adicionar um departamentoemumaempresa(ouumfuncionrioaumdepartamento),nosedeveacessaro vetor(oulista)dedepartamentosdiretamente,massimterummtodonaclassequerepresentaa empresaparaadicionarumdepartamento. 04) Crie uma classe para representar uma contacorrente, com mtodos para depositar uma quantia,sacarumaquantiaeobterosaldo.Paracadasaqueserdebitadatambmumataxade operaoequivalente0,5%dovalorsacado.Crie,emseguida,umasubclassedestaclasseanterior para representar uma contacorrente de um cliente especial. Clientes especiais pagam taxas de operao de apenas 0,1% do valor sacado. Faa testes com as duas classes e verifique seus resultados. 05)Crieaseguintehierarquiadeclasses: a)Umainterfacepararepresentarqualquerformageomtrica,definindomtodosparaclculodo permetroeclculodareadaforma; b)Umaclasseabstratapararepresentarquadrilteros.Seuconstrutordevereceberostamanhos dos4ladoseomtododeclculodopermetrojpodeserimplementado; c)Classespararepresentarretngulosequadrados.Aprimeiradevereceberotamanhodabasee daalturanoconstrutor,enquantoasegundadevereceberapenasotamanhodolado; d)Umaclassepararepresentarumcrculo.Seuconstrutordevereceberotamanhodoraio.No programaprincipal,criequadrados,retngulosecrculoscomtamanhosdiferentesearmazenenum vetor.Emseguida,imprimaosdados(ladosouraio),ospermetroseasreasdetodasasformas. Projetoorientadaaobjetos
Java
107
Captulo11. Javaeoprojetoorientadoaobjeto
Sealinguagemorientadaaobjetosmuitoprovavelmentevocprecisacriaressesobjetos.Esseo papeldenew.Parapodercriaroobjetonecessriodefinirprimeiroasuaclasse(class)ouasua interface(interface).Javacontmaindadoisoutrostiposespeciais.Umdelesumaclasse especialemqueosseusmembrossoobjetosimutveiseconstantes.OJavadeclaraesteoutrotipo declassecomapalavrareservadaenum.Ooutrotipo,aAnotaodefinidacomoumtipoespecial deinterfaceeasuadeclaraononecessitadenovaspalavrasreservadas)adeclaraofeita com@interfacereaproveitandoapalavrareservadajaexistente. Comoestamosfalandodeorientaoaobjetostemosquetratarherana.Aclassequetemqueser herdada(eportantonopodeserinstanciadadirectamente)ditaabstrata(abstract).Paradizer quehaumarelaodeheranacomoutraclasseusadoextendseparadizerqueaclasse implementaumainterfaceusadoimplements. Todasasclassespertencememalgumpacote.Opacoteaqueaclassepertence declaradocom packageequandoumaclasseutilizaoutraclasseelapodedeclararissocomimporttornandoo cdigomaissimplesdeler.
11.1.1. OqueUML?
A UML umalinguagempadroparaaestruturaodeprojetosdesoftware.Nasuaverso 2.0 aUMLqueumasiglaquevemdotermoeminglsUnifiedModelingLanguage(Linguagemde modelagemunificada)queumaumalinguagemparaespecificao,documentao,visualizao edesenvolvimentodesistemasorientadosaobjetos. A importncia da modelagem dentro do desenvolvimento de um sistema indiscutvel. A modelagemapartecentraldetodasasatividadesquelevamimplantaodeumbomsistema. Somente com o auxlio da modelagem podemos visualizar e controlar o desenvolvimento de sistemasdemaneiraeficaz,identificandoegerenciandoriscos,estipulandoecumprindoprazos, dentro das estimativas de custo. Partindo deste princpio vrias metodologias para o desenvolvimentodesistemasforamcriadas.Asprimeirasmetodologias,classificadascomo metodologiasestruturadas,caracterizamodesenvolvimentodesistemasemtornodeprocedimentos efunes. Muitossistemasaindahojeso desenvolvidos com base em metodologias estruturadas, o que os torna instveis, pelo fatodequeamedidaemque requisitossemodificam(oque acontece com muita frequncia)eosistemacresce, o trabalho de manuteno do mesmosetornacadavezmais difcil. Comaevoluodasmetodologias,avisodedesenvolvimentodesistemaspassouaadotaruma perspectiva diferente. Surgiram ento as metodologias orientadas a objetos, quecaracterizam o desenvolvimento desistemas em torno declasses eobjetos. Estas metodologias tiveram grande aceitaonacomunidadededesenvolvedores,tendoemvistaqueomtodoorientadoaobjetos possibilitavaaconstruodesistemasemtodosostiposdedomniosde problemas, abrangendo todos os graus de tamanho e complexibilidade. O sucesso dos mtodos orientados a objetos foi fator primordial para que o nmero de metodologias criadas sob essa
Java
108
11.1.2. CaractersticasdeProjetoOrientadoaobjetos
Projetoorientadoaobjetosumaestratgiadeprojetoemqueosprojetistaspensamemtermosde coisas,emvezdefunes. 1.Afuncionalidadedosistemaexpressaemtermosdeserviosoferecidospelosobjetos. 2.Objetossoabstraesdomundorealouentidadesdosistemaqueseautogerenciam. 3.Objetossoindependenteseencapsulamrepresentaesdeinformaoeestado. 4. reas de dados compartilhado so eliminadas. Objetos se comunicam por passagem de mensagem. 5.Projetoorientadoaobjetopartedodesenvolvimentoorientadoaobjeto: 6.Anliseorientadaaobjetos:Sededicaadesenvolverummodeloorientadoaobjetododomnio daaplicao.Osobjetosidentificadosrefletementidadeseoperaesassociadascomoproblemaa serresolvido. 7.ProjetoOOsededicaadesenvolverummodeloorientadoaobjetodeumsistemadesoftware paraimplementarosrequisitos.OsobjetosemumprojetoOOestorelacionadossoluodo problemaqueestsendoresolvido. 8.ProgramaoOOrealizaumprojetodesoftwareemumalinguagemdeprogramaoP .O.O,que aceitaaimplementaodiretadeobjetosefornecerecursosparadefinirasclassesdeobjeto.
11.1.3. VantagensdoProjetoorientadoaobjetos
1.Facilidadedemanuteno.Objetospodemserentendidoscomoentidadesindependentes. 2.Osobjetossocomponentespotencialmentereutilizveis.Paravriossistemas,existeumntido mapeamentoentreasentidadesdomundorealparaobjetosnosistema.
11.1.4. NoesdoUsodaUML
umareaquevemseexpandindo continuamente e um padro controlado pelo OMG (Grupo de Gerncia de Objeto). Sua abrangnciavaidesdeamodelagem de sistemas de informao corporativos a serem distribudos a aplicaes baseadas em Web, at sistemas complexos embutidos de tempo real. Para cumprir seu objetivo, a UML permite que seus usuriosmodelemumsistemasobdiferentesperspectivas.
Projeto Ejovem Mdulo II
Java
109
Cada uma destas perspectivas uma abstrao apresentada pordiagramascriados a partir dos recursosoferecidospelalinguagemdemodelagem.EmUML,acriaodestesdiagramasenvolvea identificaodeitensqueformamovocabulriodosistemaeaespecificaodecomoestesitens relacionamseentresi.Emsuma,umdiagramaemUMLumconjuntodeitenserelacionamentos.
11.1.5. FerramentasparaModelagemdeSistemas.
Umadasferramentasmaisutilizadasparaamodelagemdesistemasnomercadodesoftware o famosoeantigo(JUDE)maisqueagorasechama*astah. Queoastah*umeditorUMLleveintegradocom ERD,DFD,CRUDecaractersticasMentemapeamento paradesenvolvedoresdesoftwaretotalmentelivre. Desenvolvedores,analistas,testadoresegerentes podemsecomunicarunscomosoutrosdeforma eficazusandodiagramas*astahporquetodosos diagramassoconstantementearmazenadosemum modelo.Almdasediesstandalone",astah*partes"(umaediodeservidorweb)vaiaumentar acomunicao,proporcionandoumavisowebbrowserdodiagramascompartilhadaparaquea equipepodetrocarcomentrioscomoserviosderedesocial.
DBDesigner
110
Captulo12. IntroduoaoDBDesigner
DBDesignerumaferramentadesoftwarelivre,licenciadosobaGPL,desenvolvidapelafabFORCE quetemcomofunocriar,modelar,gerenciaregerarvisualizaogrficadeProjetosdebancode dados. Sua criao baseada em Delphi e Kylix com verses para Linux e Windows tendo compatibilidadecomprodutoscomoOracle'sDesigner,IBM'sRelationalRose,CAErwineMySql. PorPadro,osarquivossalvosnoDBDesigner,temoformado.xml umformatotambmusado paranormalizaodebancosdedados.Aextensoxml,significaextensiveMarkupLinguage, ouseja,linguagemdecriaoextensiva.UmalinguagemdemarcaorecomendadapelaW3C.Este formato reconhecido tando pelo MYSQL quanto pelo DBDesigner, uma das causas da sua compatibilidade.
12.1. InstalaoeConfigurao
Nositedodesenvolvedordoprograma:http://www.fabforce.net/podemosencontrarodownload. A verso que iremos trabalhar neste mdulo a verso 4 . Com o download feito, iremos descompactar o arquivo tar.gz feito e fazer a execuo do programa pelo cone executvel DBDesigner4ouentrarnapastadoterminaledigitar./DBDesigner4. OBS:noobrigatrioteralgumbancodedadosinstaladopararodaroDBDesigner,pormcomo passardasaulas,iremosusaroMYSQLeexportaremososmodelosgeradosparaoMySql,ento importantesuainstalaotambm.
12.1.1. PossveisproblemasdecompatibilidadecomLinux.
NoLinux,algunserrospodemsergeradosporfaltadealgunsarquivos.. Para solucionar o problema, precisamos do arquivo chamado libborqt6.9qt2.3.so ou verso superior.Coloquedentrodapasta#/usr/lib/.
Captulo13. InterfacedoDBDesigner
DBDesigner
111
Captulo14. CriandotabelascomDBDesigner.
Porserumprogramademodelagemdebancodedados,veremoscomocriaregerenciar tabelasdeumamaneiramaisfcileaprenderalgunsconceitosnovosparanosajudarcomprojetos commaiscomplexidadeembancodedados.
14.1. CriandoTabelas
NaBarradeferramenta,temumbotochamado:NewTable.Ou podemosusaratecladeatalho:CTRL+T.Emseguidadaremosumclique nopalcoprincipal.
NomedaTabela NomedaColuna
EspecificaotipodaTabelaCriada.
Marcadoresdetipodecolunaex:USENINGZEROFILL
Opesdeconfiguraodatabela
Especificaonomedaschavesestrangeiraseseutipo
Exerccio
ProcureCriaralgumascolunascomelescomo:
DBDesigner
112 PRIMARYKEY INTEGER VARCHAR INT INT NOTNULL/USENING NOTNULL USENING USENING
Temosentoumatabelacomesteformato:
IdentificaodeChaveprimria
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.
DBDesigner
113
Captulo15. RelaoentreTabelas.
ComProjetosderelacionamentodetabelas,podemosdeixarasconsultasmaisintuitivas, commaiordesempenhoemaisinteligente,estemtodotambmusadoemempresasquetemuma arquiteturagrande,queprecisasersimplificada.
15.1. Conceito
At ento, nos mdulos passados criamos vrias tabelas diferentes. Tabelas de alunos, tabelasdeprofessores,tabelascomdadosdeumadeterminada escola, pormelassotabelas distintassemrelao.Entocomopodemosfazerainteraoentreessastabelas?Vamosimaginaro seguinteexemplo: UmadeterminadaEscolapodetervriosprofessoreseumdeterminadoprofessorpodeter vriosalunos.Jnonossoexemplo,umdeterminadoalunonopodertervriasescolas.Paraficar maisfcildeentender,observeaimagemabaixo:
15.2. StoregeEngine.
Antesdecomearmos ausarcomandosdo MySql pararelacionamentoentretabelas,temosque conhecer o conceito de Storege Engine. Traduzindo este termo ns temos motor de armazenamento. Ele responsvel por dar um formato as tabelas criadas. Depois que denominamosumformato,atabelairherdarvriaspropriedadespreviamentedefinidas.Existem vriasengines,pormiremosestudaremparticularaMYISAMeINNODB.
DBDesigner
114
15.2.1. MYISAM
Pormuitotempoestaenginefoiusadocomopadro,astabelascomessetipodeenginegeram respostacommelhordesempenhopelofatodesermaissimples.
15.2.2. InnoDB
Usadacomoenginepadroapartirdaverso5.5domysql,elapossuicontrolesmelhoradosque garantemaintegridadedobancopormesserecursoafetaodesempenhodasconsultas.
Resumindo:Noexisteenginemelhor,oqueexisteanecessidade,comoiremos tratarcomrelacionamentoentretabelas,iremostrabalharcomaengineinnoDB.
Captulo16. CONSTRAINTS
CONSTRAINTsocomandosquelimitamumacertacolunaoutabela.podeserusadonaInstruo CREATETABLE edaInstruo ALTERTABLE.Algumasinstrues,jconhecemosoutrasiremos conheceragora.
16.1. NOTNULL
Especificaqueacolunanopodecontervaloresnulos.
16.2. PRIMARYKEY
Especificaacolunaqueidentificaunicamenteumalinhadatabela.Acolunaidentificadadeveser definidacomoNOTNULL.UmINDEXinseridoautomaticamentenestacoluna.
16.3. UNIQUE
Especificaqueosvaloresnacolunadevemsernicos.EsteCampopoderserNulo.
16.4. FOREIGNKEY
Especificaqueosvaloresnacolunadevemcorresponderavaloresemumacolunadechaveprimria oudechavenicareferenciada,ouquesonulos. Cadainstruoserusadodeacordocomasnossasnecessidades,nosexemplosderelacionamento entretabelas,iremosverasinstruesnaconstruodenovastabelas.
Captulo17. Tiposderelaes.
17.1. RelacionamentosUmParaMuitos,ConhecidocomoOnetoMany.
Estetipoderelacionamentoomaisusadoentre2tabelas.Representamoscomorelao:1:n.A tabelarelacionadairganharumachaveestrangeiraprimaria.
Exemplo:
Projeto Ejovem Mdulo II
DBDesigner
115
Cada Escola poder ter vrias turmas. As turma sero cadastradas de acordo com as escolas existentes,simbolizadopelachaveestrangeira.Entotemos1Escolaquepoderternturmas, gerandoarelao1:n.
Turma1
Cada turma ter uma coluna com chave estrangeirada Escola. ex:escola_id
Escola
Turma2
Turma3
NonossocasopodemosdizerqueotermoEscolaatabelaPaipoisapartirdela,temosvrias outrasturmas. Otermo Turma atabela filha,poisirreceberumachaveestrangeirapara montararelao,nonossocasoachaveestrangeiraserumacolunaamais,elaserchamadade escola_id. Comoissoacontecenaprtica?Arepostaencontrasenosprximostpicos.
17.1.1. CriandoRelao1:nusandoMySQL.
VamosanalisaromodeloqueserfeitoatravsdecomandosSQL.
ImaginequevocirgerenciarasescolaspublicasdoCear.Representadonatabelaescolans precisamosdeumaidentificaonicaparacadaescolarepresentadocomoachaveprimriaide onomedasescolas.Temostambmatabelaturmas.Nelaprecisamosteronumerodasalaea sriequeestaturmarepresenta.Ex:Primeiroano,SegundoAno.Parafazerarelaoprecisamosde uma coluna que ir fazer relao com a tabela escola. Para isso criamos a coluna chamada: escola_id.Porteressacaracterstica,podemosdizerqueescola_idumaChaveEstrangeira. IremosveroscomandosnecessriosparafazeressarelaonoMYSQL. 1Passo:EntrarnoterminaldoLinuxeacessaromysql.
$mysqlu<usuario>p <senha>
2Passo:Criarumbancodedadosespecificoparanossoestudo: mysql>CREATEDATABASE`bancoEscolas`; mysql>usebancoEscolas; 3Passo:CriaratabelaescolasemalteraesdeacordocomnossoestudodeMYSQL.
mysql>CREATETABLE`escola`(`id`INTNOTNULLAUTO_INCREMENTPRIMARY
Projeto Ejovem Mdulo II
DBDesigner
116
1mysql>CREATETABLE`turmas`( 2idINTNOTNULLAUTO_INCREMENT, 3escola_idINTNOTNULL, 4numSalaINTNOTNULL, 5serieVARCHAR(255), 6PRIMARYKEY(id), 7INDEXturmas_chEstrang(escola_id), 8FOREIGNKEY(escola_id)REFERENCESescola(id)ONDELETECASCADE 9)ENGINE=INNODB; Percebaqueescola_idfoicriadacomasmesmaspropriedadesqueachave primariaiddatabelaescolaEssepadroterqueseraplicadoparaTODASas relaes.Vejaabaixo: Id INT NOTNULL escola_id INT NOTNULL
AmbasascolunassodoTipoInteiroenoNulo
Comopodemverno 4Passo,mostramosacriaodeumatabela.Oquetemosdenovidadeso apenasasultimas2linhasquetratasobreorelacionamento.Analisandoessas2linhastemos: INDEXturmas_chEstrang(escola_id): Nestalista,estamosindicandoqueescola_idseruma refernciaparaconsultas.Issoirotimizarnossasconsultas. FOREIGNKEY(escola_id)REFERENCESescola(id): Essalinhairfazerarelao, queremos dizerqueescola_idfazREFERENCIAcolunaiddatabelaescola. Traduzindoessecdigonstemos: CHAVEESTRANGEIRA(escola_id)REFERENCIA(ID)databelaescola. OtermoONDELETECASCATEpodesertraduzidoporDeletaremcascataeledefineque,caso sejadeletadoumaescoladatabelapai(tabelaescola),todasasturmasquetivercomoreferenciaa escolatambmserdeletanatabeladasturmas.OmesmoconceitoaplicaseparaAtualizaoem ONUPDADECASCATEquepodesertraduzidoporAtualizaremcascata.
17.1.2. InserindoregistrosSQLcomRelacionamentoOnetoMany.
1Passo:Inserindoregistrosnatabelaescola:
mysql>INSERTINTO`escola`VALUES(1,'LiceudeMessejana'); mysql>INSERTINTO`escola`VALUES(2,'FigueiredoCorreia');
DBDesigner
117
2Passo:Inserindoregistrosnatabelaturmas:
17.2. UmparaUmrelacionamentos,ConhecidocomoOnetoOne.
Estetipoderelacionamentotemimportnciasparticulares,comoisolar partedeumatabelapor motivosdeseguranaoudividirtabelascomvriascolunas.Tambmchamadoderelacionamento 1:1.Ondeumachaveprimariasecomunicacomumaoutrachaveprimriaemumaoutratabela comobjetivodefazerumareferenciadecomplementao.sendoassim,pormotivosdesegurana, nenhumregistrodachaveprimariadatabelapaipoderserdeletadaoualterada,poisoregistro sempreterumareferenciaparaoutrastabelas. Exemplo: Imaginequetemosumclientecadastradoemumsite.Algunsdadosdele,sopblicos,comonome esobrenome,pormestacontatemalgunsdadosimportantesparausoprivado,comosenhada conta,senhasdealgunsemailsporexemplo.Ento,pormotivosdeseguranacriamosumanova tabelanovacomrelao1:1paraprotegerosdadossecretosdele(a).
17.2.1. CriandoRelao1:1usandoMySQL.
1Passo:EntrarnoterminaldoLinuxeacessaromysql.
$mysqlu<usuario>p <senha>
DBDesigner
118
1mysql>CREATETABLEdadosPrivados( 2IDINTNOTNULLAUTO_INCREMENT, 3dadosLivres_IDClientesINTNOTNULL, 4sMsnINTNULL, 5sContaINTNULL, 6SBancoINTNULL, 7PRIMARYKEY(ID,dadosLivres_IDClientes), 8INDEXchave_estrangeira(dadosLivres_IDClientes), 9FOREIGNKEY(dadosLivres_IDClientes)REFERENCESdadosLivres(IDClientes) 10ONDELETENOACTION 11ONUPDATENOACTION 12)ENGINE=INNODB;
Vamosanalisaralinha8atalinha11paraentenderacriaodestatabela. 7 PRIMARY KEY(Sede_ID,Produto_ID) : Nesse momento estamos criando uma CHAVE PRIMARIACOMPOSTA.OndemaisdeumachavePrimriaencontrasenamesmatabela. 9FOREIGNKEY(dadosLivres_IDClientes)REFERENCESdadosLivres(IDClientes) PercebaqueachaveprimriadatabeladadosLivres_IDClientes,fazreferenciaumaoutrachave primriaIDClientesdatabeladadosLivres. 10,11ONDELETENOACTIONeONUPDATENOACTION. EssaslinhasiroimpedirquesejadeletadoeatualizadoqualquerregistrodatabelaPai,seoregistro tiveralgumaregistroderefernciacomatabelafilho.Iremosentendermelhor,quandoiserirmos alguns registros e analisarmos o comportamento desses registros.. Veja abaixo como Inserimos registrosenvolvendoessetipoderelacionamento.
17.2.2. InserindoregistroscomRelacionamentoOnetoOne.
1Passo:InserindoregistrosnatabeladadosLivres:
DBDesigner
119
2Passo:InserindoregistrosnatabeladadosPrivados:
mysql>INSERTINTO`dadosPrivados`VALUES(1,1,123456,5555) mysql>INSERTINTO`dadosPrivados`VALUES(2,2,123321,123123,312321)
TabelaPai(dadosLivres)
Tabelafilha(dadosPrivados)
Perceba que o cliente Fabrcio e Jucimar, tm registros da tabela dadosPrivados por relacionamento,adicionandoocomandoONDELETENOACTIONeONUPDATENOACTION, estes2registrosnopoderoserdeletadosoualterados.ParafazeradevidaalteraonatabelaPai, teremosquelimparqualquerregistroquetiverfazendorelaoaelanatabelafilha. ExerccioRpido: 1Emumdeterminadosite,existeumcadastrodemembros.Dependendodocargodessemembro nosite, omembropodervisualizaralgunscontedos.Oseudeverapenasmontarumatabela quecontenhaosdadosprincipaisdessemembro(nome,email,login,senha,endereo)eemuma outra tabela protegida contento um cdigo do tipo de membro: (1Autor,2Editor,3Gerente,4Administrador). 2Emumdeterminadobancodedadosexisteumatabelacomvriosregistroscomo:(nome,idade, RG,CPF,email,Cidade,Estado,Pas,Rua,umacolunaparafumanteounofumanteeEstado Civil).Procuredividirosregistrospessoaisdosregistrosdelocalizaodapessoaemumaouta tabela. 3imaginequeemumadeterminadaescolatcnica,1coordenadorsejaresponsvelapenaspor1 determinadocursoqueaescolaoferece.Faaumarelaoentretabelasqueserresponsvelpelo gerenciamento.
DBDesigner
120
17.3.1. CriandoRelaon:musandoMySQL.
1Passo:EntrarnoterminaldoLinuxeacessaromysql.
$mysqlu<usuario>p <senha>
2Passo:Criarumbancodedadosespecificoparanossoestudo: mysql>CREATEDATABASE`bancoEstoque`; mysql>usebancoEstoque; 3Passo:CriaratabelaSedesemalteraesdeacordocomnossoestudodeMYSQL.
DBDesigner
121
4Passo:CriaratabelaProdutocomorelacionamento:
1mysql>CREATETABLESede_em_Produto( 2Sede_IDINTNOTNULL, 3Produto_IDINTNOTNULL, 4QuantidadeINTNOTNULL, 5PRIMARYKEY(Sede_ID,Produto_ID), 6INDEXCh_estrang_SEDE(Sede_ID), 7FOREIGNKEY(Sede_ID)REFERENCESSede(ID), 8INDEXCh_estrang_PROD(Produto_ID), 9FOREIGNKEY(Produto_ID)REFERENCESProduto(ID)) 10ENGINE=InnoDB;
Vamosanalisarasprincipaislinhasqueindicamessetipoderelao. 5 PRIMARY KEY(Sede_ID,Produto_ID) : Nesse momento estamos criando uma CHAVE PRIMARIACOMPOSTA.ComessecomandousaremosascolunasSede_IDeProduto_IDcomo umaidentificaonica,ondepoderrepetirocdigodaSedeoudoproduto,pormnopoder repetiramesmarelaoentreaSedeeoprodutonestatabela.Iremosentendermelhordepoisde inserirregistrosnessatabela. 6INDEXCh_estrang_SEDE(Sede_ID): Nestalista,estamosindicandoqueSede_idseruma refernciaparaconsultas.Issoirotimizarnossasconsultas. 7FOREIGNKEY(Sede_ID)REFERENCESSede(ID):EstamoscriandoarelaoentreSede_ID databelaSede_em_ProdutocomIDdatabelaSede. Traduzindoessecdigonstemos: CHAVEESTRANGEIRA(SEDE_ID)REFERENCIA(ID)databelaSede. 9 FOREIGN KEY(Produto_ID) REFERENCES Produto(ID) : Estamos criando a relao entre Produto_IDdatabelaSede_em_ProdutocomIDdatabelaProduto. Traduzindoessecdigonstemos: CHAVEESTRANGEIRA(Produto_ID)REFERENCIA(ID)databelaProduto.
17.3.2. InserindoregistrosSQLcomRelacionamentoManytoMany.
1Passo:InserindoregistrosnatabelaSede:
DBDesigner
122
2Passo:InserindoregistrosnatabelaProdutos:
Sede
ID=1/nome='SPMERCADO1' ID=2/nome='SPMERCADO2' ID=3/nome='SPMERCADO3'
ExercciosRpidos:
Produto
ID=1/nome='Leite'
ID=2/nome='Caf'
ID=3/nome='Sabonete'
1ImaginequevoctemumaumalistadeescolasPblicasnoCear,existeumatabelacom algunsdadosdaescolacomo:(nome,cidade,bairro,rua,numero,etc...)eumaoutracomdados dosprofessores:(nome,idade,matria,telefone,email,etc...)Algunsprofessoresdoaulaem maisdeumaescolaeemcadaescolatervriosprofessores.Comessasinformaesmonteuma tabelacomorelacionamentodedadosn:m. 2UmaempresadeRoupastemvriaslojasespalhadasPeloBrasil,emcadalojaexisteseusdados eumalistadeProdutosquepoderteremumlojaounodeacordocomaaalimentaodedados pelo empresrio... Seu Dever fazer um relacionamento de tabela relacionando Lojas com os Produtosqueaempresapodeoferecer.
DBDesigner
123
17.4. ConsultasSQLEnvolvendoRelacionamentoUsandoINNERJOIN.
Criamosnossorelacionamentoentretabelas,vamosagoracriarregistroserealizarconsultasno nossobancodedados UsaremosumaconsultaespecialincluindoocomandoINNERJOIN.Estecomandoexigequehaja umregistroquecorrespondaarelaonasduastabelas.Deacordocomonossoarelao temos escola_iddatabeladeturmascomiddatabelaescola.Observemocomandoabaixo:
SELECT`turmas`.*FROM`turmas`INNERJOIN`escola`ON`turmas`.`escola_id`= `escola`.`id`ORDERBY`turmas`.`id`ASC;
Traduzindoessecdigonstemos: SELECIONAR todasascolunasdaTABELA`turmas` UNIDOATABELA `escola` ONDE acoluna escola_id(databelaTurmas) IGUAL acoluna`id`(databelaescola) ORDENADOPOR `id` ASCENDENTEMENTE. Nesse momento fizemos uma consulta de relao entre a coluna `escola`.`id` e `turmas`.`escola_id`.Paravisualizarmosmelhornasada,iremosadicionaracolunareferenteao nomedaescolapararespostafinaldanossaconsultadoMYSQLparagarantindonossarelao entretabelas.
SELECT`turmas`.*,`escola`.`nome`AS`escola`FROM`turmas`INNERJOIN`escola` ON`turmas`.`escola_id`=`escola`.`id`ORDERBY`turmas`.`id`ASC;
Assim, quando escola_id encontrasecom o valor 1 oseu registroir procurara escola que encontrasecomidiguala1quenonossocasoaescola:LiceudeMessejanaouquandotemos escola_idigual2temosonomedaescolareferenteaoidigual2,nonossocaso:Figueiredo Correia.Vejaaimagem:
escola_id=1 escola_id=2
AInstruoINNERJOINfazpartedainstruoJOIN.Existemoutrosmtodosdeconsultacom essa instruo, nossa apostila no ir abordar todas. Caso se interesse, pesquise mais, uma refernciaqueindicamososite:http://dev.mysql.com/lvocencontraroutrasexplicaesdas instruesvistasnaapostilaeoutrasInstruesrelacionadas. ExerccioRpido: Use a Instruo INNER JOIN para realizar consultas especializadas nos exerccios anteriores. Exerccios da locadora, loja de roupas, membros do site. As colunas selecionada sero da sua escolha.
LiceudeMessejana FigueiredoCorreia
DBDesigner
124
18.1. Relacionamento1:n,1:1en:menvolvendoDBDesigner.
NoDBDesginerorelacionamentosimples,bastacriarmosas2tabelascomseusrespectivosdados de acordocom a nossa necessidade, em seguida clicarcom os botes de relacionamentos que encontrasenabarradeferramentasaesquerda.Temosento:
19.1. PossveisProblemascomaconexo.
Usando o Linux Educacional ou o Ubuntu com o bando de dados Mysql. Possivelmente encontraremosalgunsproblemasdecompatibilidadequeprecisamserarrumados.Precisamosdo arquivo chamado libsqlmda.so.4.70 ou uma verso superior e coloclo dentro da pasta #usr/lib/ Comoarquivoinstaladoiremoscriaraconexocomobancodedados.
Projeto Ejovem Mdulo II
DBDesigner
125
19.2. Conexo.
Podemos usar um banco de dados existente ou criarmos um novo banco de dados para nossa conexocomoDbdesigner. PrimeiroPasso:NoMenuPrincipaliremosclicar emDataBase>ConnecttoDatabase.
IremosVerajanelaAbaixo:
Inicialmentenotemosnenhumaconexoconfigurada,parainiciarumanovaconexocliqueem NewDatabaseConnect.Apareceraseguintejanela:
NomedaconexoparaDBDesigner
Endereodaconexo:Nonosso Caso:Localhost
NomedoBancodedadosexistente
UsuarioeSenhadoMysql
Descrioparaconexo
Driverdeconexoparabancode dados
Assimcriamosasconfiguraesbsicasdosistema.Sevocincluialiblibsqlmda.so.4.70 ter
Projeto Ejovem Mdulo II
DBDesigner
126
alteraralgumasconfiguraesavanadas.NaAbaAdvenceddessajanelatemos:
AlterarparagetSQLDriverMySQL Obs.:y(Minusculo)
AlterarLibraryNameeVendorLib para:libsqlmda.so.4.70 (Mesmo arquivo que foi incluso em usr/lib) Obs.: Altear a verso caso a verso da Lib foi superior ao da apostila
Feitoasconfiguraes,iremosclicarem OK parafinalizaraconfigurao.Aseguir,ajanelade Seleao de Conexo com banco de dados Ir aparecer com os dados criamos na configurao, apenas clicaremos na nova conexo criada e em seguida Connect. Veja a imagem da prxima pgina:
Podemosteroutrasconexescomoutrosbancosdedados,apenascriandoumanova conexo.
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
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:
OpesdosTiposde importaodastabelas
DBDesigner
128
Captulo20. CriandoConexocomMysleJava
Nestetutorialiremosaprenderumpoucosobrecomointeragirojavacombancodedados,ser apresentadotambmumaparaconexocomosbancodedadosealgumasinterfacesdaAPIdojava demonstrandonaprticaumaconexodeumaplicativojavacomSGDB(gerenciadordebancode dado)mySQL.
20.1. OqueaAPIJDBC?
ApartirdaAPI(InterfacedeProgramaodeAplicativos)JDBCumaAPIdoJavaaqualpodemos utilizlaparaacessarqualquertipodedadostabulares,especialmenteosdadosarmazenadosem embancosdedadosrelacionais. OjavaediferentesdelinguagensdeprogramaocomoPHP,nosuportaoacessoabancode dadosdiretamente,eparaissoeleusaumaAPIparafazeresseservio.OJDBCincluiquatro componentesbsicoqueso: IAAPIJDBCAAPIJDBCforneceacessoprogramticoaosdadosrelacionaisapartirda linguagemdeprogramaoJava.UsandoaAPIJDBC,osaplicativospodemexecutarinstrues SQL,obterresultados,epropagaralteraesdevoltaaumafontededadossubjacentes.AAPIJDBC tambmpodeinteragircomvriasfontesdedadosemumambientedistribudoheterogneo. IIAAPIJDBCpartedaplataformaJava,queincluioJavaStandardEdition(JSE)eJava EnterpriseEdition(JEE).OJDBC4.0APIestdivididaemdoispacotes:java.sqlejavax.sql.Ambos ospacotesestoincludasnoJavaSEeplataformasJavaEE. IIIDriverJDBCManagerAclasseDriverManagerJDBCaquedefineosobjetosquepodem conectaraplicativosJavaparaumdriverJDBC.DriverManagertemsidotradicionalmenteaespinha dorsaldaarquiteturaJDBC.muitopequenoesimples. IVAextensopadroepacotesjavax.namingjavax.sqlpermitemquevocuseumDataSource registradocomumobjetoJavaNamingandDirectoryInterface(JNDI),serviodenomespara estabelecerumaconexocomumafontededados.Vocpodeusarummecanismodeligao,mas usandoumobjetoDataSourcerecomendadosemprequepossvel. importanteobservarmosquecomoDriverJDBCvocpoderescreveraplicaesJavaque gerenciamessastrsatividadesdeprogramao: 1. 2. 3. Ligaraumafontededados;comoumbancodedados. Enviarconsultaseatualizardeclaraesaobancodedados. Recuperareprocessarosresultadosrecebidosdobancodedadosemrespostaasuaconsulta
20.2. ParaqueserveoDriverJDBC?
importantesabermosqueexistemquatrotiposdedriversJDBC,masnesteartigovamosusaro tipo4porseromaisrecomendado.Issoporqueelejfaztodaconversoparaaschamadas diretamentenoprotocolodobancodedadosemquesto,dandoassimumaperformancemelhor, alm,claro,deseromaissimplesdeseusar.VerifiquequaltipodedrivervemcomoseuSGBD. JavaDBvemcomdoisdriverstipo4,umdriverincorporado,eumdriverclientedarede.OmySQL Connector/Jumdrivertipo4. Pormdeveseteralgunscuidados,porquepodeserencontradaumacertasemelhanaentreJDBC eODBC;Estoabsolutamentecorretos,podemosdizeragrossomodoqueasduasseguemamesma idia.AmbasfuncionamcomomeiodecomunicaoBancoXAplicao,porm,ODBCuma
Projeto Ejovem Mdulo II
DBDesigner
129
aplicaoWindowsrestritoapenasaele,enquantoaJDBC,porserescritaemjava, multiplataforma.Vejamosabaixoasprincipaisclasseseinterfacesdopacotejava.sql.*;
OutradasvantagensdaJDBCofatodelafuncionarcomoumacamadadeabstraodedados. IndependentedoSGBDutilizado,aAPIseramesma,facilitandomuitoavidadosprogramadores casohajaanecessidadedeumamigraodebanco.Tendoumainterfacequedefinemtodospara conexocomobancodedadosetambmoprovedordoSGBD(SistemaGerenciadordeBancode Dados)quefazumaimplementaodestainterface,criandoumaclassequerepresentaodriver JDBC. Parailustraressesfatos,vamosmontarumapequenaaplicaoconsole,apenasparavermoso funcionamentodaJDBC.UsaremosnesteexemploomySQL,porm,ospassospodemserseguidos comqualqueroutrobancodedados,desdequehajaodriveradequadoparatalao.Para entendermoscomofuncionanapraticaprecisosaberoquecadaumdessasclasseseinterfaces. Driver:ainterfacequedefinemtodosparaconexocomobancodedados,ondeoprovedordo SGBD(SistemaGerenciadordeBancodeDados)fazumaimplementaodestainterface,criando umaclassequerepresentaodriverJDBC. Connection:Umainterfaceparaacriaodeobjetosquerepresentamasinstruesparaobanco dedados(Statements)ocontroledetransaoealiberaoderecursos. Statements:InterfaceparaoenviodecomandosSQLaobancodedados,osStatementsso fabricadospormeiodachamadaamtodosdainterfaceConnection.Statement DriverManager:ClassequegerenciamltiplasimplementaesdainterfaceDrivereodriver carregadousando:Class.forName("nome_do_driver")
20.2.1. ResulSet:UmainterfacequeoferecemtodospararecuperarresultadosdecomandosSQL
executadossobreobancodedadoseanavegaonosresultadosdaspesquisas. deextremaimportnciaparaqualquerprofissionaldaquequeiraingressarouquejestevena readeTIsaberqueodriverConnector/JpermitetrabalhardesdeJavacombasesdedados mySQL.MysqlConnectorumdrivercriadoporMysqlABquetepermitirtrabalharcommysql desdeprogramasescritosemJava.Adiferenaemrelaoaoutrosdrivers,queestedelivre distribuio,etemumbomrendimento.OmySQLConnector/JumdrivernativodeJavaque converteaschamadasgeradasporJDBCnoprotocoloderedequeutilizaabasededadosMysql. PermitetrabalharcomalinguajemdeprogramaoJavaedestaformaconstruirprogramasque interactuamcomMysql.OMySQLConnector/JumdriverJDBCtipoIVecontemtodasas caractersticasdeJDBCparautilizarMysql.
DBDesigner
130
20.3. Fazendoumasimplesconexo.
Nesteexemploabaixovamosdemonstrarcomosefazumaconexodeumpequenoaplicativojava comobancodedadosmySQL.muitosimples,masobserveprimeiramenteostrechosdecdigo quesegue.
Class.forName("com.mysql.jdbc.Driver");
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);
DBDesigner
131
} }
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()); } } }
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());
DBDesigner
134
20.7. Exerccios.
01Paraqueserveumbancodedados? 02Paraqueserveumaconexocomumgerenciadordebancodedados?Justifiquesuaresposta: 03NalinguagemJAVAoacessoacamadadedadosnoutilizanenhumdriverparasuas conexes: 04Osgerenciadoresdebancosdedados(MYSQL,POSTGRES...)sopartesdalinguagemjava: 05Quaisosobjetosusadosparapersistirdadosemjava? 06DescrevaparaqueserveodriverJDBC: 07Estabeleaumasimplesconexojavabancodedados,usandoogerenciadordebancode dadosmySQL. 08Crieemjavaummtodocapazdeinteragircomumbancodedadosqualquer,executeuma querycapazdearmazenarosseguintesdadosemumatabeladeumbanco(nome,email): Obs.:Faa10inseresdiferentesnessatabela.
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