IntROdUçãO À lIngUageM java -...

Post on 08-Nov-2018

226 views 0 download

Transcript of IntROdUçãO À lIngUageM java -...

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());}

}