introdução a programação orientada a objetos usando java

22
“POO-2ED” — 2013/8/5 — 9:15 — page i — #1

Upload: douglas-silva

Post on 16-Aug-2015

265 views

Category:

Documents


8 download

DESCRIPTION

Introdução a orientação à objetos.

TRANSCRIPT

iiPOO-2ED 2013/8/59:15pagei #1iiiiiiiiPOO-2ED 2013/8/59:15pageii #2iiiiiiiiPOO-2ED 2013/8/59:15pageiii #3iiiiiiiiPOO-2ED 2013/8/59:15pageiv#4iiiiii 2013, Elsevier Editora Ltda. Todos os direitos reservados e protegidos pela Lei n 9.610, de 19/02/1998. Nenhumapartedestelivro,semautorizaoprviaporescritodaeditora,poderser reproduzidaoutransmitidasejamquaisforemosmeiosempregados:eletrnicos,mecnicos, fotogrficos, gravao ou quaisquer outros. Reviso: Hugo de Lima Correa Editorao Eletrnica: Rafael Santos Elsevier Editora Ltda. Conhecimento sem Fronteiras Rua Sete de Setembro, 111 16 andar 20050-006 Centro Rio de Janeiro RJ Brasil Rua Quintana, 753 8 andar 04569-011 Brooklin So Paulo SP Servio de Atendimento ao Cliente 0800-0265340 [email protected] ISBN 978-85-352-7433-2 ISBN e-book: 978-85-352-7434-9 Nota:Muitozeloetcnicaforamempregadosnaediodestaobra.Noentanto,podem ocorrererrosdedigitao,impressooudvidaconceitual.Emqualquerdashipteses, solicitamosacomunicaoaonossoServiodeAtendimentoaoCliente,paraquepossamos esclarecer ou encaminhar a questo. Nemaeditoranemoautorassumemqualquerresponsabilidadeporeventuaisdanosou perdas a pessoas ou bens, originados do uso desta publicao. CIP-BRASIL. CATALOGAO-NA-FONTE SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ S238i 2. ed. Santos, Rafael Introduo programao orientada a objetos usando Java / Rafael Santos. - 2. ed. - Rio de Janeiro : Elsevier, 2013. 336 p. : il. ; 24 cm. Inclui bibliografia ISBN 978-85-352-7433-2 1. Java (Linguagem de programao de computador). 2. Programao orientada a objetos (Computao). I. Ttulo. 13-02857 CDD: 005.133 CDU: 004.43 iiPOO-2ED 2013/8/59:15pagev#5iiiiiiPrefcio para a segunda edioSobre este livroEstelivrotemcomonalidadepossibilitaraoestudanteoaprendizadodosconceitosbsicos de programao orientada a objetos usando a linguagem Java, e adquirir conhe-cimentos sobre a linguagem que possibilitem estudos avanados sobre a mesma.O livro parte do pressuposto de que o estudante conhece computadores como ferra-mentas de desenvolvimento de software, tem noes elementares de algoritmos e sabe oque uma linguagem de programao, mas sem necessariamente possuir conhecimentosprofundosdeuma. Olivrotambmpodeserusadoporestudantesquejconheamalguma linguagem de programao mas estejam interessados em aprender Java.Ao escrever este livro, minha motivao principal foi apresentar os conceitos de progra-mao orientada a objetos com clareza e simplicidade, mostrando exemplos e sugerindoproblemas prticos e ilustrativos de conceitos e de algoritmos em geral. Muitos livros deprogramaoorientadaaobjetos(abreviadamente, POO),especialmenteusandoalin-guagem Java, concentram-se em aspectos visuais, deixando de lado a teoria e explicaodos detalhes que so necessrias para melhor compreenso das tcnicas e conceitos. Namaioria dos casos, demonstraes das capacidades da linguagem so apresentadas desdecedo, sem as explicaes necessrias para compreenso do que acontece nos programas--exemplo. Em contraste, este livro concentra-se nas tcnicas de programao orientadaa objetos, explicando a teoria e apresentando a prtica de cada tpico. Espero que comisto os estudantes estejam mais confortveis com os conceitos de classes e objetos quandoforem utiliz-los em aplicaes mais complexas.Parareforareilustrarosconceitosapresentadosemcadacaptulo, 162listagenscontendoclasses, programasetrechosdecdigoforamincludas. Ocdigonestaslis-tagens comentado detalhadamente,tanto para esclarecer os pontos mais importantesquanto para acostumar o leitor com a ideia de ler comentrios em paralelo com cdigo etambm incentiv-lo a comentar cdigo.Cadacaptulocontacomumalistade exerccios, disponvel nosite de suporte,emhttp://www.elsevier.com.br/rafaelsantos. No site tambm podem ser obtidosmaterial complementar a este livro, como erratas, listas de exerccios, material adicional,links teis e informaes para professores que adotarem o livro como texto em suas aulas.viiPOO-2ED 2013/8/59:15pagevi #6iiiiiivi Introduo Programao Orientada a Objetos Usando JavaSobre a organizao deste livroCadacaptulodestelivrocobreumtemaespecco. Oscaptuloseumresumodeseucontedo so apresentados a seguir:Captulo1: IntroduoProgramaoOrientadaaObjetosapresentaconceitosbsicosdeprogramaoorientadaaobjetos, esclarecendoasdiferenaserelaesentremodelos, classes, objetoseinstncias. Nestecaptulo, osconcei-tos apresentados so puramente tericos, mas essenciais para a compreenso dosprincpios bsicos de orientao a objetos.Captulo2: CriandoClassesemJavamostracomoclassesemJavasode-claradas, eapresentaostiposdedadoseosmecanismosdecriaodecamposemtodos nas classes.Captulo 3: Criando Aplicaes em Java mostra como podemos criar aplica-es ou programas em Java (classes que podem ser executadas pela mquina virtualJava), e como podemos usar classes criadas anteriormente nestes programas.Captulo 4: Construtores e Sobrecarga apresenta construtores, mtodos espe-ciais que sero chamados quando objetos das classes que os contm forem criados.O captulo tambm descreve como fazer a sobrecarga de mtodos, que permite quevrios mtodos com o mesmo nome mas diferentes funes possam ser declaradose usados.Captulo 5: Campos e Mtodos Estticos mostra como podemos criar mto-dos e campos estticos em aplicaes ou outras classes em Java. Mtodos e camposestticos no precisam ter suas classes instanciadas para ser usados.Captulo 6: Estruturas de Deciso e Controle - Condicionais apresenta asestruturasdeexecuodetrechosdocdigobaseadasemcondies, juntamentecom uma introduo aos operadores lgicos de Java.Captulo7: EstruturasdeDecisoeControle- RepetioapresentaasestruturasderepetiodeJavabaseadasemcondies, juntamentecomnoessobre recurso.Captulo 8: Reutilizao de Classes mostra dois mecanismos de ProgramaoOrientada a Objetos que permitem o uso de uma classe j existente para criaode uma classe derivada, mais especializada.Captulo9: ClassesAbstrataseInterfaces apresenta os conceitos de classesabstratas e interfaces,que tambm servem como mecanismos de herana de Javacom caractersticas especiais.Captulo 10: Arrays em Java apresenta os mecanismos de criao e uso de ar-rays (vetores de dados) unidimensionais e multidimensionais em Java, assim comotcnicas de Programao Orientada a Objetos para a criao de classes que imple-mentam arrays de forma robusta.iiPOO-2ED 2013/8/59:15pagevii #7iiiiiiviiCaptulo11: Classes paraManipulaodeStringsapresentaedemons-tra o uso de duas classes para processamento de cadeias de caracteres: String eStringBuilder.Captulo 12: Colees de Objetos apresenta algumas classes que implementamestruturas de dados simples em Java e suas aplicaes.Alm destes captulos o livro contm o Apndice A: A classeKeyboard, que apre-senta a classeKeyboard, que pode ser usada para facilitar a leitura de valores de tiposnativos e instncias da classeString a partir do teclado, adicionando exibilidade aosprogramas que no usam interfaces grcas.Convenes usadas neste livroParadestacar alguns conceitos apresentados neste livro, fontes diferentes serousa-das. Nomes declasses, mtodos, pacotes, comandos etc. seromostrados emfonteproporcional. Conceitosapresentadospelaprimeiravezouquemereamdestaqueepalavras que no sejam parte do portugus corrente sero mostrados em fonte itlica.Adicionalmente, as listagens includas no livro sero estilizadas, isto , palavras-chavee partes do cdigo como comentrios sero mostradas em tonalidades ou estilos de textodiferentesparafacilitaraleitura. Aslinhasdosprogramastambmseronumeradaspara fcil referncia.Por que Java?Existem diversas linguagens de programao orientadas a objeto, cada uma com diferen-tes caractersticas e apelos de mercado, educacionais ou acadmicos. Nesta seo algumasdas razes da escolha da linguagem Java sero apresentadas.Java obrigatoriamente orientada a objetos. Em Java,todas as variveis e m-todos devem estar organizados em classes, forando o uso de orientao a objetosat mesmo em tarefas simples. Dessa forma, o estudante de programao orientadaa objetos que esteja usando Java estar usando mais as tcnicas de POO.Java simples. AestruturadeprogramaseclassesemJavasegueaorganizaodelinguagenstradicionaiscomoCeC++, massemelementosquetornamprogra-mas e programao mais complexos. Aps o aprendizado dos conceitos bsicos deprogramao orientada a objetos, o estudante da linguagem pode comear a criaraplicativos teis de forma mais rpida.A simplicidade se reete tambm na maneira com que arquivos contendo programasem Java so compilados e executados: se as recomendaes bsicas forem seguidas,o compilador se encarregar de compilar todas as classes necessrias em uma apli-cao automaticamente, sem necessidade de arquivos adicionais de congurao eincluso de bibliotecas.iiPOO-2ED 2013/8/59:15pageviii #8iiiiiiviii Introduo Programao Orientada a Objetos Usando JavaJava porttil. O cdigo-fonte de um programa ou classe em Java pode ser compiladoem qualquer computador, usando qualquer sistema operacional, contanto que estetenha uma mquina virtual Java adequada a mquina virtual o ambiente de exe-cuo das aplicaes em Java. As classes criadas podem ser copiadas e executadasem qualquer computador nas mesmas condies, aumentando a utilidade da lingua-gem atravs da independncia de plataformas, contanto que verses compatveis damquina virtual sejam usadas.Java exvel. Conhecimentos sobre a linguagem podem ser usados para desenvolveraplicaes que so executadas em terminais, com ou sem interfaces grcas, aplica-es que so executadas em um servidor com navegadores como cliente, e aplicaesembarcadas em smartphones e outros dispositivos mveis. O conhecimento bsicosobre a linguagem habilita o programador a aprender os conceitos especcos dasdiversas plataformas mais rapidamente.Java robusta. Administrao de memria (alocao e liberao) e o uso de ponteiros,duas das fontes de erros e bugs mais frequentes em programas em C e C++,soadministradosinternamentenalinguagem, deformatransparenteparaoprogra-mador. De maneira geral, programas em Java tm restries no acesso memriaque resultam em maior segurana para os programas sem diminuir a utilidade dosmesmos.Java tambm tem um poderoso mecanismo de excees que permite melhor trata-mento de erros em tempo de execuo dos programas.Java tem bibliotecas prontas para diversas aplicaes. Asbibliotecasdeclassesdamquinavirtual Javacontmvriasclassesqueimplementamdiversosmeca-nismosdeentradaesada, acessoInternet, manipulaodestrings(cadeiasdecaracteres) em alto nvel, poderosas estruturas de dados, utilitrios diversos e umconjunto completo de classes para implementao de interfaces grcas.Vale a pena relembrar que estas bibliotecas so padro de Java qualquer mquinavirtual Java permite o uso destas bibliotecas, sem a necessidade de instalar paco-tes adicionais e que, mesmo que o compilador usado no tenha interface grcasimilar de linguagens visuais, os programas criados com este compilador podemter interfaces grcas complexas.Almdasbibliotecaspadrodamquinavirtual Javapossvel usarumaam-pla gama de bibliotecas adicionais que permitem o desenvolvimento de aplicaescomplexas.Categorias de softwares em JavaExistem basicamente trs categorias de software que podem ser criados em Java e quesero apresentadas neste livro:Classes para representao de modelos. Classessousadaspararepresentar, emlinguagemdeprogramao, modelos eabstraes dedados comoos mostradosnocaptulo1. Classespararepresentaodemodelosno podemser executadasdiretamente, mas instncias destas classes podem ser usadas dentro de aplicaesiiPOO-2ED 2013/8/59:15pageix#9iiiiiiixeapplets. DetalhesemecanismosdecriaodeclassesemJavaserovistosnocaptulo 2.Aplicaes ou Programas. Aplicaesouprogramaspodemserexecutadasporumsistemaoperacional, podendoenvolverounomaiorinteraocomousurio, epodendo ou no ter uma interface grca. Informaes sobre a criao de aplicaesem Java (sem uso de interface grca) sero mostradas no captulo 3. Aplicaesquesoexecutadasemumservidor(servlets, JavaServerPages, webservicesesimilares) no sero cobertas neste livro.Classes como conjuntos de rotinas. Classespodemcontersomentemtodos(roti-nas)aoinvsderepresentardados. Estasclassesfuncionamcomobibliotecasdemtodos ou funes que tem algo em comum. Detalhes sobre a criao deste tipode classes sero vistos no captulo 5.Esta lista no considera aplicaes com interfaces grcas, aplicaes que so executa-das em um servidor, aplicaes embarcadas ou para dispositivos mveis como smartpho-nes, que no so cobertas neste livro.Modicaes na Segunda EdioTodososcaptulosdolivroforamrevisadosparaasegundaedio, commelhoriasnocontedo e apresentao e correes no texto. Alguns exemplos foram melhorados paracarmaisrealistas, enquantooutrosforamremovidosporseremredundantesounocorresponder adequadamente a novas caractersticas da linguagem.Algunsconceitosquenoforamincludosnaprimeiraediooforamnasegunda:enumeradores (seo 5.6), laos para iterao em arrays e colees (seo 10.2.1), argu-mentos variveis (seo 10.6), tipos genricos (seo 12.1.1) e autoboxing (seo 12.1.2).Ocaptulosobrepacotesfoi removido, eseucontedoapresentadonocaptulo2.Classes foram organizadas em pacotes correspondentes aos captulos do livro, e so de-claradas como pblicas logo desde os primeiros exemplos.As listagens foram separadas das guras, com um ndice parte. O cdigo tambmfoi revisado para melhor padronizao.Alguns apndices foram removidos do texto, por tratar de conceitos tecnolgicos quemudam muito com o tempo (por exemplo, ambientes integrados de desenvolvimento). Ocontedo destes apndices ser apresentado em material parte, que ser disponibilizadono site de suporte.Dedicatria e AgradecimentosEste livro dedicado a minha esposa Yukari, pela enorme pacincia e suporte, e a nossoslhos Miyuki e Hiroshi, pela constante alegria que proporcionam. Dedico tambm o livroaos meus pais, Elias e Mariza, pelas vrias lies de vida.iiPOO-2ED 2013/8/59:15pagex#10iiiiiix Introduo Programao Orientada a Objetos Usando JavaSougratoaosestudantesdoscursosdaFaculdadedeCinciadaComputaodaUniversidade do Vale do Paraba (Univap) e do antigo IBTA (Instituto Brasileiro de Tec-nologia Avanada) que contriburam com ideias e perguntas que resultaram em exemplose exerccios, e em especial, aos estudantes que participaram na reviso do livro.Sou tambm grato a vrios colegas da Univap, IBTA e INPE (Instituto Nacional dePesquisas Espaciais) por sugestes e esclarecimentos necessrios para alguns exerccios,professoraClaudiaMariaBauzerMedeirosdaUnicamp, porvriassugestesparaotexto, e aos editores e funcionrios da Elsevier, por acreditarem na ideia apesar de todosos atrasos que causei.iiPOO-2ED 2013/8/59:15pagexi #11iiiiiiSumrioPrefcio para a segunda edio vSumrio xiLista de Figuras xivLista de Listagens xvLista de Tabelas xxii1 Introduo programao orientada a objetos 11.1 O que um programa de computador?. . . . . . . . . . . . . . . . . . . . 11.2 O que so modelos? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3 O que programao orientada a objetos?. . . . . . . . . . . . . . . . . . 51.4 Encapsulamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.5 Mais exemplos de modelos. . . . . . . . . . . . . . . . . . . . . . . . . . . 71.5.1 Exemplo 1: Uma lmpada incandescente . . . . . . . . . . . . . . . 81.5.2 Exemplo 2: Uma conta bancria simplicada . . . . . . . . . . . . 101.5.3 Exemplo 3: Uma data . . . . . . . . . . . . . . . . . . . . . . . . . 121.5.4 Exemplo 4: Um registro acadmico de aluno . . . . . . . . . . . . 141.6 Classes, objetos, instncias, referncias, atributos e mtodos. . . . . . . . 161.7 Orientao a objetos necessria? . . . . . . . . . . . . . . . . . . . . . . 181.8 Papis de programadores que utilizam orientao a objetos . . . . . . . . 182 Criando classes em Java 202.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.2 Sintaxe bsica para a criao de classes em Java . . . . . . . . . . . . . . 202.3 Atributos de classes em Java . . . . . . . . . . . . . . . . . . . . . . . . . 232.3.1 Usando dados nativos em Java . . . . . . . . . . . . . . . . . . . . 242.3.2 Declarando atributos em classes em Java . . . . . . . . . . . . . . 262.3.3 Que tipos de dados devem ser usados? . . . . . . . . . . . . . . . . 282.4 Mtodos em classes em Java . . . . . . . . . . . . . . . . . . . . . . . . . . 292.5 Escopo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332.6 Modicadores de acesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34xiiiPOO-2ED 2013/8/59:15pagexii #12iiiiiixii Introduo Programao Orientada a Objetos Usando Java3 Criando aplicaes em Java 433.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.2 Criando aplicaes em Java . . . . . . . . . . . . . . . . . . . . . . . . . . 433.3 A palavra-chavenew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.4 A palavra-chavenull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.5 Escrevendo classes e aplicaes mais interativas . . . . . . . . . . . . . . . 554 Construtores e sobrecarga 574.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574.2 O que so construtores? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604.3 Sobrecarga de mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644.3.1 A palavra-chavethis . . . . . . . . . . . . . . . . . . . . . . . . . 694.3.2 Cuidados com sobrecarga de mtodos . . . . . . . . . . . . . . . . 725 Atributos e mtodos estticos 755.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755.2 Atributos estticos em classes . . . . . . . . . . . . . . . . . . . . . . . . . 755.3 Mtodos estticos em classes . . . . . . . . . . . . . . . . . . . . . . . . . 825.4 Atributos e mtodos estticos em aplicaes. . . . . . . . . . . . . . . . . 855.5 Fbricas de instncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865.6 Enumeradores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896 Estruturas de deciso e controle Condicionais 946.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946.2 Operadores lgicos em Java . . . . . . . . . . . . . . . . . . . . . . . . . . 956.3 Estruturas de deciso e execuo seletiva . . . . . . . . . . . . . . . . . . . 1006.3.1 As instruesif-else. . . . . . . . . . . . . . . . . . . . . . . . . 1006.3.2 O operador condicional? . . . . . . . . . . . . . . . . . . . . . . . 1046.3.3 A instruoswitch . . . . . . . . . . . . . . . . . . . . . . . . . . 1057 Estruturas de deciso e controle Repetio 1107.1 Estruturas de repetio ou iterao. . . . . . . . . . . . . . . . . . . . . . 1107.1.1 Contadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1117.1.2 O laowhile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1137.1.3 O laodo-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177.1.4 O laofor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217.2 Introduo recurso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1258 Reutilizao de classes 1348.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1348.2 Delegao ou composio . . . . . . . . . . . . . . . . . . . . . . . . . . . 1358.2.1 Delegao e modicadores de acesso . . . . . . . . . . . . . . . . . 1418.2.2 Delegao e construtores . . . . . . . . . . . . . . . . . . . . . . . . 145iiPOO-2ED 2013/8/59:15pagexiii #13iiiiiiSumrio xiii8.3 Herana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1458.3.1 A palavra-chavesuper . . . . . . . . . . . . . . . . . . . . . . . . . 1528.3.2 Sobreposio e ocultao . . . . . . . . . . . . . . . . . . . . . . . 1608.3.3 O modicadorprotected . . . . . . . . . . . . . . . . . . . . . . . 1658.3.4 Polimorsmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1708.4 Comentrios nais sobre composio e herana . . . . . . . . . . . . . . . 1789 Classes abstratas e interfaces 1799.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1799.2 Classes e mtodos abstratos . . . . . . . . . . . . . . . . . . . . . . . . . . 1809.3 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1859.4 Herana mltipla usando interfaces . . . . . . . . . . . . . . . . . . . . . . 1949.4.1 Conitos de herana mltipla . . . . . . . . . . . . . . . . . . . . . 20310 Arrays em Java 20810.1Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20810.2Arrays unidimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20910.2.1 Laos para iterao em arrays . . . . . . . . . . . . . . . . . . . . . 21610.3Arrays de instncias de classes . . . . . . . . . . . . . . . . . . . . . . . . 21710.4Arrays multidimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . 22210.4.1 Arrays irregulares . . . . . . . . . . . . . . . . . . . . . . . . . . . 22710.5Processando argumentos da linha de comando . . . . . . . . . . . . . . . . 23010.6Argumentos variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23311 Classes para manipulao de strings 23611.1Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23611.2A classeString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23611.2.1 Construindo instncias da classeString. . . . . . . . . . . . . . . 23711.2.2 Mtodos bsicos da classeString . . . . . . . . . . . . . . . . . . 23811.2.3 Mtodos para comparao de instncias da classeString . . . . . 24111.2.4 Mtodos para procura em instncias da classeString . . . . . . . 24311.2.5 Mtodos para modicao de instncias da classeString . . . . . 24411.2.6 Mtodos de converso da classeString . . . . . . . . . . . . . . . 24611.2.7 Separando uma string em componentes . . . . . . . . . . . . . . . 24611.3A classeStringBuilder. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24811.3.1 Mtodos bsicos da classeStringBuilder. . . . . . . . . . . . . . 24812 Colees de objetos 25212.1Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25212.1.1 Tipos Genricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25312.1.2 Autoboxing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25412.2Conjuntos (sets) de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . 25512.2.1 Diferenas adicionais entre as classesTreeSet eHashSet . . . . . . 263iiPOO-2ED 2013/8/59:15pagexiv#14iiiiiixiv Introduo Programao Orientada a Objetos Usando Java12.3Listas de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26412.3.1 Pilhas e las implementadas como instncias de listas . . . . . . . 27112.4Mapas (ou arrays associativos) de objetos . . . . . . . . . . . . . . . . . . 27712.5Algoritmos em colees . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28212.6Comparadores e ordem natural de objetos . . . . . . . . . . . . . . . . . . 283AA classeKeyboard 291A.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291A.2 A classeKeyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292A.2.1 Exemplos de uso dos mtodos da classeKeyboard . . . . . . . . . 303A.2.2 Sumrio dos mtodos da classeKeyboard . . . . . . . . . . . . . . 305A.3 Usando arquivos de respostas . . . . . . . . . . . . . . . . . . . . . . . . . 307ndice Remissivo 309Lista de Figuras1.1 Comanda do Restaurante Caseiro Hipottico. . . . . . . . . . . . . . . . . 31.2 Representao de encapsulamento. . . . . . . . . . . . . . . . . . . . . . . 71.3 O modeloLampada, seus atributos e operaes. . . . . . . . . . . . . . . . 81.4 O modeloContaBancariaSimplificada, seus atributos e operaes. . . . 111.5 O modeloData, seus atributos e operaes. . . . . . . . . . . . . . . . . . 131.6 O modeloRegistroAcademico, seus atributos e operaes. . . . . . . . . 153.1 Referncias e instncias criadas na classeUsaDataEncapsulada. . . . . . . 483.2 Coordenadas no espao cartesiano de duas dimenses. . . . . . . . . . . . 495.1 Caixas de bancos com e sem la nica.. . . . . . . . . . . . . . . . . . . . 767.1 Ilustrao do problema das Torres de Hani. . . . . . . . . . . . . . . . . . 1287.2 Passos na soluo do problema das Torres de Hani. . . . . . . . . . . . . 1297.3 Chamadas recursivas ao mtodofibonacci. . . . . . . . . . . . . . . . . . 1338.1 Diagrama de herana envolvendo vrias classes. . . . . . . . . . . . . . . . 15110.1Exemplo de array irregular de duas dimenses. . . . . . . . . . . . . . . . 22810.2Tringulo de Pascal com seis linhas. . . . . . . . . . . . . . . . . . . . . . 229iiPOO-2ED 2013/8/59:15pagexv#15iiiiiiLista de Listagens xvLista de Listagens1.1 O modeloLampada, em pseudocdigo. . . . . . . . . . . . . . . . . . . . . . 91.2 O modeloContaBancariaSimplificada, em pseudocdigo. . . . . . . . . . 111.3 O modeloData, em pseudocdigo.. . . . . . . . . . . . . . . . . . . . . . . 131.4 O modeloRegistroAcademico, em pseudocdigo. . . . . . . . . . . . . . . 152.1 Uma classe vazia em Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.2 AclasseRegistroAcademicoSimples, quedemonstradeclaraesdeal-guns atributos e seus tipos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.3 A classeDataSemMetodos, que demonstra mais declaraes de alguns atri-butos e seus tipos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.4 A classeDataSimples, que apresenta declaraes de atributos e mtodos. . 302.5 A classe Triangulo, que encapsula os atributos e mtodos para representartringulos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332.6 A classeUsaDataSimples, que pode ser executada como uma aplicao eque demonstra o uso de instncias da classeDataSimples. . . . . . . . . . 352.7 A classeDataEncapsulada, que implementa uma poltica de ocultao deatributos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382.8 A classeUsaDataEncapsulada, que pode ser executada e que demonstra ouso de instncias da classeDataEncapsulada. . . . . . . . . . . . . . . . . 413.1 A classe UsaDataEncapsulada, que demonstra outros usos de instncias daclasseDataEncapsulada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.2 A classePonto2D, que encapsula um ponto no espao cartesiano de duasdimenses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493.3 A classeUsaPonto2D, que demonstra instncias da classePonto2D. . . . . 513.4 A classe OutrosExemplosDataEncapsulada, que demonstra mais exemplosde referncias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.5 AclasseUsaPontoTeclado, quedemonstrainstnciasdaclassePonto2Dque sero inicializadas com valores lidos do teclado. . . . . . . . . . . . . . 554.1 A classeRegistroAcademicoSemConstrutor, que encapsula alguns dadosde um registro acadmico. . . . . . . . . . . . . . . . . . . . . . . . . . . . 574.2 A classeUsaRegistroAcademicoSemConstrutor, que demonstra o uso deinstncias da classeRegistroAcademicoSemConstrutor. . . . . . . . . . . 594.3 A classeEventoAcademico, que representa um evento acadmico. . . . . . 61iiPOO-2ED 2013/8/59:15pagexvi #16iiiiiixvi Introduo Programao Orientada a Objetos Usando Java4.4 A classe UsaEventoAcademico, que demonstra o uso de instncias da classeEventoAcademico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624.5 A classeRoboSimples, que encapsula dados e comportamento de um robmvel simulado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654.6 A classeUsaRoboSimples, que demonstra a criao e o uso de instnciasda classeRoboSimples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684.7 A classeRoboSimplesRevisto, que encapsula dados e comportamento deum rob mvel simulado (com melhorias). . . . . . . . . . . . . . . . . . . 694.8 Trecho de cdigo que exemplica uso da palavra-chavethis para diferen-ciar argumentos de atributos. . . . . . . . . . . . . . . . . . . . . . . . . . 724.9 A classe UsaRoboSimplesComErros, que demonstra o uso de chamadas comargumentos incorretos a construtores e mtodos da classeRoboSimples. . . 735.1 A classeSimuladorDeCaixaDeBanco,que simula o mecanismo de atendi-mento de um caixa de banco. . . . . . . . . . . . . . . . . . . . . . . . . . . 775.2 A classe UsaSimuladorDeCaixaDeBanco, que demonstra usos de instnciasda classeSimuladorDeCaixaDeBanco. . . . . . . . . . . . . . . . . . . . . . 775.3 Resultado da execuo da classeUsaSimuladorDeCaixaDeBanco. . . . . . . 785.4 A classeSimuladorDeCaixaDeBancoRevisto, que simula o mecanismo deatendimento de um caixa de banco (com senhas unicadas para o atendi-mento). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795.5 Resultado da execuo da classeUsaSimuladorDeCaixaDeBanco, reescritapara usar instncias deSimuladorDeCaixaDeBancoRevisto. . . . . . . . . 805.6 A classeConstantesMatematicas, que contm algumas constantes mate-mticas teis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815.7 A classeUsaConstantesMatematicas, que demonstra o uso dos atributosestticos na classeConstantesMatematicas. . . . . . . . . . . . . . . . . . 815.8 A classe ConversaoDeUnidadesDeComprimento, que contm mtodos est-ticos para a converso de unidades de comprimento.. . . . . . . . . . . . . 835.9 AclasseUsaConversaoDeUnidadesDeComprimento, quedemonstraousodos mtodos estticos na classeConversaoDeUnidadesDeComprimento. . . 845.10 AclasseCalculoDePrecoDeTerreno, quecalculaopreodeumterrenobaseado em sua rea e localizao, usando um mtodo esttico. . . . . . . 855.11 A classe DataComFabrica, que contm uma fbrica de instncias da prpriaclasse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875.12 AclasseUsaDataComFabrica, quedemonstrausosdaclasseDataComFa-brica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885.13 Oenumerador EstadosDoBrasil, quedeclaraconstantes paratodos osestados do Brasil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895.14 AclasseUsaEstadosDoBrasil, quedemonstraousodoenumeradorEs-tadosDoBrasil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905.15 O enumeradorEstadosDoBrasilRevisto,que associa vrias informaess constantes de um enumerador. . . . . . . . . . . . . . . . . . . . . . . . 915.16 A classeUsaEstadosDoBrasilRevisto, que demonstra o uso do enumera-dorEstadosDoBrasilRevisto. . . . . . . . . . . . . . . . . . . . . . . . . . 93iiPOO-2ED 2013/8/59:15pagexvii #17iiiiiiLista de Listagens xvii6.1 A classe Comparavel, que encapsula um valor e contm mtodos para com-par-lo com outros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966.2 A classeUsaComparavel, que demonstra usos de instncias e mtodos daclasseComparavel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996.3 Pseudocdigo usado para calcular o preo de uma entrada de cinema. . . . 1006.4 A classeEntradaDeCinema, que calcula o preo de uma entrada de cinema. 1016.5 Trecho de cdigo que demonstraifs aninhados. . . . . . . . . . . . . . . . 1026.6 Trecho de cdigo que demonstraifs aninhados e blocos de comandos. . . . 1026.7 A classe DataIf, com um mtodo que demonstra o uso da instruo if emcascata. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1036.8 A classeComparaSimples, que demonstra o uso do operador condicional?. 1046.9 A classeDataSwitch, com mtodos que demonstram a instruoswitch. . 1056.10 A classe UsaEstadosDoBrasilComSwitch, que demonstra como as constan-tesdoenumeradorEstadosDoBrasilpodemserusadascomainstruoswitch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1087.1 A classeExemplosWhile, que demonstra vrios usos do laowhile. . . . . 1137.2 AclasseEscolhaComWhile, queencapsulaummecanismodeescolhadevalores (usando um blocowhile). . . . . . . . . . . . . . . . . . . . . . . . 1147.3 Aclasse EscolhaComWhileEContinue, queencapsulaummecanismodeescolha de valores (usando um blocowhile e o comandocontinue). . . . . 1167.4 A classeEscolhaComDoWhile, que encapsula um mecanismo de escolha devalores (usando um blocodo-while). . . . . . . . . . . . . . . . . . . . . . 1177.5 A classeJogoDeAdivinhacao,que implementa um jogo simples de adivi-nhao de nmeros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1197.6 A classeUsaJogoDeAdivinhacao,quedemonstrao usodeumainstnciada classeJogoDeAdivinhacao. . . . . . . . . . . . . . . . . . . . . . . . . . 1207.7 A classeExemplosFor, que demonstra vrios usos do laofor. . . . . . . . 1217.8 A classe Combinatoria, que contm alguns mtodos estticos para clculosbsicos de combinatria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1237.9 A classe UsaCombinatoria, que demonstra o uso dos mtodos estticos daclasseCombinatoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1247.10 Aclasse ExemplosForEnumeradores, quedemonstracomopercorrer asconstantes do enumeradorEstadosDoBrasil com um laofor. . . . . . . 1257.11 Pseudocdigo para calcular somatria recursivamente. . . . . . . . . . . . . 1267.12 A classeSomatoriaRecursiva, que demonstra o clculo da somatria re-cursiva dos primeirosNnmeros inteiros. . . . . . . . . . . . . . . . . . . . 1267.13 Resultado da execuo da classeSomatoriaRecursiva com o valor6. . . . 1287.14 AclasseTorresDeHanoi, quedemonstraasoluorecursivaparaopro-blema das Torres de Hani. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307.15 A classeFibonacciRecursiva, que demonstra o clculo da srie de Fibo-nacci recursivamente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131iiPOO-2ED 2013/8/59:15pagexviii #18iiiiiixviii Introduo Programao Orientada a Objetos Usando Java8.1 A classeDataHora, que reutiliza as classesData eHora atravs do meca-nismo de delegao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1358.2 A classe RegistroAcademicoDeGraduacao, que reutiliza a classe Data atra-vs de delegao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1378.3 O enumerador CursosDeGraduacao, que contm constantes e mtodos pararepresentar alguns cursos de graduao. . . . . . . . . . . . . . . . . . . . . 1398.4 A classeUsaRegistroAcademicoDeGraduacao, que demonstra a criao eo uso de instncias da classeRegistroAcademicoDeGraduacao. . . . . . . 1408.5 A classePessoaSimples, que encapsula os dados de identicao de umapessoa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1418.6 A classe FuncionarioSimples, que encapsula os dados bsicos de um fun-cionrio de uma empresa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1428.7 A classeUsaFuncionarioSimples, que demonstra o uso de uma instnciada classeFuncionarioSimples. . . . . . . . . . . . . . . . . . . . . . . . . 1438.8 A classePessoa, que encapsula os dados de identicao de uma pessoa. . 1468.9 A classeFuncionario, que encapsula os dados bsicos de um funcionriode uma empresa e herda da classePessoa. . . . . . . . . . . . . . . . . . . 1478.10 Aclasse ChefeDeDepartamento, queencapsulaosdadosbsicosdeumchefe de um departamento de uma empresa e que herda da classe Funcio-nario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1498.11 A classeObjetoSimulado, que encapsula os dados de um objeto genricoem um simulador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1548.12 A classeObjetoMovelSimulado, que encapsula os dados de um objeto si-mulado que pode se mover. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1568.13 OenumeradorDirecoesSimulador, quelistaospossveisvaloresparaadireo para movimento de um objeto simulado. . . . . . . . . . . . . . . . 1578.14 A classe ObjetoRoboSimulado, que herda da classe ObjetoMovelSimuladoe que representa um rob simulado. . . . . . . . . . . . . . . . . . . . . . . 1578.15 A classeSimuladorSimples, que cria e usa algumas instncias de classesque herdam deObjetoSimulado. . . . . . . . . . . . . . . . . . . . . . . . 1598.16 A classeObjetoRoboPesadoSimulado, que herda deObjetoRoboSimulado. 1618.17 AclasseSimuladorSimplesRobos, quecriaeusaalgumasinstnciasdeObjetoRoboSimulado eObjetoRoboPesadoSimulado. . . . . . . . . . . . . 1628.18 A classePessoa (segunda verso). . . . . . . . . . . . . . . . . . . . . . . . 1658.19 A classeFuncionario (segunda verso). . . . . . . . . . . . . . . . . . . . 1668.20 A classeChefeDeDepartamento (segunda verso). . . . . . . . . . . . . . . 1688.21 AclasseSimuladorPolimorfismo,quedemonstrapolimorsmocomins-tncias deObjetoSimulado e classes herdeiras. . . . . . . . . . . . . . . . . 1708.22 A classe EmprestimoBancario, que demonstra implementao de mtodoscom polimorsmo e sobrecarga. . . . . . . . . . . . . . . . . . . . . . . . . 1728.23 A classeEmprestimoBancarioComCast, que demonstra implementao demtodos com polimorsmo e cast de instncias. . . . . . . . . . . . . . . . 1758.24 Trechodecdigoquedemonstraalgumasregrasdecastdeinstnciasdeclasses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177iiPOO-2ED 2013/8/59:15pagexix#19iiiiiiLista de Listagens xix9.1 A classe abstrata ContaBancaria, que representa uma conta bancria sim-ples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1819.2 A classeContaSimples, que representa uma conta bancria simples, e quepode ser instanciada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1829.3 A classeContaEspecial, que representa uma conta bancria especial. . . . 1839.4 A classe UsaContasBancarias, que demonstra o uso de classes que herdamdeContaBancaria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1849.5 A interfaceObjetoGeometrico,que declara que mtodos um objeto geo-mtrico genrico deve implementar. . . . . . . . . . . . . . . . . . . . . . . 1859.6 A classePonto2D, que representa um ponto em duas dimenses. . . . . . . 1869.7 A classeCirculo, que implementa a interfaceObjetoGeometrico e repre-senta um crculo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1879.8 A classeRetangulo, que implementa a interfaceObjetoGeometrico e re-presenta um retngulo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1899.9 A classe UsaObjetosGeometricos, que demonstra instncias de classes queimplementam a interfaceObjetoGeometrico. . . . . . . . . . . . . . . . . . 1919.10 A classe UsaObjetosGeometricosComPolimorfismo, que demonstra efeitosde polimorsmo em classes que implementam uma interface comum. . . . . 1929.11 A classeEscalavel, que dene que mtodos um objeto que seja escalvel(possa ter seu tamanho modicvel) deve implementar. . . . . . . . . . . . 1949.12 A classeCirculoEscalavel, que implementa as interfacesObjetoGeome-trico eEscalavel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1959.13 A classe UsaCirculoEscalavel, que demonstra o uso dos mtodos da classeCirculoEscalavel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1969.14 A classeItemDeBiblioteca,que declara que atributos e mtodos devemser usados para representar itens em uma biblioteca. . . . . . . . . . . . . 1979.15 Oenumerador Estado, querepresentaosestadosdeemprstimodeumitem de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1989.16 A classeLivro, que encapsula os dados de um livro. . . . . . . . . . . . . . 1999.17 A classeLivroDeBiblioteca, que encapsula os dados de um livro de umabiblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2009.18 AclasseUsaLivroDeBiblioteca, quedemonstraousodeinstnciasdaclasseLivroDeBiblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2029.19 A classeItemRaroDeBiblioteca, que declara os atributos e mtodos queitens raros de uma biblioteca devem ter. . . . . . . . . . . . . . . . . . . . 2039.20 A classeMapa, que encapsula os dados de um mapa.. . . . . . . . . . . . . 2049.21 A classeMapaDeBiblioteca, que encapsula os dados de um mapa de umabiblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20510.1 Trecho de cdigo que demonstra a declarao de arrays em Java. . . . . . 20910.2 Trecho de cdigo que demonstra a declarao e inicializao de arrays emJava. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20910.3 A classeAvaliaNotas, que manipula arrays de notas para criar um arrayde enumeradores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212iiPOO-2ED 2013/8/59:15pagexx#20iiiiiixx Introduo Programao Orientada a Objetos Usando Java10.4 O enumerador Situacao, que manipula arrays de notas para criar um arrayde enumeradores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21210.5 A classe ArrayDeFloats, que encapsula um array de valores do tipo nativofloat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21310.6 A classeUsaArrayDeFloats, que demonstra o uso de instncias da classeArrayDeFloats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21510.7 Trecho de cdigo que demonstra as duas formas de iterao em arrays. . . 21710.8 Aclasse Equipe, quecriaeusaumarraydeinstncias declasses queherdam deFuncionario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21710.9 A classe ArrayDeObjetosGeometricos, que encapsula um array de instn-cias de classes que implementam a interfaceObjetosGeometricos. . . . . 21910.10 A classe UsaArrayDeObjetosGeometricos, que demonstra o uso de instn-cias da classeArrayDeObjetosGeometricos. . . . . . . . . . . . . . . . . . 22110.11 Trecho de cdigo que demonstra a declarao de arrays multidimensionaisem Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22310.12 A classe MatrizDeDoubles, que encapsula um array bidimensional (matriz)de valores do tipodouble. . . . . . . . . . . . . . . . . . . . . . . . . . . . 22310.13 A classe TabuleiroDeJogoDeDamas, que encapsula um tabuleiro de jogo dedamas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22510.14 O enumeradorPecasDoJogoDeDamas, que representa as peas em um jogode damas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22610.15 Trecho decdigo quedemonstra a declarao eusodearraysirregularesem Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22810.16 Aclasse TrianguloDePascal, que implementaumtringulode Pascalcomo um array irregular. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22910.17 Aclasse CalculadoraDeLinhaDeComando, queimplementaumacalcula-dora simples usando argumentos passados pela linha de comando. . . . . . 23110.18 A classe ArgumentosVariaveis, que demonstra a criao e uso de mtodoscom argumentos variveis. . . . . . . . . . . . . . . . . . . . . . . . . . . . 23311.1 Trecho de cdigo que demonstra a criao de instncias deString. . . . . 23711.2 AclasseJogoDaForca, queencapsulaomecanismodeumjogodaforcasimples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23811.3 A classeUsaJogoDaForca, que demonstra o uso da classeJogoDaForca. . . 24111.4 Trecho de cdigo que exemplica a ordem de chamada de concatenao destrings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24611.5 A classeSeparacaoDeStrings, que demonstra como usar algumas expres-ses regulares para separar strings em componentes. . . . . . . . . . . . . . 24711.6 TrechodecdigoqueilustramtodosdemodicaodaclasseString-Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24911.7 Trecho de cdigo que exemplica uso do mtodo delete da classe String-Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25011.8 Trecho de cdigo que exemplica uso do mtodo replace da classe String-Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250iiPOO-2ED 2013/8/59:15pagexxi #21iiiiiiLista de Listagens xxi12.1 Trecho de cdigo que demonstra autoboxing. . . . . . . . . . . . . . . . . . 25412.2 Trecho de cdigo que demonstra mtodos da classeHashSet. . . . . . . . . 25612.3 A classeMegaSena, que contm um mtodo esttico que demonstra o usode um Set para sortear nmeros sem repeties. . . . . . . . . . . . . . . . 25712.4 AclasseOperacoesEmConjuntos, quedemonstraalgumasoperaesemconjuntos (sets). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25912.5 A classe ConjuntoDePalavras, que encapsula um conjunto de palavras semrepetio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26112.6 A classe UsaConjuntoDePalavras, que demonstra o uso da classe Conjun-toDePalavras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26212.7 Trecho de cdigo que demonstra o uso de mtodos deTreeSet. . . . . . . 26312.8 Trecho de cdigo que demonstra uso de instncias da classeLinkedList. . 26512.9 AclasseMovimentoDeRobo, querepresentaumnicomovimentodeumrob (que consiste em um nmero de passos dados em uma certa direo). 26612.10 OenumeradorDirecoesDoRobo,quecontmconstantespararepresentaros pontos cardeais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26612.11 A classe RoboComMemoria, que representa um rob que armazena os movi-mentos feitos por ele. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26712.12 AclasseUsaRoboComMemoria, quedemonstraousodeumainstnciadaclasseRoboComMemoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26912.13 Trecho de cdigo que demonstra outros mtodos de classes que implemen-tamList. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27012.14 Trecho de cdigo que demonstra como implementar uma la com a classeLinkedList. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27212.15 Trecho de cdigo que demonstra como implementar uma pilha com a classeLinkedList. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27212.16 A classePilhaDeDoubles, que representa uma pilha onde podemos arma-zenar e recuperar valores do tipodouble. . . . . . . . . . . . . . . . . . . . 27412.17 AclasseAvaliadorDeExpressoes, quecontmummtodoestticoquepermite a avaliao de expresses matemticas do tipo postx. . . . . . . . 27512.18 Aclasse UsaAvaliadorDeExpressoes, quedemonstraousodomtodoavaliaExpressoPostfix da classeAvaliadorDeExpressoes. . . . . . . . 27612.19 Trecho de cdigo que demonstra mtodos bsicos de classes que implemen-tamMap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27812.20 A classe DicionarioDeIPs, que cria e permite a consulta a um minidicion-rio de nomes de servidores e seus IPs. . . . . . . . . . . . . . . . . . . . . . 27912.21 A classeArrayEsparsoDeDoubles, que encapsula um array esparso de va-lores de ponto utuante. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28012.22 AclasseUsaArrayEsparsoDeDoubles, quedemonstraousodeumains-tncia da classeArrayEsparsoDeDoubles. . . . . . . . . . . . . . . . . . . 28212.23 Trecho de cdigo que exemplica o uso de alguns mtodos da classeCol-lections para reorganizar listas. . . . . . . . . . . . . . . . . . . . . . . . 28312.24 A classeDisciplinaCursada, que encapsula dados referentes a uma disci-plina cursada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284iiPOO-2ED 2013/8/59:15pagexxii #22iiiiiixxii Introduo Programao Orientada a Objetos Usando Java12.25 O enumerador CodigoDisciplina, que representa as disciplinas que podemser cursadas em uma universidade. . . . . . . . . . . . . . . . . . . . . . . 28512.26 A classeAlunoDeGraduacao, que encapsula alguns dados de um aluno degraduao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28512.27 A classe ComparaPorNomeCrescente, que permite a comparao de instn-cias deAlunoDeGraduacao pelos nomes. . . . . . . . . . . . . . . . . . . . 28712.28 A classeComparaPorNotaDecrescente, que permite a comparao de ins-tncias deAlunoDeGraduacao pelas mdias de notas. . . . . . . . . . . . . 28812.29 A classeTurmaDeAlunos, que demonstra operaes em uma turma (lista)de alunos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289A.1 A classeKeyboard, que permite a leitura de valores simples via teclado. . . 292A.2 A classeUsaKeyboard, que demonstra o uso da classeKeyboard. . . . . . . 303A.3 Um exemplo de arquivo de respostas para uso com a classeUsaKeyboard. . 308Lista de Tabelas2.1 Palavras reservadas em Java. . . . . . . . . . . . . . . . . . . . . . . . . . 222.2 Tipos bsicos de Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25