JAVA™ - read.pudn.comread.pudn.com/downloads167/ebook/766245/JavaComoProgramar.pdf · Sun quando...

1172
JAVA™ COMO PROGRAMAR

Transcript of JAVA™ - read.pudn.comread.pudn.com/downloads167/ebook/766245/JavaComoProgramar.pdf · Sun quando...

  • JAVA COMO PROGRAMAR

  • D325J Deitei, H. M. Java, como programar / H. M. Deitei e P. J. Deitei; trad. Carlos Arthur

    Lang Lisboa. - 4,ed. - Porto Alegre: Bookman, 2003.

    1. Computao - Programao de computadores - Java. I. Deitei, P. J. II. Ttulo.

    CDU 681.3 (Java)

    Catalogao na publicao: Mnica Ballejo Canto - CRB 10/1023

    ISBN 85-363-0123-6

  • H. M. Deitei Deitei & Associates, Inc.

    P. J. Deitei Deitei & Associates, Inc.

    TM JAVA COMO PROGRAMAR

    4a Edio

    Traduo e reviso tcnica: CARLOS ARTHUR LANG LISBOA

    Professor do Instituto de Informtica da UFRGS

    Consultoria desta edio: MARIA LCIA BLANCK LISBOA

    Professora do Instituto de Informtica da UFRGS

    2003

  • Obra originalmente publicada sob o ttulo Java How to Program, 4th Edition 2002, Prentice Hall, Inc. Traduo autorizada a partir do original em lngua inglesa publicado por Pearson Education, Inc., atravs da sua diviso Prentice Hall.

    ISBN 0-13-034151-7

    Capa: Mrio Rhnelt

    Preparao do original: Daniel Grassi

    Superviso editorial: Arysinha Jacques Affonso

    Editorao eletrnica: Laser House

    Impresso e Acabamento: R.R. Donnelley Amrica Latina

    Reservados todos os direitos de publicao, em lngua portuguesa, ARTMED EDITORA S. A. (BOOKMAN COMPANHIA EDITORA uma diviso da ARTMED EDITORA S. A.) Av. Jernimo de Ornelas, 670 - Santana 90040-340 - Porto Alegre - RS Fone: (51) 3330-3444 Fax: (51) 3330-2378

    proibida a duplicao ou reproduo deste volume, no todo ou em parte, sob quaisquer formas ou por quaisquer meios (eletrnico, mecnico, gravao, fotocpia, distribuio na Web e outros), sem permisso expressa da Editora.

    SO PAULO Av. Rebouas, 1.073 - Jardins 05401-150-So Paulo-SP Fone: (11) 3062-3757* Fax: (011) 3062-2487

    SAC 0800 703-3444

    IMPRESSO NO BRASIL PRINTED IN BRAZIL

  • Para David Nelson e Gary Morin da Sun Microsystems: Dedicamos este livro a vocs - nossos amigos e nossos

    mentores - a quem devemos nosso relacionamento de uma dcada com a Sun.

    Foi uma honra ter trabalhado com vocs e seus colegas na Sun quando Java e o ramo de educao em Java

    nasceram.

    Harvey e Paul Deitei

  • Prefcio

    Nunca mais viver em fragmentos. Apenas se conectar. Edward Morgan Forster

    Bem-vindo a Java Como Programar, Quarta Edio, e ao estimulante mundo da programao com a plataforma Ja-va 2, Standard Edition. Este livro foi escrito por um velho e um jovem. O velho (HMD; Massachusetts Institute of Technology 1967) programa e/ou ensina programao h 40 anos. O jovem (PJD; MIT 1991) programa e/ou ensina programao h 22 anos e tanto um Sun Certified Java Programmer como um Sun Certified Java Developer. 0 ve-lho programa e ensina a partir de sua experincia; o jovem faz isso a partir de uma reserva inesgotvel de energia. O velho quer clareza; o jovem quer desempenho. O velho busca elegncia e beleza; o jovem quer resultados. Reuni-mo-nos para produzir um livro o qual esperamos que voc ache informativo, desafiante e divertido.

    Em novembro de 1995, comparecemos a uma conferncia de Internet/World Wide Web em Boston para ouvir sobre Java. Um representante da Sun Microsystems falou sobre Java em um salo de convenes lotado. Tivemos sorte de conseguir assentos. Durante essa apresentao, vimos o futuro da programao se revelar. A primeira edi-o de Java Como Programar nascia naquele momento e foi publicada como o primeiro livro-texto de cincia da computao sobre Java do mundo.

    O mundo de Java est desenvolvendo-se to rpido que Java Como Programar, Quarta Edio est sendo pu-blicado menos de cinco anos depois da primeira edio. Isso cria desafios e oportunidades imensas para ns como autores, para nosso editor - a Prentice Hall, para instrutores, alunos e profissionais.

    Antes de Java aparecer, estvamos convencidos de que C++ substituiria C como a principal linguagem de de-senvolvimento de aplicativos e a principal linguagem de programao de sistemas durante a prxima dcada. Entre-tanto, a combinao da World Wide Web com Java agora aumenta a importncia da Internet no planejamento e na implementao estratgicos de sistemas de informaes. Muitas organizaes querem integrar a Internet "transpa-rentemente" em seus sistemas de informaes. Java mais apropriada que C++ para esse propsito.

    Novos recursos em Java Como Programar, Quarta Edio Esta edio contm muitos recursos novos e aprimoramentos, incluindo:

    Apresentao totalmente a cores. O livro est totalmente a cores. O uso total de cores permite aos leitores ver os exemplos de sada assim como eles aparecem em um monitor colorido. Colorimos todo o cdigo Ja-va de acordo com a sintaxe, como boa parte dos ambientes de desenvolvimento de Java faz hoje em dia. Nossas convenes para colorir de acordo com a sintaxe so as seguintes:

    comentrios aparecem em verde palavras-chave aparecem em azul escuro

  • viii JAVA COMO PROGRAMAR

    constantes e valores literais aparecem em azul claro nomes de classes, mtodos e variveis aparecem em preto

    "Limpeza do cdigo". Este o nosso novo termo para o processo que usamos para converter todos os pro-gramas do livro para um leiaute mais aberto e com comentrios melhorados. Agrupamos o cdigo dos pro-gramas em pedaos pequenos e bem documentados. Isto aumenta enormemente a legibilidade do cdigo -um objetivo especialmente importante para ns, j que esta edio tem mais de 25.000 linhas de cdigo.

    Ajuste. Realizamos um ajuste substancial no contedo do livro, com base em nossas prprias anotaes de-correntes do uso extensivo no ensino durante nossos seminrios de Java para profissionais. Alm disso, uma eminente equipe de revisores leu a terceira edio do livro e nos forneceu seus comentrios e crticas. Exis-tem literalmente milhares de melhorias de ajuste fino em relao terceira edio.

    Pensando em objetos. Este estudo de caso opcional apresenta um projeto orientado a objetos com a Unified Modeling Language (a UML). Muitos captulos nesta edio terminam com uma seo "Pensando em obje-tos" na qual apresentamos gradualmente uma introduo orientao a objetos. Nosso objetivo nestas se-es ajud-lo a desenvolver uma maneira de pensar orientada a objetos, para ser capaz de implementar sis-temas mais substanciais. Estas sees tambm apresentam a Unified Modeling Language (UML). A UML uma linguagem grfica que permite s pessoas que constrem sistemas (p. ex., arquitetos de software, enge-nheiros de sistemas e programadores) representar seus projetos orientados a objetos usando uma notao co-mum. A seo "Pensando em objetos" do Captulo 1 apresenta conceitos bsicos e terminologia. Os Cap-tulos 2 a 13,15 e 22 (o 22 est no CD) e os Apndices G, H e I (tambm no CD) incluem sees "Pensando em objetos" opcionais que apresentam um estudo de caso substancial de um elevador, orientado a objetos, que aplica as tcnicas de projeto orientado a objetos. Os Apndices G, H e I implementam integralmente o projeto do estudo de caso em cdigo Java. Este estudo de caso ajudar a prepar-lo para os tipos de projetos substanciais que voc provavelmente ir encontrar nas empresas. Se voc um estudante e seu instrutor no planeja incluir este estudo de caso em seu curso, voc poder querer ler o estudo de caso por si mesmo. Acreditamos que valer a pena o seu esforo de percorrer este projeto grande e desafiador. O material apre-sentado nas sees do estudo de caso refora o material abordado nos captulos correspondentes. Voc ex-perimentar uma introduo slida ao projeto orientado a objetos com a UML. Alm disso, voc ir aperfei-oar seus conhecimentos de leitura de cdigo passeando por um programa em Java com 3.465 linhas de c-digo, cuidadosamente escrito e bem documentado, que resolve completamente o problema apresentado no estudo de caso.

    Descobrindo padres de projeto. Estas sees opcionais apresentam padres populares de projeto orienta-do a objetos em uso atualmente. A maioria dos exemplos fornecidos neste livro contm menos de 150 linhas de cdigo. Pequenos exemplos como estes normalmente no exigem um processo de projeto muito detalha-do. Entretanto, alguns programas, como o nosso estudo de caso opcional de simulao de elevador, so mais complexos - eles podem precisar de milhares de linhas de cdigo. Sistemas maiores, como sistemas de con-trole de caixas eletrnicos automticos ou de controle de trfego areo, podem conter milhes, ou at cen-tenas de milhes de linhas de cdigo. O projeto eficaz crucial para a construo apropriada de tais siste-mas complexos. Ao longo da ltima dcada, o setor de engenharia de software fez progressos significativos no campo de padres de projeto - arquiteturas de eficincia comprovada para construir softwares orienta-dos a objetos flexveis e fceis de manter1. O uso de padres de projeto pode reduzir substancialmente a complexidade do processo de projetar. Apresentamos diversos padres de projeto em Java, mas estes pa-dres de projeto podem ser implementados em qualquer linguagem orientada a objetos, como C++, C# ou Visual Basic. Descrevemos diversos padres de projeto usados pela Sun Microsystems na API de Java.. Usa-mos padres de projeto em muitos programas neste livro, que identificaremos em nossas sees "Descobrin-do padres de projeto". Estes programas fornecem exemplos do uso de padres de projeto para construir softwares orientados a objetos confivel e robusto.

    Captulo 22 (no CD), Java Media Framework (JMF) e JavaSound. Este captulo faz uma introduo aos recursos para udio e vdeo de Java, aperfeioando nossa cobertura de multimdia do Captulo 18. Com o Ja-

    1 Gamma, Erich, Richard Helm, Ralph Johnson e John Vlissides. Design Patterns; Elements of Reusable Object-Oriented Soft-ware. (Massachussets: Addison-Wesley, 1995)

  • PREFCIO ix

    va Media Framework, um programa Java pode reproduzir mdias de udio e vdeo e capturar udio e vdeo a partir de dispositivos como microfones e cameras de vdeo. O JMF permite criar aplicaes com streaming media, nas quais um programa Java envia, atravs da Internet, para outros computadores, udio ou vdeo ao vivo ou gravados e, ento, estes outros computadores reproduzem a mdia medida que ela recebida atra-vs da rede. As APIs de JavaSound permitem manipular sons em MIDI (Musical Instrument Digital Inter-face) e mdia capturada (i.e., mdia recebida de um dispositivo como um microfone). O captulo termina com uma aplicao de processamento de MIDI substancial, que permite aos usurios gravar arquivos MIDI ou selecionar arquivos MIDI para reproduzir. Os usurios podem criar sua prpria msica MIDI interagindo com o teclado de sintetizador simulado pela aplicao. A aplicao pode sincronizar a reproduo das notas em um arquivo MIDI com o pressionar das teclas no teclado do sintetizador simulado - de forma semelhan-te a uma pianola. [Nota: os Captulos 18 e 22 oferecem um conjunto substancial de exerccios. Cada captu-lo tambm tem uma seo especial que contm projetos de multimdia interessantes e desafiadores. Estas so apenas sugestes para projetos mais importantes. As solues no so fornecidas para estes exerccios adicionais nem no Instructor's Manual nem na Java 2 Multimedia Cyber Classroom.]

    Redes avanadas baseadas em TCP/IP. Inclumos um novo exemplo de coroamento no Captulo 17 que apresenta o multicasting para enviar informaes para grupos de clientes na rede. Este estudo de caso do Deitei Messenger emula muitas das aplicaes populares de envio instantneo de mensagens atuais, as quais permitem aos usurios de computadores se comunicar com amigos, parentes e colegas de trabalho atravs da Internet. Este programa Java cliente/servidor de 1.130 linhas, com multithreading, usa a maioria das tc-nicas apresentadas at este ponto no livro.

    Apndice J (no CD), Oportunidades de carreira. Este apndice detalhado apresenta servios para a carrei-ra profissional disponveis na Internet. Exploramos os servios on-line para a carreira profissional do ponto de vista do empregador e do empregado. Sugerimos sites para os quais voc pode enviar pedidos de empre-go, procurar trabalho e analisar candidatos (se voc est interessado em contratar algum). Tambm anali-samos servios que constrem pginas de recrutamento diretamente nas empresas de e-business. Um de nos-sos revisores nos disse que ele recm havia feito uma procura de emprego utilizando amplamente a Internet e que este captulo teria ampliado em muito sua busca.

    Apndice K (no CD), Unicode. Este apndice d uma viso geral do padro Unicode. medida que os sis-temas de computao evoluram no mundo inteiro, os fabricantes de computadores desenvolveram represen-taes numricas de conjuntos de caracteres e smbolos especiais para as linguagens locais faladas em pa-ses diferentes. Em alguns casos, representaes diferentes foram desenvolvidas para as mesmas linguagens. Conjuntos de caracteres to dspares tomaram difcil a comunicao entre sistemas de computao. Java su-porta o padro Unicode (mantido por uma organizao sem fins lucrativos chamada Unicode Consortium), que define um conjunto nico de caracteres com valores numricos nicos para caracteres e smbolos espe-ciais da maioria das linguagens faladas. Este apndice discute o padro Unicode, d uma viso geral do si-te na Web do Unicode Consortium (uni c o d e . o rg) e mostra um exemplo em Java que exibe "Welcome" em oito lnguas diferentes!

    Java 2 Plug-in transferido para o Captulo 3. Os estudantes gostam de ver resultados imediatos quando executam seus programas em Java. Isto difcil se estes programas so applets Java que so executados em navegadores da Web. A maioria dos navegadores atuais (com a exceo do Netscape Navigator 6) no su-porta applets Java 2 diretamente, de modo que os estudantes precisam testar seus programas applets com o utilitrio a p p l e t v i e w e r . A Sun Microsystems fornece o Java 2 Plug-in para permitir que os applets Ja-va 2 sejam executados em um navegador que no suporta Java 2. A discusso do Java Plug-in conduz o es-tudante atravs das etapas necessrias para executar um applet nos navegadores da Web atuais.

    Captulo 22 e Apndices EaKno CD. Existem tantos assuntos novos abordados nesta nova edio que ns no conseguimos colocar todos eles dentro do livro! No CD que acompanha este livro, voc ir encontrar os seguintes captulos e apndices: o Captulo 22, e os Apndices E, F, G, H, I, J e K.

  • x JAVA COMO PROGRAMAR

    Captulos transferidos para Advanced Java 2 Platform How to Program. Quatro captulos de Java Co-mo Programar, Terceira edio, foram transferidos para nosso novo livro Advanced Java 2 Platform How to Program e aperfeioados enormemente. Estes captulos so: Conectividade do banco de dados Java (JDBC), Servlets, Invocao remota de mtodos (RMI) e JavaBeans. Advanced Java 2 Platform How to Program aborda cada um destes tpicos em maior profundidade. Apresentamos o ndice de Advanced Java 2 Platform How to Program em breve.

    Alguns comentrios para instrutores

    Um mundo de orientao a objetos Quando escrevemos a primeira edio de Java: Como Programar, as universidades ainda estavam dando nfase programao procedural em linguagens como Pascal e C. Os cursos de ponta estavam usando a linguagem orienta-da a objetos C++, mas estes cursos em geral estavam misturando uma quantidade substancial de programao pro-cedural com programao orientada a objetos - algo que C++ lhe permite fazer, mas Java no. Por ocasio da ter-ceira edio de Java: Como Programar, muitas universidades estavam mudando de C++ para Java em suas discipli-nas introdutrias e os instrutores estavam enfatizando uma abordagem de programao orientada a objetos pura. Pa-ralelamente a esta atividade, a comunidade de engenharia de software estava padronizando sua abordagem mode-lagem de sistemas orientados a objetos com UML e o movimento em direo a padres de projeto estava criando forma. Java: Como Programar tem muitos pblicos, de modo que projetamos o hvro para ser adaptvel. Em parti-cular, inclumos mais de 200 pginas de material opcional que apresenta o projeto orientado a objetos, a UML e os padres de projeto e apresenta um estudo de caso substancial em projeto e programao orientados a objetos. Este material est cuidadosamente distribudo ao longo do livro para permitir aos instrutores enfatizar o projeto orienta-do a objetos com padro empresarial em seus cursos.

    Os alunos gostam de Java Os alunos ficam altamente motivados pelo fato de que esto aprendendo uma linguagem de ponta (Java) e um para-digma da programao de ponta (programao orientada a objetos) que lhes sero imediatamente teis enquanto es-tiverem no ambiente universitrio e quando entrarem em um mundo em que a Internet e a World Wide Web tm uma importncia enorme. Os alunos descobrem rapidamente que eles podem fazer coisas incrveis com Java, de modo que esto dispostos a despender o esforo extra. Java ajuda os programadores a libertar sua criatividade. Vemos is-to nos cursos de Java que a Deitei & Associates ministra. Assim que nossos alunos entram no laboratrio, no pode-mos mais segur-los. Eles experimentam e exploram avidamente partes das bibliotecas de classes de Java que ain-da no cobrimos em aula. Produzem aplicativos que vo muito alm de qualquer coisa que tenhamos alguma vez tentado fazer em nossos cursos de introduo a C e C++. E eles nos falam sobre projetos que eles "mal podem es-perar" para experimentar aps o curso.

    Enfoque do livro Nosso objetivo era claro - produzir um livro de Java para os cursos introdutrios de nvel universitrio em progra-mao de computador para alunos com pouca ou nenhuma experincia em programao, e ainda oferecer a profun-didade e o tratamento rigoroso de teoria e prtica exigidos por cursos tradicionais de nvel superior e que satisfaa as necessidades dos profissionais. Para atender a esses objetivos, produzimos um livro abrangente, porque nosso tex-to tambm ensina pacientemente os princpios bsicos de programao de computadores e da linguagem Java (i.e., tipos de dados, estruturas de controle, mtodos, arrays, recursividade e outros tpicos "tradicionais" de programa-o); apresenta paradigmas de programao fundamentais, incluindo programao baseada em objetos, programa-o orientada a objetos, programao movida por eventos e programao concorrente; e fornece um tratamento de-talhado das bibliotecas de classe Java.

    Evoluo de Java Como Programar Java Como Programar (primeira edio) foi o primeiro livro universitrio de cincia da computao sobre Java do mundo. Ns o escrevemos logo depois de CHow to Program: Second Edition e C++ Como Programar. Centenas

  • PREFCIO xi

    de milhares de estudantes universitrios e profissionais aprenderam C, C++ e Java a partir desses textos. Com a pu-blicao, em agosto de 2001, Java Como Programar, Quarta Edio passou a ser utilizado por centenas de univer-sidades e milhares de corporaes e organizaes governamentais em todo o mundo. A Deitei & Associates, Inc. mi-nistrava cursos de Java internacionalmente para milhares de alunos enquanto estvamos escrevendo as diversas edi-es de Java Como Programar. Monitoramos cuidadosamente a eficcia destes cursos e ajustamos esses materiais de acordo.

    Conceitualizao de Java Acreditamos em Java. Sua concepo (e liberao para o pblico em 1995) pela Sun Microsystems, os criadores de Java, foi brilhante. A Sun baseou a nova linguagem nas duas linguagens de implementao mais amplamente utili-zadas do mundo, C e C++. Isso imediatamente deu a Java uma enorme base de programadores altamente qualifica-dos que estavam implementando a maioria dos novos sistemas operacionais, sistemas de comunicaes, sistemas de banco de dados, aplicativos de computador pessoal e software de sistemas do mundo. A Sun removeu os recursos mais confusos, mais complexos e mais propensos a erro de C/C++ (como ponteiros, sobrecarga de operadores e he-rana mltipla, entre outros). Eles mantiveram a linguagem concisa, removendo os recursos de uso especial que eram utilizados apenas por pequenos segmentos da comunidade de programao. Tornaram a linguagem verdadei-ramente portvel de modo que seja apropriada para a implementao de aplicativos baseados na Internet e na World Wide Web e incluram os recursos de que as pessoas realmente precisam, como strings, imagens grficas, compo-nentes de interface grfica com o usurio, tratamento de excees, multithreading, multimdia (udio, imagens, ani-mao e vdeo), processamento de arquivos, processamento de banco de dados, redes cliente/servidor baseadas na Internet e na World Wide Web e computao distribuda, e estruturas de dados pr-empacotadas. Depois, disponibi-lizaram a linguagem gratuitamente para milhes de programadores em potencial no mundo inteiro.

    2,5 milhes de desenvolvedores Java Java foi lanada em 1995 como um meio de adicionar "contedo dinmico" a pginas da World Wide Web. Em vez de pginas da Web apenas com texto e imagens grficas estticas, as pginas da Web das pessoas agora podiam "ga-nhar vida" com udio, vdeos, animaes, interatividade - e, em breve, imagens tridimensionais. Mas vimos muito mais em Java do que isso. Os recursos de Java so precisamente do que as empresas e as organizaes precisam pa-ra atender aos requisitos de processamento de informaes atuais. Assim, imediatamente vimos em Java o potencial para se tornar uma das principais linguagens de programao de uso geral do mundo. Na verdade, Java revolucio-nou o desenvolvimento de softwares com cdigo orientado a objetos que usa intensivamente multimdia, indepen-dente de plataforma, para aplicaes convencionais, baseadas em Internet, Intranet e Extranet e applets. Java agora conta com 2,5 milhes de desenvolvedores no mundo inteiro - uma faanha surpreendente, considerando que ela es-t disponvel publicamente h apenas seis anos. Nenhuma outra linguagem de programao jamais conquistou uma base de desenvolvedores to grande como esta em to pouco tempo.

    Permitindo aplicaes e comunicaes baseadas em multimdia O campo da informtica nunca viu qualquer coisa parecida com a "exploso" da Internet/World Wide Web/Java que est ocorrendo atualmente. As pessoas querem se comunicar. As pessoas precisam se comunicar. Com certeza elas tm feito isso desde o incio da civilizao, mas as comunicaes atravs dos computadores tm sido na maioria li-mitadas a dgitos, caracteres alfabticos e caracteres especiais. Atualmente, estamos no meio de uma revoluo da multimdia. As pessoas querem transmitir imagens e querem que essas imagens sejam coloridas. Querem transmitir vozes, sons, clipes de udio e vdeo completos, com movimento e cores (e no querem nada menos do que a quali-dade de um DVD). Em algum momento, as pessoas insistiro na transmisso tridimensional com imagens em mo-vimento. Nossas televises planas e bidimensionais atuais por fim sero substitudas por verses tridimensionais que transformaro nossas salas de estar em "teatros de arena". Os atores realizaro seus papis como se ns estivsse-mos assistindo teatro ao vivo. Nossas salas de estar sero transformadas em estdios em miniatura. Nossos escrit-rios profissionais permitiro videoconferncias entre colegas do outro lado do mundo como se estivessem sentados em torno de uma mesa de conferncia. As possibilidades so intrigantes e Java est desempenhando um papel fun-damental para tornar muitas delas realidade.

  • xii JAVA COMO PROGRAMAR

    A abordagem de ensino Java Como Programar, Quarta Edio contm uma rica coleo de exemplos, exerccios e projetos trazidos de mui-tos campos para fornecer ao aluno uma oportunidade de resolver problemas interessantes do mundo real. O livro se concentra nos princpios da boa engenharia de software e enfatiza principalmente a clareza do programa. Evitamos terminologia obscura e especificaes de sintaxe em favor de ensinar por meio de exemplos. Nossos exemplos de cdigo foram testados em plataformas populares Java. Somos educadores que ensinam tpicos estritamente prticos em salas de aulas de empresas no mundo inteiro. O texto enfatiza a boa pedagogia.

    Aprendendo Java atravs da abordagem de cdigo ativo (Live Code ) O livro est repleto de exemplos de cdigo ativo (Live Code). Esse o foco da maneira como ensinamos e escre-vemos sobre programao e tambm o foco de cada uma de nossas Cyber Classrooms multimdia e dos cursos de treinamento baseados na Web. Cada novo conceito apresentado no contexto de um programa (applet ou aplicati-vo) Java completo, que funciona, imediatamente seguido por uma ou mais capturas de tela para mostrar a sada do programa. Chamamos esse estilo de ensinar e escrever de nossa abordagem baseada em cdigo ativo (live-code). Utilizamos a linguagem para ensinar a linguagem. Ler esses programas (mais de 25.000 linhas de cdigo) muito parecido com instal-los e execut-los em um computador.

    Java e Swing j no Captulo Dois! Java Como Programar, Quarta Edio "vai direto ao assunto", com programao orientada a objetos, aplicativos e componentes GUI no estilo do Swing j a partir do Captulo 2! As pessoas nos dizem que isso um passo arrisca-do, mas os alunos de Java realmente querem "ir direto luta". H muita coisa a ser feita em Java; portanto, vamos direto a elas! Java no de modo algum trivial, mas divertido programar com ela e os alunos podem ver resulta-dos imediatos. Os alunos podem pr rapidamente em execuo programas grficos, com animaes, baseados em multimdia, com uso intensivo de udio, multithreading, com uso intensivo de bancos de dados e baseados em re-des, por meio das extensas bibliotecas de classes de "componentes reutilizveis" de Java. Eles podem implementar projetos impressionantes. Eles normalmente so mais criativos e produtivos em um curso de um ou dois semestres do que possvel em cursos introdutrios de C e C++.

    Acesso World Wide Web Todo o cdigo de Java Como Programar est no CD que acompanha este livro e est disponvel na Internet no site da Deitei & Associates, Inc., www. d e i t e l . com. Execute cada programa medida que for lendo o texto. Faa al-teraes nos exemplos de cdigo e veja o que acontece. Veja como o compilador Java "reclama" quando voc faz vrios tipos de erros. Veja imediatamente os efeitos de se fazer alteraes no cdigo. Uma excelente maneira de aprender programao programando. [Este material possui direitos autorais. Sinta-se vontade para utiliz-lo en-quanto voc estudar Java, mas voc no pode republicar qualquer parte dele sem permisso explcita dos autores e da Prentice Hall.]

    Objetivos Cada captulo inicia com uma declarao de objetivos. Essa declarao diz ao aluno o que esperar e d ao aluno a oportunidade de, aps a leitura do captulo, determinar se alcanou esses objetivos. Isso d confiana ao aluno e uma fonte de reforo positivo.

    Citaes Aps os objetivos de aprendizagem h citaes. Algumas so humorsticas, algumas so filosficas e outras ofere-cem idias interessantes. Nossos alunos gostam de relacionar as citaes com o material do captulo. As citaes me-recem uma "segunda leitura" depois de voc ler cada captulo.

    Vtso geral A seo Viso geral ajuda o aluno a ter um primeiro contato com o material "de cima para baixo." Isto tambm aju-da os alunos a antecipar o que est por vir e definir um ritmo de aprendizagem confortvel e eficaz.

    25.576 linhas de cdigo em 197programas de exemplo (com sadas de programa) Apresentamos os recursos de Java no contexto de programas Java completos e que funcionam. Os programas variam de apenas algumas linhas de cdigo a exemplos substanciais com vrias centenas de linhas de cdigo (e 3.465 linhas

  • PREFCIO xiii

    de cdigo para o exemplo opcional de simulador de elevador orientado a objetos). Os alunos devem usar o cdigo do programa do CD que acompanha este livro ou baixar o cdigo de nosso site (www. d e i t e l . com) e executar ca-da programa enquanto estuda esse programa no texto.

    545 ilustraes/figuras Inclumos grande nmero de grficos, desenhos e sadas de programas. A discusso de estruturas de controle, por exemplo, apresenta fluxogramas cuidadosamente desenhados. [Nota: no ensinamos fluxogramas como uma ferra-menta de desenvolvimento de programas, mas utilizamos uma breve apresentao baseada em fluxogramas para es-pecificar a operao precisa de cada uma das estruturas de controle de Java.]

    605 dicas de programao Inclumos dicas de programao para ajudar os alunos a focalizar aspectos importantes do desenvolvimento de pro-gramas. Destacamos centenas dessas dicas na forma de Boas prticas de programao, Erros comuns de programa-o, Dicas de teste e depurao, Dicas de desempenho, Dicas de portabilidade, Observaes de engenharia de soft-ware e Observaes de aparncia e comportamento. Essas dicas e prticas representam o melhor daquilo que reco-lhemos em seis dcadas de experincia em programao e ensino. Uma de nossas alunas - estudante de matemti-ca - disse-nos que ela sente que essa abordagem como o destaque que recebem os axiomas, eoremas e corolrios nos livros de matemtica; fornece uma base sobre a qual construir um bom software.

    97 Boas prticas de programao

    Quando ensinamos cursos introdutrios, afirmamos que o "termo da moda" de cada curso "clareza " e destaca-mos como Boas prticas de programao tcnicas para escrever programas que sejam mais claros, mais compreen-sveis, mais depurveis e de manuteno mais fcil.

    199 Erros comuns de programao

    Os alunos que esto aprendendo uma linguagem tendem a cometer certos erros com freqncia. Focalizar a aten-o dos alunos nesses Erros comuns de programao ajuda os alunos a no cometer os mesmos erros. Tambm aju-da a reduzir as longas filas ao lado das salas dos instrutores fora do horrio de aula!

    46 Dicas de teste e depurao

    Quando projetamos pela primeira vez esse "tipo de dica", achamos que as utilizaramos estritamente para dizer s pessoas como testar e depurar programas Java. De fato, muitas das dicas descrevem aspectos de Java que reduzem a probabilidade de "bugs " e assim simplificam o processo de teste e depurao.

    67 Dicas de desempenho

    Em nossa experincia, ensinar os alunos a escrever programas claros e compreensveis , de longe, o objetivo mais importante para um primeiro curso de programao. Mas os alunos querem escrever programas que rodem mais rpido, utilizem menos memria, exijam o menor nmero de acionamentos de teclas, ou impressionem por outros. truques inteligentes. Os alunos realmente se preocupam com o desempenho. Eles querem saber o que podem fazer para "turbinar" seus programas. Ento inclumos 67 Dicas de desempenho que destacam as oportunidades para melhorar o desempenho dos programas -fazendo com que os programas sejam executados mais rapidamente ou minimizando a quantidade de memria que eles ocupam.

    24 Dicas de portabilidade

    Uma das "razes para a fama" de Java a portabilidade "universal", de modo que alguns programadores supem que, se eles implementam um aplicativo em Java, o aplicativo ser automtica e "perfeitamente" porlvelpara to-das as plataformas Java. Infelizmente, esse nem sempre o caso. Inclumos as Dicas de portabilidade para ajudar os alunos a escrever cdigo portvel e fornecer sugestes sobre como Java alcana seu alto grau de portabilidade. Tnhamos muito mais dicas de portabilidade em nossos livros, C How to Program e C++ How to Program. Preci-samos de menos Dicas de portabilidade em Java Como Programar porque Java foi projetada para ser portvel de cima para baixo (em sua maior parte) - muito menos esforo exigido por parte do programador de Java para al-canar a portabilidade do que com C ou C++.

    134 Observaes de engenharia de software

    0 paradigma de programao orientada a objetos exige uma completa reavaliao da maneira como construmos sistemas de software. Java uma linguagem eficaz para realizar boa engenharia de software. As Observaes de engenharia de software destacam questes arquitetnicas e de projeto que afetam a construo de sistemas de soft-

  • xiv JAVA COMO PROGRAMAR

    ware, especialmente sistemas de larga escala. Muito do que o aluno aprende aqui ser til em cursos de nvel su-perior e nas empresas, quando o aluno comear a trabalhar com sistemas grandes e complexos do mundo real.

    38 Observaes de aparncia e comportamento

    Fornecemos Observaes de aparncia e comportamento para destacar convenes da interface grfica com o usurio. Essas observaes ajudam os alunos a projetar suas prprias interfaces grficas com o usurio em con-formidade com as normas da indstria.

    Resumo (983 marcadores de resumo) Cada captulo termina com dispositivos pedaggicos adicionais. Apresentamos um resumo completo do captulo, no estilo de lista de marcadores. Em mdia, h 42 itens de resumo por captulo. Isso ajuda os alunos a revisar e refor-ar os conceitos fundamentais.

    Terminologia (2171 termos) Inclumos na seo Terminologia uma lista alfabtica dos termos importantes definidos no captulo - novamente, mais reforo. Em mdia, h 95 termos por captulo.

    397 exerccios de auto-reviso e respostas (a contagem inclui partes separadas) Extensos exerccios e respostas de auto-reviso so includos para auto-aprendizagem. Isso oferece ao aluno a opor-tunidade de adquirir confiana com o material e preparar-se para os exerccios regulares. Os alunos devem ser in-centivados a fazer todos os exerccios de auto-reviso e verificar suas respostas.

    779 exerccios (a contagem inclui partes separadas) Cada captulo termina com um conjunto de exerccios que inclui revises simples de terminologia e conceitos im-portantes; escrever comandos de Java isolados; escrever pequenas partes de mtodos e classes de Java; escrever m-todos, classes, applets e aplicativos Java completos; e escrever projetos de diplomao importantes. O grande nme-ro de exerccios relacionados com uma ampla variedade de reas permite aos instrutores montar seus cursos de acor-do com as necessidades especficas de seu pblico e variar os trabalhos do curso em cada semestre. Os instrutores podem utilizar esses exerccios para formar deveres de casa, pequenos questionrios e exames importantes. As so-lues para a maioria dos exerccios esto includas no CD Instructor's Manual, que est disponvel somente para instrutores atravs de seus representantes da Prentice-Hall. [Nota: no nos escreva solicitando o manual do instru-tor. A distribuio desta publicao est limitada estritamente a professores universitrios que estejam ensinando a partir do livro. Os instrutores podem obter o manual de solues somente com seus representantes normais da Pren-tice-Hall. Lamentamos no poder fornecer as solues para profissionais.] As solues para aproximadamente me-tade dos exerccios encontram-se no CD Java Multimedia Cyber Classroom: Fourth Edition, que tambm faz parte do The Complete Java 2 Training Course. Para saber como fazer pedidos, visite o endereo www. d e i t e i . com.

    Aproximadamente 5300 entradas de ndice (com aproximadamente 9500 referncias a pginas) Inclumos um extenso ndice no final do livro. Isso ajuda o aluno a localizar qualquer termo ou conceito por pala-vra-chave. O ndice til para as pessoas que esto lendo o livro pela primeira vez e especialmente til para os programadores profissionais que utilizam o livro como referncia. Os termos nas sees Terminologia geralmente aparecem no ndice (junto com vrios outros itens de cada captulo). Os alunos podem utilizar o ndice junto com as sees Terminologia para certificar-se de que abordaram o material fundamental de cada captulo.

    "Dupla indexao" de todos os exemplos e exerccios de cdigo ativo Java Java Como Programar tem 197 exemplos de cdigo ativo (live code) e 1176 exerccios (incluindo partes). Muitos dos exerccios so problemas ou projetos desafiadores que exigem esforo substancial. Fornecemos "dupla indexa-o" de cada um dos exemplos de cdigo ativo e da maioria dos projetos mais desafiadores. Para cada programa de cdigo-fonte de Java no livro, colocamos o nome do arquivo com a extenso . j ava, como em LoadAudioAnd-P l a y . j ava e o indexamos tanto alfabeticamente (nesse caso sob "L") como um item de subndice em "Exem-plos". Isso facilita a localizao dos exemplos que utilizam recursos especficos. Os exerccios mais substanciais, como "Gerando e Percorrendo Labirintos", so indexados alfabeticamente (neste caso sob "G)" e como um item de subndice em "Exerccios".

  • PREFCIO XV

    Bibliografia Uma extensa bibliografia de livros, artigos e documentao sobre Java 2 da Sun Microsystems includa para in-centivar leituras adicionais.

    Software includo com Java Como Programar, Quarta Edio Existem diversos produtos Java disponveis" venda. Entretanto, voc no precisa deles para comear com Java. Es-crevemos Java Como Programar, Quarta Edio usando somente o Java 2 Software Development Kit (J2SDK). Pa-ra sua convenincia, a verso 1.3.1 do J2SDK da Sun est includa no CD que acompanha este livro. 0 J2SDK tam-bm pode ser baixado do site sobre Java da Sun Microsystems, j ava. sun. com. Com a cooperao da Sun, tam-bm pudemos incluir no CD um poderoso ambiente de desenvolvimento integrado (IDE - integrated development environment) para Java - o Forte for Java Community Edition da Sun Microsystems.

    Forte for Java Community Edition um IDE profissional escrito em Java que inclui uma ferramenta para pro-jeto de interface grfica com o usurio, editor de cdigo, compilador, depurador visual e mais. J2SDK 1.3.1 deve ser instalado antes de reinstalar Forte for Java Community Edition. Se voc tem qualquer dvida sobre o uso deste soft-ware, leia a documentao de introduo ao Forte que est no CD. Forneceremos informaes adicionais em nosso site da Web www. d e i t e i . com.

    O CD tambm contm os exemplos do livro e uma pgina da Web em HTML com links para o site na Web da Deitei & Associates, Inc., o site da Prentice Hall e os muitos sites listados nos apndices. Se voc tem acesso In-ternet, esta pgina pode ser carregada em seu navegador para lhe dar acesso rpido a todos os recursos. Finalmente, o CD contm o Captulo 22 e os Apndices E a K.

    Pacote complementar para Java Como Programar, Quarta Edio Java Como Programar, Quarta Edio tem uma grande quantidade de material complementar para os instrutores que ensinam a partir do livro. O CD Instructor's Manual contm solues para a grande maioria dos exerccios dos fins de captulos e um banco de questes de mltipla escolha (aproximadamente duas por seo do livro). Alm dis-so, fornecemos eslaides em PowerPoint contendo todo o cdigo e as figuras que esto no texto. Voc tem a liber-dade de modificar estes eslaides para atender s suas necessidades em sala de aula. A Prentice Hall fornece um Com-panion Web Site (www. prenhall . com/deitei) que inclui recursos para instrutores e alunos. Para os instruto-res, o site tem um Administrador de Semestre para planejamento de cursos, links para os eslaides em PowerPoint e material de referncia dos apndices do livro (tais como a tabela de precedncia dos operadores, conjuntos de carac-teres e recursos na Web). Para os alunos, o site oferece objetivos do captulo, exerccios do tipo verdadeiro/falso com realimentao instantnea, destaques do captulo e materiais de referncia. [Nota: no nos escreva solicitando o manual do instrutor. A distribuio desta publicao est limitada estritamente a professores universitrios que es-tejam ensinando a partir do livro. Os instrutores podem obter o manual de solues somente com seus representan-tes da Prentice-Hall. Lamentamos no poder fornecer as solues para profissionais.]

    Java 2 Multimedia Cyber Classroom: Fourth Edition (verses no CD e treinamento baseado na Web) e The Compiete Java 2 Training Course: Fourth Edition Preparamos uma verso interativa em software, baseada em CD-ROM, de Java Como Programar, Quarta Edio, chamada Java 2 Multimedia Cyber Classroom: Fourth Edition. Ela est repleta de recursos de aprendizagem e refe-rncia. A Cyber Classroom distribuda num mesmo pacote com o livro com um desconto de preo no The Com-plete Java 2 Training Course: Fourth Edition. Se voc j possui o livro e gostaria de comprar o Java 2 Multimedia Cyber Classroom: Fourth Edition separadamente, visite o site www. inf ormit . com/cyberclassrooms. O nmero ISBN para a Java 2 Multimedia Cyber Classroom: Fourth Edition 0-13-064935-x. Todas as Cyber Class-rooms da Deitei geralmente esto disponveis nos formatos CD e treinamento baseado na Web.

    O CD tem uma introduo com os autores dando uma viso geral dos recursos da Cyber Classroom. Os 197 exemplos de programas Java em cdigo ativo do livro realmente "ganham vida" na Cyber Classroom. Se voc esti-ver vendo um programa e quiser execut-lo, simplesmente clique no cone de relmpago e o programa ser execu-tado. Voc imediatamente ver - e ouvir, no caso de programas multimdia baseados em udio - as sadas do pro-grama. Se quiser modificar um programa e ver e ouvir os efeitos de suas alteraes, simplesmente clique no cone

    de disquete que faz com que o cdigo-fonte seja "arras-

    N. de R. No Brasil, escreva para a Bookman Companhia Editora.

  • xvi JAVA COMO PROGRAMAR

    tado" do CD e "jogado" em um de seus prprios diretrios, de modo que voc possa editar o texto, recompilar o pro-grama e experimentar sua nova verso. Clique no cone de udio e Paul Deitei falar sobre o programa e ir "condu-zi-lo" atravs do cdigo.

    A Cyber Classroom tambm fornece ajudas para navegao, incluindo extensos recursos de hyperlink. A Cy-ber Classroom baseia-se em um navegador, de modo que ela se lembra das sees que voc visitou recentemente e permite que voc se mova para a frente ou para trs nestas sees. As milhares de entradas de ndice contm hyper-links para suas ocorrncias no texto. Voc pode digitar um termo utilizando o recurso "find" e a Cyber Classroom localizar suas ocorrncias por todo o texto. As entradas do Sumrio so "ativas", de modo que clicar em um nome de captulo leva-o at este captulo.

    Os alunos nos dizem que eles gostam particularmente das centenas de problemas do livro resolvidos que esto includos com a Cyber Classroom. Estudar e executar esses programas extras uma excelente maneira de os alunos aprimorarem sua experincia de aprendizagem.

    Os alunos e usurios profissionais de nossa Cyber Classroom nos informam que gostam da interatividade e que a Cyber Classroom uma referncia eficaz por causa dos extensos recursos de hyperlink e outros recursos de nave-gao. Recebemos uma mensagem por correio eletrnico de uma pessoa dizendo que, por no poder arcar com os custos de cursar uma universidade, a Cyber Classroom foi a soluo para suas necessidades educacionais.

    Os professores nos dizem que seus alunos gostam de usar a Cyber Classroom, dedicam mais tempo ao curso e dominam mais o material que em cursos baseados somente em texto. Publicamos (e iremos publicar) muitos outros produtos Cyber Classroom e Complete Training Course. Visite tambm os endereos w w w . d e i t e l . c o m ou www.prenhal l . c o m / d e i t e i para obter mais informaes.

    Advanced Java 2 Platform How to Program Nosso livro complementar -Advanced Java 2 Platform Bow to Program - focaliza a Java 2 Platform, Enterprise Edition (J2EE), apresenta recursos avanados da Java 2 Platform Standard Edition e apresenta a Java 2 Platform, Micro Edition (J2ME). Este livro destinado a desenvolvedores e universitrios em cursos avanados que j conhe-cem Java e querem um tratamento e um entendimento mais profundos da linguagem. O livro apresenta nossa abor-dagem caracterstica de "cdigo ativo" (live code) para programas completos que funcionam e contm mais de 37.000 linhas de cdigo. Os programas so mais substanciais que os apresentados em Java Como Programar, Quar-ta Edio. O livro expande a cobertura de Java Database Connectivity (JDBC), invocao remota de mtodo (RMI), servlets e JavaBeans de Java Como Programar, Quarta Edio. O livro tambm aborda tecnologias emergentes e mais avanadas de Java, de interesse para desenvolvedores de aplicaes corporativas. O Sumrio de Advanced Ja-va 2 Platform Bow to Program : Captulos - Introduction; Advanced Swing Graphical User Interface Compo-nents; Model-View-Controller; Graphics Programming with Java 2D and Java 3D; Case Study: A Java 2D Applica-tion; JavaBeans Component Model; Security; Java Database Connectivity (JDBC); Servlets; Java Server Pages (JSP); Case Study: Servlet and JSP Bookstore; Java 2 Micro Edition (J2ME) and Wireless Internet; Remote Method Invocation (RMI); Session Enterprise JavaBeans (EJBs) and Distributed Transactions; Entity EJBs; Java Message Service (JMS) and Message-Driven EJBs; Enterprise Java Case Study: Architectural Overview; Enterprise Java Ca-se Study: Presentation and Controller Logic; Enterprise Java Case Study: Business Logic Part 1; Enterprise Java Ca-se Study: Business Logic Part 2; Application Servers; Jini; JavaSpaces; Jiro; Java Management Extensions (JMX); Common Object Request Broker Architecture (CORBA): Part 1; Common Object Request Broker Architecture (CORBA): Part 2; Peer-to-Peer Networking; Apndices - Creating Markup with XML; XML Document Type De-finitions; XML Document Object Model (DOM); XSL: Extensible Style Sheet Transformations; Downloading and Installing J2EE 1.2.1; Java Community Process (JCP); Java Native Interface (JNI); Carreer Opportunities; Unicode.

    Agradecimentos Um dos grandes prazeres de escrever um livro reconhecer os esforos das muitas pessoas cujos nomes no podem aparecer na capa, mas cujo trabalho duro, cuja cooperao, amizade e compreenso foram cruciais produo do li-vro.

    Outras pessoas na Deitei & Associates, Inc. dedicaram longas horas a esse projeto. Gostaramos de reconhecer os esforos de nossos colegas em tempo integral na Deitei & Associates, Inc., Tem Nieto, Sean Santry, Jonathan Gadzik, Kate Steinbuhler, Rashmi Jayaprakash e Laura Treibick.

    Tem Nieto graduado pelo Massachusetts Institute of Technology. Tem ministra seminrios sobre XML, Ja-va, Internet e Web, C, C++ e Visual Basic e trabalha conosco na redao de livros, desenvolvimento de cur-

    http://www.deitel.comhttp://www.prenhall
  • PREFCIO xvii

    sos e trabalhos de autoria em multimdia. co-autor de Internet & World Wide Web How to Program (Se-gunda Edio), XML How to Program, Perl How to Program e Visual Basic 6 How to Program. Em Java Como Programar, Quarta Edio, Tem foi co-autor dos Captulos 11, 12, 13 e 21 e da Seo Especial no Captulo 19.

    Sean Santry, graduado pelo Boston College (cincia da computao e filosofia) e co-autor de Advanced Ja-va 2 Platform How to Program, editou o Captulo 22, ajudou a atualizar os programas no Captulo 15, pro-jetou e implementou a aplicao para redes Deitei Messenger no Captulo 17, ajudou a projetar o estudo de caso opcional sobre OOP/UML, revisou o estudo de caso opcional sobre padres de projeto e revisou a im-plementao da simulao de elevador para o estudo de caso de OOP/UML.

    Jonathan Gadzik, graduado pela Columbia University School of Engineering and Applied Science (BS em cincia da computao) foi co-autor do estudo de caso opcional sobre OOP/UML e das sees opcionais. Tambm implementou o programa Java de 3.465 linhas que resolve completamente o exerccio de simula-o de elevador orientado a objetos apresentado no estudo de caso sobre OOP/UML.

    Kate Steinbuhler, graduada pelo Boston College em ingls e comunicaes, foi co-autora do Apndice J e administrou o processo de autorizaes. Kate est se mudando para cursar a faculdade de direito na Univer-sity of Pittsburgh - boa sorte, Kate! Obrigado por suas contribuies a trs publicaes da Deitei.

    Rashmi Jayaprakash, graduado pela Boston University com diploma em cincia da computao, foi co-au-tor do apndice K, Unicode.

    Laura Treibick, graduada pela University of Colorado at Boulder em fotografia e multimdia, criou o encan-tador personagem do inseto animado para a implementao do estudo de caso sobre OOP/UML.

    Tambm gostan'amos de agradecer aos participantes de nosso programa de estgios para estudantes universitrios na Deitei & Associates, Inc.2

    Susan Warren, estudante (Junior) de cincia da computao na Brown University, e Eugene Izumo, estudan-te (Sophomore) de cincia da computao na Brown University, revisaram a Quarta Edio inteira; revisa-ram e atualizaram o Captulo 22 e atualizaram o Apndice A e o Apndice B. Susan e Eugene tambm tra-balharam em muitos dos materiais complementares do livro, incluindo as solues dos exerccios, questes verdadeiro/falso para a Java 2 Multimedia Cyber Classroom e questes de mltipla escolha para o banco de questes do instrutor.

    Vincent He, estudante (Senior) de administrao e cincia da computao no Boston College, foi co-autor do Captulo 22 - um dos captulos mais emocionantes e divertidos do livro! Temos a certeza de que voc ir gos-tar da profuso de multimdia que Vincent criou para voc.

    Liz Rockett, uma estudante (Senior) de ingls na Princeton University editou e atualizou o Captulo 22.

    Chris Henson, graduado pela Brandeis University (cincia da computao e histria), revisou o Captulo 22.

    Christina Carney, uma estudante (Senior) de psicologia e comrcio no Framingham State College, pesqui-sou e atualizou a bibliografia, ajudou a preparar o Prefcio e fez a pesquisa de URLs para o estudo de caso de OOP/UML e padres de projeto.

    [O Programa de Estgios para Estudantes Universitrios da Deitei & Associates, Inc. oferece um nmero limitado de vagas re-muneradas para estudantes universitrios da regio de Boston que cursam cincia da computao, Tecnologia de Informao ou marketing. Os estudantes trabalham na matriz da nossa corporao em Sudburry, Massachussets, em tempo integral durante os veres e em tempo parcial durante o ano letivo. H vagas em tempo integral disponveis para graduados. Para obter mais infor-maes sobre este programa competitivo, entre em contato com Abey Deitei pelo endereo d e i t e l @ d e i t e l . com e verifi-que nosso site na Web, www. d e i t e i . cora]

  • xviii JAVA COMO PROGRAMAR

    Amy Gips, estudante (Sophomore) de marketing e finanas no Boston College, atualizou e adicionou URLs para applets, grficos, Java 2D e Multimdia nos Apndices A e B. Amy tambm pesquisou citaes para o Captulo 22 e ajudou a preparar o Prefcio.

    " Varun Ganapathi, uma estudante (Sophomore) de cincia da computao e engenharia eltrica da Cornell University, atualizou o Apndice F.

    Reshma Khilnani, um estudante (Junior) de cincia da computao e matemtica no Massachusetts Institu-te of Technology, trabalhou com Rashmi no Apndice sobre Unicode.

    Tivemos a felicidade de trabalhar nesse projeto com a talentosa e dedicada equipe de profissionais de publica-o da Prentice Hall. Apreciamos especialmente os esforos extraordinrios de nossa editora de cincia da compu-tao, Perra Recter, e de sua chefe - nossa mentora em publicaes - Mareia Horton, editora-chefe da diviso de en-genharia e de cincia da computao da Prentice-Hall. Camille Trentacoste fez um trabalho maravilhoso como ge-rente de produo.

    A Java 2 Multimedia Cyber Classroom: Fourth Edition foi desenvolvida em paralelo com Java Como Progra-mar, Quarta Edio. Apreciamos sinceramente o conhecimento tcnico, o entendimento e o insaite sobre a "nova mdia" de nosso editor Mark Taub. Ele e nossa editora de mdia eletrnica, Karen Mclean, fizeram um trabalho no-tvel trazendo Java 2 Multimedia Cyber Classroom: Fourth Edition para publicao sob um cronograma apertado. Michael Ruel fez um trabalho maravilhoso como gerente de projeto da Cyber Classroom.

    Devemos agradecimentos especiais criatividade de Tamara Newnam Cavallo ( smart_art@earth-1 i n k . net) , que fez o trabalho artstico para nossos cones de dicas de programao e para a capa. Ela criou a en-cantadora criatura que compartilha com voc as dicas de programao do livro.

    Estamos sinceramente agradecidos pelos esforos de nossos revisores da quarta edio:

    Revisores de Java Como Programar, Quarta Edio Dibyendu Baksi (Sun Microsystems) Tim Boudreau (Sun Microsystems) Michael Bundschuh (Sun Microsystems) Gary Ginstling (Sun Microsystems) Tomas Pavek (Sun Microsystems) Rama Roberts (Sun Microsystems) Terry Hull (Sera Nova)

    Ralph Johnson (co-autor em "quarteto" do livro, Design Patterns: Elements of Reusable Object-Oriented Soft-ware, Addison Wesley, 1995)

    Cameron Skinner (Embarcadero Technologies; OMG) Michael Chonoles (Lockheed Martin Adv. Concepts; OMG) Brian Cook (The Technical Resource Connection; OMG) Akram Al-Rawi (Zayed University) Charley Bay (Fronte Range Community College) Clint Bickmore (Fronte Range Community College) Ron Braithwaite (Nutriware) Columbus Brown (IBM)

    Larry Brown (co-autor de Core Web Programming) Dan Corkum (Trillium Software) Jonathan Earl (Technical Training and Consulting) Karl Frank (togethersoft.com) Charles Fry (thesundancekid.org) Kyle Gabhart (Objective Solutions) Felipe Gacho (Softexport) Rob Gordon (SuffolkSoft, Inc.) Michelle Guy (XOR)

    Christopher Green (Cobrado Springs Technical Consulting Group) Kevlin Henney (Curbralan Limited) Ethan Henry (Sitraka Software)

    http://togethersoft.comhttp://thesundancekid.org
  • PREFCIO xix

    Faisal Kaleem (Florida International University) Rob Keily (SUNY) Scott Kendall (Consultor, autor de UML) Sachin Khana (Programador Java/ree lacer) Michael-Franz Mannion (Desenvolvedor Java) Julie Mc Vicar (Oakland Community College) Matt Mitton (Consultor) Dan Moore (XOR) Simon North (Synopsys) Chetan Patel (Lexisnexis) Brian Pontarelli (Consultor) Kendall Scott (Consultor, autor de UML) Craig Shofding (CAS Training Corp) Spencer Roberts (Titus Corporation) Toby Steel (CertaPay) Stephen Tockey (Construx Software)

    Kim Topley (Autor de Core Java Foundation Classes e de Core Swing: Advanced Programming, ambos publi-cados pela Prentice Hall)

    Gustavo Toretti (Programador Java; Campinas University) Michael Van Kleeck (Diretor de Tecnologia, Learning.com) Dave Wagstaff (Sungard)

    Revisores de Java How to Program, Third Edion aps a publicao: Jonathan Earl (Technical Training and Consulting) Harry Foxwell (Sun Microsystems) Terry Hull (Sera Nova) Ron McCarty (Penn State University Behrend Campus) Bina Ramamurthy (SUNY Buffalo) Vadim Tkachenko (Sera Nova)

    Sob uma agenda apertada, eles examinaram minuciosamente cada aspecto do texto e fizeram incontveis sugestes para aprimorar a exatido e a completude da apresentao.

    Apreciaramos sinceramente seus comentrios, crticas, correes e sugestes para aprimorar o texto. Envie to-da a correspondncia para:

    d e i t e l @ d e i t e l . c o m

    Responderemos imediatamente. Bem, isso tudo por enquanto. Bem-vindo ao mundo emocionante da progra-mao em Java. Esperamos que voc desfrute esse exame do desenvolvimento de aplicativos de computador de pon-ta. Boa sorte!

    Dr. Harvey M, Deitei Paul J. Deitei

    Sobre os autores Dr. Harvey M. Deitei, executivo-chefe da Deitei & Associates, Inc., tem 40 anos de experincia no campo de com-putao incluindo extensa experincia acadmica e empresarial. E um dos principais instrutores e conferencistas de cincia da computao do mundo. Dr. Deitei obteve os graus de B.S. e M.S. do Massachusetts Institute of Techno-logy e um Ph.D. da Boston University. Ele tem 20 anos de experincia em ensino universitrio, conquistando esta-bilidade e servindo como chefe do Departamento de Cincia da Computao do Boston College antes de fundar a Deitei & Associates, Inc. com seu filho Paul J. Deitei. autor ou co-autor de vrias dezenas de livros e pacotes de multimdia e atualmente est escrevendo vrios outros. Com tradues publicadas em japons, russo, espanhol, ita-liano, chins bsico, chins tradicional, coreano, francs, polons e portugus, os textos do Dr. Deitei ganharam re-

    http://Learning.commailto:[email protected]
  • xx JAVA COMO PROGRAMAR

    conhecimento internacional, tendo proferido seminrios profissionais internacionalmente para importantes corpo-raes, organizaes do governo e vrias reas militares.

    Paul J. Deitei, executivo-chefe de tecnologia da Deitei & Associates, Inc., graduado pela Sloan School of Ma-nagement do Massachusetts Institute of Technology, onde estudou Tecnologia da Informao. Por meio da Deitei & Associates, Inc. proferiu cursos sobre Internet e World Wide Web e aulas de linguagens de programao para clien-tes empresariais, incluindo Sun Microsystems, MCE , IBM, BEA Systems, Visa International, Progress Software, Boeing, Fidelity, Hitachi, Cap Gemini, Compaq, Art Technology, White Sands Missile Range, Digital Equipment Corporation, NASA no Kennedy Space Center, National Severe Storm Laboratory, Rogue Wave Software, Lucent Technologies, Computervision, Cambridge Technology Partners, Adra Systems, Entergy, CableData Systems, Ban-yan, Stratus, Concord Communications e muitas outras organizaes. Fez conferncias sobre Java e C++ para o Bos-ton Chapter da Association for Computing Machinery e ministrou cursos via satlite por meio de um empreendi-mento cooperativo entre a Deitei & Associates, Inc., a Prentice Hall e a Technology Education Network. Ele e seu pai, o Dr. Harvey M. Deitei, so os autores de livros-texto sobre cincia da computao mais vendidos.

    Sobre a Deitei & Associates, Inc. A Deitei & Associates, Inc. uma organizao internacionalmente reconhecida de treinamento corporativo e cria-o de contedo especializada em tecnologia de software para Internet/World Wide Web, tecnologia de software pa-ra e-business e e-commerce e educao em linguagens de programao de computadores. A Deitei & Associates, Inc. membro do World Wide Web Consortium. A empresa oferece cursos sobre programao da Internet e da World Wide Web, tecnologia de objetos e das principais linguagens de programao. Os fundadores da Deitei & As-sociates, Inc. so o Dr. Harvey M. Deitei e Paul J. Deitei. Entre os clientes da empresa incluem-se algumas das maio-res empresas de computadores do mundo, rgos do governo, reas do servio militar e organizaes comerciais. Por meio de sua parceria editorial com a Prentice Hall, a Deitei & Associates, Inc. publica livros de programao de ponta, livros profissionais, Cyber Classrooms multimdia baseadas em CD-ROM interativo, cursos via satlite e cur-sos baseados na Web. A Deitei & Associates, Inc. e os autores podem ser contatados por correio eletrnico em:

    [email protected]

    Para aprender mais sobre a Deitei & Associates, Inc., suas publicaes e seu currculo corporativo mundial on-site, visite;

    www.deitel.com

    Aqueles que quiserem comprar livros, Cyber Classrooms, Complete Training Courses e cursos de treinamento baseado na Web podem fazer isso atravs da pgina:

    www.deitel.com

    Os pedidos em grandes volumes feitos por corporaes e instituies acadmicas devem ser feitos diretamente Prentice Hall.

    O World Wide Web Consortium (W3C)

    r A Deitei & Associates, Inc. scia do World Wide Web Consortium (W3C). O W3C foi fundado em 1994 "para desenvolver protocolos comuns para a evoluo da World Wide Web". Como s-S^ cios do W3C, participamos do W3C Advisory Commitee (nosso representante no Advisory Com-

    MEMBER mitee nosso executivo-chefe de tecnologia, Paul J. Deitei). Os membros do Advisory Commi-tee ajudam a definir "direo estratgica" para o W3C atravs de reunies em todo o mundo. As

    organizaes associadas tambm ajudam a desenvolver recomendaes de padres para tecnologias da Web (tais co-mo HTML, XML e muitas outras) atravs da participao em atividades e grupos de trabalho do W3C. A participa-o como scias no W3C reservada a empresas e grandes organizaes. Para obter informaes sobre como se tor-nar scio do W3C, visite o endereo www. w3. org /Consor t ium/Prospectus / Jo in ing .

    Vfl

    mailto:[email protected]://www.deitel.comhttp://www.deitel.com
  • Sumrio

    1 Introduo aos computadores, Internet e Web 49 1.1 Introduo 50 1.2 0 que um computador? 54 1.3 A organizao de um computador 54 1.4 Evoluo dos sistemas operacionais 55 1.5 Computao pessoal distribuda e computao cliente/servidor 56 1.6 Linguagens de mquina, linguagens assembler e linguagens de alto nvel 56 1.7 A histria de C++ 57 1.8 A histria de Java 58 1.9 Bibliotecas de classes Java 59 1.10 Outras linguagens de alto nvel 60 1.11 Programao estruturada 60 1.12 A Internet e a World Wide Web 61 1.13 Princpios bsicos de um ambiente Java tpico 62 1.14 Notas gerais sobre Java e este livro 64 1.15 Pensando em objetos: introduo tecnologia de objetos e Unified Modeling Language 66 1.16 Descobrindo padres de projeto: introduo 70 1.17 Um passeio pelo livro 71 1.18 (Opcional) Um passeio pelo estudo de caso sobre projeto orientado a objetos com a UML 82 1.19 (Opcional) Um passeio pelas sees "Descobrindo padres de projeto" 85

    2 Introduo a aplicativos Java 93 2.1 Introduo 94 2.2 Um primeiro programa em Java: imprimindo uma linha de texto 94

    2.2.1 Compilando e executando seu primeiro aplicativo Java 99

  • 22 SUMRIO

    2.3 Modificando nosso primeiro programa em Java 99 2.3.1 Exibindo uma nica linha de texto com mltiplas instrues 99 2.3.2 Exibindo mltiplas linhas de texto com uma nica instruo 100

    2.4 Exibindo texto em uma caixa de dilogo 100 2.5 Outro aplicativo Java: adicionando inteiros 105 2.6 Conceitos de memria 110 2.7 Aritmtica 111 2.8 Tomada de deciso: operadores de igualdade e operadores relacionais 114 2.9 (Estudo de caso opcional) Pensando em objetos: examinando a definio do problema 120

    3 Introduo a applets Java 135 3.1 Introduo 136 3.2 Applets de exemplo do Java 2 Software Development Kit 137

    3.2.1 Oa/jp/erTicTacToe 137 3.2.2 O applet DrawTest 140 3.2.3 O applet tevalD 141

    3.3 Um applet Java simples: desenhando um string 141 3.3.1 Compilando e executando o WelcomeApplet 146

    3.4 Dois applets mais simples: desenhando strings e linhas 148 3.5 Outro applet Java: adicionando nmeros de ponto flutuante 150 3.6 Visualizando applets em um navegador da Web 156

    3.6.1 Visualizando applets no Netscape Navigator 6 156 3.6.2 Visualizando applets em outros navegadores usando o Java Plug-in 157

    3.7 Recursos para applets Java na Internet e na World Wide Web 159 3.8 (Estudo de caso opcional) Pensando era objetos: identificando as classes em uma definio de problema

    160

    4 Estruturas de controle: parte 1 172 4.1 Introduo 173 4.2 Algoritmos 173 4.3 Pseudocdigo 174 4.4 Estruturas de controle 174 4.5 A estrutura de seleo i f 176 4.6 A estrutura de seleo i f / e l s e 178 4.7 A estrutura de repetio while 181 4.8 Formulando algoritmos: estudo de caso 1 (repetio controlada por contador) 182 4.9 Formulando algoritmos com refinamento passo a passo de cima para baixo: 187

    estudo de caso 2 (repetio controlada por sentinela) 4.10 Formulando algoritmos com refinamento passo a passo de cima para baixo: 194

    estudo de caso 3 (estruturas de controle aninhadas) 4.11 Operadores de atribuio 199 4.12 Operadores de incremento e decremento 199 4.13 Tipos de dados primitivos 202 4.14 (Estudo de caso opcional) Pensando em objetos: identificando os atributos das classes 203

  • SUMRIO 23

    5 Estruturas de controle: parte 2 215 5.1 Introduo 216 5.2 Princpios bsicos da repetio controlada por contador 216 5.3 A estrutura de repetio for 218 5.4 Exemplos com a estrutura for 221 5.5 A estrutura de seleo mltipla switch 226 5.6 A estrutura de repetio do/while 231 5.7 As instrues break e cont inue 233 5.8 As instrues rotuladas break e cont inue 235 5.9 Operadores lgicos 236 5.10 Resumo de programao estruturada 242 5.11 (Estudo de caso opcional) Pensando em objetos: identificando estados e 248

    atividades dos objetos

    6 Mtodos 259 6.1 Introduo 260 6.2 Mdulos de programas em Java 260 6.3 Os mtodos da classe Math 261 6.4 Mtodos 262 6.5 Definies de mtodos 263 6.6 Promoo de argumentos 269 6.7 Pacotes da Java API 270 6.8 Gerao de nmeros aleatrios 272 6.9 Exemplo: um jogo de azar 275 6.10 Durao dos identificadores 282 6.11 Regras de escopo 283 6.12 Recurso 285 6.13 Exemplo que utiliza recurso: a srie de Fibonacci 288 6.14 Recurso versus iterao 293 6.15 Sobrecarga de mtodos 295 6.16 Mtodos da classe JApplet 297 6.17 (Estudo de caso opcional) Pensando em objetos: identificando operaes de classes 298

    7 Arrays 316 7.1 Introduo 317 7.2 Arrays 317 7.3 Declarando e alocando arrays 319 7.4 Exemplos com arrays 320

    7.4.1 Alocando um array e inicializando seus elementos 320 7.4.2 Utilizando uma lista de inicializadores para inicializar os elementos de um array 321 7.4.3 Calculando o valor a armazenar em cada elemento de um array 322 7.4.4 Somando os elementos de um array 324 7.4.5 Utilizando histogramas para exibir dados de arrays graficamente 325 7.4.6 Utilizando os elementos de um array como contadores 326

  • 24 SUMRIO

    7.4.7 Utilizando arrays para analisar resultados de pesquisas 7.5 Referncias e parmetros por referncia 7.6 Passando arrays para mtodos 7.7 Classificando arrays 7.8 Pesquisando arrays: pesquisa linear e pesquisa binaria

    7.8.1 Pesquisando um array com pesquisa linear 7.8.2 Pesquisando um array com pesquisa binaria

    7.9 Arrays multidimensionais 7.10 (Estudo de caso opcional) Pensando em objetos: colaborao entre objetos

    8 Programao baseada em objetos 8.1 Introduo 8.2 Implementando um tipo abstrato de dados Time com uma classe 8.3 Escopo de classe 8.4 Controlando o acesso a membros 8.5 Criando pacotes 8.6 Inicializando objetos de classe: construtores 8.7 Utilizando construtores sobrecarregados 8.8 Utilizando os mtodos set e get

    8.8.1 Executando um applet que usa pacotes definidos pelo programador 8.9 Reutilizao de software 8.10 Variveis de instncia f ina l 8.11 Composio: objetos como variveis de instncia de outras classes 8.12 Acesso de pacote 8.13 Utilizando a referncia t h i s 8.14 Finalizadores 8.15 Membros de classe s t a t i c 8.16 Abstrao de dados e encapsulamento

    8.16.1 Exemplo: tipo abstrato de dados fila 8.17 (Estudo de caso opcional) Pensando em objetos: comeando a programar as classes para

    simulao do elevador

    9 Programao orientada a objetos 9.1 Introduo 9.2 Superclasses e subclasses 9.3 Membros protected 9.4 Relacionamento entre objetos de superclasse e objetos de subclasse 9.5 Construtores e finalizadores em subclasses 9.6 Converso implcita de objeto de subclasse para objeto de superclasse 9.7 Engenharia de software com herana 9.8 Composio versus herana 9.9 Estudo de caso: ponto, crculo, cilindro 9.10 Introduo ao polimorfismo 9.11 Campos de tipo e instrues switch 9.12 Vinculao dinmica de mtodo

  • SUMRIO 25

    9.13 Mtodos e classes f ina l 455 9.14 Superclasses abstratas e classes concretas 455 9.15 Exemplos de polimorfismo 456 9.16 Estudo de caso: um sistema de folha de pagamento utilizando polimorfismo 457 9.17 Novas classes e vinculao dinmica 465 9.18 Estudo de caso: herana de interface e implementao 465 9.19 Estudo de caso: criando e utilizando interfaces 472 9.20 Definies de classe interna 478 9.21 Notas sobre definies de classe interna 488 9.22 Classes invlucro de tipo para tipos primitivos 488 9.23 (Estudo de caso opcional) Pensando em objetos: incorporando herana simulao do elevador 488 9.24 (Opcional) Descobrindo padres de projeto: apresentando os padres de criao, 494

    estruturais e comportamentais de projeto 9.24.1 Padres de criao de projeto 495 9.24.2 Padres estruturais de projeto 497 9.24.3 Padres comportamentais de projeto 498 9.24.4 Concluso 499 9.24.5 Recursos na Internet e na World Wide Web 500

    10 Strings e caracteres 508 10.1 Introduo 509 10.2 Fundamentos de caracteres e strings 509 10.3 Construtores de String 510 10.4 Os mtodos length, charAt e getChars de S t r i ng 512 10.5 Comparando Strings 513 10.6 O mtodo hashCode de String 518 10.7 Localizando caracteres e substrings em Str ings 519 10.8 Extraindo substrings a partir de Str ings 521 10.9 Concatenando Str ings 522 10.10 Mtodos diversos de String 523 10.11 Utilizando o mtodo valueOf de String 525 10.12 O mtodo intern de String 526 10.13 A classe StringBuf fer 528 10.14 Construtores de StringBuf fer 528 10.15 Os mtodos length, capacity, setLength e ensureCapacity de StringBuf fer 529 10.16 Os mtodos charAt, setCharAt, getChars e reverse de StringBuf fer 531 10.17 Os mtodos append de StringBuf fer 532 10.18 Mtodos de insero e de excluso de StringBuf fer 534 10.19 Exemplos da classe Character 535 10.20 A classe StringTokenizer 542 10.21 Simulao de embaralhamento e distribuio de cartas 544 10.22 (Estudo de caso opcional) Pensando em objetos: tratamento de eventos 548

    11 Imagens grficas e Java2D 563 11.1 Introduo 564 11.2 Contextos grficos e objetos grficos 566

  • 26 SUMRIO

    11.3 Controle de cor 567 11.4 Controle de fontes. 572 11.5 Desenhando linhas, retngulos e elipses 578 11.6 Desenhando arcos 582 11.7 Desenhando polgonos e polilinhas 584 11.8 APIJava2D 587 11.9 Formas de Java2D 587 11.10 (Estudo de caso opcional) Pensando em objetos: projetando interfaces cora a UML 592

    12 Componentes da interface grfica com o usurio: parte 1 603 12.1 Introduo 604 12.2 Viso geral do Swing 605 12.3 JLabel 607 12.4 Modelo de tratamento de eventos 610 12.5 JTextFielde JPasswordField 612

    12.5.1 Como funciona o tratamento de eventos 616 12.6 JButton 617 12.7 JCheckBoxe JRadioButton 619 12.8 JComboBox 624 12.9 JList 627 12.10 Listas de seleo mltipla 629 12.11 Tratamento de eventos de mouse 631 12.12 Classes adaptadoras 635 12.13 Tratamento de eventos de teclado 640 12.14 Gerenciadores de leiaute 643

    12.14.1 FlowLayout 644 12.14.2 BorderLayout 646 12.14.3 GridLayout 649

    12.15 Painis 650 12.16 (Estudo de caso opcional) Pensando em objetos: casos de uso 652

    13 Componentes da interface grfica com o usurio: parte 2 667 13.1 Introduo 668 13.2 JTextArea 669 13.3 Criando uma subclasse personalizada de JPanel 672 13.4 Criando uma subclasse autocontida de JPanel 675 13.5 J S l i d e r 680 13.6 Janelas - 684 13.7 Projetando programas que podem ser executados como applets ou aplicativos 685 13.8 Utilizando menus comframes 690 13.9 Utilizando JPopupMenus 697 13.10 Aparncia e comportamento plugvel 700 13.11 Utilizando JDesktopPane e JInternal Frame 704

  • SUMRIO 27

    13.12 Gerenciadores de leiaute 707 13.13 O gerenciador de leiaute BoxLayout 707 13.14 O gerenciador de leiaute CardLayout 711 13.15 O gerenciador de leiaute GridBagLayout 714 13.16 As constantes RELATIVE e REMAINDER de GridBagConstraints 719 13.17 (Estudo de caso opcional) Pensando em objetos: Model-View-Controller 722 13.18 (Opcional) Descobrindo padres de projeto: padres de projeto usados nos pacotes j ava. awt 726

    e j avax.swing 13.18.1 Padres de criao de projeto 726 13.18.2 Padres estruturais de projeto 727 13.18.3 Padres comportamentais de projeto 729 13.18.4 Concluso 732

    14 Tratamento de excees 739 14.1 Introduo 740 14.2 Quando deve ser utilizado o tratamento de excees 742 14.3 Outras tcnicas de tratamento de erros 742 14.4 Princpios bsicos de tratamento de excees em Java 742 14.5 Blocos try 743 14.6 Disparando uma exceo 744 14.7 Capturando uma exceo 744 14.8 Um exemplo de tratamento de excees: diviso por zero 746 14.9 Disparando novamente uma exceo 751 14.10 Clusula throws 751 14.11 Construtores, fnalizadores e tratamento de excees 756 14.12 Excees e herana 757 14.13 O bloco f i n a l l y 757 14.14 Utilizando p r in tS tackTrace e getMessage 761

    15 Multithreading 768 15.1 Introduo 769 15.2 Classe Thread: uma viso geral dos mtodos de Thread 771 15.3 Estados de threads: ciclo de vida de uma thread 772 15.4 Prioridades de threads e escalonamento de threads 773 15.5 Sincronizao de threads 111 15.6 Relacionamento produtor/consumidor sem sincronizao de threads 778 15.7 Relacionamento produtor/consumidor com sincronizao de threads 783 15.8 Relacionamento produtor/consumidor: o buffer circular 787 15.9 Threads daemon 795 15.10 A interface Runnable 796 15.11 Grupos de threads 801 15.12 (Estudo de caso opcional) Pensando em objetos: multithreading 802 15.13 (Opcional) Descobrindo padres de projeto: padres de projeto simultneos 809

  • 28 SUMRIO

    16 Arquivos e fluxos 817 16.1 Introduo 818 16.2 Hierarquia de dados 818 16.3 Arquivos e fluxos 820 16.4 Criando um arquivo de acesso seqencial 824 16.5 Lendo dados de um arquivo de acesso seqencial 834 16.6 Atualizando arquivos de acesso seqencial 845 16.7 Arquivos de acesso aleatrio 846 16.8 Criando um arquivo de acesso aleatrio 846 16.9 Gravando dados aleatoriamente em um arquivo de acesso aleatrio 851 16.10 Lendo dados seqencialmente de um arquivo de acesso aleatrio 856 16.11 Exemplo: um programa de processamento de transaes 860 16.12 A classe F i l e 875

    17 Redes 890 17.1 Introduo 891 17.2 Manipulando URIs 892 17.3 Lendo um arquivo em um servidor da Web 897 17.4 Estabelecendo um servidor simples com soquetes de fluxo 900 17.5 Estabelecendo um cliente simples com soquetes de fluxo 901 17.6 Interao cliente/servidor com conexes de soquete de fluxo 902 17.7 Interao cliente/servidor sem conexo com datagramas 912 17.8 Tic-Tac-Toe cliente/servidor utilizando um servidor com mltiplas threads 918 17.9 Segurana e a rede 931 17.10 Servidor e cliente de bate-papo DeitelMessenger 931

    17.10.1 DeitelMessengerServer e classes de suporte 931 17.10.2 Cliente DeitelMessenger e classes de suporte 940

    17.11 (Opcional) Descobrindo padres de projeto: padres de projeto utilizados nos pacotes j ava. io 956 e j a v a . n e t 17.11.1 Padres de criao de projeto 956 17.11.2 Padres estruturais de projeto 957 17.11.3 Padres de arquitetura de projeto 958 17.11.4 Concluso 960

    18 Multimdia: imagens, animao, udio e vdeo 966 18.1 Introduo 967 18.2 Carregando, exibindo e dimensionando imagens 968 18.3 Animando uma srie de imagens 970 18.4 Personalizando LogoAnimator atravs de parmetros de applet 974 18.5 Mapas de imagens 977 18.6 Carregando e reproduzindo clipes de udio 980

    http://ejava.net
  • SUMRIO 29

    18.7 Recursos na Internet e na World Wide Web 982

    19 Estruturas de dados 988 19.1 Introduo 989 19.2 Classes auto-referenciais 989 19.3 Alocao dinmica de memria 990 19.4 Listas encadeadas 991 19.5 Pilhas 1001 19.6 Filas 1004 19.7 rvores 1007

    20 Pacote de utilitrios Java e manipulao de bits 1034 20.1 Introduo 1035 20.2 A classe Vector e a interface Enumeration 1035 20.3 A classe Stack 1042 20.4 A classe Dictionary 1046 20.5 A classe Hashtable 1046 20.6 A classe Properties 1052 20.7 A classe Random 1057 20.8 Manipulao de bits e os operadores sobre bits 1058 20.9 A classe BitSet 1071

    21 Colees 1081 21.1 Introduo 1082 21.2 Viso geral das colees 1083 21.3 A classe Arrays 1083 21.4 A interface Col lect ion e a classe Col lect ions 1087 21.5 Listas 1087 21.6 Algoritmos 1093

    21.6.1 O algoritmo sort 1093 21.6.2 O algoritmo shuff le 1095 21.6.3 Os algoritmos reverse, f i l l , copy, max e min 1097 21.6.4 O algoritmo binarySearch 1099

    21.7 Conjuntos 1100 21.8 Mapeamentos 1103 21.9 Empacotadores de sincronizao 1104 21.10 Empacotadores no-modificveis 1105 21.11 Implementaes abstratas 1105 21.12 (Opcional) Descobrindo padres de projeto: padres de projeto usados no pacote j ava. ut i 1 1106

    21.12.1 Padres de criao de projeto 1106 21.12.2 Padres comportamentais de projeto 1106 21.12.3 Concluso 1107

  • 30 SUMRIO

    22 Java Media Framework e Java Sound (no CD) 1112 22.1 Introduo 1113 22.2 Reproduzindo mdia 1114 22.3 Formatando e salvando mdia capturada 1123 22.4 Streaming com RTP 1135 22.5 Java Sound 1148 22.6 Reproduzindo amostras de udio 1148 22.7 Musical Instrument Digital Interface (MIDI) 1154

    22.7.1 Reproduo de MIDI 1155 22.7.2 Gravao de MIDI 1160 22.7.3 Sntese de MIDI 1163 22.7.4 A classe MidiDemo 1166

    22.8 Recursos na Internet e na World Wide Web 1181 22.9 (Estudo de caso opcional) Pensando em objetos: animao e som na viso 1181

    A Demos de Java 1206 A.1 Introduo 1206

    A.2 Os sites 1206

    B Recursos para Java 1208 B.l Recursos 1208 J3.2 Produtos 1209

    B.3 FAQs 1210 B.4 Tutorials 1210 B.5 Revistas 1210 B.6 Applets Java 1210 B.7 Multimdia 1211 B.8 Grupos de notcias 1211

    C Tabela de precedncia de operadores 1213

    D Conjunto de caracteres ASCII 1215

    E Sistemas de numerao (no CD) 1216 E.l Introduo 1217 E.2 Abreviando nmeros binrios como nmeros octais e nmeros hexadecimais 1219 E.3 Convertendo nmeros octais e nmeros hexadecimais em nmeros binrios 1221 E.4 Convertendo de binrio, octal ou hexadecimal para decimal 1221 E.5 Convertendo de decimal para binrio, octal ou hexadecimal 1221 E.6 Nmeros binrios negativos: notao em complemento de dois 1223

    F Criando documentao em HTML com javadoc (no CD) 1229 El Introduo 1230 F.2 Comentrios de documentao 1231

  • SUMRIO 31

    F.3 Documentando o cdigo-fonte Java 1231 F.4 javadoc 1238 F.5 Arquivos produzidos por j avadoc 1238

    G Eventos e interfaces listener do elevador (no CD) 1242 G.l Introduo 1242 G.2 Eventos 1242 G.3 Listeners 1245 G.4 Diagramas de componentes revisitados 1248

    H Modelo do elevador (no CD) 1251 H.l Introduo 1251 H.2 A classe ElevatorModel 1251 H.3 As classes Location e Floor 1258 H.4 A classe Door 1261 H.5 A classe Button 1264 H.6 A classe ElevatorShaft 1265 H.7 As classes Light e Bel l 1271 H.8 A classe Elevator 1274 H.9 A classe Person 1282 H.IO Diagramas de componentes revisitados 1288 H.U Concluso 1288

    / Viso do elevador (no CD) 1290 1.1 Introduo 1290 1.2 Objetos da classe 1305 1.3 Constantes da classe 1307 1.4 Construtor da classe 1308 1.5 Tratamento de eventos 1309

    1.5.1 Tipos de eventos ElevatorMoveEvent 1310 1.5.2 Tipos de eventos PersonMoveEvent 1310 1.5.3 Tipos de eventos DoorEvent 1311 1.5.4 Tipos de eventos ButtonEvent 1311 1.5.5 Tipos de eventos BellEvent 1311 1.5.6 Tipos de eventos LightEvent 1311

    1.6 Diagrama de componentes revisitado 1311 1.7 Concluso 1312

    J Oportunidades para a carreira profissional (no CD) 1313 J.l Introduo 1314 J.2 Recursos para quem procura trabalho 1315 J.3 Oportunidades on-line para empregadores 1316

    J.3.1 Anunciando trabalho on-line 1318 J.3.2 Problemas com o recrutamento atravs da Web 1319 J.3.3 Diversidade no local de trabalho

  • 32 SUMRIO

    J.4

    J.5

    J.6

    K K.1 K.2 K.3 K.4 K.5 K.6 K.7

    Servios

    J.4.1 Sites pari J.5.1 J.5.2 J.5.3 J.5.4

    J.5.5 J.5.6 J.5.7 Recursos

    de recrutamento

    Testando funcionrios em potencial or, i a carreira profissional

    i-line

    Sites abrangentes para a carreira profissional Cargos tcnicos Cargos "sem-fio" Empreitando on-line Cargos executivos Estudantes e profissionais jovens Outros servios on-line para a carreira

    na Internet e na World Wide Web

    Unicode (no CD) Introduo Formatos de transformao Unicode Caracteres e hierglifos

    Vantagens/desvantagens de Unicode Site do Consrcio Unicode na Web Usando Unicode Intervalos de caracteres

    Bibliografia

    profissional

    1320 1321 1322 1322 1322 1324 1324 1326 1326 1327 1327

    1336 1337 1338 1338

    1339 1340 1340 1342

    1347

    ndice 1351

  • TOati*fm.mf^^

    Ilustraes

    1 Introduo aos computadores, Internet e Web 1.1 Ambiente Java tpico. 63

    2 Introduo a aplicativos Java 2.1 Um primeiro programa em Java. 95

    2.2 Executando Welcomel em um Command Prompt do Microsoft Windows 2000. 99 2.3 Imprimindo em uma mesma linha com mltiplas instrues. 100 2.4 Imprimindo em mltiplas linhas de texto com uma nica instruo. 101 2.5 Algumas seqncias comuns de escape. 101 2.6 Exibindo mltiplas linhas em uma caixa de dilogo. 102 2.7 Uma janela de exemplo do Netscape Navigator com os componentes GUI. 103 2.8 Caixa de dilogo de mensagem. 104 2.9 Um programa de adio "em ao". 105 2.10 Caixa de dilogo de entrada. 108 2.11 Caixa de dilogo de mensagem personalizada com a verso de quatro argumentos do mtodo

    showMessageDialog. 109 2.12 Constantes de JOptionPane para o dilogo de mensagem. 110 2.13 Posio da memria que mostra o nome e o valor da varivel number 1. 110 2.14 Posies da memria depois que os valores para numberl e number2 foram armazenados. 111 2.15 Posies da memria aps calcular a soma de numberl e number2. 111 2.16 Operadores aritmticos. 112 2.17 Precedncia de operadores aritmticos. 113 2.18 Ordem em que um polinno de segundo grau avaliado. 114 2.19 Operadores de igualdade e operadores relacionais. 115 2.20 Utilizando operadores de igualdade e operadores relacionais. 115 2.21 Precedncia e associatividade dos operadores discutidos at agora. 120 2.22 Pessoa caminhando em direo ao elevador no primeiro andar. 122 2.23 Pessoa andando no elevador para o segundo andar. 122 2.24 Pessoa se afastando do elevador. 123

  • 34 ILUSTRAES

    3 Introduo a applets Java 3.1 Os exemplos do diretrio applets. 138 3.2 Exemplo de execuo do applet t i c taetoe . 139 3.3 Selecionando Reload no menu Applet do appletviewer. 139 3.4 Exemplo de execuo do applet DrawTest. 140 3.5 Exemplo de execuo do applet Java2D. 142 3.6 Um primeiro applet em Java e a sada na tela do applet. 142 3.7 WelcomeApplet. html carrega a classe WelcomeApplet da Fig. 3.6 no appletviewer. 146 3.8 Applet que exibe mltiplos strings. 148 3.9 WelcomeApplet2.html carrega a classe Welcome Apple t2 da Fig. 3.8 no appletviewer. 148 3.10 Desenhando strings e linhas. 149 3.11 O arquivo WelcomeLines. html, que carrega a classe WelcomeLines da Fig. 3.10 no 150

    appletviewer. 3.12 Um programa de adio "em ao". 150 3.13 AdditionApplet.html carrega a classe AdditionApplet da Fig. 3.12 no 151

    appletviewer. 3.14 Appletda 3.10 sendo executado no Netscape Navigator 6. 157 3.15 Janela do Java Plug-in HTML Converter. 158 3.16 Selecionando o diretrio que contm os arquivos HTML a converter. 158 3.17 Selecionando o gabarito usado para converter os arquivos HTML. 159 3.18 Dilogo de confirmao aps a converso ter terminado. 159 3.19 Lista de substantivos na definio do problema. 160 3.20 Representando uma classe na UML. 162 3.21 Diagrama de classes mostrando as associaes entre classes. 163 3.22 Tipos de multiplicidade. 163 3.23 Diagrama de classes para o modelo do elevador. 164 3.24 Diagrama de objetos de um prdio vazio em nosso modelo de elevador. 165

    4 Estruturas de controle: parte 1 4.1 Fluxograma da estrutura de seqncia de Java. 175 4.2 Palavras-chave de Java. 176 4.3 Fluxograma da estrutura de seleo nica i f. 177 4.4 Fluxograma da estrutura de seleo dupla if / e l s e . 178 4.5 Fluxograma da estrutura de repetio while. 183 4.6 Algoritmo em pseudocdigo que utiliza repetio controlada por contador para resolver o 183

    problema de mdia da turma. 4.7 Programa de mdia da turma com repetio controlada por contador. 183 4.8 Algoritmo em pseudocdigo que utiliza repetio controlada por sentinela para resolver o 189

    problema da mdia da turma. 4.9 Programa de mdia da turma com repetio controlada por sentinela. 190 4.10 Pseudocdigo para o problema dos resultados de um exame. 196 4.11 Programa Java para o problema dos resultados de um exame. 196 4.12 Operadores aritmticos de atribuio. 199 4.13 Operadores de incremento e decremento. 200 4.14 A diferena entre pr-incrementar e ps-incrementar. 200 4.15 Precedncia e associatividade dos operadores discutidos at agora. 202

  • ILUSTRAES 35

    4.16 Os tipos de dados primitivos em Java. 202 4.17 Palavras e frases descritivas da definio do problema. 204 4.18 Classes com atributos. 206

    5 Estruturas de controle: parte 2 5.1 Repetio controlada por contador. 217 5.2 Repetio controlada por contador com a estrutura for. 219 5.3 Componentes de um cabealho de estrutura for tpico. 220 5.4 Fluxograma de uma estrutura de repetio for tpica. 222 5.5 Soma com a estrutura for. 223 5.6 Clculo de juros compostos com a estrutura for. 224 5.7 Um exemplo que utiliza switch. 227 5.8 A estrutura de seleo mltipla switch . 230 5.9 Utilizando a estrutura de repetio do/while. 231 5.10 Fluxograma da estrutura de repetio do/while. 232 5.11 Utilizando a instruo break em uma estrutura for. 233 5.12 Utilizando a instruo continue em uma estrutura for. 234 5.13 Utilizando uma instruo rotulada break em uma estrutura aninhada for. 235 5.14 Utilizando uma instruo rotulada continue em uma estrutura aninhada for. 236 5.15 Tabela-verdade para o operador && (E lgico). 238 5.16 Tabela-verdade para o operador i I (OU lgico). 239 5.17 Tabela-verdade para o operador lgico booleano exclusivo OU (A). 240 5.18 Tabela-verdade para o operador! (NOlgico). 240 5.19 Demonstrando os operadores lgicos. 240 5.20 Precedncia e associatividade dos operadores discutidos at agora. 242 5.21 As estruturas de controle com entrada nica/sada nica de Java. 243 5.22 Regras para formar programas-estruturados. 244 5.23 O fluxograma mais simples. 244 5.24 Aplicando repetidamente a Regra 2 da Fig. 5.22 ao fluxograma mais simples. 245 5.25 Aplicando a Regra 3 da Fig. 5.22 ao fluxograma mais simples. 245 5.26 Blocos de construo empilhados, aninhados e sobrepostos. 246 5.27 Um fluxograma no-estruturado. 246 5.28 Diagrama de mapa de estados para objetos FloorButton e ElevatorButton 248 5.29 Diagrama de atividades para um objeto Person. 248 5.30 Diagrama de atividades para um objeto Elevator. 249

    6 Mtodos 6.1 Relacionamento hierrquico mtodo do trabalhador/mtodo do patro. 261 6.2 Mtodos da classe Math. 262 6.3 Utilizando o mtodo square definido pelo programador. 264 6.4 O mtodo maximum definido pelo programador. 268 6.5 Promoes permitidas para tipos de dados primitivos. 270 6.6 Os pacotes da Java API. 271 6.7 Inteiros aleatrios deslocados e escalonados. 272 6.8 Lanando um dado de seis faces 6000 vezes. 273 6.9 Programa que simula o jogo craps. 275

  • 36 ILUSTRAES

    6.10 Um exemplo de escopo. 284 6.11 Avaliao recursiva de 5!. 287 6.12 Calculando fatoriais com um mtodo recursive 287 6.13 Gerando nmeros de Fibonacci recursivamente. 289 6.14 Conjunto de chamadas recursivas para o mtodo f ibonacci (f neste diagrama). 292 6.15 Resumo de exemplos e exerccios com recurso no texto. 294 6.16 Utilizando mtodos sobrecarregados. 295 6.17 Mensagens de erro do compilador geradas por mtodos sobrecarregados com listas de 297

    parmetros idnticas e tipos diferentes de valores devolvidos. 6.18 Mtodos de JApplet que o continer de applets chama durante a execuo de um applet. 298 6.19 Frases com verbos para cada classe no simulador 299 6.20 Classe com atributos e operaes 300 6.21 Valores para os lados dos tringulos no Exerccio 6.15. 310 6.22 Torres de Hani para o caso com quatro discos. 314

    7 Arrays 7.1 Um array de 12 elementos. 318 7.2 Precedncia e associatividade dos operadores discutidos at agora. 319 7.3 Inicializando os elementos de um array com zero. 320 7.4 Inicializando os elementos de um array com uma declarao. 322 7.5 Gerando valores para serem colocados em elementos de um array. 323 7.6 Calculando a soma dos elementos de um array. 324 7.7 Programa que imprime histogramas. 325 7.8 Programa de jogo de dados que utiliza arrays em vez de switch. 326 7.9 Um programa simples de anlise de pesquisa de alunos. 328 7.10 Passando arrays e elementos individuais de arrays para mtodos. 331 7.11 Classificando um array com o algoritmo bubble sort. 333 7.12 Pesquisa linear de um array. 336 7.13 Pesquisa binaria de um array ordenado. 338 7.14 Um array bidimensional com trs linhas e quatro colunas. 342 7.15 Inicializando arrays multidknensionais. 343 7.16 Exemplo de utilizao de arrays bidimensionais. 345 7.17 Frases com verbos para cada classe, mostrando comportamentos na simulao. 348 7.18 Colaboraes no sistema do elevador. 349 7.19 Diagrama de colaboraes para uma pessoa pressionando o boto de andar. 350 7.20 Diagrama de colaboraes para passageiros entrando no elevador e saindo dele. 351 7.21 Os 36 resultados possveis ao se lanar dois dados. 356 7.22 Determine o que faz este programa. 356 7.23 Determine o que faz este programa. 358 7.24 Comandos para o grfico de tartaruga. 359 7.25 Os oito movimentos possveis do cavalo. 360 7.26 Os 22 quadrados eliminados ao se colocar a rainha no canto esquerdo superior. 362 7.27 Regras para ajustar as posies da tartaruga e da lebre. 366 7.28 Cdigos de operao da Simpletron Machine Language (SML). 367 7.29 Programa em SML que l dois inteiros e calcula sua soma 367 7.30 Programa em SML que l dois inteiros e determina qual o maior 368

  • ILUSTRAES 37

    7.31 Comportamento de diversas instrues SML no Simpletron. 370 7.32 Um exemplo de dump. 370

    8 Programao baseada em objetos 8.1 Implementao do tipo abstrato de dados Timel como uma classe. 374 8.2 Usando um objeto da classe Timel em um programa. 378 8.3 Tentativa incorreta de acessar membros privados da classe Timel. 382 8.4 Colocando a classe Timel em um pacote para reutilizao. 383 8.5 Usando a classe definida pelo programador Timel num pacote. 385 8.6 Classe Time2 com construtores sobrecarregados. 387 8.7 Usando construtores sobrecarregados para inicializar objetos da classe Time2. 390 8.8 Classe Time3 com mtodos set e get. 392 8.9 Usando os mtodos set e get da classe Time3. 395 8.10 Contedo de TimeTest5 .jar. 399 8.11 Inicializando uma varivel f inal . 401 8.12 Mensagem de erro do compilador como resultado da no-inicializao de INCREMENT. 402 8.13 Classe Date. 403 8.14 Classe Employee com referncias para objetos-membros. 404 8.15 Demonstrando um objeto com uma referncia para objetos-membros. 405 8.16 Acesso de pacote a membros de uma classe. 406 8.17 Usando a referncia th i s implcita e explicitamente. 407 8.18 Classe Time4 usando t h i s para permitir chamadas de mtodos encadead