IntROdUçãO À
lIngUageM java
AdministrAção regionAl do senAc no estAdo de são PAulo
Gerência de Desenvolvimento
Sidney Zaganin Latorre
Coordenação Técnica
OzeasVieira Santana Filho
Apoio Técnico
Ana Cristina Manzano dos Santos
© Senac-SP 2006
Elaboração do material didático
Fábio Luís Ramon
Edição e Produção
Edições Jogo de Amarelinha
IntROdUçãO À lIngUageM java
2006
�
Introdução à Linguagem Java
Senac São Paulo
SUMÁRIO
1 – Introdução / 7ObjetivOs dO cursO
java e seus váriOs aspectOs
O que é realmente java?Origem da linguagem
características da linguagem
2 – Java MachIne / 17java virtual machine
compiladores e Interpretadoresvantagensdesvantagens
arquitetura java machine java e suas edições
3 – aMbIente de deSenvolvIMento / 23java develOpment Kit
eclipse
criando um projetoPerpectivasacrescentando uma classeexecutando um programa depurando um programaMudando a versão do JdK
4 – eStrutura de uM PrograMa Java / 33requisitOs básicOs
tipOs e classes básicas
variáveis
declaraçãO e inicializaçãO
OperadOres e expressões
cOmandOs básicOs
parâmetrOs de entrada
pacOtes
5 – claSSeS e obJetoS / 47Importanteconceito de classe
atributOs, métOdOs e interfaces regras geraisMétodos especiais
�
Introdução à Linguagem Java
Senac São Paulo
definiçãO de uma classe e alOcaçãO
construtores e instanciaçãoreferências a objetosdeclaração de métodosnotação uMlSobrecarga de métodosSobrecarga de construtoresclasses e métodos abstratosatributos e métodos estáticos
api java
6 – arrayS e StrIng / 66alOcaçãO de arrays
arrays multidimensiOnais
string
7 – herança e InterfaceS / 71anatOmia da herança
herança e hierarquia de classesdefinição de subclasseschamada de métodos na herança
sObrescrita de métOdOs
herança e cOnstrutOres
interfaces
declaração de interfacesexemplo do uso de interfacesdefinição das classes basesexemplo – definição das classes derivadasexemplo – definição da interfaceexemplo – redefinição das classes basesexemplo – redefinição das classes
mOdificadOr finAl
8 – encaPSulaMento / 85mOdificadOres de acessO
9 – PolIMorfISMo / 90exemplO cOnceitual
pOlimOrfismO e herança
exemplo completo
10 – entrada e Saída / 98entrada
InputStream – exemploclasses herdadas de InputStream
saída – Outputstreams
readers e Writers
a classe file
�
Introdução à Linguagem Java
Senac São Paulo
11 – threadS / 105diagrama
implementaçãO
exemplosincrOnizaçãO de threads
12 – exceçõeS e erroS / 110Maneira comum de tratar exceções/errostratamento em JavaModificador throwstratamento “in loco”Passando o tratamento adiantetratamento múltiploa cláusula finallydefinindo exceções
13 – tóPIcoS avançadoS / 117cOleções
netWOrKing
generics
CAPÍTULO Iintrodução
�
Introdução à Linguagem Java
Senac São Paulo
ObjetIvOS dO cURSO
n TravarconhecimentobásicocomaLinguagemJava,suaestruturaesintaxeesuasapli-
caçõesnainternet.
n Editar,compilar,depurareexecutarprogramasJavautilizandooEclipse.
OprincipalobjetivodestecursoéfazeroalunotravarumprimeirocontatocomaLingua-gemJava,mostrandosuaestreitarelaçãocomainternet.
Estecursovisaesclarecerosprincipaispontosquecercamessa linguagem,mostrarsuapotencialidadeerecursoseprincipalmentefornecersubsídiosparaqueosprofissionaisdaáreadeinformáticapossamjulgarcomcritériosadequadosoquantoJavaéútildentrodesuaáreadeatuação.
Além disso, será apresentado o Eclipse, que é uma ferramenta de uso livre, feita para a edição, compilação, depuração e execução de programas Java.
Java e seus vários aspectos
• Aspectostécnicos
- Recursosepotencialidades
- Ambientededesenvolvimento
- Segurança
• Aspectosconceituais
- Novoparadigmadecomputaçãoeredes
- Novomercadodeserviços
- AspectosconceituaisintroduzidoscomJava
Aspectos técnicos
ALinguagemJavajánasceuadulta,ouseja,nãofoiumalinguagemquepassoupeloproces-sotradicionaldeavaliação,enriquecimentoeagregaçãoderecursos.Comissonãosepercebe,nalinguagem,estruturasacomodadasaposteriori,ouadapta-ções,queparaoprogramadorrepresentamverdadeirasarmadilhas.Tecnicamente,aLinguagemJavaébastantehomogêneaemtermosdeestruturaesintaxe.Consegueserverdadeiramenteorientadaaobjetoseaomesmotempodefácilprogramação.
�
Introdução à Linguagem Java
Senac São Paulo
Em termos de ambiente de desenvolvimento, Java apresenta características peculiares.Podecomportarodesenvolvimentodeumaaplicaçãodegrandeporte,talcomoC++,eoferecerecursosparatal.Noentanto,podesereficientementeusadaparaaplicaçõesdepoucaslinhas,gerando“executáveis”bemreduzidoseenxutos.Javaotimizaageraçãodecódigoemfunçãodotamanhodaaplicação.Asegurançaoferecidaaoprogramadoremtempodecompilaçãoeexecuçãopermiteageraçãodeaplicativoscommenosbugsecommenosriscosdeperdadecontroledaexe-cução,acelerandooprocessodedesenvolvimento.
Aspectos conceituais
Javanãorepresentaapenasumalinguagem,representatambémumnovomodelodecom-putaçãoedesenvolvimentosobreainternet.Podemosdizerque,mesmoqueJavanãosejaalinguagemdoséculoXXI,porrazõesmer-cadológicas,oconceitoqueJavacarregajáéamplamenteexploradopelaslinguagensdeprogramaçãoparaainternetqueestãosurgindo.Esteconceitonadamaisédoquetornarainternetummeiodeinteraçãonãoapenasentreaspessoas,masentreasaplicaçõeseobjetosdeprogramação,deformaqueosrecursosestarãocompartilhadosnessagranderedeeoseuusoficarátransparenteaousuáriofinal.Esteconceitoderedeecomputaçãogeraumasériedeoutrosserviçosefazcomqueasempresasdedesenvolvimentonorteiemseusesforçosnessesentido.
O que é realmente Java?
n Limitada?
• Simplicidadeouincapacidade?
n Ineficiente?
• Interpretadaversuscompilada?
• Javaéumalinguagemlimitada?
O fatode Javanãoapresentaralguns recursosdisponíveisemoutras linguagensdealtonível,taiscomoponteiros,destrutoreseherançamúltiplanãoaqualificacomoinferiornes-sesaspectos.ComJavaépossívelrealizarpraticamenteasmesmascoisasqueemqualqueroutra linguagemqueutilizaesses recursos,comavantagemdehavereliminadograndepartedasfontesdeerrosebugsqueprejudicameatrasamumdesenvolvimento.Dessaforma, esta simplificação do ponto de vista do programador representou uma enormecomplicaçãoparaos idealizadoresda linguagem,quetiveramdegarantirque Java fosseigualmenteeficientecommenosrecursos.
10
Introdução à Linguagem Java
Senac São Paulo
• Javaéineficiente?
Javaéindependentedaplataforma.ParachegaraissoocódigobinárioemJavaénarealida-deumcódigointerpretado.Veremosmaisafundoessaquestãoposteriormente.Dessaforma,odesempenhodeumaaplicaçãoJavadependeessencialmentedointerpre-tadorutilizado.Com isso,vê-seaplicações idênticas,emmáquinas iguais, rodandocomdiferençasdevelocidade.Sobessepontodevista,podemosafirmarqueJavaserásempremenoseficienteoupelomenosigualaumamesmaaplicaçãoemC.AtendênciaverificadanosinterpretadoresJavaéatingirníveisdeperformanceiguaisaoC,comousodetécnicasespecíficasedesenvolvidasespecialmenteparaisto.NoentantoolimitesuperiordeveserolimiteimpostoporC.
Padrão?
Códigoabertoversusproprietário?
Portabilidadeversuseficiência?
Economicamenteviável?
Custoversusbenefício
• Javaéumnovopadrão?
Javanãoéumpadrãoaberto,massimumalinguagemdefinidaecontroladapelaSun,noentantocomamplaparticipaçãodecomunidadesdeusuáriosecomprocessosdedefiniçãoeevoluçãomuitoparecidoscomosprocedimentosadotadospelossoftwaresdecódigoaberto.ExistemsoluçõesalternativasaJava,emníveisdiferentes.C#daMicrosoft,porexemplo,émuitosimilarconceitualmenteeemtermosdelinguagem,semnoentantocompartilhartodasascaracterísticasdeJava.
• Javaéportável?
Acaracterísticamultiplataformade Java tornadesnecessária,emprincípio,apreocupa-çãocomsuaportabilidade.Noentanto,tem-severificadoquesurgiramferramentasqueconvertemJavaparaC,a fimdeseganharemperformance.Utiliza-setambém,e Javasuporta, a inclusão de rotinas em C nos programas (código nativo). Com isso surgemaplicaçõesdesenvolvidasemJava,masquesãoespecificasparadeterminadasplataformas.Nestecaso,asconsideraçõessobreportabilidadeemJavapassamaserasmesmasqueasaplicadasaC.
11
Introdução à Linguagem Java
Senac São Paulo
• Javaéeconomicamenteviável?
Váriosfatoresdevemserlevadosemconsideração,entreelesarealutilidadedalinguagem,oesforçodesuaaprendizagemeseupoder.Osucessodeumaferramentadependedoquesepodefazercomelaecomqueesforço.JavapretendeofereceromesmoqueC++emtermosdepoderdecódigoeaomesmotempoofereceumambientededesenvolvimentomaisbugfreeeconcisoqueC,almejandoexigirmenosesforçoqueprogramaremC.Estaúltimacaracterísticaémuitoimportanteporquepossibilitaousodeferramentasdedesen-volvimentomaispoderosaseautomatizadas,semelhantesaoVB,porexemplo.
n JavaScript?
n Programaçãoparadesktop?
• Executáveislinhadecomando
• Programasgráficos- AWT- Swing- Games
n Programaçãoparadispositivos
• Cartões,Celulares,Palms,etc.
• JavaéomesmoqueJavaScript?
JavaScriptéumaoutra linguagem,orientadaamodelosenãoaobjetos,eque temumnomesimilarsimplesmenteporquecompartilhaosmodelosdedadoseobjetosdeJava.Assim, muito pouco do que se aplica a Java pode ser aplicado a JavaScript, que é umalinguagempuramenteinterpretadaeportantogozadessebenefícioemsuaestruturadeprogramação.JavaScriptéutilizadoparaacrescentarprocessamentolocalàspáginasHTML,einteragedi-retamentecomasdiretivasdapágina.PodeserconsideradocomoumaespéciedeHTMLprocedural.Convém ressaltar que JavaScript é muito poderosa e pode substituir Java em muitasaplicações,oquegeralmentenãoélevadoemcontaquandoseestudaJava.
• Programaçãoparadesktops
Javaéutilizadaparaodesenvolvimentodeaplicaçõesparadesktop,especialmentepelasempresasquedesejamterumaúnicaferramentaparadiferentesplataformas(Windows,
12
Introdução à Linguagem Java
Senac São Paulo
Linux,Unix,Macetc.).Javapossuitodososrecursosparaodesenvolvimentodeaplica-çõescompletas,inclusivejogos.Noentanto,paraaexecuçãodeumprogramaJavanumdesktopénecessárioqueoprogramapossuaumaJavaVirtualMachineinstalada,comoveremosadiante.Aconstruçãodeprogramasgráficospodeserfeitacombibliotecasgráficassimples(AWT)oumaisricas(Swing).
• Programaçãoparadispositivos
Javaéamplamenteutilizadaparaodesenvolvimentodeaplicaçõesemdispositivos,espe-cialmenteosdepequenoporte,taiscomocartões,telefonescelulares,computadoresdemãoeatémesmorobôs.AgrandevantagemdautilizaçãodeJavaéqueummesmopro-gramapoderodaremdispositivosdiferentesdevidoàcaracterísticamultiplataformadosprogramas.ParaaprogramaçãodedispositivoséutilizadoumsubconjuntodebibliotecasdalinguagemchamadoJME(JavaMicroEdition).
n Programaçãoparaainternet
• Applets
• Servlets
• EJB
• StoredProcedures
• WebServices
UmaaplicaçãoWebnormalmentepossuicomponentesquesãoexecutadosnumservidorWeb(ounumservidordeaplicação).Alémdessescomponentesquerodamnoservidor,umaaplicaçãoWebpodedependerdecomponentesquesãoexecutadosnocliente(nave-gador)emesmocomponentesquesãoexecutadosnobancodedados.ALinguagemJavapodeserutilizadaparaaconstruçãodetodosessestiposdecomponentes.OscomponentesquesãoexecutadosnosnavegadoressãochamadosdeApplets.MuitosbancodedadospermitemaconstruçãodeStoredProceduresescritasemJava.Oscom-ponentesquerodamnosservidorespodemserdotipoServletsoudotipoEnterpriseJavaBeans(EJB).ExistemaindaoscomponentesquerodamemservidoresqueimplementamumoumaisWebServices.Independentedotipodecomponente,alinguageméamesma,diferindoapenasaformacomoosprogramassãoconstruídoseaformacomoosdiferentesservidores,bancodedadosounavegadoressuportamaexecuçãodessescomponentes.
13
Introdução à Linguagem Java
Senac São Paulo
n IntegraçãoaoHTML
• Appletssãoprogramasquerodamdentrodeumapágina
n Ampladifusão
• temporecordededifusão
• buscadosprincipaisfornecedorespelacompatibilidadeesuporteàJava
• IntegraçãoJava-HTML
Javaencontra-setotalmenteintegradoaoHTMLnasaplicaçõeschamadasApplets.AppletssãoprogramasemJavaquerodamemumapartedapáginaHTMLdelimitadaporumadiretivaespecífica.NãosóoespaçoalocadonapáginaédefinidopordiretivasHTML,comotambémapassagemdeparâmetrosparaoApplet.JavaportantointroduziunovasdiretivasàlinguagemHTML.Outroaspectoaserconsideradoéa integraçãoJava-browser,quetranscendeasimplesintegraçãocomoHTMLenãosebaseiaemnenhumpadrãoformal.Javaconseguemani-pularrecursosdaprópriajaneladebrowser,comoporexemploforçaraaberturadeumanovainstânciadobrowser.EstetipodeinteraçãoémaisforteetornaJavamaisdoqueumparceirodoHTML—umparceirodobrowser.
• AdifusãodeJava
NenhumaoutralinguagemconseguiusedifundiremtempotãocurtoquantoJava.Todososbrowsersbuscamcompatibilidadeegrandepartedosservidoresdeaplicaçãoebancodedadossuportamalinguagem.Existemcertificaçõesdeferramentasqueatestamasuacompatibilidadeàlinguagem,garantindoqueprogramasconstruídosparaumservidorpos-sarodaremqualqueroutro.
n Enormepotencialidade
• multimídia
• recursosdeIU,I/Oerede
• inúmerasbibliotecaseferramentasdeterceirosouemcódigoaberto
n Fácilaprendizado
n Constanteaprimoradamento
• geraçãodepacotesebibliotecas
• papeldeoutrascompanhias
• Sunnãodesejamanterocontrole
1�
Introdução à Linguagem Java
Senac São Paulo
• Javaéricoemrecursos
Javaapresentatodososrecursosparaprogramaçãodeinterfacescomusuário,fácilmani-pulaçãodeI/Oecapacidadedeinteraçãoemambientesderede.Todoesseconjuntoderecursosdáàlinguagemumaenormepotencialidadedeaplicações.Alémdisso,écrescenteonúmerodeusuários,gruposouempresasquecolaboramcomodesenvolvimentosdeferramentasoubibliotecas,grandepartedelasdeusolivre.
• Javapodeseraprendidafacilmente
Estepontoécontroverso.Maspodemosdividiraafirmaçãoacimaemoutrastrêsquesãomaisamplamenteaceitas:
- Javaéfácildeseraprendidaporquemnãoconhecenenhumalinguagemdeprogra-
mação;
- Java é muito fácil de ser aprendida por quem já conhece uma linguagem de
programação;
- Javaémaisfácildeseraprendidaporquemjáconheceumalinguagemorientadaaobjetos.
• Javaéconstantementeaprimorada
AprimoramentodeJavanãosignificasuprirdeficiências,masacrescentarpotencialidadescujanecessidadeésentidaquandosedesejaprogramarparaainternet.ASundesenvolveuumconjuntocompletodebibliotecasparaJavaequedefiniucomoimplementaçãobásicadalinguagem.Outrascompanhiasestãoacrescentandonovosrecursospordofornecimen-todenovasbibliotecas.ASunestimulaessetipodeatividadeesabequedelesdependeocrescimentoda linguagem.Alémda iniciativadecompanhias,oesforçodegruposdeusuáriosedecomunidadesbaseadasnocódigoabertoenriquecemconstantementeousodalinguagem.
Origem da Linguagem
n ConcebidaedesenvolvidapelaSunSoft–braçodaSun
• SuporteecompatibilidadenosprodutosdaNetscape–importânciafundamental
nadifusãodalinguagem
n HerançadoC++eSmalltalk–orientaçãoaobjetos
n Aplicaçõesinternet
n AppletseApplications
n Ambientedestino:JavaMachine
1�
Introdução à Linguagem Java
Senac São Paulo
ALinguagemJavafoiconcebidaedesenvolvidainteiramentepelaSunSoft,braçodacom-panhiaSun,responsávelpelodesenvolvimentodosoftwarebásicodosequipamentosSunequeatuavatambémnaáreadedesenvolvimentodecompiladoresparaoutraslinguagens.OsuporteoferecidodesdeoiníciopelaNetscapeemseusbrowsersfoidecisivoparaadi-vulgaçãoedifusãodeJava.Ofascíniocausadopelosprimeirosappletsfoifatordeconquistadeadeptosemtodaainternet.ASunSoftvinhatrabalhandohámuitotemponodesenvolvimentodeambientesSmalltalk.Dessaforma,JavaherdouafidelidadedoSmalltalkaosconceitosdeProgramaçãoOrien-tadaaObjetos(OOP)eosrecursosconcisos,poderososepráticosdoC.QuemconheceC++ percebe que Java se encaixa mais corretamente nos conceitos de OOP e quemconheceSmalltalkpercebequeJavapermiteumcontrolemaiordosrecursosdosistema,comoC.Portanto,éumcasamentofeliz.OgrandetrunfodeJavaépermitirqueseprogramemaplicaçõesqueutilizamosrecursosdainternet.Comaproliferaçãodoswebserverseapopularizaçãodainternet,Javaocu-pouumespaçoqueestavavazio.
Características da linguagem
n Totalmenteorientadaaobjetos
n Multithread(paralelizaçãodeprocessos)
n Sintaticamente e morfologicamente quase idêntica ao C++ (existem diferenças
fundamentais)
n Ausênciadeponteiros
• reduçãodebugs
• aumentodasegurança
n Independedaplataforma
n Orientadaaaplicaçõesderede(especialmenteWeb)
n QuatroS’s:small,simple,safeandsecure
• Orientadaaobjetos
Implementaosprincipaisconceitosdaorientaçãoaobjetos.
1�
Introdução à Linguagem Java
Senac São Paulo
• Multithread
Afacilidadedeprogramarmultithreadshabilita Javaparaodesenvolvimentodegrandesaplicações e de IU poderosas. A capacidade da linguagem em fazer um gerenciamentopreemptivodesterecursootimizaetornageraloseuuso.
• FormatosemelhanteaoC++OformatodalinguagemsemelhanteaoC++éfatorimportantenoreaproveitamentodeprofissionaisdedesenvolvimento.Noentanto,asdiferençasdevemsercuidadosamenteestudadaspoissãosignificativas.
• AusênciadeponteirosAumentaaprodutividadedosprofissionaisdedesenvolvimento,poiseliminagrandefon-tedeerros.Podegeraralgumadificuldadenacriaçãoderotinasqueutilizariam(emC)aritméticadeponteiros.
• OrientadaàWebPreenche uma lacuna existente para criação de aplicações Web, e disto decorre suacaracterísticamultiplataforma.
CAPÍTULO 2JAVA MACHINE
1�
Introdução à Linguagem Java
Senac São Paulo
java vIRtUal MachIne
CódigofonteécompiladoparacódigobinárioJava,queéinterpretadoeexecutadoemdiferentesplataformas
• JavaVirtualMachine
Denominaçãodadaao interpretadorJavarodandosobreosistemaoperacionaldequal-quer máquina. Esta combinação (interpretador+OS) tem um comportamento idênticopara qualquer OS suportado por Java. Dessa forma, caracteriza-se como uma máquinavirtualqueexecutaseucódigobinárioJava,chamadostambémdebytecodes.
Compiladores e Interpretadores
JavaVirtualMachineéumconceitoimplementadohojeporumconjuntorazoáveldeinter-pretadoresparaasplataformasmaiscomuns.
1�
Introdução à Linguagem Java
Senac São Paulo
Verifica-sequeexisteumasériedecompiladoresJavaparacadaplataformadistinta,masnoentantoexistetambémumúnicocompiladorJava,escritoemJava,utilizadoemtodasasplataformas.
Assim,parasesustentaroconceitodeJavaVirtualMachine,exige-seapenasinterpretado-resdistintos.
O JavaRuntimeEnvironment (JRE)éum interpretador JavaquesuportaaexecuçãodeaplicaçõesJavaemdesktops.
n InterpretadorJavaseguemodelosimpleseestruturadopermitindograndedesempenho
n “Compilaçãojust-in-time”
n “Cache”deexecução
n Possibilidadedeusodecódigonativo
n Informaçãoextrapodeserpassadaaointerpretador
n ExistemtradutoresparaC
• ArquiteturaJava
Osbytecodes Javasãodestinadosaumamáquinadeestruturasimplesepoderosa. Istoresultaemuminterpretadorsimplesereduzido,notocanteàparteque“interage”comocódigoJava.Apartedointerpretadorque“interage”comoOSvariaemsimplicidadeconformeoambiente.
• “Turbinando”ointerpretadorUma sériede artifícios sãoutilizadosparamelhorar aperformancedeumcódigo Java.Entreelespodemoscitar:
- Compilação “just-in-time”:códigoécompiladoparacódigonativoàmedidaqueécar-
regadopordownload–técnicausadaemaplicaçõesquetrafegampelarede.
- Cache:códigodemaquinainterpretadoéarmazenadoem“cache”,evitandoarepe-
tiçãoda interpretaçãodepartesrepetitivasdocódigo.Aceleraexecuçãode loops.
Paraprogramasbemestruturadosoganhodevelocidadedeexecuçãopodeserde10
vezes.
- Uso de “pedaços” de código nativo dentro do código Java:causaperdadacaracterística
multiplataformadeumaaplicaçãoqueutilizeesterecurso.
- Parâmetros extras:informaçõesrelativasàmáquinaondeocódigoestásendointerpre-
tadopodemaceleraresseprocesso,ouseja,osbytecodes“ajudam”ointerpretador
sobdeterminadaplataforma.
20
Introdução à Linguagem Java
Senac São Paulo
Vantagensn Multiplataforma
n Compatibilidade
n Portabilidade
n Verificaçãodasegurançadocódigo
n TodamáquinapodeserJavaVirtualporsoftware
AlémdasvantagensclássicasdeutilizaruminterpretadorJava(compatibilidade,multiplata-forma,portabilidadeetc.),umoutropontodeveserconsideradocomopositivo:averifica-ção,pelointerpretador,da“confiabilidade”doprogramasendoexecutado.
Istosignificaqueo interpretadorrealizarigorosaverificaçãoa fimdecertificar-sequeoprogramaJavaéconfiávelemtermosdeutilizaçãodosrecursosdamáquina.Ointerpreta-dorécapazdeverificarseumprogramaestá“malintencionado”alocandorecursosexces-sivosouindevidosebloqueá-lo.Podetambémlimitaraaçãodeobjetosnãocorretamenteidentificados e delimitados, criados por programadores experientes, cuja atuação podesignificarriscosparaousuário.Ointerpretadorpodebloqueartambémoacessoaodiscolocaldeprogramascarregadosviainternet.Assim,estacaracterísticasignificaumnívelamaisdesegurançaoferecidoaousuáriodeaplicaçõesJava,cujaorigempodeeventualmen-teserignorada.
Desvantagensn Interpretação-quedadedesempenho
n Duasferramentas:compiladoreinterpretador
n Códigonativo-plataformaespecífica
Ainterpretaçãodosbytecodes,pormaisquesejaotimizada,temumcustodeperfor-mance.Noentanto,ocrescentedesenvolvimentodohardwareeosbenefíciosdeseguran-çatrazidospelainterpretaçãocompensamessecustoadicional.OinterpretadorJavasempreprecisaestarinstaladonamáquina,oquedificultaaexecuçãodosprogramasdedesktopnossistemasoperacionaisquenãovêmoriginariamentecomointerpretadorinstalado.
AutilizaçãodecódigonativoemprogramasJavavinculaasuaexceçãoàsplataformasparaasquaisocódigonativofoiconstruído.
21
Introdução à Linguagem Java
Senac São Paulo
Arquitetura Java Machinen Conjuntodeinstruções
• Bytecodes,emgeralcom2operandose32bits
n Conjuntoderegistradores(apenas5)
n Pilhailimitadamas“imune”aoverflow
n GarbageCollector
• rodaembackground
• compressãodememória
Java e suas edições
• Java2StandardEdition
ÉaediçãodeJavafeitapararodaremdesktops,dispositivosembarcados(robôs,eletro-domésticosetc.)emáquinasdecontroleemtemporeal(robôsdeprecisão,servodispo-sitivosetc.).OJRE(JavaRuntimeEnvironment)éamaquinavirtual,semasferramentasdecompila-ção,quepodeserutilizadaemqualquercomputadorqueiráapenasexecutarosprogra-masJava.
22
Introdução à Linguagem Java
Senac São Paulo
• Java2EnterpriseEdition
Éaediçãocomtodoosuportepararodaraplicaçõesemservidoreswebeservidoresdeaplicação.Ofereceumconjuntocompletodebibliotecasque implementamasrigorosasnecessidadesdeumambientedeexecuçãoseguroecrítico.
• Java2MicroEdition
Éaediçãopararodaremdispositivosdepequenoporte,taiscomocelularesepalms.Estádisponívelemumasériedesubedições,cadaumamaisadequadaaumdeterminadotipodedispositivo.
CAPÍTULO 3AMBIENTE DE DESENVOLVIMENTO
2�
Introdução à Linguagem Java
Senac São Paulo
n ASunlançou,juntamentecomalinguagem,umkitdedesenvolvimento,oJavaDeve-
lopmentKit(JDK)
n Existeumgrandeconjuntodeferramentasdedesenvolvimentodisponíveisnomerca-
do
• Livres
- Eclipse
- NetBeans
- Outros
• Proprietários
- JBuilderdaBorland
- StudiosdaIBM,BEAeSun
- JDevdaOracle
- Outros
ASunlançou,juntamentecomalinguagem,umkitdedesenvolvimentoque,emborabempoderoso,édedifícilusoenãosatisfazasnecessidadesdeumdesenvolvedordemédioporteoumaior,poisapresentarecursospobres.Aolongodotempo,outrasempresas,ougrupos/comunidadesdeusuáriosdesenvolveramoutras ferramentas.Hojeexistemdezenasde ferramentasde código livreeumaoutradezenadeboasferramentasproprietárias.NessaapostilautilizaremosoEclipse,decódigolivre.
Java Development KitCompilador
javacMinhaClasse.java
Interpretador
javaMinhaClasse
Visualizadordeapplets
appletviewermeuapplet.html
Debugger
jdb
2�
Introdução à Linguagem Java
Senac São Paulo
OJavaDevelopmentKitéaprimeiraferramentaparadesenvolvimentodeJava.DistribuídalivrementeedesenvolvidapelaSun,dispõedeumconjuntomínimoderecursossuficientesparagerarqualqueraplicação.
Eclipse
n Ferramentadeedição,compilação,depuraçãoeexecuçãodeprogramasJava
n Códigoaberto
n Extensívelporplugins
n http://www.eclipse.org
OEclipseéumaferramentadedesenvolvimentodeaplicaçõesJavaquepodeserutilizadalivremente,sempagamentodelicenças.
AgrandevantagemdoEclipseéasuaarquiteturadeplugins,quepermitequesepossaterseusrecursosexpandidosindefinidamente.
• Instalação
Senãoestiverinstaladonamáquina,façaodownloadeinstaleaúltimaversãodoJDKnositehttp://java.sun.com(sigaolinkdedownloads).FaçaodownloaddaultimaversãodobináriodoEclipsenositehttp://www.eclipse.org.Namáquina,bastaapenasdescomprimiroarquivodedownloaddoEclipsenumdiretórioqualquer(C:\soft,porexemplo).
• ExecuçãodoEclipse
Para rodar o Eclipse basta apenas executar o arquivo C:\soft\eclipse-SDK-3.1.1-win32\eclipse\eclipse.exe.Sempre que o Eclipse for aberto, ele pede que seja indicado um diretório de trabalho(workspace),ondeficarãoosarquivosJavaeditadosnele.
2�
Introdução à Linguagem Java
Senac São Paulo
Criando um projeto
n Cada programa Java pode ser composto por várias classes. Essas classes e as suas
configuraçõesficamagrupadosnumPROJETO
n MenuFile>>New>>Project...
n SelecionarJavaProject
n Acrescentaronomedoprojeto
27
Introdução à Linguagem Java
Senac São Paulo
Perpectivas
n OEclipsetrabalhacomperspectivas,quenadamaissãodoquevisõesdeseuambiente
detrabalho
n AbriraPerspectivaJavaparaeditarcódigo
Acrescentando uma classe
n Criarumanovaclasseeadicionaraoprojeto
Menu File >> New... >> Class
n NoWizard,definironomedaclasseemarcarparacriarométodo
public static void main(String[] args)
• Criarumanovaclasse
2�
Introdução à Linguagem Java
Senac São Paulo
• Acrescentarumaclasse
n Adicionaraseguintelinhadecódigoaométodomain
System.out.println(“Hello Word”);
Adicionarcódigoaométodomain
2�
Introdução à Linguagem Java
Senac São Paulo
Executando um programa
n Rodaroprograma
• SelecionaroarquivoJavae,comobotãodireitodomouse,escolher
Run As >> Java Application
(oEclipsepediráparavocêsalvaroarquivo;selecione-oesalve-o)
• SelecionaroprojetoedispararaexecuçãocomoJavaApplication
Depurando um programa
n Adepuraçãoéumrecursonecessárioparadarprodutividadeaqualquer
desenvolvimento
• SelecionarclasseJavae,comobotãodireitodomouse,escolher Debug as >> Java Application...
(oEclipsepediráparavocêmudaraperspectivaparaDebug,masnãoénecessário
fazerissonesteexemplo)
30
Introdução à Linguagem Java
Senac São Paulo
• ExecutarlinhaalinhacomateclaF6
• Dispararodepurador
n Paraobservarovalordeumavariávelcoloqueoponteirodomousesobreelaoumude
aperspectivaparaDebug(todasasvariáveispodemserinspecionadasnessapers-
pectiva)
Menu Window >> Open Perspective >> Debug
n Paravoltarparaoprograma Javaeaexecuçãododepurador linhaa linhamudara
perspectivaparaJava
Menu Window >> Open Perspective >> Java
• MudandoaperspectivaparaDebug
31
Introdução à Linguagem Java
Senac São Paulo
Mudando a versão do JDK
n NoEclipsepode-setrabalharcomváriasversõesdoJDKouJRE
n MenuWindow>>Preferences
• NoitemJava/Compilerselecionaracompatibilidadedocompiladorcomaversão
doJava(compilercompliancelevel1.3,1.4ou5.0)
• NoitemJava/InstalledJREsselecionaraversãodoJDKouJRE.Senãoestiverins-
taladaaversãodesejadaclicarem
- Add...
- Browse...(eselecionarofolderondeestáinstaladooJDKouJRE)
• AbriraconfiguraçãodoEclipse
• Selecionaroníveldecompatibilidadedocompilador(1.3,1.4ou5.0)
32
Introdução à Linguagem Java
Senac São Paulo
• SelecionaroJDK/JREentreosexistentes
• AcrescentarousodeumnovoJDK/JRE,seforocaso
33
Introdução à Linguagem Java
Senac São Paulo
CAPÍTULO 4ESTRUTURA DE UM PROGRAMA JAVA
3�
Introdução à Linguagem Java
Senac São Paulo
Requisitos Básicos
n UmprogramaJavaéumacoleçãodeclassesqueinteragementresideformatotalmen-
teorientadaaobjetos
n Ométodomain()departidadeexecuçãodoprogramadevepertenceràclasseprinci-
paldoprograma
n Onomedoarquivoprincipaldoprogramadeveteromesmonomequeaclasseprin-
cipal(aquelaquecontémométodomain())
OmétododepartidadeumprogramaJavaéchamadodemain,quedevenecessariamen-tepertenceraumaclasse.Estaclasse(àqualpertencemain),éaclassequedánomeaoprograma.
Exemplo
import java.util.Date;
public class HelloWorld {
public static void main(String args[]) {
System.out.println(‘‘Hello World’’);
System.out.println(new Date());
}
}
n Aassinaturademain()devesercomoamostradaacima
n OnomedoarquivodeveserHelloWorld.javaquedepoisdecompiladogeraoarquivo
HelloWorld.class
>edit HelloWorld.java
>javac HelloWorld.java
>java HelloWorld
Exercício1.Digitar,compilaredepuraroprogramaHelloWordnoEclipse.
3�
Introdução à Linguagem Java
Senac São Paulo
Tipos e Classes básicas
n Tiposprimitivos
• Inteiro:
- byte 8bits
- short 16bits
- int 32bits
- long 64bits
• ponto-flutuante
- float 32bits
- double64bits
• caracter(unicode)
- char 16bits
• boleano
- boolean,trueoufalse
Faixadevaloresdostiposprimitivosbyte -128a127short -32.768a32.767int -2.147.483.648a2.147.483.647long -9.223.372.036.854.775.808a9.223.372.036.854.775.807float -3,4E-38a3,4E_38double -1.7E-308a1.7E+308
n Classesespeciais
• String–implementaumobjetoString,deformamaisprecisaeclaradoqueum
arraydecaracteres
• System–realizapartedainteraçãodoprogramacomosistemaoperacionalnativo
n Sãotiposprimitivos
n Nãosãoobjetos
n Independemdamáquinaem
termosdeprecisãoetamanho
3�
Introdução à Linguagem Java
Senac São Paulo
AlgumasclassesemJavaassumemumpapelespecialouapresentamumcomportamentoespecial.Entreelas,éinteressantecitarduas:
• String
• nãosãoarraysdecaracteres
• dispõedemétodosquefacilitamseuuso
• umobjetodaclasseStringécriadoautomaticamentequandosedeclaraeinicializa
umavariável.Ex.: String curso=“curso de Java”;
• implementamconcatenação(emboraJavanãoimplementesobrecargadeopera-
dores).Ex.: curso=“Meu primeiro”+curso; usodooperador+= curso+=“Meu primeiro”;
• System
• contémamaioriadosmétodosque interagemcomo sistemaoperacional.Ex.:System.out.println(……);
Variáveis
n Declaradasantesdeseremutilizadas,emqualquerpartedoprograma(declaraçãoé
darotipoeonome)
n Podemserinicializadasnadeclaração
n Variáveislocaisdevemserinicializadasantesdeseremutilizadas
n Podemserutilizadossufixosparadefinirotipodeumliteral
AsvariáveisemJavapodemserdeclaradasempraticamentequalquerpartedoprograma.Lembrarquenãoexistemvariáveisglobais.Umavezque todooprogramaestáencap-suladodentrodeclasses,asvariáveismais“externas”desteprogramapertencemaestaclasse.Existemportantodoistiposdevariáveis:
• declasseoudeinstância
• locaisafunçõesoublocos
37
Introdução à Linguagem Java
Senac São Paulo
n Asrestriçõesaplicadasàsvariáveissão:
• nomesdasvariáveis
• nãopodemcomeçarpornúmero
• cuidadocomsímbolosquerepresentamoperadores:*,+etc.
• conjuntodecaracteresUnicode(existemexceções)
n Tipos:
• primitivos
• classeouinterface
• array
n Sufixos
• Loulparalong
• Doudparadouble
• Foufparafloat
Declaração e inicialização
int a;
String nome;
fl oat b;
boolean isNunber;
byte c, d, e, f;
long g=0;
fl oat h, I, j=1.2;
char primeira_letra=‘a’;
String sobrenome=‘‘Silva’’;
boolean isChar=true;
long k=10L;
fl oat l=4f;
int m=0xff; // Literal hexadecimal
Osliterais,quandodigitadosnanotaçãohexadecimal,devemvirprecedidosde0Xou0x.Osliterais,quandodigitadosnanotaçãooctal,devemvirprecedidosde0.
3�
Introdução à Linguagem Java
Senac São Paulo
n Escopodevariáveis
• Variáveislocais:
Podemserutilizadasdentrodométodooublocoondeforamdeclaradas
• Variáveisdeclasseoudeinstância:
Podemserutilizadasdentrodaclasseouobjeto,ouatémesmoporoutrasclasses
eobjetos,dependendodesuaacessibilidade.
n Conversãodetipos
• Implícita:detipos“menores”paratipos“maiores”(emnúmerosdebitsdotipo)
byte b = 5;
int a = b; // 5 é convertido para inteiro
float f = 123.756F;
double d = f;
• Explícita:detipos“maiores”paratipos“menores”(emnúmerosdebitsdotipo).
Deveserfeitocasting.
long l = 12000000L;
int i = (int)l;double d = 395E+45;
float f = (float)d;;
Conversãoimplícitaéaquelaondeovalornãocorreoriscodesofreralgumaperda,por-queacapacidadedotipoconvertidoémaiorqueacapacidadedotipooriginal.Parafazeressaconversãobastafazeraatribuiçãodiretadosvalores.
Conversãoexplícitaéaquelaondeovalordotipooriginalcorreoriscodeseralterado,porqueacapacidadedotipoconvertidoémenor.Conversõesexplícitassomentepodemserfeitascomousodocasting,queédefinirjuntoaovalororiginal,otipoparaoqualsequeraconversão,entreparênteses.
3�
Introdução à Linguagem Java
Senac São Paulo
Operadores e expressões
n Operadoresaritméticos:
• Básicos+,-,*,/e%
• Osinalmenos(-)podeserusadocomooperadorunário
n Operadoresconjugadoscomatribuiçãodevalores: a+=b <=> a=a+b a-=b <=> a=a-b a*=b <=> a=a*b a/=b <=> a=a/b
• Cuidadocomaordemdeavaliaçãodasexpressões!
• Operadoresaritméticos:
• Básicos:+(adição),-(subtração),*(multiplicação),/(divisão)e%(módulo,ou
seja,restodadivisãointeira)
• Osinalmenos(-)podeserusadocomooperadorunário
• Tipodoresultado:omaisprecisoentreostiposdosoperandos.Portanto26/7=3,
umavezqueoresultadoéinteiro
• Operadoresconjugadoscomatribuiçãodevalores: a+=b <=> a=a+b a-=b <=> a=a-b a*=b <=> a=a*b a/=b <=> a=a/b
Cuidado com a ordem de avaliação das expressões, pois uma mesma expressão lógicapodeafetardeformadiferenteoresultadoesperado.
• Operadoreseexpressões
Operadoresdeincrementoedecremento
a++ou++a <=> a=a+1
a--ou--a<=> a=a-1Cuidado:b=a++podenãoteromesmoefeitoqueb=++a!!!
�0
Introdução à Linguagem Java
Senac São Paulo
• Operadoresdecomparação: == igual != diferente < menor > maior <= menorouigual >= maiorouigual
• Operadoresdeincrementoedecremento: a++ou++a<=> a=a+1 a--ou--a <=> a=a-1
Cuidado:b=a++nãoforneceomesmoresultadoqueb=++a!!!Ooperadordeincremento,quandocolocadoantesdavariável,fazcomqueelasejaincre-mentadaantesdeserutilizada.Ooperadordeincremento,quandocolocadodepois,fazcomqueovalordavariávelsejautilizadoantesdoincremento.inta=5;intb=a++;//resultaembcomvalor5a=5;b=++a;//resultaembcomvalor6
• Operadoreslógicos: &ou&& <=> AND |ou|| <=> OR ! <=> NORExistemdiferençasentre&e&&;eentre|e||!!!
• Operadoresbitabit:
& <=> AND
| <=> OR
^ <=> XOR
<< <=> deslocamentoàesquerda
>> <=> deslocamentoàdireita
~ <=> complemento
>>> <=> deslocamentoàdireita,preenchimentocomzero
Osoperadores&&e||somentepodemseraplicadosatiposbooleanos.Osoperadores&e|podemseraplicadosaqualquertipoprimitivo,sendoquenessecasoelerealizaaoperaçãobitabitentreosbitsdosoperandos.
�1
Introdução à Linguagem Java
Senac São Paulo
Comandos básicos
n Comentários
• Comentáriosdeumalinha
//linhacomentada
• Comentáriosdemúltiplaslinhas
/*Linhascomentadas
linhascomentadas
*/
• Comentáriosqueaparecemnageraçãoautomáticadecódigo(javadoc)
/**Linhascomentadas
linhascomentadas
*/
Condicionais
if (condição) {// bloco de código
} else {
// bloco de código
}
switch(expressao) { case valor: // bloco de código
break;
// outros cases
default: // bloco de código
}
�2
Introdução à Linguagem Java
Senac São Paulo
• Comandoif else
• Acondiçãosempredeveserumliteral,variávelouexpressãobooleana(incluem-
seaítambémosretornosdemétodos).
• Quando o bloco de código possuir apenas uma linha, não são necessárias as
chaves.
• Ousodoelseéopcional.
• Comandoswitch
• Aexpressãodeveserumavariávelouexpressãoqueresultenumnúmerointeiro
ounumnúmeroquepossaserconvertidoparainteiro(byte,shortechar).
• Ovalordevesersempreumliteralinteiro.
• Obreaknãoéobrigatório.Nessecasoaexecuçãodoprogramaprosseguepara
opróximoblocodecódigo.
• Odefaultnãoéobrigatório.Nocasodenenhumcaseserigualaexpressão,ne-
nhumcódigoéexecutado.
n Laçoswhile(condição) { // bloco de código
}
do {
// bloco de código
} while (condição);
• ComandoswhileedowhileAcondiçãosempredeveserumliteral,variávelouexpressãobooleana(incluem-seaítam-bémosretornosdemétodos).Quandooblocodecódigopossuirapenasumalinha,nãosãonecessáriasaschaves.
�3
Introdução à Linguagem Java
Senac São Paulo
Exemplos:
while(i<2) {
...
i++;
}
do {
...
i++;
} while (i<10);
n Laçosfor(inicialização; condição; comando) { // bloco de código
}
for(iteração sobre coleção) { // bloco de código
}
• Comandofor
• A inicialização pode declarar uma ou mais variáveis cujo escopo é o bloco de
código.
• Acondiçãosempredeveserumliteral,variávelouexpressãobooleana(incluem-
seaítambémosretornosdemétodos).
• O comando pode um ou um conjunto deles, separados por vírgulas e sempre
serãoexecutados.
• Ainicialização,acondiçãoeocomandonãosãoobrigatórios.
• Quando o bloco de código possuir apenas uma linha, não são necessárias as
chaves.
• Ainteraçãosobrecoleçãodeclarasempreumobjetodotipodacoleção.Oíndice
dacoleçãonãoestádisponívelnoblocodecódigo.
��
Introdução à Linguagem Java
Senac São Paulo
Exemplos:
for(int i=0; i<10; i++) {
...
}
int[] arrVal = new int[5];
...
for(int a : arrVal) {
soma += a;
}
n Importarparaoarquivofonteasclassesoupacotesindicados import <classe ou pacote>;
n Definiropacoteaoqualpertenceaclassesendodefinida package <nome do pacote>;
n Interrompeaexecuçãodeumblocoindicado break [label];
n Forçaapróximainteraçãodolaçoindicado continue [label];
AimportaçãodearquivosoupacotesdeveserfeitasemprenoiníciodoarquivoJava.
Adefiniçãodopacotedevesempreserfeitaantesdadefiniçãodequalquerclasseouinter-facenoarquivoJava.
Obreaksomentepodeinterromperblocoqueoenglobe.Comoadefiniçãodesselabeléopcional,nasuaausência,oblocomaisinternoepróximodobreakéointerrompido.Omesmovaleparaocontinue,comrelaçãoaoslaços.Casoolabelsejaespecificado,essescomandosinterrompemolaçoidentificadopelolabel.
Oslabelssomentepodemseratribuídosalaços
label1:for(...){...}
��
Introdução à Linguagem Java
Senac São Paulo
Parâmetros de entrada
n Umprogramade linhadecomandopodereceberparâmetrospelaprópria linhade
comando
n OparâmetroString[]domainéquerecebeosvalorespassadospelalinhadecomando
java TesteParametro primeiro 2 “terceiro parâmetro”
• Programaparatestarparâmetrosdeentradapublic class TesteParametro {
public static void main(String[] args) {
for(int i=0; i< args.length; i++) {
System.out.println(args[i]);
}
}
}
n NoEclipseéprecisoconfigurarumLauncher
• Comobotãodireitodomousesobreoprograma,escolher
Run as >> Run...
• SelecionartabArgumentseacrescentarosparâmetrosdalinhadecomando
• PressionarbotãoRun
• SelecionaroLauncher
��
Introdução à Linguagem Java
Senac São Paulo
• Editarlinhadecomando
�7
Introdução à Linguagem Java
Senac São Paulo
CAPÍTULO 5CLASSES E OBJETOS
��
Introdução à Linguagem Java
Senac São Paulo
Pacotesn Defineonomecompletodaclasse(“fullyqualifiednameclass”)
n Usodapalavrareservadapackage
• Primeiralinha“útil”doprograma
n Umoutroarquivofontereferenciaumaclassepeloseunomecompletooucomouso
deimport
n Oimporttambémpodeimportaratributosestáticosdeclasses
import java.lang.Math.PI;
Onomecompletodeumaclassecompreendeonomedopacoteaoqualelapertencejun-tocomonomecomoqualelafoideclarada.AclasseDate,doJava,estánopacotejava.util,portantoseunomecompletoé java.util.Date.Numarquivofontequalquer,paraseutilizaraclasseDate,ouimportamosopacotenoiníciodofonteouareferenciamospeloseunomecompleto.importjava.util.Date;...Datedt=newDate();Ouimportjava.util.*;//importatodasasclassesdopacote...Datedt=newDate();Oujava.util.Datedt=newjava.util.Date();
AclasseString,doJava,porexemplo,estánopacotejava.lang,portantoonomecompletodessaclasseéjava.lang.String.Noentanto,opacotejava.langéautomaticamenteimporta-doportodososarquivosfontes.
Adefiniçãodopacoteaoqualpertenceumaclasseéfeitausandopackagebr.com.empresa.nomepacote;publicclassNomeClasse{...}Essaclasse,temonomecompletobr.com.empresa.nomepacote.NomeClasse
Exercícios:
1.FaçaumaAplicaçãoJavaqueimprimenasaídapadrãoonúmerodeargumentoseosargumentospassadosparaoprograma.
��
Introdução à Linguagem Java
Senac São Paulo
Exemplo:
>javaArgumentosabcde2“MaisumTeste”3,1416Númerodeargumentos:4abcde2MaisumTeste3,1416
2.FaçaumaAplicaçãoquecalculeofatorialdeumnúmeropassadocomoargumento.
3.FaçaumaAplicaçãoquecalculeofatorialdeumnúmeropassadocomoargumentoequetesteaintegridadedomesmo–verificaseonúmeroéinteiroesetemumvalorsuficiente-mentepequenoparaqueoresultadosejacoerente–eimprimamensagensparaousuárioalertandoparapossíveiserrosnoargumento(inclusiveavisandocasoousuárionãotenhapassadonenhumargumento).
4.FaçaumaAplicaçãoqueconvertanúmerosdecimaisemnúmeroshexadecimais.Exemplo:>javaConversor13Decimal:13Hexadecimal:DjavaConversor64Decimal:64Hexadecimal:40
5.Façaoconversorinversotambém.
Para pensar
Oqueaconteceseeutentarcompilarocódigoabaixo?
shortf=1;shortg=2;shorth;h=f+g;
�0
Introdução à Linguagem Java
Senac São Paulo
n Programaçãoorientadaaobjetos
• Oqueé?
•Unidadesdecódigoqueinteragemsãoosobjetos
• Classes
• atributosecomportamento-variáveisemétodos
• variáveisemétodosinternospodemnãoservisíveisexternamente
• classespodemserdefinidasdeformaincremental(herança)
• Paraqueserve?
• Metodologiaeficiente
• Programasgrandesedesenvolvidosporequipes
• Grandeíndicedereaproveitamentodocódigo
�1
Introdução à Linguagem Java
Senac São Paulo
n Objetossãoentes
n Classessãodefinições
• Objetossãomodeladoscomoosobjetosdomundoreal,ouseja,possuemexistência
“física”dentrodeumprograma,ocupandoespaçodememória e armazenando as
informaçõespertinentes.
• Classessãodefiniçõesgenéricasdeobjetos(moldesdeobjetos).Podemexistirportan-
továriosobjetosdeumaúnicaclasse.
Classessãodefinidasafimdequeapartirdelaspossamsergeradososobjetosqueassu-memaquelaspropriedadeseexecutamaquelafuncionalidadedefinidanaclasse.
Uma conceito simples que pode ser atribuído à classe, suficiente para sua compreen-sãode formaclara,éassociá-laaumnovotipo.Portanto,asclassesseriamostiposde“variáveis”definidospeloprogramadoreosobjetosseriamaspróprias“variáveis”declara-dasdaqueletipo.Narealidade,umobjetoémuitomaisqueumavariável,oqueserávistonaspróximaspáginas.
�2
Introdução à Linguagem Java
Senac São Paulo
IMpORtante
n Definircuidadosamenteumaclasselevando-seemcontaaspectosdefuncionalidade,
generalidadeeacessibilidade
n Nomenclatura:classesdefinidaseobjetosinstanciados(ouseja,umobjetoéumains-
tânciadeumadadaclasse)
• Definirfuncionalmenteasclasses–tornamaislógicooencapsulamento.
• Definir claramente que elementos compõem a interface - permite que outros
usemseusobjetosdeformasimplesecorreta.
• Partirdeclassesmaisgenéricas–facilitareaproveitamentodocódigoaomesmo
tempoquedefineoalcancedaclasse.
• Teremmentequeasclassessãodefinidaseosobjetosdeclarados.Portanto,
todoobjetocriadoocupaespaçonoseuprogramaounamáquinarodandoopro-
grama,edeve-seevitarcriarobjetosnãoutilizados.
• Consideraraspectosdesegurançanadefiniçãodaacessibilidadedaclasse.
• Nomenclaturadelinguagem:classessãodefinidaseobjetossãoinstanciados(ou
seja,umobjetoéumainstânciadeumadadaclasse).
�3
Introdução à Linguagem Java
Senac São Paulo
Conceito de classe
Umaclassecontémumadefiniçãodeumconjuntodevariáveisefunçõesquesãoencap-suladasconjuntamenteecompartilhamomesmoescopodedefinições.Assim,umaclasseédefinidapor seusatributos (variáveis)ecomportamento (métodosou funções).Estascaracterísticaspermitemqueaclasseassumaempapeldentrodeumprogramaunicamen-teemtermosdesuaspropriedades,ouseja,fatoresexternosàclassenãopodemafetá-la,alémdopermitidoporela.Esteencapsulamentoéutilizadocomumasériedebenefíciosemrelaçãoaoconceitoconvencionaldeprogramaçãonãoorientadaaobjetos.
Todaclasseédefinidaemtermosdesuainterfaceesuaimplementação.
Atributos, métodos e interfaces
n Atributos:variáveisoupropriedadesdeumobjeto
n Métodos:comportamentodoobjeto<Modificadores> <tipo de retorno> <nome do método>(<lista de
parâmetros>) {
//blocos de comandos
}
Interface
classe TextWindow
Implementaçãodos atributos
private int x, y;private int dx, dy;private boolean min;
Implementaçãodos métodos
private resize(...);private maxim();private clear();
public String Título;
public int getX();public int getY();public boolean getMin();public int setX(int X);public int setY(int Y);
public int resizeWin(int dx, int dy);public int moveWin(int X, int Y);public int clearWin();public int max();public int min();public int loadWin(String Texto);
programa
��
Introdução à Linguagem Java
Senac São Paulo
n Interface:métodosouvariáveisvisíveisaomundoexterior
• Variáveis:sãolocaisaoobjetoeimplementamoconceitodeatributosoupropriedades
deumobjeto.
• Métodos: são locais ao objeto e implementam o conceito de comportamento do
objeto,oucomosuaspropriedadesserelacionam,tantoentresi,comocomomundo
exterior.
• Interface:sãométodosouvariáveisvisíveisaomundoexterioraoobjeto.Éapartedo
objetoqueinteragecomosoutrosobjetosdeumprograma.
Regras gerais
n Atributos
• clareza
n Métodos
• abrangência
n Interfaces
• segurança
• Atributos
• Clarasesignificativascomrespeitoàspropriedadesquerepresentam
• Podemseroutrasclasses
• Métodos
• Deveabranger,pordefinição, “todo”ocomportamentodesejadodaclasse, in-
clusiveaquelesaindanãoimplementados,ouquedevemserimplementadospor
subclasses
• Interfaces
• Maissegurançaseimplementadaapenascommétodos
• Verificaçãodeparâmetrosdeentrada
• Mínima,masfuncional.Deve-sebuscarocompromissoidealentreestascaracte-
rísticas.
��
Introdução à Linguagem Java
Senac São Paulo
Métodos especiais
n Construtor
• inicializaoobjeto
• deveteromesmonomedaclasse
n MétodosAbstratos
• Métododeclaradomasnãodefinido
n Destrutor
• Finalizaobjeto
n Construtor
• Métodoqueinicializaoobjeto.Éoprimeirométodochamadoquandooobjetoé
criado(instanciado)esomentepodeserchamadonestasituação
• Usadoparainicializaratributosdoobjetoeexecutarosmétodosdeinicialização
(abrirumarquivo,porexemplo)
• Deveteromesmonomedaclasse;nãopossuivalorderetornoepodeexistirem
qualquernúmeroparaumamesmaclasse(diferepelonúmerodeargumentos)
n MétodoAbstrato
• Métododeclaradomasnãodefinido,usadoparaforçara implementaçãodeum
comportamentodesejadonassubclassesqueherdaremestemétodo
n Destrutor
• Finalizaobjeto,“limpa”variáveiseliberarecursos.EmJavanãopodeserinvocado
diretamente.Éinvocadonadealocaçãodoobjeto.Chama-sefinalizeetemomes-
monomepratodosasclasses.
��
Introdução à Linguagem Java
Senac São Paulo
Definição de uma classe e alocação
n Declaraçãodaclasse
public class Biometrica {
public int altura, peso, idade;
}
n Declaraçãodoobjeto
Biometrica entrada, saida;
n Instanciaçãodoobjeto
entrada = new Biometrica ();
saida = new Biometrica ();
• Declaraçãodaclasse
AclasseBiométricapossuitrêsatributospúblicos.
• Declaraçãodoobjeto
Adeclaraçãodoobjetonadamaisédoquedeclararasvariáveisqueapontarão
para as instâncias.Nadeclaração,osobjetosnãoestão ainda instanciados,mas
apenasnomeados.
• Instanciaçãodeobjetos
Osobjetossempresãoinstanciadospelooperadornew,queinvocaumconstrutor
daclasse.Nesseexemplo,oconstrutordefaultfoiutilizado.Oconstrutordefault
édefinidoimplicitamenteatodasasclassesquenãopossuemconstrutordefinido.
Eleéumconstrutorquenãorecebeargumentonenhum.
entrada saida
altura: 0
peso: 0
idade: 0
altura: 0
peso: 0
idade: 0
altura: 0
peso: 0
idade: 0
altura: 0
peso: 0
idade: 0
�7
Introdução à Linguagem Java
Senac São Paulo
Construtores e instanciação
n Definirumconstrutormaisútil
public class Biometrica {
public int altura, peso, idade;
public Biometrica (int altura, int peso, int idade) {
this.altura = altura;
this.peso = peso;
this.idade = idade;
}
}
n Instanciaçãodeobjetosentrada = new Biometrica (120, 34, 12);
saida = new Biometrica (134, 42, 15);
Construtorespodemserdefinidosemqualquernúmero,desdequedifiramentresinalistadeargumentosquerecebem.
Apalavrareservadathis,dentrodeumaclasse,refere-seàinstânciacorrentedessaclasse.Assim,this.alturarefere-seaoatributoalturadaclasse,enquantoavariávellocalalturanãoéreferenciadaporela.
Referências a objetos
n Declaraçãodeobjetosquerecebemoutrasinstâncias
entrada = new Biometrica (120, 34, 12);
saida = new Biometrica (134, 42, 15);
Biometrica aux1 = entrada;
aux1.peso = 35;
Objetosdeclarados(masnão instanciados)podemseratribuídosaobjetos instanciados.Nessecaso,tem-seduasreferênciasparaomesmoobjeto.Qualqueralteraçãofeitaatra-vésdequalquerreferênciaafetaoobjetoemquestão.
entrada saida
altura: 120
peso: 34
idade: 12
altura: 120
peso: 34
idade: 12
altura: 134
peso: 42
idade: 15
altura: 134
peso: 42
idade: 15
entrada saida
altura: 120
peso: 35
idade: 12
altura: 120
peso: 35
idade: 12
altura: 134
peso: 42
idade: 15
altura: 134
peso: 42
idade: 15
aux1
��
Introdução à Linguagem Java
Senac São Paulo
Declaração de métodos
Métodossãofunçõesinternasàclasse.
Ummétodoéumafunçãodefinidadentrodeumaclasseequeimplementaumcompor-tamentodestaclasse.Quandonãopossuir tipoderetornodeveserutilizadaapalavrachavevoid.
public void incrementarIdade() {
this.idade++;
}
Os argumentos de um método devem ser defi nidos pelos seus ti-
pos.
public void acrescentarAltura(int aumento) {
this.altura += aumento;
}
public class Biometrica {
public int altura, peso, idade;
public Biometrica (int altura, int peso, int idade) {
this.altura = altura;
this.peso = peso;
this.idade = idade;
}
public fl oat obterRelacaoAlturaPeso() {
return this.altura/this.peso;
}
}
��
Introdução à Linguagem Java
Senac São Paulo
Notação UML
n UML:UnifiedModelingLanguage
n Padrãoparaespecificaçãodesistemasorientadoaobjetos
n Classe
AnotaçãoUMLéumpadrãoutilizadoamplamenteparaespecificarsistemasorientadosaobjetos.Odiagramadeclasseséumdosmaisutilizados.
Anotaçãoparaespecificarumaclasseéumretânguloquepossuitrêsregiões:umacomonomedaclasse,outracomosseusatributoseumaterceiracomosseusmétodosouconstrutores.
Osatributossãoespecificadoscomseustiposesuaacessibilidade: +paraacessopúblico -paraatributosprivados
Osmétodossãoespecificadoscomseustiposderetornoelistadeargumentos,alémdaacessibilidade,comoosatributos.
Biometrica
+ peso: int+ altura: int+ idade: int
+ Biometrica(peso:int, altura: int, idade:int)+ obterRelacaoAlturaPeso(): float
Nome da classe
Atributos
Métodos / Construtores
�0
Introdução à Linguagem Java
Senac São Paulo
Sobrecarga de métodos
n Definiçãodemúltiplosmétodoscomomesmonomemastiposdeparâmetros
diferentes
Polimorfismodemétodosousobrecargademétodospermitequemétodoscomomesmonomesejamimplementadosdeformadiferente.Istosetornamuitoútilquandoempre-gadoparaprovero“mesmo”comportamentoparaconjuntodeparâmetrosdiferentes.Porexemplo:umconjuntodemétodoschamadossomapodeserdefinidoparaexecutarasomaentreinteiros,floatsestrings,eoempregodomesmonomefacilitaaprogramaçãoealeituradocódigo.
n Métodoscommesmonomemaslistadeargumentosdiferentes public void setPeso(int peso) {
this.peso = peso;
}
public void setPeso(int peso, int redutor) {
this.setPeso(peso – redutor);
}
n Invocaçãodosdiferentesmétodosentrada.setPeso(55);
entrada.setPeso(48, 5);
método B
método B
método B
método Bparâmetros
verificaçãode tipos
�1
Introdução à Linguagem Java
Senac São Paulo
n Métodoscommesmaassinaturacausamerrodecompilação
void resize(int x, int y, int dx, int dy) {
this.x=x; this.y=y;
this.dx=dx; this.dy=dy;
}
void resize(int x1, int y1, int x2, int y2) {
x=x1; y=y1;
dx=x2-x1; dy=y2-y1;
}
n Tipoderetornonãodiferenciammétodos
int calc(int a, int b, int c, int d) {..}
float calc(int a, int b, int c, int d) {..}
Cuidado:osnomesdosargumentosnãodiferenciamummétododooutro,portantodoismétodos com lista de argumentos em igual número e tipos, mas com nomesdiferentes,nãosãosobrecarregadosegeramumerrodecompilação.
Sobrecarga de construtores
n Construtorescomlistadeargumentosdiferentes public Biometrica(int altura, int peso, int idade) {
this.peso = peso;
this.altura = altura;
this.idade = idade;
}
public Biometrica(int altura, int idade) {
this(altura, altura – 110, idade);
}
n Invocaçãodosdiferentesconstrutoresentrada = new Biometrica(155, 49, 17);
saida = new Biometrica(180, 21);
Damesmaformaquemétodos,construtorestambémpodemsersobrecarregados.Adi-ferenciaçãoocorredamesmaforma,pelalistadeargumentos.
Ainvocaçãodeumconstrutordentrodeoutroutilizaanotaçãothis(...),onde,pelalistadeargumentospassadoséidentificadooconstrutorinvocado.
�2
Introdução à Linguagem Java
Senac São Paulo
Aidentificaçãodequalconstrutorfoiinvocadoéfeitapelosargumentos.Construtoresso-brecarregadosdevempossuirlistasdeargumentosdiferentesemquantidadee/outipos.
Cuidado:osnomesdosargumentosnãodiferenciamumconstrutordooutro,portantodoisconstrutorescomlistadeargumentosemigualnúmeroetipos,mascomnomesdiferentes,nãosãosobrecarregadosegeramumerrodecompilação.
Classes e métodos abstratos
n Métodosabstratossãoaquelesquenãopossuemimplementação
n Umaclassecomapenasummétodoabstratonãopodeser instanciadaeétambém
chamadadeclasseabstrata
n Pertenceàinterfacedaclasse,impondoumcontratoparaassubclasses(nopróximo
capítuloissoseráestudado)
abstract public class Biometrica {
...
abstract public int calcularPesoIdeal();
}
Classesabstratasnãopodemserinstanciadas,umavezque“falta”partedesuaimplemen-tação.Umaclasseabstrataserveparaestabelecerumainterfacecujasubclasses,sepreci-saremserinstanciadas,necessariamenteterãoqueimplementar.Noscapítulosseguintes,quandofortratadootemaPolimorfismo,ficaráclaraavantagemdousodeclassesabstratas.
�3
Introdução à Linguagem Java
Senac São Paulo
Atributos e métodos estáticos
n Atributosemétodosdeclasse
n Alocaçãonaclasse
n Compartilhamentoentretodososobjetosdaclasse
public class Biometrica {
public static int pesoMinimo = 25;
public int altura, peso, idade;
public Biometrica (int altura, int peso, int idade) {
this.altura = altura;
this.peso = peso;
this.idade = idade;
}
public static int obterPesoMinimo() {
return pesoMinimo
}
}
Atributosemétodosestáticossãotambémchamadosdeatributosoumétodosdeclasse,emcontraposiçãoaosatributosemétodosdeinstância,queassumemumvalorparacadainstância(objeto).Sãoalocadosumaúnicavezemmemória,epermanecemalocadosenquantoaclasseesti-vercarregada.Umatributoestáticoécompartilhadoentretodososobjetosdaclasse.Seoatributoforpúblico,outrasclasseseobjetostambémutilizamasuaúnicaalocaçãoemmemória.
��
Introdução à Linguagem Java
Senac São Paulo
n Referênciaavariáveis/métodosestáticos
Asvariáveisestáticassãoalocadasnasclassesenãonosobjetos.Noexemplo,amesmavariávelpodeseralocadadequalquerumadasformasaseguir:
Biometrica.pesoMinimoentrada.pesoMinimosaida.pesoMinimo
API Javan AdocumentaçãodetodasasclassesJavaquevemjuntocomaJVMdeveserbaixada
separadamentenositejava.sun.com
n Procurarpelodownloadde“J2SE(TM)DevelopmentKitDocumentation”
n Baixaroarquivocomprimido
n Descomprimirnumdiretórioeabriroindex.html
Exercícios:
1.Construaumaclasse–chamadaPonto–quedefinaumpontonoplano.Umpontoécaracterizadoporduascoordenadas(xey,porexemplo).OnomedoarquivodeveserPonto.java.
Biometrica.pesoMinimo = 20;
int p = Biometrica.obterPesoMinimo();
entrada.pesoMinimo = 28
int q = saida.obterPesoMinimo();
entradasaida
altura: 120
peso: 35
idade: 12
altura: 120
peso: 35
idade: 12
altura
peso
idade
pesoMinimo: 28 pesoMinimo
altura: 134
peso: 42
idade: 15
altura: 134
peso: 42
idade: 15
pesoMinimo
Biometrica
��
Introdução à Linguagem Java
Senac São Paulo
Façaummétodomainparaessaclasse.Nestemétodo,definadoisobjetospontosp1ep2.Atribuaaopontop1ascoordenadas(10,10).Mostreosvaloresdessascoordenadasnasaídapadrão.Atribuaaopontop2ascoordenadas(50,50).Mostreosvaloresdessascoordenadasnasaídapadrão.DeclareumareferênciaaPontocomnomep3.Atribuap1ap3.Atribuaaopontop3ascoordenadas(30,30);Mostreascoordenadasdetodosostrêspontos.
2.FaçaummétodoparaPontoquecalculeadistânciaentreopontoeumoutropassadocomoargumento.Adefiniçãodométodopodeser:
double distancia(Ponto p) {
...
}
3-FaçaumaclasseQuadrilaterocompostaporquatropontos.Definaummétodoqueve-rifiquemseoQuadrilateroéumretânguloortogonal(ouseja,seospontosestãodispostossegundoafiguraabaixo.
CAPÍTULO 6ARRAYS E STRING
�7
Introdução à Linguagem Java
Senac São Paulo
n Arrays
• DeclaraçãoString palavras[]; ou String[] palavras;
Data vencimentos[]; ou Data[] vencimentos;
int arrVal[]; ou int[] arrVal;
• InstanciaçãodoArrayarrVal=new int[200];
vencimentos =new Data[10];
String[] frase = {“Estas”, “palavras”, “formam”, “a”, “frase”);
• AcessoarrVal[0]=23;
vencimento[8] = new Data(23, 4, 2005);
String s = frase[2];
• Tamanhoint l = arrVal.length;
UmarrayémuitosemelhanteaumobjetoemJava.Eleprecisaserdeclaradoeinstanciado.Issopodeserfeitonumamesmalinha:
Data[] vencimentos =new Data[10];
Esse “objeto” array tem um único atributo já pedefinido chamado length, que dá otamanhoaoarray.
EmJava,umarrayédelimitadonasuainstanciação.Assim,oscasosdereferênciaaíndicesnãoexistentesnãopodemocorrer.Issogaranteumaformasegura,diretaesimplesdeusodearrays.Osíndicesdosarrayssempreseiniciamem0.Assim,umarraydeNelementos,podeserindexadode0aN-1.
int[] intervalos = {2, 5, 6};
int x = intervalos[0]; // x recebe 2
int y = intervalos[3]; // ERRO!
//Array de 3 elementos tem
//índices de 0 a 2
Arrayspodemserdetiposprimitivosoudeobjetos.Nocasodearraydeobjetosconvémnotarqueainstanciaçãodoarraynãoinstanciaosobjetosqueelepodeconter.
��
Introdução à Linguagem Java
Senac São Paulo
alOcaçãO de aRRayS
Array de tipos primitivos
byte[] mascara;
mascara = new byte[5];
mascara[2] = 5;
byte[] aux = mascara;
aux[0] = 7;
Umarray, ao serdeclarado, apenas reservaumareferênciaquepodeapontarparaum“objeto”array.Noexemplo,mascaraéapenasumareferência.Maisdeumareferênciapodemapontarparaomesmoarray,assimcomoocorremparareferênciasdeobjetos.Noexemplo,mascaraeauxapontamparaomesmoarray.
Umarraydetiposprimitivos,aoserinstanciado,temoseuespaçoalocadoemmemória,etodosvaloresalocadossãoinicializadoscom0.
n Arraysdeobjetos
Data[] vctos;
vctos = new Data[3];
vctos[0] = new Data(2, 3, 2004);
vctos[2] = new Data(10, 12, 2003);
vctos[1] = vctos[2];
vctos[1].setDia(23);
Umarraydeobjetos,aoserinstanciado,temoseuespaçoalocadoemmemória,etodososvaloresalocadossãoinicializadoscomnull.
Cadaelementodoarrayprecisaserinstanciadoindividualmenteecomporta-secomoumareferênciaparaoobjetoalocadoparaele.Expressõesdotipovctos[1].setDia(23)servemparaacessarosobjetosdecadaposiçãodoarray.
mascara
0 0 0000 0 000mascara
0 0 0050 0 005mascara
0 0 0050 0 005mascara
aux
7 0 0057 0 005mascara
aux
vctos
nullvctos nullnull
vctos
3
2004
2
12
2004
23
��
Introdução à Linguagem Java
Senac São Paulo
aRRayS MUltIdIMenSIOnaIS
n Arraysdedimensõeshomogêneasint[][] matriz = new int[5][3];
matriz[0][2] = 67;
Ponto[][][] cubo = new Ponto[3][6][2];
cubo[2][5][1] = new Ponto(34, 65);
n Arraysdedimensõesheterogêneasint[][] amostras = new int[3][];
amostras[0] = new int[3];
amostras[1] = new int[4];
amostras[2] = new int[2];
amostras[2][1] = 15;
amostras[0][1] = 56;
amostras[1][2] = 31;
Arraysmultidimensionaiscomdimensõeshomogêneaspodemserinstanciadosnumaúnicalinhadecomando,passando-seasduasdimensões.
int[][]matriz=newint[5][3];
Asdimensõespodemserobtidasseparadamente:matriz.lenghtresultaem5ematriz[0].lengthresultaem3.
Arrayscomdimensõesheterogêneasprecisamtercadadimensãoalocadaseparadamente.Nainstanciaçãodaprimeiradimensão,asdemaissãodeixadassemvalor.
int[][] amostras = new int[3][];
Edepois,paracadaposiçãodaprimeiradimensãodevemseralocadasasdemaisdimen-sões.
amostras[0] = new int[3];
amostras[1] = new int[4];
amostras[2] = new int[2];
0 0 0000 0 000
matriz
0 0 0000 0 000
67 0 00067 0 000
0 0 0
amostras
56 0 15
0 31
0
70
Introdução à Linguagem Java
Senac São Paulo
StRIng
n Stringéumaclasse,nãoumtipoprimitivo
n Stringtemalgunscomportamentosespeciais,típicosdetiposprimitivos
• Instanciaçãoésemelhanteainicialização
• Strings=“teste”;
• Concatenação
s=“umoutro”+“teste”;
n Stringssãosempreconstantes
n Stringsdevemsercomparadascomoobjetos(usarmétodoEqualsdaclasseString) str1.Equals(str2)
StringemJavaéumaclassequetemalgunscomportamentosdiferenciadosdasdemaisclas-ses.UmaStringpodeserinstanciadadamesmaformaqueumtipoprimitivoéinicializado.Repararquecontinuasendoumainstanciação,ouseja,umobjetoécriadoemmemória.Stringspodemserconcatenadascomooperador+.EssaoperaçãodeconcatenaçãogeraumaoutraString.
StringsdevemsercomparadasatravésdométodoEquals,daprópriaclasse.Essemétodocompara,caractereacaractere,duasStrings.Ooperador==aoseraplicadosobreStrin-gscomparaasreferênciasenãoosconteúdos.MuitasvezesesseoperadortemresultadosemelhanteaométodoEquals,issoporqueaJavaVirtualMachineprocuracompartilharasStringsiguais,evitandoamúltiplainstanciaçãodeStringsiguais.IssosóépossívelporqueStringssãoconstantes.
Exercícios:
1.FazerumaarreymétodoquetransformeumarraydeStringsemumaStringconcatenada.
2.Monteumarraymétodoquefaçaamultiplicaçãodematrizesusandoarrays.Lembrarque:
a11 a12 X b11 b12 =
a21 a22 b21 b22
a11*b11 + a12*b21 a11*b12 + a12*b22
a21*b11 + a22*b21 a21*b12 + a22*b22
ConsiderarqueasdimensõesdasmatrizespodemserNXMondeNeM>=1.
Para PensarComofazercópiadearrays?
CAPÍTULO 7HERANÇA EINTERFACES
72
Introdução à Linguagem Java
Senac São Paulo
n Herança
Formapelaqualumanovaclassesédefinidaapartirdeoutra,preservandosuainterfaceeacrescentandooualterandosuaimplementação:
• Formapelaqualnovasclassessãodefinidasdeformaincremental
• Definiçãodeumanovaclasseespecificandoumaclassemãeeumconjuntoadicionalde
atributose/oumétodos
• Aclassedefinidadessaformaherdatodososatributosemétodosdaclassemãe
• Aacessibilidadedainterfacedaclassemãenãopodeserredefinidanaclasseherdada
• Javanãopermiteherançamúltiplacomclasses,masapenascominterfaces.
73
Introdução à Linguagem Java
Senac São Paulo
Anatomia da herança
Dadaumaclassemãecomsuaimplementaçãoesuainterface,vemosqueumaclassefilhapodeserdefinidacomsuainterfaceesuaimplementaçãoapartirdaclassemãecomasseguintescaracterísticas:
• Ainterfaceoriginaldaclassemãeémantida.Aherançanunca“perde”interface.
• Aclassefilhapodeestenderainterface.
• A implementação da classe mãe é totalmente herdada pela filha, no entanto parte
dessaimplementaçãopodesersobrescritapelaclassefilha.Nessecaso,sobainterface
herdadadaclassemãepodemestarimplementaçõescompletamentediferentes.
• Aclassefilhapodeestenderaimplementação.
implem
entação
intereface
Classe mãe
Classe filha
Interface originalda classe mãe
Interface estendidapela classe filha
Implementaçãoexclusiva daclasse filha
Implementaçãosobrescrita pela
classe filha
Implementaçãoherdada da classe mãe
7�
Introdução à Linguagem Java
Senac São Paulo
Herança e hierarquia de classes
n l1éasuperclassedeCl1_1eCl1_2
n Cl1_1eCl1_2sãosubclassesdeCl1
n Cadaclassepodepossuirumaúnicasuperclasse
n Cadaclassepodepossuirqualquernúmerodesubclasses
n Cl1_1_1eCl_1_2sãoclassesdistintas,bemcomoCl1_2_1.
Aaplicaçãodeherançacriaumahierarquiadeclasses,ondeasclassesprimáriassãomaisgenéricaseasclassesfinaissãomaisespecíficas.Oesquemahierárquicodeclassespermiteestabelecerrelaçõesespeciaisentredetermi-nadasclasses,ouseja,umasubclassetemumrelacionamentodiferenciadocomsuasuper-classeeestaporsuavezenglobaváriascaracterísticascomunsatodasassuassubclasses.A utilização destas relações especiais dá um grande poder a um programa orientado aobjetos.
Noesquemadoaltodapáginapode-severcomoéanotaçãoUMLparaindicarherança.
Cl1
Cl1_2Cl1_1
Cl1_1_2Cl1_1_1 Cl1_2_1
Notação UMLpara herança
7�
Introdução à Linguagem Java
Senac São Paulo
Definição de subclasses
n Usodapalavrareservadaextends
Apalavrachaveextendséusadaparaestabelecerumarelaçãodeherançaentreduasclas-ses. Gerente é subclasse de Funcionário, e Funcionário, por sua vez, é superclasse deGerente.Notequea relaçãoestabeleceque todasaspropriedadesdeFuncionário sãoherdadasporGerente,quetambémpodedefinirpropriedadesadicionais.
Chamada de métodos na herança
Umadasrelaçõesespeciaisentresuperclasseesubclasseéocompartilhamentodeméto-dos.Oesquemadeherançaéresponsávelpeladeterminaçãodolocalexatodadefiniçãodeummétodo,nãodefinidanasubclasse,masemumdeseusancestrais.
public class Gerente {public String nome;public double salario;public double bonus;
}
public class Gerente extends Funcionario {public double bonus;
}
publicclassFuncionario{publicString nome;
publicdoublesalario;}
Objeto
método A();
método B();
chamada de B()
chamada de A()
7�
Introdução à Linguagem Java
Senac São Paulo
Sobrescrita de métodos
ClasseFuncionariocommétodoparacalcularcustomensaltotaldoFuncionario
n ClasseGerentecomomesmométodo
NaclasseGerenteaimplementaçãodométodoobterCusto()deveserdiferente,poisdevelevaremcontaobônusquesomenteogerenterecebe.Quandoumasubclassereimple-mentaummétododasuperclasse,diz-sequeessemétodofoisobrescritonasubclasse.Nessecaso,aimplementaçãoqueveioporherançadeFuncionariofoidescartada.
n Gerentecomsobrescritademétodos,masutilizandoométododasuperclasse
public class Funcionario {
public String nome;
public double salario;
public static double encargo = 1.8;
public double obterCusto() {
return this.salario * encargo;
}
}
public class Gerente extends Funcionario {
public double bonus;
static public double encargoBonus = 2.1;
public double obterCusto() {
return this.salario * encargo + this.bonus *
encargoBonus;
}
}
public class Gerente extends Funcionario {
public double bonus;
static public double encargoBonus = 2.1;
public double obterCusto() {
return super.obterCusto() + this.bonus *
encargoBonus;
}
}
77
Introdução à Linguagem Java
Senac São Paulo
Aosobrescreverummétodo,umasubclassedevereaproveitarométodooriginal,afimdenãoreescreverregras.Asobrecargademétodosdevepreferencialmenteproverumcomportamentoadicionalànovaclasse.Sendoassim,ocomportamentooriginal,herdadodasuperclasse,devecolaborarparacomportambémonovocomportamento.
Apalavrareservadasupertemafunçãodereferenciarmembrosdefinidosnasuperclasse.Assim,super.obterCusto()referenciaométododefinidonasuperclasse(Funcionario).
Herança e construtores
n Construtoresnãosãoherdados
• ConstrutordeFuncionario public Funcionario(String nome, double salario) {
this.nome = nome;
this.salario = salario;
}
Construtor de Gerente
public Gerente(String nome, double salario,
double bonus) {
super(nome, salario);
this.bonus = bonus;
}
Osconstrutoresdeumaclassenãosãoherdadospelas suas subclasses.Noentanto,asregrasdefinidasnos construtoresdas superclassespodemedevemser reutilizadasnosconstrutoresdassubclasses.NaclasseGerente,ousodesuper(...)invocaoconstrutordasuperclasseeportantoutilizaocomportamentojádefinidoemFuncionario.
Exercícios
1.Façaumaclassequerepresenteumacontabancária.
2.Façaumasubclassedecontaemqueométododebitaleveemcontaolimite.
3.FaçaumaclasseBancoquecontenhaumgrupodecontas(quedevemseralocadoemumarraydeContas).Façamétodosqueefetuemcadastramentodecontas,movimenta-çõesfinanceiras(débitosecréditosemcontasespecificadaspeloseunúmero).Façaummétodoqueinformeoativodobanco(somadetodosossaldos).Façaummétodoquedebiteumvalorfixo(taxadeadministraçãodeR$3,50)detodasascontas.
7�
Introdução à Linguagem Java
Senac São Paulo
Interfaces
n Interfacessãoconjuntodeatributosestáticosoumétodosabstratosqueestabelecem
umasériedecomportamentosqueseesperadaclassequeaimplementa
n Classeseinterfacessãoequivalentes,excetopelofatodequeinterfacesnãopodem
serinstanciadas
n Interfaceéumaclasseabstratacomtodososmétodosabstratos
n HerançamúltiplaemJava
• CadaclassepodeterapenasUMAsuperclasseeimplementarVÁRIASinterfaces.
Interfacessãoconjuntodeatributosestáticos(variávelúnicacompartilhadaportodososobjetosdeumamesmaclasse)e/oumétodosabstratos(métodoscomassinaturadefinida,mascorponãodefinido)queestabelecemumasériedecomportamentosqueseesperadaclassequeaimplementa.
AusênciadeherançamúltiplaemJavaéumalimitaçãoamenizadapeloempregodeinterfa-ces.Javapermitequeumaclasseimplementeumaoumaisinterfaces.
• Vantagem:
• Duasclassesdistintasqueimplementamamesmainterfacerespondemaumcon-
juntoidênticodefunções(emboranãonecessariamentedamesmaforma).
Classeseinterfacessãoequivalentes,excetopelofatodequeinterfacesnãopodemserinstanciadas.Interfaceéumaclasseabstratacomtodososmétodosabstratos.
7�
Introdução à Linguagem Java
Senac São Paulo
Declaração de interfaces
n Declaraçãodeumainterface
public interface Colaborador {
public double obterCusto();
}
n Implementaçãodeumainterface
public class Consultor implements Colaborador { public double valorHora;
public int totalHoras;
public double obterCusto() {
return this.valorHora * this.totalHoras;
}
}
Umainterfaceédeclaradacomousodapalavrareservadainterface,queeliminaane-cessidadededeclararosmétodoscomoabstratos.Numainterface,todososmétodossãonecessariamenteabstratos.
Umaclassepode implementar umaoumais interfaces.Para a classe ser concreta (nãoabstrata) é necessário que todos os métodos das interfaces que ela implementa sejamimplementados.
NanotaçãoUMLumainterfaceérepresentadacomoumaclasse,masmarcadacomoes-tereótipodeinterface(umcírculonocantosuperiordireitodoretângulodaclasse).
Exemplo do uso de interfaces
n Vamossuporumprogramausadoporumpaís fictícioquecobraumimpostoúnico
anualsobretodasaspropriedadese/oubensdeseuscidadãos.Vamoslimitarosbens
aimóveiseautomóveisemodelarasclassesquecomporiamesteprograma.
• Comosetrataeumpaísmoderno,asunidadesderegistrosãoosbensenãoas
pessoas(direitoàprivacidade)
• Comoexistemváriostiposdeimóveiseautomóveis,convémcriarasclassesbási-
casapartirdasquaissãoherdadososváriosregistros(classes)diferentes
• Vamossimplificarnossoexemplo!
Colaborador
Consultor
�0
Introdução à Linguagem Java
Senac São Paulo
Definição das classes bases
Umainterfaceéutilizadaparasedefinirumcontratoquedeveserobedecidoportodasasclassesqueaimplementam.
Noexemplodado,sãodefinidasduashierarquiasdeclasses,umarelacionadasabensmó-veiseoutraabensimóveis.Comosãohierarquiasdistintas,nãoexisteumasuperclasseco-mumatodasessasclassesqueformaumcontratoparatodasaomesmotempo.Asolução,então,édefinirumainterfacequeforçaaimplementaçãodeummétodoquesedesejaquetodasasclassesimplementem.
class Imovel {
String proprietario;
String localizacao;
int valor;
void mudaProp(String p) {
//verifi ca e efetua;
}
void mudaValor(int v) {
//verifi ca e efetua;
}
}
class Auto {
String proprietario;
String endereco;
String placa;
int valor;
boolean licenciamento() {
//efetua;
}
int verifi caMulta() {
//verifi ca e efetua;
}
}
�1
Introdução à Linguagem Java
Senac São Paulo
Exemplo - Definição das classes derivadas
Exemplo - Definição da interface
n Imposto único se aplica a todos os bens, portanto a todas as classes anteriores.
Ocálculopodeserdistinto,masexisteumprocedimentoúniconacobrança,cálculoe
registro,portantopodeserimplementadaumainterfaceparaisso
Omodificarfinal,quandoaplicadoavariáveis,astornamconstantes,ouseja,umavezatri-buídas,nãopodemseralteradas.
class Casa extends Imovel {
int areaConstruida;
int numPavimentos;
boolean usoComercial;
.
.
}
class Predio extends Imovel {
int areaTerreno;
int numApto;
.
boolean vistoria() {..}
}
class Terreno extends Imovel {
int area;
boolean murado;
.
.
}
class Carro extends Auto {
String modelo;
String cor;
int numPassageiros;
.
}
class Caminhao extends Auto {
String modelo;
int taraMax;
.
void autorizaCarga() {..}
}
class Moto extends Auto {
String modelo;
int cc;
.
.
}
public interface IUSB { //Imposto Unico Sobre Bens
static fi nal fl oat aliquota=0.01; // 1% - aliquota unica
static fi nal Data venc = new Data(30, 9, 2006);
abstract double calculoImposto();
abstract boolean verifi caVencimento(Data data);
}
�2
Introdução à Linguagem Java
Senac São Paulo
Exemplo - Redefinição das classes bases
AodefinirqueasclassesbasesimplementamainterfaceIUSB,força-separaquetodasassuassubclassesdevamimplementarosmétodosdefinidosnainterface.
Comoasclassesbasesnãoimplementam(nesseexemplo)osmétodosabstratosdainterfa-ce,elasdevemserdeclaradasabstratas(poispossuemagoramétodosabstratos,herdadosdainterface).
abstract class Imovel
implements IUSB{
String proprietario;
String localizacao;
int valor;
void mudaProp(String p) {
//verifi ca e efetua;
}
void mudaValor(int v) {
//verifi ca e efetua;
}
}
abstract class Auto
implements IUSB{
String proprietario;
String endereco;
String placa;
int valor;
boolean licenciamento() {
//efetua;
}
int verifi caMulta() {
//verifi ca e efetua;
}
}
�3
Introdução à Linguagem Java
Senac São Paulo
Exemplo - Redefinição da classes
AssubclassesdeImoveledeAutoqueforemconcretas(podemserinstanciadas)devemagora implementarosmétodosdefinidospela interface.Notarqueessassubclassesnãosãoabstratas,porquenãopossuemmaismétodosabstratos.
Exercício:
1.Codificaretestaroexemplodeusodeinterfaces.
class Casa extends Imovel {
int areaConstruida;
int numPavimentos;
boolean usoComercial;
.
int calculoImposto() {
return valor*indiceArea(areaConstruida)*aliquota;
}
boolean verifi caVencimento(Data data) { . . . }
}
class Caminhao extends Auto {
String modelo;
int taraMax;
.
int calculoImposto() {
return valor*aliquota-desconto(taraMax);
}
boolean verifi caVencimento(Data data) { . . . }
}
��
Introdução à Linguagem Java
Senac São Paulo
Modificador final
Omodificadorfinal,quandoaplicadoavariáveis,astransformamemconstantes.Umavezatribuídas,nãopodemmaisseralteradas.
Omodificadorfinal,quandoaplicadoamétodos,impedemqueelessejamsobrescritos.
Omodificadorfinal,quandoaplicadoaclasses,impedequeelassejamutilizadascomosu-perclasses.Ouseja,umaclassefinalnãopodeserherdadapornenhumaoutraclasse.
CAPÍTULO 8ENCAPSULAMENTO
��
Introdução à Linguagem Java
Senac São Paulo
n Éacaracterísticadaorientaçãoaobjetosquepermitequeumaclassedefinaaacessi-
bilidadedeseusmembros
n Outrasclassesouobjetosdeoutrasclassessomentetêmacessoaosmembroscuja
classepermitiuacesso
n Nemmesmoumasubclassepodeteracessoamembrosqueasuperclassenãodeu
acessibilidade
Oencapsulamentoéumacaracterísticaqueconfereàclasseopoderdedeterminarcomoseráoacessoaseusmembros.Essacaracterísticapossibilitaqueatributossejamcorreta-menteprotegidosdeacessosindevidos.
Comousocorretodoencapsulamentoevita-sequeobjetosassumamvaloresdeproprie-dadesinconsistentes.Evita-setambémquecomportamentosnãopúblicosdeumaclassesejamutilizadasexternamenteaela.
Osmodificadoresdeacessosãoosinstrumentosdalinguagemparadefiniroencapsula-mento.
Modificadores de acesso
n Palavrasreservadasquedeterminamoacessopermitidoaclasseseseusmembros
• public• protected
• private
n NotaçãoUML(+,-e#) +public -private #protected
�7
Introdução à Linguagem Java
Senac São Paulo
EmJava,existem4modificadoresdeacesso:ostrêsindicadospelaspalavras-chavespu-blic,protectedeprivate,maisomodificadordadopelaausênciadepalavra-chave.Ouseja,aausênciademodificadordeacessoéumadefiniçãodeacessibilidadetambém.
AnotaçãoUMLempregaossímbolos+paraindicarqueummembroépúblico,-paraprivadoe#paraprotegido.
public
• Aplicadoaclasseseinterfaces:determinamqueaclassepodeserutilizadalivre-menteporqualqueroutraclasseouinterface.
• Aplicadaamembros:determinamqueomembropodeserutilizado livrementeporqualqueroutraclasse.
protected
• Nãoseaplicaaclasseseinterfaces.• Aplicadaamembros:determinamqueomembropodeserinvocadoouutilizado
apenasporclassesdomesmopacoteouporsubclasses.
Sem modificador
• Aplicadoaclasseseinterfaces:determinamqueaclassepodeserutilizadaapenasnomesmopacote.
• Aplicadaamembros:determinamqueomembropodeserutilizadoapenasno
mesmopacote.
private
• Nãoseaplicaaclasseseinterfaces.
• Aplicadaamembros:determinamqueomembropodeserinvocadoouutilizadoape-
naspelaprópriaclasse.
��
Introdução à Linguagem Java
Senac São Paulo
Exemplo:
TodososatributosdeData sãoprivados,oque impedequeeles recebamdiretamentevaloresvindosexternamenteàclasse.Assim,data1.dia=35,nãoépermitindo,evitandodatasinconsistentes.ParaatribuirumvaloraumatributodeDatadeve-seutilizarummétodopúblico.Naim-plementaçãodessesmétodoségarantidoaconsistênciadosseusatributos.Assim,acadamêsépermitidoumvalormáximoparaodia.SeousuáriodeumobjetodaclasseDatapassarcomoargumentoalgumvalorincompatível,ométodoimpedequeessevalorche-gueaoatributo.
public class Data {
private int dia, mes, ano;
public void setDia(int dia) {
if(dia<0) this.dia=1;
else if(dia>28 && this.mes==2 && !this.isBissexto()) this.dia=28;
else if(dia>29 && this.mes==2 && this.isBissexto()) this.dia =29;
else if(dia>30 && (this.mes==4 || this.mes==6 || this.mes==9 || this.mes==11))
this.dia = 30;
else if(dia>31) this.dia = 31;
else this.dia = dia;
}
public void setMes(int mes) {
if(mes<0) this.mes = 1;
else if(mes>12) this.mes = 12;
else this.mes = mes;
}
public void setAno(int ano) {
this.ano = ano;
}
fi nal public boolean isBissexto() {
return (this.ano%4==0 && (this.ano%100!=0 || this.ano%400==0));
}
}
��
Introdução à Linguagem Java
Senac São Paulo
Exemplo:
n ConstrutordeData
Oconstrutordevegarantirtambémoencapsulamento.
Exercícios:
1.DigitaretestaraclasseDatadestecapítulo.
2.EncapsularcorretamenteasclassesContaeContaEspecialdocapítuloanterior.
public class Data {
...
public Data(int dia, int mes, int ano) {
this.setAno(ano);
this.setMes(mes);
this.setDia(dia);
}
}
CAPÍTULO 9POLIMORFISMO
�1
Introdução à Linguagem Java
Senac São Paulo
n Característicaquepermitequeumamesmainterfaceassumaimplementaçõesdistintas.
n Classescominterfacessemelhantes,masimplementaçõesdiferentes,sãopolimórficas.
Polimorfismoéacaracterísticadaorientaçãoaobjetosquedeterminaqueumainterfaceesuaimplementaçãosãoelementosdistintosdeumaclasse.Assim,classesdiferentespodemimplementaramesmainterface.Sãoclassespolimórficas.
Exemplo conceitual
Asclassespolimórficasdãoumagrandeflexibilidadeparaodesenvolvimentodeaplicaçõesondeoscontratosestabelecidosentreosobjetossãomuitobemdefinidos(essascontratossãoasinterfacesatravésdasquaisosobjetosinteragementresi).Umobjeto(daclasseA),construídoparatrabalharcomumsegundoobjeto(daclasseB),nãoconheceaimplemen-taçãodessesegundo,masapenasasuainterface(IB).Umoutroobjeto(daclasseC,mascomamesmainterfacedeB)podesubstituiressesegundoobjeto,semnecessidadedealteraçõesnaclasseA.
implementaçãoImplementação
interface interface
Implementação CImplementação B
Interface IB Interface IB
classe A
classe B
Contratode A com IB
classe A
Contratode A com IB
classe C
�2
Introdução à Linguagem Java
Senac São Paulo
public interface IB { ... }
public class B implements IB { ...}
public class C implements IB { ...}
public class A {
private IB obj;
public void setObj(IB obj) {
this.obj = obj;
}
}
A a = new A();
a.setObj(new B());
a.setObj(new C());
n NotaçãoUML
IB
B C
A
Indica que A tem umadependência para com IB
�3
Introdução à Linguagem Java
Senac São Paulo
Polimorfismo e Herança
n Umasubclasseimplementaainterfacedasuperclasse
n Classesnumamesmahierarquiapodemserpolimórficaspelainterfacemaisgenérica
SeaclasseAédependentedeB,entãoqualquerinstânciadeB,C,D,E,FouGpodeserutilizadanestadependência.
Exemplo completo
DeptoPessoal
+ custoTotal(): double
DeptoPessoal
+ custoTotal(): double- nome: String
+ obterNome(): String<<abstract>> + obtercusto(): double
- salario: String
+ obtercusto(): double
Funcionario
Gerente
- bonus: double
+ obtercusto(): double
Consultor
- horas: int- valorHora: double
+ obtercusto(): double
A B
G
FEC
B b = new B();b = new C();b = new D();b = new E();b = new F();b = new G();
��
Introdução à Linguagem Java
Senac São Paulo
Comentáriosecódigo:
• NodiagramaUMLestãoindicadosapenasosprincipaisatributosemétodos.Ocódigo
estácompleto.
• Oestereótipo<<abstract>>indicaqueaclasseouométodosãoabstratos.
• AclasseDeptoPessoalnãoestácompleta.
Colaborador:
• Classeabstrata.
• Umconstrutorquerecebeonome.
• Ummétodoabstrato,quedeveráserimplementadoportodasassubclasses.
abstract public class Colaborador {
private String nome;
abstract public double obterCusto();
public String obterNome() {
return this.nome;
}
public Colaborador(String nome) {
this.nome = nome;
}
}
Consultor:
• SubclassedeColaborador.
• Classeconcreta:implementaobterCusto().
• Oconstrutorutilizaoconstrutordasuperclasse(super).
public class Consultor extends Colaborador {
private int horas;
private double valorHora;
public Consultor(String nome, int horas, double valorHora)
{
super(nome);
this.horas = horas;
this.valorHora = valorHora;
}
public double obterCusto() {
return this.valorHora * this.horas
}
}
��
Introdução à Linguagem Java
Senac São Paulo
Funcionário:
• SubclassedeColaborador.
• Classeconcreta:implementaobterCusto().
• Oconstrutorutilizaoconstrutordasuperclasse(super).
• UmatributoestáticonãoestánodiagramaUML.
public class Funcionario extends Colaborador {
public double salario;
public static double encargo = 1.8;
public double obterCusto() {
return this.salario * encargo;
}
public Funcionario(String nome, double salario) {
super(nome);
this.salario = salario;
}
}
��
Introdução à Linguagem Java
Senac São Paulo
Gerente:
• SubclassedeFuncionario.
• SobrescreveobterCusto()porquesuaimplementaçãoédiferentedadefuncionario.
Utilizaaimplementaçãodasuperclassenasobrescrita.
• Umconstrutorutilizaoconstrutordasuperclasse(super).
• Ooutroconstrutorésobrecarregadoeutilizaoprimeiroconstrutor(this).
• UmatributoestáticonãoestánodiagramaUML.
public class Gerente extends Funcionario {
public double bonus;
static public double encargoBonus = 2.1;
public double obterCusto() {
return super.obterCusto() +
this.bonus * encargoBonus;
}
public Gerente(String nome, double salario,
double bonus) {
super(nome, salario);
this.bonus = bonus;
}
public Gerente(String nome, double salario) {
this(nome, salario, 0D);
}
}
�7
Introdução à Linguagem Java
Senac São Paulo
Departamento Pessoal:
• DependeapenasdeColaborador.
• UtilizaobterCusto()atravésdainterfacedeColaborador.
• OlaçopodeiterarsobrequalquerobjetodahierarquiadeColaborador,invocandoa
implementaçãodeobterCusto()correspondente.
• ArelaçãodedependênciadaUML(umaagregação)éimplementadacomumatributo
dotipoarray.
public class DeptoPessoal {
private Colaborador[] colaboradores;
public DeptoPessoal() {
super();
}
public double custoTotal() {
double total = 0D;
for(int i=0; i<colaboradores.length; i++){
total += colaboradores[i].obterCusto();
}
return total;
}
}
Exercício:1.Digitaretestaroexemplo.
CAPÍTULO 10ENTRADA E SAÍDA
��
Introdução à Linguagem Java
Senac São Paulo
n Conceitodestream
n Classesbásicas
• InputSream
• OutputStream
• são“simétricas”
Podemseraninhadas(flexibilidade)Streaméumconceitoquerepresentaqualquercaminhodecomunicaçãoentreumafontedeinformaçãoeseudestino.Este conceito pode ser empregado para qualquer fonte ou destino de informação, etorna-se útil porque padroniza essa comunicação independentemente destes. Assim, aclassestreamimplementaosmesmosmétodos,sejaostreamorigirário(oudestinatário),umdispositivodeI/O,amemória,outraaplicaçãoououtrothreaddamesmaaplicação.
Os streams que implementam I/O são os mais empregados e o escopo maior destaseção.
Osstreamsdeentradaesaídasão“simétricos”emmuitosaspectos.Assim,apenasumdoscasosseráestudadodetalhadamente.
ApossibilidadedeaninharclassesdestreamemJavatornaseuusomuitoflexíveleprático.
Entrada
n InputStream-métodos
• read()
• skip()
• available()
• mark()
• reset()
• close()
100
Introdução à Linguagem Java
Senac São Paulo
AclassebásicaqueimplementastreamsdeentradaéchamadadeInputStream.Essaclasseincorporaumasériedemétodos.Osprincipaisestãodescritosabaixo:
• read( ):realizaaleituradebytesdostream;
• skip( ):ignoraumnúmerodebytesdostream,passadocomoseuparâmetro;
• available( ):retornaonúmerodebytesdisponíveisnostream;
• mark( ):marcaumaposiçãosobreostream;
• reset( ):retornaàposiçãomarcadapormark();
• close( ):fechaostream(nãoéobrigatório).
InputStream – Exemplo
Noexemplo,aprimeirachamadaaread()realizaaleituradeumúnicobyte.Nasegundachamada,avariávelbufferépreenchidacombytesdostream(desdequeexistam).Naterceirachamada,aleituraérealizadaapartirdaposição300dostream.
Ométodomark()exigecomoparâmetroonúmerodebytesdostreamondeseestendeasuavalidade.Assim,seumreset()forchamadoapós1024posiçõesjápercorridas,umerroserágerado.Essemecanismoforçaoprogamadoraalocarrecursosbemdefinidosparaousodomark().
InputStream s=getUmStream(…);
byte[ ] buffer= new byte[256];
byte b;
b=s.read();
s.read(buffer);
s.read(buffer, 300, 256);
s.skip(2048);
if (s.available()=2048) {
s.mark(1024);
…
s.reset();
}
s.close();
101
Introdução à Linguagem Java
Senac São Paulo
Classes herdadas de InputStream
n ByteArrayInputStreameStringBufferInputStream
• criaumstreamapartirdeumbufferoudeumastring
n FileInputString
• tipomaiscomumdestream
• podeabrireacessararquivosdosistema
• podetratarcomostreamarquivosjáabertos
Exemplo:InputStreamfilein=newFileInputStream(“/usr/fulano/arquivo”);
AsdemaisclassesdestreamsdeentradasãoherdadasapartirdeInputStream.
ByteArrayStreameStringBufferStreamcriamumstreamapartirdebufferdebytesouapartirdeumastring,respectivamente.Portanto,agemdeformainversaaomostradonoexemploanterior.
FileInputStringpermiteaaberturaeamanipulaçãodestreamorigináriosdearquivosdosistema.JuntamentecomFileOutputStreamfornecemabasedeacessoaarquivosemJava.
n FilterInputStream
• fornecebaseparaclassesdestreamquepossamseraninhadas
n SubclassesdeFilterInputStream
• BufferedInputStream:streamcomcache
• DataInputStream:streamdetiposdistintos(enãosomentedebytes,comovimos
atéagora)
• PushBackInputStream: implementa o método unread(), que coloca de volta no
streamumbytejálido
FilterInputStreaméaclassebásicaqueimplementaabaseparaclassesdestreamquepos-samseraninhadas.Oaninhamentodeclassestornabemflexívelousodosstreams,comopodeservistonosexemplosaseguir.
AlgumasclassessãogeradasdiretamentedeFilterInputStringeimplementamalgumasfaci-lidadesbásicasnousodestreams,taiscomocacheeinterpretaçãodetipos.
102
Introdução à Linguagem Java
Senac São Paulo
Umexemplodeaninhamentodestream:InputStreamsin=newBufferdInputStream(newFileInputStream(“arquivo”));
Essadeclaraçãocriaumstreamorigináriodeumarquivodosistemaeaomesmotempoutilizacache.
Podemserfeitosquantosaninhamentossedesejar,desdequeasclassesaninhadassejamsubclassesdeFilterInputStream.
n PipedInputStream
• streamqueestabelececomunicaçãoentredoisthreads
n SequenceInputStream
• executaaconcatenaçãodestreams
Exemplo:
InputStreamsin1=newFileInputStream(“metade1”);InputStreamsin2=newFileInputStream(“metade2”);
InputStringsin=newSequnceInputStream(sn1,sn2);
Existemoutrasclassesnãomencionadasaquipoissãodeusomuitorestrito.Noentanto,naliteraturaavançadapodemserencontradasalgumasdescrições.
Saída – OutputStreamsn SimétricoaInputStream
• implementawrite()aoinvésderead(),emtodasassuassubclassesherdeiras
• flush()
• close()
n PrintStream
• nãotemInputStreamcorrespondente
• System.out.print()
• System.out.println();
103
Introdução à Linguagem Java
Senac São Paulo
NãoconvémrepetirtodootextoparaasclassesOutputStreamesuassubclasses.Étrivialcompreenderqueoseucomportamentoésimétricoemrelaçãoaofluxodostream,comrespeitoàsclassesdeInputStream.
Evidentemente,ométodoread()eseusequivalentesésubstituídopelométodowrite()(eseusequivalentes).Alémdesse,existeométodoflush()queforçaostreamaescrevernasaídaosdadosqueeventualmenteestejamemcacheoutemporariamenteemalgumlugar.
AclassePrintStreamnãoencontracorrespondentenosstreamsdeentrada.Elajáfoiusa-danestecurso,umavezqueavariáveldeclasseSystem.outcontémumainstânciadestaclasse.
ReadeRS e WRIteRS
n Asclassesdemanipulaçãodestreamstrabalhamcombytes.
n Parasetrabalharcomcaracteresutilizam-seosReadereWriters,quesãoequivalentes
respectivamenteaosstreamsdeentradaesaída.
• Superclasse:Reader
- BufferedReader,FilterReader,StringReader,InputStreamReader(ponteentre
streamsereaders)
• Superclasse:Writer
- BufferedWriter,FilterWriter,StringWriter,OutputStreamReader(ponteentre
streamsewriters)
Paraamanipulaçãodearquivos,ousodeReaderseWritersémaisprático.
FileInputStreamfis=newFileInputStream(“C:\\arquivo.txt”);InputStreamReaderisr=newInputStreamReader(fis);BufferedReaderin=newBufferedReader(isr);System.out.println(in.readLine());
Observarqueoarquivo foi abertousandoumstreamemanipuladousandoumreader.Paraissofoiusadaaponteentreeles.
10�
Introdução à Linguagem Java
Senac São Paulo
A classe File
n Manipulaarquivosediretórios(enãoseuconteúdo)
• Testedosatributosdoarquivo:
- canRead,canWrite,isHidden,isFile,isDirectory
• Manipulaçãofísica
- getAbsolutePath,getName,createNewFile,renameTo,length
• Manipulaçãodediretórios
- listFiles,mkdirOmesmoexemploanterioragorautilizandoaclasseFile.
Filefile=newFile(“C:\\arquivo.txt”);FileInputStreamfis=newFileInputStream(file);InputStreamReaderisr=newInputStreamReader(fis);BufferedReaderin=newBufferedReader(isr);System.out.println(in.readLine());
Exercícios:
1.Façaumaaplicaçãoquemostrenatelaoconteúdodeumarquivoqualquer.
2. Faça uma aplicação que copie o conteúdo de um arquivo de caracteres para outro,substituindotodasasletraspelasualetraseguinte(aporb,bporcetc.).Façaoprocessoinversotambém.UtilizeReaderseWriters.
3.Façaumaaplicaçãoquefiqueesperandostringsnaentradapadrãoeasmostrenasaídapadrão.AaplicaçãoesperaaentradadeumalinhaeapósaENTER,mostraestalinha.
CAPÍTULO 11THREADS
10�
Introdução à Linguagem Java
Senac São Paulo
n Possibilidadedeexecutarsimultaneamenteváriasthreadsdeumúnicoprograma
n Aexecuçãodoprogramanãosegueumpadrãolinear,maisderivativoeparalelo
n Usarmultithreadéumaboaprática,noentantoamaioriadosservidoresWebede
Aplicaçãorealizamissoimplicitamente
n Situaçõesnecessárias:
• loopsinfinitos(animação,socketsagents)
• longostrechosdecódigoseminteraçãocomterceiros
• múltiplasinstânciasdeummesmotrechodeprograma
Multithreadéacapacidadedeumprogramaderodardiferentestrechos(oudiferentesins-tânciasdomesmotrecho)deformaindependente.Permiteporexemploqueoprogramarealizetarefasembackgroundenquantomantém“viva”ainterfacecomousuário.
OusodemultithreademJavaéfácileimplementadodiretamentepelalinguagem,ouseja,ocontroledosdiferentesthreadséfeitoautomaticamente.
Umexemplodeusodemultithreadsãoosprópriosbrowsersinternet.Enquantoumthreadrealizaabuscadosdadosnarede,oquemuitasvezesocorredeformalenta,outrosthre-adspermitemqueapáginasendocarregadajásejaexpostanatela,comrolagemelinksativos.
Numambientedejanelasficaevidentequeaprogramaçãoemthreadséfundamental.
107
Introdução à Linguagem Java
Senac São Paulo
Diagrama
n Fluxodeumprogramamultithread
Odiagramaacimadáumaidéiadofluxodeexecuçãodeumprogramamultithread.Todasas linhasmostradassão implementadascomthreads, inclusivea linha“principal”.Estaéumaboapolíticadeprogramação.
Verifica-sequealgunsthreadspodemtercurtaduração(inicialização)eoutrospodemficarrodando indefinidamenteem loop infinito, tais comoprocessospermanentes emback-ground,terminandoapenasquandoaaplicaçãofinaliza.
Umbomprocedimentoéfinalizartodososthreadsiniciadosantesdeterminaraexecuçãodoprograma.Istonãoéobrigatório,masnãoseguirestaregrapodecomprometerrecur-sosdosistemadeformaindesejável.
Implementação
n ClassedeveimplementarinterfaceRunnable
n ClassedevepossuirumavariávelquecontenhaumtipoThread
n Métodostart()deveserinvocadoparadispararumnovothread
n Ométodorun()deveconterocódigoquerodadentrodothread
início fim
inicialização
processo em background(som, etc.)
piped stream
4 threads
10�
Introdução à Linguagem Java
Senac São Paulo
Acriaçãodeumaclassepara trabalharcommultithreadsémuitosimples.Basicamentedeve-sedeclararaclassecomainterfaceRunnable,portantocomaassinatura:publicclassRelogioMultiThread implements Runnable { …. }Esta interface forçaa implementaçãoummétodorun()queagoradevepassaracontertodoocódigoaserexecutadodentrodothread.
Umaaplicaçãocommultithreadémostradanaspáginasseguintes.ÉoexemplodeRelógiorodandodentrodeumthread,enquantoaaplicaçãoprincipalcontinuaseufluxonormaldeexecução.
Exemplo
import java.util.*;
public class RelogioMultiThread implements Runnable {
Date data;
public void run() {
while (true) {
data = new Date( );
System.out.println(data);
try { Thread.sleep(1000); }
catch (InterruptedException e) { }
}
}
}
public class Programa {
public static void main(String[] args) {
RelogioMultiThread relogio = new RelogioMultiThread();
Thread t = new Thread(relogio);
t.start();
}
}
10�
Introdução à Linguagem Java
Senac São Paulo
Sincronização de threads
n Mecanismoparaevitarqueummesmotrechodecódigosejaexecutadopordoisthre-
adssimultaneamente
• Manipulaçãoderecursosúnicos(arquivos,entradaesaída,variáveis)quenãopo-
demseracessadossimultaneamente.
public synchronized void metodo() {
... // acesso a recursos de forma única
}
// dentro de um método qualquer..
synchronized(this) {
... // acesso a recursos de forma única
}
Asincronizaçãodeacessoarecursosquesãocompartilhadosentrethreadsémuitoútilparaevitarerrosdeacessosimultâneos,emrecursosquenãoosuportam,ounãopodemteracessossimultâneos,comoporexemplo,arquivosabertos,variáveisdecontroleetc.
Asincronizaçãopodeserfeitapelométodousandoomodificadorsynchronized,ondetodoocorpodométodosomentepodeserexecutadoporumthreaddecadavez;oupeloblocosynchronized(objeto) {...}ondeoblocoéexecutadoporumúnicothreaddecadavez.
Quandomaisdeumthreadtentausarosmétodos/blocossincronizados,ointerpretadorenfileira-os,suspendendoaquelesqueestãoesperandosuavezdeexecução.
Exercícios:
1.Façaumaaplicaçãoquedisparetrêsthreads.Cadaumdelesdevemostrarnasaídapa-drão,emumloopinfinito,oinstantequeeleroda(comSystem.out.println(...+newjava.util.Date()).
2.ColoqueumcontadoremcadathreadeverifiquequantasvezescadaumdelesexecutaoSystem.out.println.
3.Crieumapilhadedadoscujosacessos(pushepop)sejamsincronizados.
CAPÍTULO 12EXCEÇÕES E ERROS
111
Introdução à Linguagem Java
Senac São Paulo
n Tratamento de situações eventuais mas que comprometem a correta execução do
programa
n Maneirasimplificadadeextensivamentecapturarsituaçõesdeexceçõeseerros
n Situaçõesprevisíveis,masgenéricas
n Javaforçaotratamentoemmuitoscasos,nemquesejapassaraexceção/erroparao
sistema.
OtratamentodeexceçõeseerrosemJavaéumaformadetornarocódigomaisprevisívelecontrolável.Poroutroladoétambémumaformadefacilitaraprogramaçãoderotinasnecessáriasaessetratamento.
Normalmenteassituaçõesdeexceçõeseerros,comoopróprionomediz,sãoeventuais.Noentantoseutratamentoénecessárioparaumbomcódigo.Umasistemáticadetratamentodestascondiçõespodeabrangergrandesporçõesdecódigo,deformacomplexaeextensa.
Javaprovêumamaneiradesistematizarotratamentodessassituações,afimdefacilitaraprogramação,aomesmotempoquepermiteaextensãodestasistemáticaparagrandepartedocódigodeformasimplificada.
MuitosdosmétodosdospacotesbásicosdeJavanecessitamqueousuáriodefinaumtra-tamentodeerroespecífico.Istopodesertãosimplesoutãocomplexoquantoqueiraoprogramador.
Porfim,éimportantesalientarqueotratamentodeexceções/errosnãoéumcódigomági-coquevaitornarseuprogramaerror-free.Assituaçõestratadaspodemserbemgenéricas,masdevemserprevisíveis.
Maneira comum de tratar exceções/erros
n repetitivaeextensa
n dificultaocódigo
n altarelaçãocustobenefício,masnecessário
int valret=metodo_que_preve_exc();
switch (valret) {
case …
…
}
112
Introdução à Linguagem Java
Senac São Paulo
Amaneiraconvencionaldetratarexceçõeseerrostendeasercansativa,repetitivaeex-
tensa.Exigealteraçõesnafuncionalidadepropriamenteditadocódigo.Podetambémexi-
girousodevariáveisglobaisnapassagemdeindicadoresdeerros.
Estaabordagem,alémdepoucoprática,passaaserirritantequandonecessitaserutilizada
emgrandepartedocódigo.
Tem-seumaformadeprogramaçãodealtocusto,combenefíciospoucoutilizados(jáque
asocorrênciassãoraras),masnoentantonecessária.
Tratamento em Java
n Exceçõeseerrossãomodeladosporobjetos(classebásicachama-seThrowable)
n Atitudesdoprogramador:
• avisarusuáriodométodoqueumaexceçãopodesergerada;
• tratamento“inloco”daexceção;
• passagemdaexceçãoadiante.
Asexceçõese erros sãomodeladosporobjetosherdadosda classebásicaThrowable.
Estemodelamentoemobjetospermiteestabelecerumahierarquiadeerros,muitoútilna
definiçãodetratamentosespecíficose/ougenéricos.
Diantedeummétodoquepodegeraralgumacondiçãodeexceçãoouerro,oprograma-
dorpodetomartrêsatitudes:
• nãocapturar,declararapassagemdaexceção/erroparaumaclasseespecíficaenão
implementaroseutratamento;
• capturaretrataracondição“inloco”;
• capturarepassaracondiçãoparaonívelsuperiordeseucódigo.
Cadasituaçãoemparticularpodeexigirumaatitudeespecíficadoprogramador.Noen-
tanto,aalternativadetrataracondiçãolocalmenteéamaisesperadanormalmente,por
motivosóbvios.
113
Introdução à Linguagem Java
Senac São Paulo
Modificador throws
n Usodapalavra reservada throws indicaquemétodopodegerarumacondiçãode
exceção/erro
n Normalmentedeixaotratamentoacargodequemutilizarométodo
n Nãoémuitopráticoparaprojetosemequipes
Apalavrareservadathrowaplicadoaummétodoindicaqueaquelemétodopodegerarumaexceção/errodotipodefinidopelacláusula throws.Estadeclaraçãoapenasdiz,aousuáriodaquelemétodo,quetipodeexceções/errospode-seesperardesuaexecução.Forneceumainformaçãomuitoútil,masnãoprovêumaformadetrataressacondição.
Esteéoesquemabásicodeindicaçãodecondiçãodeexceções/errosemJavaequemuitosmétodosdasbibliotecasbásicasdeinterfacesimplementam.Issoacabaforçandoousuáriodestasinterfacesacapturaretrataroserrospassados.
Tratamento “in loco”
n Maneiramais“educada”–oautordométodoespecificaumtratamentoparaoerro
queeleespera
n Usode try{…} catch (Erro e) {…}
public void metodoQuePreveExc() throws umaExcecao {
...
// chamada a métodos que podem gerar uma exceção
// do tipo umaExcecao
…
}
public void metodoQuePreveExc() {
…
try {
// algum método que pode gerar uma exceção
// do tipo umaExcecao
} catch (umaExcecao e) {
// tratamento da exceção
}
…
}
11�
Introdução à Linguagem Java
Senac São Paulo
Otratamentolocaldeexceções/errosexigeumpoucomaisdecódigo,masrepresentaaformamaisclaraecompletadeprogramaressetipodetratamento.
Nestecaso,ousuáriousaacláusulatryaplicadaaumblocoparaespecificarqueesperacap-turarumacondiçãodeexceção/erronaquelebloco.Aofimdoblocotry,acláusulacatchcapturaaexceção/erroespecífica(indicadaentreparênteses)edeterminaumtratamento.Emoutraspalavras:oprogramatentarodarocódigodentrodoprimeirobloco;casoalgumacondiçãodeexceção/errosurja,tratadoresespecíficossãochamadosnosblocosseguintes.
Estaformadiretapermitequecondiçõesdeexceções/errosgeremapenasumdesviodocódigoparaumtratadorespecífico.Estedesvioécompletamentedefinidoedelimitadopelocláusulacatch,eportantonãodesestruturaocódigo,comoalgunspoderiamsupor.
Definirumtratamentopassaaserapartecomplexadocódigoeemgeralexigeexperiênciadoprogramador.Basicamentedevemosnospreocuparcomasexceçõesmaiscomunsefornecerumtratamentocurtoerápido.Comoopróprionomediz,estassãocondiçõesespeciaiseobomsensodizoquantodeesforçodevemoscolocarnotratamentodecon-diçõesquepodemcomprometeroresultadodonossocódigo.
Passando o tratamento adiante
CapturaraexceçãomaspassaroseutratamentoadianteUtilizarcomexceçõesbásicasquandosesabequeonívelexternotemcondiçõesdetratá-la
Umaoutraalternativaparatratamentodeexceção/erroécapturá-loesimplesmentepas-sá-loadiante.Esteerroéentãopassadoparaonívelimediatamenteexternoàclasseemquestão.Seaclassemaisexternanãotrataresteerro,entãoesteépassadonovamenteparaapróximaclasseeassimsucessivamenteatéchegaraosistema.
É importanteobservarqueasexceções lançadascomocomandothrow,precisamserdeclaradasnométodocomapalavrareservadathrows.Adoçãodestaatitudeémaisaconselhávelparaerrosbásicosdosistema,ondesabemosterosistemacondiçõesdetratá-lo.
public void metodoQuePreveExc() throws MinhaExcecao{
try {
// algum método que pode gerar uma excecao
// do tipo MinhaExcecao
} catch (MinhaExcecao e) {
throw e; // …para o nível externo tratar….
}
...
}
11�
Introdução à Linguagem Java
Senac São Paulo
Tratamento múltiplo
Umblocotrypodecapturartantoserrosquantosequeira.Aúnicaressalvaaserfeitaéquanto aoordenamentodos tratadoresnas cláusulascatch. Énecessárioqueoserrosmaisespecíficossejamdeclaradosprimeiro.Assim,comonoexemploacima,apenasumacondiçãomuitoparticularepoucoprováveliriachamarumtratamentodebaixoníveldeumobjetodaclassebásicaThrowable.
A cláusula finally
Alémdemúltiploscatches,umacláusulafinallypodeseracrescentadaaotratamentodeexceções.Oblocofinallysempreéexecutado,independentedacapturadaexceção.
public void metodo() {
try {
// algum código que pode gerar vários tipos de exceções
} catch (NullPointerException n) {
// … tratamento de ponteiro nulo
} catch (RunTimeException r) {
// … tratamento de exceções run-time (exceto anterior)
} catch (IOException i) {
// … tratamento de exceções de I/O
} catch (MinhaExcecao u) {
// … tratamento de minha exceção
} catch (Exception e) {
// … tratamento exceções diferentes dos casos acima
} catch (Throwable t) {
// … tratamento de não-excções, p. ex. erros
}
...
}
try {
// algum código que pode gerar exceções
} catch (Exception e) {
// … tratamento
} fi nally {
// ... sempre é executado
}
11�
Introdução à Linguagem Java
Senac São Paulo
Definindo exceções
n Erroseexceçõespodemserdefinidaspelodesenvolvedor
n QualquersubclassedeThrowablepodeserdefinidacomoumerroouexceção
n Paraadefiniçãodeexceçõesnormalmenteseutilizacomosuperclasseaclasse
Exception.
Omecanismodecapturaelançamentodeexceçõespodeserutilizadoparatrabalharcomexceçõesdefinidaspelodesenvolvedor,dandoumagrandeflexibilidadedeprogramação.Émuitocomumseutilizaressemecanismoparadefinirdesviosnofluxodeprogramação,comexceçõesassociadasaregrasdeexecuçãodoprogramaenãoapenasafalhas.
Exercícios:
1.Façaumaclassequerepresenteumadata(dia,mêseano).Definaexceçõeselance-as,noconstrutor,paradatasinconsistentes.
2.Façaumprogramaqueleiaumadatadoteclado,edevolvaparaumusuárioumamensa-gemamigávelcasoadatasejainconsistente.
public class MinhaExcecao extends Exception {
...
}
...
public void metodo() throws MinhaExcecao {
...
throw new MinhaExcecao();
}
CAPÍTULO 13TÓPICOS AVANÇADOS
11�
Introdução à Linguagem Java
Senac São Paulo
n Coleções
n Networking
n Generics
Coleções
n Javaofereceumasériedeclassesqueestruturamobjetosdeumaformamaisprática
doquearrays
n Listas
n Listasligadas
n Hashtables
n Características
• Sincronizadasparaacessosemmúltiplosthreads
• Métodosdeordenação
• Estruturascomusodetiposespecíficos(generics)
Nopacotejava.utilexisteumasériedeclassesqueimplementamainterfaceCollection.Todasasclassesconcretasqueimplementamessainterfacesãoestruturasparaarmaze-narumconjuntodeobjetoscomasmaisvariadasfinalidades.Asprincipaisclassesdessepacotesão:
• ArrayListeVector:Arraysdetamanhoajustávelaoselementosarmazenados;
• Hashtable:Armazenapareschave-valorescommétodosquefacilitamabuscadosva-
lorespelassuaschaves;
• LinkedList:Listaduplamenteligada;
• Stack:pilha.
Observar,nadocumentaçãodaAPI,quaisdessascoleçõespermitemacessosincronizadoaseuselementos.
AclasseArrayspossuiumasériedemétodosdeordenaçãodearrays.
11�
Introdução à Linguagem Java
Senac São Paulo
Amaioriadasclassesquemanipulamcoleçõessãoparametrizadasportipos.
import java.util.*;
public class Listas {
public static void main(String[] args) {
ArrayList<String> arr = new ArrayList<String>();
arr.add(“um”);
arr.add(“dois”);
for(String s: arr){
System.out.println(s);
}
}
}
n Iteratores
• Ascoleçõespodemser“percorridas”comiteratores,quepodemserobtidosdi-
retamentedelas
Iterator it = colecao.iterator();
hasNext()testaseexistemelementoainda
next() retornapróximoelemento
Exemplodousodeiteratores:import java.util.*;
public class Listas {
public static void main(String[] args) {
ArrayList<String> arr = new ArrayList<String>();
arr.add(“um”);
arr.add(“dois”);
Iterator it = arr.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
120
Introdução à Linguagem Java
Senac São Paulo
Exercícios:
1.FaçaumaclassequefuncionacomoumafábricadeDatas.Acadadataqueoprogramaprecisarelepedeparaummétodoestáticodessaclasse.EssemétodoverificaseexisteumaDatapreviamentecriada(earmazenadanumHashtable),retornando-a.Seadatanãoexistir,entãoelaécriadaearmazenadanoHashtable.Dessaforma,umaúnicainstânciadecadadataexisteemtodooprograma.
2.Façaummétodonessaclassequecoloquenumarray,emordemcronológica,todasasdatasarmazenadasporela.
3.ListetodasaschavesdoHashtableusandoumiterador.
Networking
n URLConnection
EfetuaumaconexãocomumservidorWeb.Permiteoenviodedadoserecebimento
dearquivosdeumservidorWeb(páginasHTML,imagensetc.)
AclasseURLConnectionpermiteumamaneirafácilesimplesdeabrirumaconexãocomqualquerservidornainternet.
import java.net.*;
import java.io.*;
public class Conexao {
public static void main(String[] args) throws Exception{
URL url = new URL(“http”, “127.0.0.1”, 8080, “/index.
htm”);
BufferedReader reader = new BufferedReader(new
InputStreamReader(url.openStream()));
String linha = null;
while((linha = reader.readLine()) !=null)
System.out.println(linha);
}
}
Exercício:1.EscreverumprogramaquelêumapáginadainternetcujaURLfoidigitadapelousuárionalinhadecomando.
121
Introdução à Linguagem Java
Senac São Paulo
n ServerSocketeSocket
ServidoreclienteTCP/IP,paraenviodepacotesTCP/IPsobrearede.
Servidor fica “escutando” (listening, em inglês) uma porta TCP/IP, esperando porconexões.
import java.net.*;
import java.io.*;
public class Servidor {
public static void main(String[] args) throws Exception{
ServerSocket servidor = new ServerSocket(10000);
while(true) {
Socket socket = servidor.accept();
OutputStream saida = socket.getOutputStream();
saida.write(“Conectou!”.getBytes());
saida.close(); socket.close();
}
}
}
Clienteseconectanaportadoservidor.
import java.net.*;
import java.io.*;
public class Cliente {
public static void main(String[] args) throws Exception{
Socket socket = new Socket(“127.0.0.1”, 10000);
InputStream entrada = socket.getInputStream();
byte[] bytes = new byte[100];
entrada.read(bytes);
for(int i=0; i<100; i++) {
if(bytes[i]==0) break;
System.out.print((char)bytes[i]);
}
}
}
Exercício:1.Escreverumclientesocketqueenviadadosparaumservidorsocket.
122
Introdução à Linguagem Java
Senac São Paulo
Generics
n Declaraçãodeclassesemétodoscomtiposparametrizados
n Ostipossãoresolvidosemtempodecompilação
n Eliminaçãodecasting
Exemploqueutilizaumapilhadeumaclassedefinidapelodesenvolvedor.Notarqueapilha
manipulaapenasotipoparametrizado(Dupla).
import java.util.*;
public class Generic {
public static void main(String[] args) {
Stack<Dupla> pilha = new Stack<Dupla>();
pilha.add(new Dupla(1,34));
pilha.add(new Dupla(2,67));
for(Dupla d : pilha) {
System.out.println(d.toString());
}
}
}
class Dupla {
Dupla(int a, int b) {
this.a = a;
this.b = b;
}
int a, b;
public String toString() {
return “(“ + this.a + “,” + this.b + “)”;
}
}
123
Introdução à Linguagem Java
Senac São Paulo
Agora a classeDupla foi parametrizadapara servir comodupladedois tiposparame-trizadosquaisquer.Notarquena instanciaçãodosobjetosos tipossãopassadoscomoparâmetros.
public class Generic {
public static void main(String[] args) {
Stack<Dupla> pilha = new Stack<Dupla>();
pilha.add(new Dupla<Integer, String>(1,”trinta e quatro”));
pilha.add(new Dupla<Integer, String>(2,”sesseta e sete”));
pilha.add(new Dupla<String, String>(“tres”, “quarenta”));
for(Dupla d : pilha) {
System.out.println(d.toString());
}
}
}
class Dupla<E, T> {
E e;
T t;
Dupla(E e, T t) {
this.e = e;
this.t = t;
}
public String toString() {
return “(“ + e.toString() + “,” + t.toString() + “)”;
}
}
Porfim,usandoowildcarddetipos<?>.
public class Generic {
public static void main(String[] args) {
Stack<Dupla> pilha = new Stack<Dupla>();
pilha.add(new Dupla<Integer, Integer>(1,34));
pilha.add(new Dupla<Integer, String>(2,”sesseta e sete”));
pilha.add(new Dupla<String, String>(“tres”, “quarenta”));
for(Dupla d : pilha) {
println(d);
}
}
public static void println(Dupla<?,?> dupla) {
System.out.println(dupla.toString());}
}
Top Related