cópia - hudson costa | professor da universidade estadual ... · programação orientada a objetos...

514

Upload: vantuyen

Post on 01-Dec-2018

237 views

Category:

Documents


2 download

TRANSCRIPT

  • ii

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    Prefcio

    Sobre este livro

    Este livro tem como finalidade possibilitar ao estudante o aprendizado dos conceitos bsicos deprogramao orientada a objetos usando a linguagem Java. O livro parte do pressuposto de queo estudante conhece e usa computadores, tem noes elementares de algoritmos e sabe o que uma linguagem de programao, mas sem necessariamente possuir conhecimentos profundosde uma. Evidentemente o livro tambm pode ser usado por estudantes que j conheam algumalinguagem de programao mas estejam interessados em aprender Java.

    O livro foi inicialmente desenvolvido como sendo o material sugerido para as disciplinasProgra-mao Orientada a Objetos Ie Programao Orientada a Objetos IIdos cursos de Cincia daComputao e Engenharia da Computao oferecidos pela Faculdade de Cincia da Computaoda Universidade do Vale do Paraba (UNIVAP). O material original foi ampliado consideravel-mente para a publicao como livro.

    Ao desenvolver este livro, minha motivao principal foi apresentar os conceitos de programa-o orientada a objetos com clareza e simplicidade, mostrando exemplos e sugerindo problemasprticos e ilustrativos dos conceitos e de algoritmos em geral. Muitos livros de programao ori-entada a objetos (abreviadamente, POO), especialmente usando a linguagem Java, concentram-seem aspectos visuais, deixando de lado a teoria e explicao dos detalhes que so necessrias paramelhor compreenso das tcnicas e conceitos. Na maioria dos casos, demonstraes das capaci-dades da linguagem so apresentadas desde cedo, sem as explicaes necessrias para compreen-so do que acontece nos programas-exemplo. Em contraste, este livro concentra-se nas tcnicasde programao orientada a objetos, explicando a teoria e apresentando a prtica de cada tpico.Espero que com isto os estudantes estejam mais confortveis com os conceitos de classes e obje-tos quando forem utiliz-los em aplicaes mais complexas.

    Para reforar a aplicabilidade deste livro em cursos de programao em escolas tcnicas e uni-versidades,169programas, classes e trechos de cdigo foram incluidos, com comentrios paraesclarecer os pontos mais importantes. Ao final de cada captulo, vrios exerccios de fixaocom diferentes nveis de complexidade so apresentados, em um total de881exerccios.

    Sobre a organizao deste livro

    Este livro dividido em cinco partes principais, cada uma subdividida em vrios captulos. Cadacaptulo cobre um tema especfico. As partes e captulos so:

    Parte I: Introduo Programao Orientada a Objetosapresenta os conceitos bsicosde programao orientada a objetos. Esta parte dividida nos seguintes captulos:

    Introduo Programao Orientada a Objetos usando Java

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Rafael Santos

    http://www.bioinfo.univap.br/~POO

  • Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    iii

    Captulo 1: Introduo Programao Orientada a Objetosapresenta conceitosbsicos de programao orientada a objetos, esclarecendo as diferenas e relaes en-tre modelos, classes, objetos e instncias. Neste captulo, os conceitos apresentadosso puramente tericos, masessenciaispara a compreenso dos princpios bsicosde orientao a objetos.

    Captulo 2: Criando Classes em Javamostra como classes em Java so declaradas,e apresenta os tipos de dados e os mecanismos de criao de campos e mtodos nasclasses.

    Captulo 3: Criando Aplicaes em Javamostra como podemos criar aplicaesou programas em Java (classes que podem ser executadas pela mquina virtual Java),e como podemos usar classes criadas anteriormente nestes programas.

    Captulo 4: Construtores e Sobrecargaapresentaconstrutores, mtodos especiaisque sero chamados quando objetos das classes que os contm forem instanciados.O captulo tambm descreve como fazer a sobrecarga de mtodos, que permite quevrios mtodos com o mesmo nome mas diferentes funes possam ser declarados eusados.

    Captulo 5: Campos e Mtodos Estticosmostra como podemos criar mtodose campos estticos em aplicaes ou outras classes em Java. Mtodos e camposestticos no precisam ser instanciados para serem usados.

    Captulo 6: Estruturas de Deciso e Controle - Condicionaisapresenta as estru-turas de deciso baseadas em condies, juntamente com uma introduo aos opera-dores lgicos de Java.

    Captulo 7: Estruturas de Deciso e Controle - Repetioapresenta as estruturasde repetio de Java baseadas em condies, juntamente com noes sobre recursoe otimizao.

    Captulo 8: Reutilizao de Classesmostra dois mecanismo de Programao Ori-entada a Objetos que permitem a uso de uma classe j existente para criao de umaclasse derivada, mais especializada.

    Captulo 9: Classes Abstratas e Interfacesapresenta os conceitos declasses abs-tratase interfaces, que tambm servem como mecanismos de herana de Java comcaractersticas especiais.

    Captulo 10: Pacotes (packages) de Classes em Javamostra como classes podemser organizadas em grupos chamadospacotes, e ilustra a criao e uso destes pacotes.

    Parte II: Classes de Java para Manipulao de Dadosapresenta algumas classes paramanipulao de dados que so padro de Java. Esta parte dividida nos seguintes captu-los:

    Captulo 11: Arrays em Java apresenta os mecanismos de criao e uso dearrays(vetores de dados) unidimensionais e multidimensionais em Java, assim como tcni-cas de Programao Orientada a Objetos para a criao de classes que implementamarrays de forma robusta.

    Captulo 12: Classes para Manipulao de Stringsapresenta e demonstra o usode trs classes para processamento de cadeias de caracteres:String, StringBuffereStringTokenizer.

    Captulo 13: Classes para Representao e Processamento de Valores Num-ricos apresenta a classeMath e seus mtodos e constantes usados para operaesmatemticas, e classes que encapsulam valores numricos representveis por tiposnativos.

    Rafael Santos

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Introduo Programao Orientada a Objetos usando Java

    http://www.bioinfo.univap.br/~POO

  • iv

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    Captulo ??: Classes para Representao de Estruturas de Dadosapresenta algu-mas classes que implementam estruturas de dados simples em Java e suas aplicaes.

    Captulo ??: Exceesapresenta os mecanismos de tratamento e criao de exce-es em Java para processamento de erros.

    Captulo ??: Entrada e Sada usando Arquivosapresenta as classes em Java quepermitem a abstrao de acesso arquivos de diversos tipos.

    Captulo ??: Recebendo e Enviando Dados via Internetapresenta um mecanismosimples de envio e recebimento de dados via Internet.

    Captulo ??: Programao Cliente-Servidor comSocketsmostra como podemoscriar aplicaes simples com o modelo cliente/servidor e a classeSocket.

    Captulo ??: Linhas de Execuo (Threads) mostra como programas podem serpreparados para executar mais de uma tarefa simultaneamente atravs do uso de li-nhas de execuo.

    Parte III: Classes de Java para Programas com Interfaces Grficasapresenta as classesprincipais de Java que permitem a criao de programas com interfaces grficas, e estdividida nos seguintes captulos:

    Captulo ??: Introduo Programao com Interfaces Grficasapresenta osconceitos bsicos de programao com interfaces grficas, e introduz as classesFrameeCanvas.

    Captulo ??: Introduo Programao com Eventosapresenta os conceitos b-sicos de programao com eventos, e sua relao com programas com interfacesgrficas, alm de demonstrar usos de instncias da classeButton.

    Captulo ??: Usando Diferentes Layouts Grficosmostra comolayoutspodem serusados para distribuir diversos componentes em programas com interfaces grficas.

    Captulo ??: Usando Campos de Textoapresenta as classesLabel, TextField eTextArea, para apresentao e entrada de texto em programas com interfaces grfi-cas.

    Captulo ??: Usando Listas e Opesapresenta classes cujas instncias represen-tam listas e opes para interao com usurios.

    Captulo ??: Usando Menusmostra como menus podem ser criados em programascom interfaces grficas, e como funes do programa podem ser executados casoopes dos menus sejam escolhidas.

    Captulo ??: Introduo Programao de Appletsmostra comoApplets(pro-gramas que podem ser carregados via Internet e mostrados em um navegador) podemser criados com os conceitos mostrados anteriormente.

    Parte IV: Projetos Sugeridos apresenta trs projetos sugeridos para leitores interessa-dos. Estes projetos so mostrados como aplicaes quase completas mas que podem sermelhoradas com sugestes apresentadas como exerccios. Os projetos so:

    Captulo ??: Um Colorizador de Cdigo Javaprope a criao de um programaque analisa e anota cdigos em Java criando arquivos HTML que contm o cdigocolorizado.

    Captulo ??: Interface Orientada a Objetos para o Software POVprope a cri-ao de classes que modelam os componentes grficos usados no software gratuitoPOV(Persistence of Vision).

    Introduo Programao Orientada a Objetos usando Java

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Rafael Santos

    http://www.bioinfo.univap.br/~POO

  • Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    v

    Captulo ??: Uma Planilha Simplesapresenta as estruturas e conceitos para desen-volvimento de uma planilha de clculos simples, e exerccios para fazer um aplicativomais til.

    Parte V: Apndices

    ApndiceA: Tipos de Dados em Javaapresenta os tipos de dados nativos em Javacom exemplos de usos corretos e incorretos.

    ApndiceB: A classeKeyboard apresenta a classeKeyboard, que pode ser usadapara facilitar a leitura de valores de tipos nativos e instncias da classeString apartir do teclado, adicionando flexibilidade aos programas que no usam interfacesgrficas.

    Apndice B.1: Usando oJava Development Kitapresenta a ferramenta escolhidapara desenvolvimento de programas, classes eappletsem Java.

    Apndice ??: Documentao de Classes e Programas em Javamostra como pode-mos criar documentao para aplicativos e classes em Java atravs da documentaodo cdigo-fonte.

    Convenes usadas neste livro

    Para destacar alguns conceitos apresentados neste livro, fontes diferentes sero usadas. Nomesde classes, mtodos, pacotes, comandos, etc. sero mostrados em fonteproporcional. Concei-tos apresentados pela primeira vez ou que meream destaque e palavras que no sejam parte doportugus corrente sero mostrados em fonteitlica.

    Adicionalmente, os programas includos no livro serocolorizados, isto , palavras-chave e par-tes do cdigo como comentrios sero mostradas em cores diferentes para facilitar a leitura. Aslinhas dos programas tambm sero numeradas para fcil referncia.

    Os exerccios apresentados ao fim de cada captulo so divididos em cinco categorias de dificul-categorias deexercciosdade, marcadas com um nmero de estrelas correspondente:

    Uma estrela (?): Exerccios tericos ou prticos que podem ser resolvidos rapidamente,geralmente atravs de consultas a programas mostrados ou respostas de outros exerccios,e modificao de exemplos ou outras respostas. Em muitos casos podem ser resolvidosmentalmente, isto , sem a necessidade de escrever, compilar e executar programas.Existem330exerccios desta categoria no livro.

    Duas estrelas (? ?): Exerccios tericos ou prticos que exigem um pouco mais de racio-cnio e modificaes ligeiras de exemplos apresentados. Exerccios desta categoria geral-mente precisaro ser compilados e executados para verificao dos resultados.Existem229exerccios desta categoria no livro.

    Trs estrelas (???): Exerccios que requerem compreenso mais completa dos conceitosenvolvidos, mas mesmo assim podem ser resolvidos com base em exemplos ou respostasa outros exerccios.Existem227exerccios desta categoria no livro.

    Quatro estrelas (??? ?): Exerccios que requerem compreenso ainda mais completa eprofunda dos conceitos, e que geralmente exigem um conhecimento razovel de algoritmose tcnicas de programao.Existem68exerccios desta categoria no livro.

    Rafael Santos

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Introduo Programao Orientada a Objetos usando Java

    http://www.bioinfo.univap.br/~POO

  • vi

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    Cinco estrelas (?????): Exerccios que requerem a soluo de um problema mais com-pleto e complexo, envolvendo vrios conceitos diferentes da disciplina. Estes exercciospodem servir como base para projetos mais interessantes.Existem27exerccios desta categoria no livro.

    Sobre o Site de Suporte

    Material complementar a este livro, na forma de umsite de suporteao livro, pode ser encontradona WWW acessando a URLhttp://www.bioinfo.univap.br/POO.

    Presentemente o site contm vrios arquivos paradownload(classes teis, arquivos usados nosexemplos mostrados no livro), as listagens dos programas do livro com sintaxe colorizada noformato PDF elinks para softwares teis para o desenvolvimento de programas em Java. Estoem desenvolvimento ferramentas que podem ser usadas pela Internet, como um colorizador decdigo via WWW e um compilador que indica erros apresentando mensagens em portugus commais detalhes do que o prprio compilador presentemente includo no kit de desenvolvimentoJava.

    Por que Java ?

    Existem diversas linguagens de programao orientadas a objeto, cada uma com diferentes ca-por que usarJava no ensino

    de POO ?ractersticas e apelos de mercado, educacionais ou acadmicos. Nesta seo, algumas das razesda escolha da linguagem Java sero apresentadas.

    Java obrigatoriamenteorientada a objetos. Algumas linguagens permitem que objetos e va-riveis existam em diversos pontos de um programa, como se estivessem desatreladas dequalquer estrutura. Em Java,todasas variveis e mtodos devem estar localizados dentrode classes, forando o uso de orientao a objetos at mesmo em tarefas simples. Des-sa forma, o estudante de programao orientada a objetos que esteja usando Java estarusando mais as tcnicas de POO.

    Java simples.A estrutura de programas e classes em Java segue a organizao de linguagenstradicionais como C e C++, mas sem elementos que tornam programas e programaomais complexos. Aps o aprendizado dos conceitos bsicos de programao orientada aobjetos, o estudante da linguagem pode comear a criar aplicativos teis e complexos.A simplicidade se reflete tambm na maneira com que arquivos contendo programas emJava so compilados e executados: se as recomendaes bsicas forem seguidas, o compi-lador se encarregar de compilar todas as classes necessrias em uma aplicao automati-camente, sem necessidade de arquivos adicionais de configurao e incluso de bibliotecas.

    Java porttil. O cdigo-fonte de um programa ou classe em Java pode ser compilado em qual-quer computador, usando qualquer sistema operacional, contanto que este tenha uma m-quina virtual Java adequada (veja o apndiceB.1). Adicionalmente, as classes criadaspodem ser copiadas e executadas em qualquer computador nas mesmas condies, au-mentando a utilidade da linguagem atravs da independncia de plataformas, contanto queverses compatveis da mquina virtual sejam usadas.

    Java gratuita. A mquina virtual Java, mencionada acima, est disposio para cpia nosite da Sun e em vrios outros. Compiladores simples, de linha de comando (sem inter-faces visuais elaboradas) fazem parte doJDK, o ambiente de desenvolvimento gratuito deJava. Aplicaes em Java precisam de uma mquina virtual para sua execuo, mas no

    Introduo Programao Orientada a Objetos usando Java

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Rafael Santos

    http://www.bioinfo.univap.br/~POOhttp://www.bioinfo.univap.br/~POO

  • Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    vii

    existem limitaes na distribuio da mquina virtual, fazendo de Java uma plataformaextremamente econmica para desenvolvedores e usurios finais.

    Java robusta. Administrao de memria (alocao e liberao) e o uso de ponteiros, duasdas fontes de erros ebugsmais frequentes em programas em C e C++, so administradosinternamente na linguagem, de forma transparente para o programador. De maneira geral,programas em Java tem restries no acesso memria que resultam em maior seguranapara os programas sem diminuir a utilidade dos mesmos.Java tambm tem um poderoso mecanismo de excees que permite melhor tratamento deerros em tempo de execuo dos programas.

    Java tem bibliotecas prontas para diversas aplicaes.As bibliotecas de classes de Java con-tm vrias classes que implementam diversos mecanismos de entrada e sada, acesso Internet, manipulao de Strings em alto nvel, poderosas estruturas de dados, utilitriosdiversos e um conjunto completo de classes para implementao de interfaces grficas.Vale a pena relembrar que estas bibliotecas so padro de Java - qualquer mquina virtualJava permite o uso destas bibliotecas, sem a necessidade de instalar pacotes adicionais, eque mesmo que o compilador usado no tenha interface grfica similar de linguagens vi-suais, os programas criados com este compilador podem ter interfaces grficas complexas.

    Categorias de softwares em Java

    Existem basicamente quatro categorias de softwares que podem ser criados em Java:

    Classes para representao de modelos.Classes so usadas para representar, em linguagemclasses pararepresentaode modelos

    de programao, modelos e abstraes de dados como os mostrados nos captulos1. Clas-ses para representao de modelos no podem ser executadas diretamente, mas instnciasdestas classes podem ser usadas dentro de aplicaes eapplets. Detalhes e mecanismos decriao de classes em Java sero vistos no captulo2.

    Classes como conjuntos de rotinas.Classes podem conter somente mtodos (rotinas) ao invsbibliotecasde representar dados. Estas classes funcionam comobibliotecasde mtodos ou funesque tem algo em comum. Detalhes sobre a criao deste tipo de classes sero vistos naseo5.3.

    Aplicaes ou Programas.Aplicaes ou programas podem ser executadas a partir de um ter-aplicaesminal do sistema operacional (terminais grficos de Unix ou da janela do MS-DOS), po-dendo envolver ou no maior interao com o usurio, e podendo ou no ter uma interfacegrfica. Informaes sobre a criao de programas em Java sero mostradas no captulo3(sem uso de interface grfica) e nos captulos da parteIII (com interfaces grficas).

    Applets. Appletsso programas executveis em Java que podem ser embutidos em pginas emappletsHTML e carregados e executados via Internet. Sua execuo controlada pelo navegadorque est sendo usado para ler as pginas. Por razes de segurana,appletsso limitadasnas tarefas que podem fazer, e obrigatoriamente devem ter interface grfica. Detalhes emecanismos de criao deappletsem Java sero vistos no captulo??.

    O que no ser visto neste livro

    Eis aqui uma lista dos tpicos queno serocobertos pelo livro. Ao invs de considerar alista como um atestado de que o livro est incompleto, por favor considere que o livro umaintroduo, e certos tpicos so complexos demais para um livro deste tipo ou simplesmente noso interessantes, teis ou comuns o suficiente para merecer discusso.

    Rafael Santos

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Introduo Programao Orientada a Objetos usando Java

    http://www.bioinfo.univap.br/~POO

  • viii

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    Comandosbreak econtinue com labels.

    Inner classes(classes aninhadas).

    Dedicatria e Agradecimentos

    Este livro dedicado a minha esposa Yukari, e a nossa filha Miyuki, pela infinita pacincia, cari-nho e suporte demonstrados durante a criao deste livro; e aos meus pais pelas vrias lies devida.

    Sou grato aos estudantes dos cursos da Faculdade de Cincia da Computao da Univap que con-tribuiram com idias e perguntas que resultaram em exemplos e exerccios, e em especial, aosestudantes que participaram na reviso do livro. Entre estes, destaco Ndia Maria Frana Borges,por inmeras correes e sugestes.

    Sou tambm grato aos professores Paulo de Castro Lobo, Moacir de Almeida Prado e CarlosManoel Fenile Pris por esclarecimentos necessrios para alguns exerccios.

    Modificaes

    Esta seo somente ser mantida enquanto o livro estiver em desenvolvimento.

    Plano de Modificaes

    A lista de modificaes previstas para as prximas verses deste livro so, em ordem aproximadade prioridade:

    1. Completar o captulo12.

    2. Completar o captulo13.

    3. Completar o apndiceB.1.

    4. Completar o apndiceA.

    5. Completar o apndiceB.

    6. Escrever os captulos restantes.

    Introduo Programao Orientada a Objetos usando Java

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Rafael Santos

    http://www.bioinfo.univap.br/~POO

  • SUMRIO

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    ix

    Sumrio

    Prefcio ii

    I Introduo Programao Orientada a Objetos 1

    1 Introduo Programao Orientada a Objetos 31.1 O que um programa de computador ?. . . . . . . . . . . . . . . . . . . . . . . 31.2 O que so modelos ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 O que Programao Orientada a Objetos ?. . . . . . . . . . . . . . . . . . . . 61.4 Encapsulamento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.5 Mais exemplos de modelos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    1.5.1 Exemplo 1: Uma lmpada incandescente. . . . . . . . . . . . . . . . . 81.5.2 Exemplo 2: Uma conta bancria simplificada. . . . . . . . . . . . . . . 101.5.3 Exemplo 3: Uma data. . . . . . . . . . . . . . . . . . . . . . . . . . . 111.5.4 Exemplo 4: Um registro acadmico de aluno. . . . . . . . . . . . . . . 13

    1.6 Classes, objetos, instncias e referncias. . . . . . . . . . . . . . . . . . . . . . 151.7 Orientao a Objetos necessria ?. . . . . . . . . . . . . . . . . . . . . . . . . 171.8 Papis de programadores que utilizam orientao a objetos. . . . . . . . . . . . 171.9 Exerccios do captulo 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18

    2 Criando Classes em Java 242.1 Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242.2 Sintaxe bsica de criao de classes em Java. . . . . . . . . . . . . . . . . . . . 242.3 Campos em classes em Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    2.3.1 Usando dados nativos de Java. . . . . . . . . . . . . . . . . . . . . . . 262.3.2 Declarando campos em classes em Java. . . . . . . . . . . . . . . . . . 282.3.3 Que tipos de dados devem ser usados ?. . . . . . . . . . . . . . . . . . 30

    2.4 Mtodos em classes em Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . 312.5 Escopo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .332.6 Modificadores de acesso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .352.7 Exerccios do captulo 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41

    3 Criando Aplicaes em Java 553.1 Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .553.2 Criando aplicaes em Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553.3 A palavra-chavenew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .583.4 A palavra-chavenull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .623.5 Escrevendo classes e aplicaes mais interativas. . . . . . . . . . . . . . . . . . 643.6 Exerccios do captulo 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .653.7 Exerccios complementares do captulo 3. . . . . . . . . . . . . . . . . . . . . 69

    Rafael Santos

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Introduo Programao Orientada a Objetos usando Java

    http://www.bioinfo.univap.br/~POO

  • x

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    SUMRIO

    4 Construtores e Sobrecarga 714.1 Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .714.2 O que so construtores ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .734.3 Sobrecarga de mtodos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76

    4.3.1 A palavra-chavethis . . . . . . . . . . . . . . . . . . . . . . . . . . . 804.3.2 Cuidados com sobrecarga de mtodos. . . . . . . . . . . . . . . . . . . 83

    4.4 Exerccios do captulo 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .844.5 Exerccios complementares do captulo 4. . . . . . . . . . . . . . . . . . . . . 90

    5 Campos e Mtodos Estticos 925.1 Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .925.2 Campos estticos em classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . 925.3 Mtodos estticos em classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . 985.4 Campos e mtodos estticos em aplicaes. . . . . . . . . . . . . . . . . . . . .1005.5 Fbricas de instncias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1025.6 Exerccios do captulo 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1045.7 Exerccios complementares do captulo 5. . . . . . . . . . . . . . . . . . . . .107

    6 Estruturas de Deciso e Controle - Condicionais 1096.1 Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1096.2 Operadores lgicos em Java. . . . . . . . . . . . . . . . . . . . . . . . . . . .1096.3 Estruturas de deciso e execuo seletiva. . . . . . . . . . . . . . . . . . . . . .114

    6.3.1 As instruesif-else . . . . . . . . . . . . . . . . . . . . . . . . . . .1146.3.2 O operador condicional? . . . . . . . . . . . . . . . . . . . . . . . . .1176.3.3 A instruoswitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118

    6.4 Exerccios do captulo 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1206.5 Exerccios complementares do captulo 6. . . . . . . . . . . . . . . . . . . . .125

    7 Estruturas de Deciso e Controle - Repetio 1277.1 Estruturas de repetio ou iterao. . . . . . . . . . . . . . . . . . . . . . . . .127

    7.1.1 Contadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1287.1.2 O laowhile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1297.1.3 O laodo-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1317.1.4 O laofor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .134

    7.2 Introduo Recurso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1377.3 Introduo otimizao de laos. . . . . . . . . . . . . . . . . . . . . . . . . .1417.4 Exerccios do captulo 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1467.5 Exerccios do captulo 7 que envolvem sries matemticas. . . . . . . . . . . .1527.6 Exerccios complementares do captulo 7. . . . . . . . . . . . . . . . . . . . .171

    8 Reutilizao de Classes 1738.1 Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1738.2 Delegao ou Composio. . . . . . . . . . . . . . . . . . . . . . . . . . . . .174

    8.2.1 Delegao e modificadores de acesso. . . . . . . . . . . . . . . . . . .1788.2.2 Delegao e construtores. . . . . . . . . . . . . . . . . . . . . . . . . .181

    8.3 Herana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1828.3.1 A palavra-chavesuper . . . . . . . . . . . . . . . . . . . . . . . . . . .1888.3.2 Sobreposio e ocultao. . . . . . . . . . . . . . . . . . . . . . . . . .1978.3.3 Polimorfismo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198

    8.4 Exerccios do captulo 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2058.5 Exerccios complementares do captulo 8. . . . . . . . . . . . . . . . . . . . .213

    Introduo Programao Orientada a Objetos usando Java

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Rafael Santos

    http://www.bioinfo.univap.br/~POO

  • SUMRIO

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    xi

    9 Classes Abstratas e Interfaces 2169.1 Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2169.2 Classes abstratas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2179.3 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2239.4 Herana mltipla usando interfaces. . . . . . . . . . . . . . . . . . . . . . . . .230

    9.4.1 Conflitos de herana mltipla. . . . . . . . . . . . . . . . . . . . . . .2379.5 Exerccios do captulo 9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2419.6 Exerccios complementares do captulo 9. . . . . . . . . . . . . . . . . . . . .249

    10 Pacotes de Classes em Java 25210.1 Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25210.2 Criando pacotes de classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . .25210.3 Pacotes e modificadores de acesso. . . . . . . . . . . . . . . . . . . . . . . . .257

    10.3.1 O modificadordefault . . . . . . . . . . . . . . . . . . . . . . . . . . .25810.3.2 O modificadorprotected . . . . . . . . . . . . . . . . . . . . . . . . .25810.3.3 Sumrio dos modificadores de acesso e de suas regras. . . . . . . . . . 263

    10.4 Pacotes padro de Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26410.5 Exerccios do captulo 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264

    II Classes de Java para Manipulao de Dados 267

    11 Arrays em Java 26911.1 Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26911.2 Arrays unidimensionais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .269

    11.2.1 Arrays de instncias de classes. . . . . . . . . . . . . . . . . . . . . . .27711.3 Arrays multidimensionais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .281

    11.3.1 Arrays irregulares. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28411.4 Processando argumentos da linha de comando. . . . . . . . . . . . . . . . . . .28611.5 Exerccios do captulo 11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28811.6 Exerccios complementares do captulo 11. . . . . . . . . . . . . . . . . . . . .317

    12 Classes para Manipulao de Strings 32112.1 Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32112.2 A classeString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321

    12.2.1 Construindo strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . .32112.2.2 Mtodos bsicos da classeString . . . . . . . . . . . . . . . . . . . . .32212.2.3 Mtodos para comparao de Strings. . . . . . . . . . . . . . . . . . .32512.2.4 Mtodos para procura em Strings. . . . . . . . . . . . . . . . . . . . .33112.2.5 Mtodos para modificao de Strings. . . . . . . . . . . . . . . . . . .33412.2.6 Mtodos de converso da classeString . . . . . . . . . . . . . . . . . .335

    12.3 A classeStringBuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33512.3.1 Mtodos bsicos da classeStringBuffer . . . . . . . . . . . . . . . . .336

    12.4 A classeStringTokenizer . . . . . . . . . . . . . . . . . . . . . . . . . . . .34012.5 Exerccios do captulo 12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34512.6 Exerccios complementares do captulo 12. . . . . . . . . . . . . . . . . . . . .369

    13 Representao e Processamento Numrico 37113.1 Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37113.2 Valores numricos especiais. . . . . . . . . . . . . . . . . . . . . . . . . . . .37113.3 A classeMath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .372

    Rafael Santos

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Introduo Programao Orientada a Objetos usando Java

    http://www.bioinfo.univap.br/~POO

  • xii

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    SUMRIO

    13.3.1 Mtodos de comparao e arredondamento. . . . . . . . . . . . . . . .37213.3.2 Mtodos trigonomtricos. . . . . . . . . . . . . . . . . . . . . . . . . .37413.3.3 Mtodos exponenciais. . . . . . . . . . . . . . . . . . . . . . . . . . .37713.3.4 Mtodos para clculo de valores aleatrios. . . . . . . . . . . . . . . .381

    13.4 Representando valores com preciso arbitrria. . . . . . . . . . . . . . . . . . .38513.4.1 A classeBigInteger . . . . . . . . . . . . . . . . . . . . . . . . . . . .38613.4.2 A classeBigDecimal . . . . . . . . . . . . . . . . . . . . . . . . . . . .390

    13.5 Exerccios do captulo 13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39513.6 Exerccios do captulo 13 que envolvem clculo de funes. . . . . . . . . . . .40413.7 Exerccios complementares do captulo 13. . . . . . . . . . . . . . . . . . . . .414

    III Classes de Java para Programas com Interfaces Grficas 418

    IV Projetos Sugeridos 420

    V Apndices 422

    A Tipos de Dados em Java 424A.1 Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .424A.2 Tipos nativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .424

    A.2.1 O tipo nativoboolean . . . . . . . . . . . . . . . . . . . . . . . . . . .424A.2.2 O tipo nativochar . . . . . . . . . . . . . . . . . . . . . . . . . . . . .425A.2.3 O tipo nativobyte . . . . . . . . . . . . . . . . . . . . . . . . . . . . .428A.2.4 O tipo nativoshort . . . . . . . . . . . . . . . . . . . . . . . . . . . .429A.2.5 O tipo nativoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .431A.2.6 O tipo nativolong . . . . . . . . . . . . . . . . . . . . . . . . . . . . .432A.2.7 O tipo nativofloat . . . . . . . . . . . . . . . . . . . . . . . . . . . .433A.2.8 O tipo nativodouble . . . . . . . . . . . . . . . . . . . . . . . . . . . .436

    A.3 Classes que encapsulam valores nativos. . . . . . . . . . . . . . . . . . . . . .437A.3.1 A classeBoolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .438A.3.2 A classeCharacter . . . . . . . . . . . . . . . . . . . . . . . . . . . .440A.3.3 A classeByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .443A.3.4 A classeShort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .447A.3.5 A classeInteger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .450A.3.6 A classeLong . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .454A.3.7 A classeFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .458A.3.8 A classeDouble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .462

    B A ClasseKeyboard 467B.1 Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .467B.2 A classeKeyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .467

    B.2.1 Exemplos de uso mtodos da classeKeyboard . . . . . . . . . . . . . .476B.2.2 Sumrio dos mtodos da classeKeyboard . . . . . . . . . . . . . . . . .479

    B.3 Usando arquivos de respostas. . . . . . . . . . . . . . . . . . . . . . . . . . . .481

    Introduo Programao Orientada a Objetos usando Java

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Rafael Santos

    http://www.bioinfo.univap.br/~POO

  • LISTA DE FIGURAS

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    xiii

    Lista de Figuras

    1.1 O quadro-branco do Restaurante Caseiro Hipottico. . . . . . . . . . . . . . . . 41.2 O modeloLampada, seus dados e atributos. . . . . . . . . . . . . . . . . . . . . 81.3 O modeloContaBancariaSimplificada, seus dados e atributos. . . . . . . . 101.4 O modeloData, seus dados e atributos. . . . . . . . . . . . . . . . . . . . . . . 121.5 O modeloRegistroAcademico, seus dados e atributos. . . . . . . . . . . . . . 14

    2.1 Pontos, linhas e retngulos no espao cartesiano bidimensional.. . . . . . . . . . 54

    3.1 Referncias e instncias criadas na classeMaisDemoData . . . . . . . . . . . . . 583.2 Coordenadas no espao cartesiano de duas dimenses. . . . . . . . . . . . . . . 59

    5.1 Bancos com e sem fila nica. . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

    6.1 Interseco de dois retngulos.. . . . . . . . . . . . . . . . . . . . . . . . . . .125

    7.1 Chamadas recursivas ao mtodofibonacci . . . . . . . . . . . . . . . . . . . .140

    8.1 Esquema de herana envolvendo vrias classes. . . . . . . . . . . . . . . . . .1878.2 Herana com vrias classes e separao para mtodos polimrficos sobrecarregados203

    9.1 Duas maneiras de se modificar a escala de um retngulo. . . . . . . . . . . . . .251

    11.1 Exemplo de array irregular de duas dimenses.. . . . . . . . . . . . . . . . . .28411.2 Retngulo envolvente de uma srie de pontos. . . . . . . . . . . . . . . . . . .30511.3 Jogo da velha e respectiva matriz de deciso da prxima jogada. . . . . . . . . . 31211.4 Vizinhanas para clculo da heurstica de jogo do jogogo . . . . . . . . . . . . .31311.5 Primeiro passo do algoritmo da resoluo de um sistema de equaes lineares

    pelo mtodo de Gauss.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31511.6 Segundo passo do algoritmo da resoluo de um sistema de equaes lineares

    pelo mtodo de Gauss.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31611.7 Algumas iteraes do jogo da vida, mostradas como imagens. . . . . . . . . . . 31811.8 Valores numricos de algumas iteraes do jogo da vida. . . . . . . . . . . . . .318

    13.1 Rotao de um ponto em duas dimenses em volta da origem do sistema decoordenadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .375

    13.2 Representao grfica da aproximao da integral pela somatria das reas detrapzios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .378

    13.3 Ilustrao do algoritmo de biseco sucessiva para localizao de razes de umafuno. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .380

    13.4 Representao grfica do algoritmo de Buffon.. . . . . . . . . . . . . . . . . . .38213.5 Medidas de uma parbola.. . . . . . . . . . . . . . . . . . . . . . . . . . . . .39613.6 Movimento de um rob com orientao livre.. . . . . . . . . . . . . . . . . . .41613.7 O casco convexo de um conjunto de pontos.. . . . . . . . . . . . . . . . . . . .417

    Rafael Santos

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Introduo Programao Orientada a Objetos usando Java

    http://www.bioinfo.univap.br/~POO

  • xiv

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    LISTA DE LISTAGENS

    Lista de Listagens

    1.1 O modeloLampada, em pseudo-cdigo.. . . . . . . . . . . . . . . . . . . . . . 91.2 O modeloContaBancariaSimplificada, em pseudo-cdigo.. . . . . . . . . . 101.3 O modeloData, em pseudo-cdigo.. . . . . . . . . . . . . . . . . . . . . . . . 121.4 O modeloRegistroAcademico, em pseudo-cdigo.. . . . . . . . . . . . . . . 14

    2.1 Uma classe vazia em Java.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2 A classeRegistroAcademicoSimples. . . . . . . . . . . . . . . . . . . . . . . 282.3 A classeDataSemMetodos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.4 A classeDataSimples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .312.5 A classeTriangulo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342.6 A classeDemoDataSimples, que pode ser executada e que demonstra o uso de

    instncias da classeDataSimples. . . . . . . . . . . . . . . . . . . . . . . . . . 352.7 A classeData, que implementa uma poltica de ocultao de campos.. . . . . . 382.8 A classeDemoData, que pode ser executada e que demonstra o uso de instncias

    da classeData. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40

    3.1 A classeMaisDemoData, que demonstra mais usos de instncias da classeData. . 563.2 A classePonto2D, que encapsula um ponto no espao cartesiano de duas dimen-

    ses.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .593.3 A classeDemoPonto2D, que demonstra usos da classePonto2D. . . . . . . . . . 613.4 A classeDemoReferencias, que demonstra mais exemplos de referncias.. . . . 623.5 A classeDemoPonto2DK, que demonstra usos da classePonto2D, que sero ini-

    cializados com valores lidos do teclado.. . . . . . . . . . . . . . . . . . . . . . 64

    4.1 A classeRegistroAcademicoSemConstrutor, que encapsula alguns dados deum registro acadmico.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71

    4.2 A classeDemoRegistroAcademicoSemConstrutor, que demonstra o uso deinstncias da classeRegistroAcademicoSemConstrutor. . . . . . . . . . . . . 72

    4.3 A classeEventoAcademico, que representa um evento acadmico.. . . . . . . . 744.4 A classeDemoEventoAcademico, que demonstra o uso de instncias da classe

    EventoAcademico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .754.5 A classeRoboSimples0, que encapsula dados de um rob mvel simulado.. . . 774.6 A classeDemoRoboSimples0, que demonstra a criao e uso de instncias da

    classeRoboSimples0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .794.7 A classeRoboSimples, que encapsula dados de um rob mvel simulado (com

    melhorias). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .814.8 A classeDemoRoboSimplesComErros, que demonstra o uso de chamadas com

    argumentos incorretos construtores e mtodos da classeRoboSimples. . . . . . 83

    Introduo Programao Orientada a Objetos usando Java

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Rafael Santos

    http://www.bioinfo.univap.br/~POO

  • LISTA DE LISTAGENS

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    xv

    5.1 A classeSimuladorDeCaixaDeBanco0, que simula o mecanismo de atendimen-to de um caixa de banco.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93

    5.2 A classeDemoSimuladorDeCaixaDeBanco0, que demonstra usos de instnciasda classeSimuladorDeCaixaDeBanco0. . . . . . . . . . . . . . . . . . . . . . . 94

    5.3 A classeSimuladorDeCaixaDeBanco, que simula o mecanismo de atendimentode um caixa de banco (com melhorias).. . . . . . . . . . . . . . . . . . . . . . 95

    5.4 A classeConstantesMatematicas, que contm algumas constantes matemti-cas teis.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97

    5.5 A classeDemoConstantesMatematicas, que demonstra o uso dos campos est-ticos na classeConstantesMatematicas. . . . . . . . . . . . . . . . . . . . . . 97

    5.6 A classeConversaoDeUnidadesDeComprimento, que contm mtodos estticospara a converso de unidades.. . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

    5.7 A classeDemoConversaoDeUnidadesDeComprimento, que demonstra o uso dosmtodos estticos na classeConversaoDeUnidadesDeComprimento. . . . . . . 99

    5.8 A classeCalculoDePrecoDeTerreno, que calcula o preo de um terreno basea-do em sua rea e localizao, usando um mtodo esttico.. . . . . . . . . . . . .101

    5.9 A classeDemoChamadaAoMain, que mostra como mtodos estticos de outrasclasses podem ser chamados a partir do mtodomain de uma classe.. . . . . . . 102

    5.10 A classeDataComFabrica, que contm uma fbrica de instncias da prpria classe.1025.11 A classeDemoDataComFabrica, que demonstra usos da classeDataComFabrica. 103

    6.1 A classeComparavel, que encapsula um valor e contm mtodos para compar-lo com outros.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111

    6.2 A classeDemoComparavel, que demonstra usos de instncias e mtodos da classeComparavel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113

    6.3 A classeEntradaDeCinema, que calcula o preo de uma entrada de cinema.. . . 1156.4 A classeDataIf, com um mtodo que demonstra a instruoif em cascata.. . . 1166.5 A classeComparaSimples, que demonstra o uso do operador condicional?. . . . 1176.6 A classeDataSwitch, com um mtodo que demonstra a instruoswitch. . . . 118

    7.1 A classeDemoWhile, que demonstra vrios usos do laowhile. . . . . . . . . . 1297.2 A classeEscolhaComWhile, que encapsula um mecanismo de escolha de valores

    (usando um blocowhile). . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1307.3 A classeEscolhaComDoWhile, que encapsula um mecanismo de escolha de va-

    lores (usando um blocodo-while). . . . . . . . . . . . . . . . . . . . . . . . .1327.4 A classeJogoDeAdivinhacao, que implementa um jogo simples de adivinhao

    de nmeros.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1337.5 A classeDemoJogoDeAdivinhacao, que demonstra o uso de uma instncia da

    classeJogoDeAdivinhacao. . . . . . . . . . . . . . . . . . . . . . . . . . . . .1347.6 A classeDemoFor, que demonstra vrios usos do laofor. . . . . . . . . . . . .1357.7 A classeProbabilidadeBasica, que contm alguns mtodos estticos para cl-

    culos bsicos de probabilidades.. . . . . . . . . . . . . . . . . . . . . . . . . .1367.8 A classeDemoProbabilidadeBasica, que demonstra o uso dos mtodos estti-

    cos da classeProbabilidadeBasica. . . . . . . . . . . . . . . . . . . . . . . .1377.9 A classeSomatoriaRecursiva, que demonstra o clculo da somatria recursiva

    dos primeirosN nmeros inteiros. . . . . . . . . . . . . . . . . . . . . . . . . .1387.10 A classeFibonacciRecursiva, que demonstra o clculo da srie de Fibonacci

    recursivamente.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1397.11 A classeOtimizacaoRemocaoDeInvariantesEmLacos, que demonstra otimi-

    zao de cdigo eliminando partes invariantes de laos.. . . . . . . . . . . . . .141

    Rafael Santos

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Introduo Programao Orientada a Objetos usando Java

    http://www.bioinfo.univap.br/~POO

  • xvi

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    LISTA DE LISTAGENS

    7.12 Trecho de cdigo que demonstra o uso de variveis auxiliares de ponto flutuantepara evitar variveis de controle de ponto flutuante em laos.. . . . . . . . . . . 143

    7.13 A classeOtimizacaoDesenrolamentoDeLacos, que demonstra otimizao decdigo eliminando pequenos laos onde for possvel.. . . . . . . . . . . . . . .143

    7.14 A classeOtimizacaoRemocaoDeChamadasAMetodos, que demonstra otimiza-o de cdigo eliminando chamadas desnecessrias mtodos... . . . . . . . . . 145

    8.1 A classeDataHora, que reusa as classesData eHora atravs de delegao.. . . 1748.2 A classeRegistroAcademicoDeGraduacao, que reusa a classeData atravs de

    delegao.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1758.3 A classeDemoRegistroAcademicoDeGraduacao, que demonstra a criao e o

    uso de instncias da classeRegistroAcademicoDeGraduacao. . . . . . . . . . . 1778.4 A classePessoa0, que encapsula os dados de identificao de uma pessoa.. . . . 1788.5 A classeFuncionario0, que encapsula os dados bsicos de um funcionrio de

    uma empresa.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1798.6 A classeDemoFuncionario0, que demonstra o uso de uma instncia da classe

    Funcionario0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1808.7 A classePessoa, que encapsula os dados de identificao de uma pessoa.. . . . 1838.8 A classeFuncionario, que encapsula os dados bsicos de um funcionrio de

    uma empresa e herda da classePessoa. . . . . . . . . . . . . . . . . . . . . . .1838.9 A classeChefeDeDepartamento, que encapsula os dados bsicos de um chefe

    de um departamento de uma empresa e herda da classeFuncionario. . . . . . . 1868.10 A classeAutomovel, que encapsula os dados de um automvel simples venda.. 1908.11 A classeAutomovelBasico, que encapsula os dados de um automvel bsico

    venda, e que herda da classeAutomovel. . . . . . . . . . . . . . . . . . . . . . .1928.12 A classeAutomovelDeLuxo, que encapsula os dados de um automvel de luxo

    venda, e que herda da classeAutomovelBasico. . . . . . . . . . . . . . . . . .1948.13 A classeDemoAutomoveis, que demonstra instncias das classesAutomovel,

    AutomovelBasico eAutomovelDeLuxo. . . . . . . . . . . . . . . . . . . . . .1968.14 A classeConcessionariaDeAutomoveis, que demonstra polimorfismo com ins-

    tncias das classes herdeiras da classeAutomovel. . . . . . . . . . . . . . . . .1998.15 A classeEmprestimoBancario, que demonstra polimorfismo com instncias das

    classes herdeiras da classePessoa. . . . . . . . . . . . . . . . . . . . . . . . . .2008.16 A classeEmprestimoBancarioComCast, que demonstra polimorfismo ecastde

    instncias de classes.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203

    9.1 A classe abstrataRoboAbstrato, que define que mtodos e campos mnimosuma classe que implementa um rob deve conter.. . . . . . . . . . . . . . . . .217

    9.2 A classeRoboSimples, que herda da classeRoboAbstrato e que representa umrob de comportamento simples.. . . . . . . . . . . . . . . . . . . . . . . . . .220

    9.3 A classeRoboABateria, que estende a classeRoboAbstrato e representa umrob que consome energia com seus movimentos.. . . . . . . . . . . . . . . . .221

    9.4 A classeDemoRobos, que demonstra instncias e usos dos mtodos das classesRoboSimples eRoboABateria. . . . . . . . . . . . . . . . . . . . . . . . . . .222

    9.5 A interfaceObjetoGeometrico, que representa um objeto geomtrico bidimen-sional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224

    9.6 A classeCirculo, que implementa a interfaceObjetoGeometrico e representaum crculo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225

    9.7 A classeRetangulo, que implementa a interfaceObjetoGeometrico e repre-senta um retngulo.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .226

    Introduo Programao Orientada a Objetos usando Java

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Rafael Santos

    http://www.bioinfo.univap.br/~POO

  • LISTA DE LISTAGENS

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    xvii

    9.8 A classeDemoObjetosGeometricos, que demonstra instncias de classes queimplementam a interfaceObjetoGeometrico. . . . . . . . . . . . . . . . . . . .227

    9.9 A classeDemoObjetosGeometricosEPolimorfismo, que demonstra caracters-ticas de polimorfismo com interfaces e classes que as implementam.. . . . . . . 229

    9.10 A interfaceEscalavel, que define que mtodos um objeto que seja escalvel(possa ter seu tamanho modificvel).. . . . . . . . . . . . . . . . . . . . . . . .230

    9.11 A classeCirculoEscalavel, que implementa as interfacesObjetoGeometricoeEscalavel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .230

    9.12 A classeDemoCirculoEscalavel, que demonstra o uso dos mtodos da classeCirculoEscalavel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232

    9.13 A interfaceItemDeBiblioteca, que declara os campos e mtodos que qualqueritem em uma biblioteca deve ter.. . . . . . . . . . . . . . . . . . . . . . . . . .233

    9.14 A classeLivro, que encapsula os dados de um livro.. . . . . . . . . . . . . . .2349.15 A classeLivroDeBiblioteca, que encapsula os dados de um livro de uma bi-

    blioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2359.16 A classeDemoLivroDeBiblioteca, que demonstra o uso de instncias da classe

    LivroDeBiblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2379.17 A interfaceItemRaroDeBiblioteca, que declara os campos e mtodos que itens

    raros de uma biblioteca devem ter.. . . . . . . . . . . . . . . . . . . . . . . . .2379.18 A classeMapa, que encapsula os dados de um mapa.. . . . . . . . . . . . . . . .2389.19 A classeMapaDeBiblioteca, que encapsula os dados de um mapa de uma bibli-

    oteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239

    10.1 A classeData, que encapsula os dados de uma data qualquer e que faz parte dopacoteDataHora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253

    10.2 A classeHora, que encapsula os dados de uma hora qualquer e que faz parte dopacoteDataHora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .254

    10.3 A classeDataHora, que encapsula os dados de uma data e uma hora simultane-amente e que faz parte do pacoteDataHora. . . . . . . . . . . . . . . . . . . . .255

    10.4 A classeDemoDataHora, que demonstra usos de instncias das classes que fazemparte do pacoteDataHora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256

    10.5 A classePessoa, que encapsula os dados de identificao de uma pessoa e quefaz parte do pacotePessoal. . . . . . . . . . . . . . . . . . . . . . . . . . . . .258

    10.6 A classeFuncionario, que encapsula os dados bsicos de um funcionrio deuma empresa e que faz parte do pacotePessoal. . . . . . . . . . . . . . . . . .259

    10.7 A classeChefeDeDepartamento, que encapsula os dados bsicos de um chefede departamento de uma empresa e que faz parte do pacotePessoal. . . . . . . . 261

    10.8 A classeDemoPessoal, que demonstra usos de instncias das classes que fazemparte do pacotePessoal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262

    11.1 Trecho de cdigo que demonstra a declarao de arrays em Java.. . . . . . . . . 27011.2 Trecho de cdigo que demonstra a declarao e inicializao de arrays em Java.. 27011.3 A classeCalculoPiQuadradoSobre6, que calcula o valor de pi quadrado sobre

    seis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27211.4 A classeArrayDeFloats, que encapsula um array de valores do tipofloat. . . . 27311.5 A classeDemoArrayDeFloats, que demonstra o uso de instncias da classe

    ArrayDeFloats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27611.6 A classeEquipe, que demonstra o uso de um array de instncias da classe

    Funcionario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .277

    Rafael Santos

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Introduo Programao Orientada a Objetos usando Java

    http://www.bioinfo.univap.br/~POO

  • xviii

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    LISTA DE LISTAGENS

    11.7 A classeArrayDeObjetosGeometricos, que encapsula um array de instnciasde qualquer classe que implemente a interfaceObjetosGeometricos. . . . . . . 278

    11.8 A classeDemoArrayDeObjetosGeometricos, que demonstra o uso de instnciasda classeArrayDeObjetosGeometricos. . . . . . . . . . . . . . . . . . . . . .280

    11.9 A classeMatrizDeDoubles, que encapsula um array bidimensional (matriz) devalores do tipodouble. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .281

    11.10 A classeJogoDeDamas, que encapsula um tabuleiro de jogo de damas.. . . . . . 28311.11 A classeTrianguloDePascal, que demonstra como arrays multidimensionais

    podem ser irregulares.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28511.12 A classeCalculadoraDeLinhaDeComando, que implementa uma calculadora

    simples usando argumentos passados pela linha de comando.. . . . . . . . . . . 287

    12.1 A classeJogoDaForca, que encapsula os mecanismos de um jogo da forca simples.32312.2 A classeDemoJogoDaForca, que demonstra o uso da classeJogoDaForca. . . . 32512.3 A classeLogin, que encapsula um nome de usurio e senha e um mecanismo

    para verificar este nome e senha.. . . . . . . . . . . . . . . . . . . . . . . . . .32612.4 A classeDemoLogin, que demonstra o uso de uma instncia da classeLogin. . . 32712.5 A classeURL, que representa um URL (Uniform Resource Locator), que repre-

    senta a localizao de um recurso na Internet.. . . . . . . . . . . . . . . . . . .32912.6 A classeDemoURL, que demonstra o uso de instncias da classeURL. . . . . . . . 33012.7 A classeEpocaDeFrutas, que permite a consulta a um banco de dados primitivo

    sobre frutas e suas pocas.. . . . . . . . . . . . . . . . . . . . . . . . . . . . .33212.8 A classeStringUtils, que contm alguns mtodos que processam strings que

    no existem na classeString. . . . . . . . . . . . . . . . . . . . . . . . . . . .33712.9 A classeDataHora, cujo construtor recebe os campos como uma string formatada.34112.10 A classeCasamentoDePadroes, que implementa um mecanismo simples de ca-

    samento de padres.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34312.11 A classeDemoCasamentoDePadroes, que mostra exemplos de uso da classe

    CasamentoDePadroes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .345

    13.1 A classePonto2D, que encapsula um ponto no espao cartesiano de duas dimen-ses (permitindo a rotao do ponto).. . . . . . . . . . . . . . . . . . . . . . . .375

    13.2 A classeDemoPonto2D, que demonstra a criao de instncia da classePonto2De da rotao deste ponto.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .376

    13.3 A classeRegraDoTrapezio, que calcula o valor da integral definida de umafuno usando a regra do trapzio.. . . . . . . . . . . . . . . . . . . . . . . . .378

    13.4 A classeRaizDeFuncao, que calcula o zero de uma funo qualquer usando omtodo de biseco sucessiva.. . . . . . . . . . . . . . . . . . . . . . . . . . .379

    13.5 A classeAgulha, que representa uma agulha de comprimento fixo.. . . . . . . . 38213.6 A classeLinhaVerticalInfinita, que representa uma linha vertical infinita.. . 38413.7 A classeBuffon, que simula o algoritmo de Buffon para clculo do valor de pi.. 38513.8 A classeBigFatorial, que demonstra o uso da classeBigInteger para o cl-

    culo de fatoriais.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38913.9 A classeBigMath, que contm um mtodo esttico que calcula a raiz quadrada

    de um nmero usando aproximaes, recurso e instncias da classeBigDecimal. 39413.10 A classeDemoBigMath, que demonstra o uso do mtodoraizQuadrada da classe

    BigMath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .394

    A.1 A classeDemoTipoBoolean, que demonstra usos do tipo nativoboolean. . . . . 424

    Introduo Programao Orientada a Objetos usando Java

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Rafael Santos

    http://www.bioinfo.univap.br/~POO

  • LISTA DE LISTAGENS

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    xix

    A.2 A classeDemoTipoBooleanComErros, que demonstra usos incorretos do tiponativoboolean. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .425

    A.3 A classeDemoTipoChar, que demonstra usos do tipo nativochar. . . . . . . . . 426A.4 A classeDemoTipoCharComErros, que demonstra usos incorretos do tipo nativo

    char. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .427A.5 A classeDemoTipoByte, que demonstra usos do tipo nativobyte. . . . . . . . . 428A.6 A classeDemoTipoByteComErros, que demonstra usos incorretos do tipo nativo

    byte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .428A.7 A classeDemoTipoShort, que demonstra usos do tipo nativoshort. . . . . . . . 430A.8 A classeDemoTipoShortComErros, que demonstra usos incorretos do tipo nati-

    vo short. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .430A.9 A classeDemoTipoInt, que demonstra usos do tipo nativoint. . . . . . . . . . . 431A.10 A classeDemoTipoIntComErros, que demonstra usos incorretos do tipo nativo

    int. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .431A.11 A classeDemoTipoLong, que demonstra usos do tipo nativolong. . . . . . . . . 432A.12 A classeDemoTipoLongComErros, que demonstra usos incorretos do tipo nativo

    long. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .433A.13 A classeDemoTipoFloat, que demonstra usos do tipo nativofloat. . . . . . . . 434A.14 A classeDemoTipoFloatComErros, que demonstra usos incorretos do tipo nati-

    vo float. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .435A.15 A classeDemoTipoDouble, que demonstra usos do tipo nativodouble. . . . . . 436A.16 A classeDemoTipoDoubleComErros, que demonstra usos incorretos do tipo na-

    tivo double. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .437A.17 A classeDemoClasseBoolean, que demonstra usos da classeBoolean. . . . . . 438A.18 A classeDemoClasseBooleanComErros, que demonstra usos incorretos da clas-

    seBoolean. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .439A.19 A classeDemoClasseCharacter, que demonstra usos da classeCharacter. . . . 441A.20 A classeDemoClasseCharacterComErros, que demonstra usos incorretos da

    classeCharacter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .442A.21 A classeDemoClasseByte, que demonstra usos da classeByte. . . . . . . . . . 444A.22 A classeDemoClasseByteComErros, que demonstra usos incorretos da classe

    Byte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .445A.23 A classeDemoClasseShort, que demonstra usos da classeShort. . . . . . . . . 448A.24 A classeDemoClasseShortComErros, que demonstra usos incorretos da classe

    Short. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .449A.25 A classeDemoClasseInteger, que demonstra usos da classeInteger. . . . . . 452A.26 A classeDemoClasseIntegerComErros, que demonstra usos incorretos da clas-

    seInteger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .453A.27 A classeDemoClasseLong, que demonstra usos da classeLong. . . . . . . . . . 456A.28 A classeDemoClasseLongComErros, que demonstra usos incorretos da classe

    Long. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .457A.29 A classeDemoClasseFloat, que demonstra usos da classeFloat. . . . . . . . . 460A.30 A classeDemoClasseFloatComErros, que demonstra usos incorretos da classe

    Float. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .461A.31 A classeDemoClasseDouble, que demonstra usos da classeDouble. . . . . . . . 464A.32 A classeDemoClasseDoubleComErros, que demonstra usos incorretos da classe

    Double. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .465

    B.1 A classeKeyboard, que permite entrada simples via teclado.. . . . . . . . . . . 467B.2 A classeDemoKeyboard, que demonstra o uso dos mtodos na classeKeyboard. . 476

    Rafael Santos

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Introduo Programao Orientada a Objetos usando Java

    http://www.bioinfo.univap.br/~POO

  • xx

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    LISTA DE LISTAGENS

    B.3 A classeDataKeyboard, cujo construtor l os valores dos campos do teclado.. . 478B.4 A classeDemoDataKeyboard, que demonstra instncias da classeDataKeyboard. 478B.5 Um exemplo de arquivo de respostas para uso com a classeDemoDataKeyboard. 481

    Introduo Programao Orientada a Objetos usando Java

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Rafael Santos

    http://www.bioinfo.univap.br/~POO

  • LISTA DE TABELAS

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    xxi

    Lista de Tabelas

    2.1 Palavras reservadas em Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2 Tipos bsicos de Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28

    10.1 Efeito dos modificadores de acesso. . . . . . . . . . . . . . . . . . . . . . . . .263

    A.1 Alguns caracteres de controle. . . . . . . . . . . . . . . . . . . . . . . . . . . .427

    Rafael Santos

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Introduo Programao Orientada a Objetos usando Java

    http://www.bioinfo.univap.br/~POO

  • Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    1

    Parte I

    Introduo Programao Orientada aObjetos

    Rafael Santos

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Introduo Programao Orientada a Objetos usando Java

    http://www.bioinfo.univap.br/~POO

  • Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    3

    Captulo 1

    Introduo Programao Orientada aObjetos

    1.1 O que um programa de computador ?

    Computadores so ferramentas de uso comum hoje em dia - praticamente qualquer atividadehumana se beneficia ou pode se beneficiar do uso de computadores. Computadores podem auto-matizar tarefas como armazenar e manipular valores em contas bancrias ou cadastros de alunos,efetuar clculos complexos ou repetidos com rapidez e confiabilidade, armazenar e procurar in-formaes em grandes volumes de dados e tambm nos entreter com jogos e informaes emmultimdia.

    O que faz um computador ser capaz de efetuar estas tarefas so seussoftwaresou seusprogra- programasmas. Os programas que um computador pode executar dizem a ele o que deve ser feito com seuhardware(seus componentes e perifricos): ler de e escrever em arquivos em um disco, exibirinformaes em um monitor, efetuar clculos usando o processador, ler a posio do mouse oucaracteres do teclado, etc.

    Programas so conjuntos de comandos e regras que um programador deve conhecer para po-linguagens deprogramaoder manipular os recursos de um computador. Programas so escritos usandolinguagens de

    programao, que definem regras especficas e bem determinadas e um conjunto de operado-res e comandos que podem ser usados. O contedo dos programas, escrito por programadoresde forma que outros programadores possam ler e entend-los tambm chamado decdigoou cdigocdigo-fonte. Para que o cdigo seja executado por um computador, ele deve ser traduzido dalinguagem de programao (alto nvel) para uma linguagem que possa ser compreendida pelocompiladorcomputador atravs de umcompilador.

    Programas processamdados: valores em uma conta bancria, caracteres entrados por um tecla-dadosdo, pontos em uma imagem, valores numricos para clculos. O paradigma de ProgramaoOrientada a Objetos considera que os dados a serem processados e os mecanismos de processa-mento destes dados devem ser considerados em conjunto. A criao de modelos que representamconjuntamente dados e operaes nestes dados, descrita na prxima seo.

    1.2 O que so modelos ?

    Modelosso representaes simplificadas de objetos, pessoas, itens, tarefas, processos, concei-modelostos, idias, etc., usados comumente por pessoas no seu dia-a-dia, independente do uso de com-

    Rafael Santos

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Introduo Programao Orientada a Objetos usando Java

    http://www.bioinfo.univap.br/~POO

  • 4

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    CAPTULO 1. INTRODUO PROGRAMAO ORIENTADA A OBJETOS

    putadores.

    Para exemplificar o uso de modelos em tarefas comuns, consideremos o Restaurante CaseiroHipottico, que serve refeies por quilo, e onde o gerente, que tambm a pessoa que fica nabalana e no caixa, anota os pesos dos pratos dos clientes e os pedidos que os garons trazem emum quadro-branco. A figura1.1mostra o quadro-branco do Restaurante Caseiro Hipottico.

    Restaurante Caseiro HipotticoMesa 1

    refrig.600mL.refrig.2 L.

    refrig.lata

    kg refeio

    cerveja

    sobremesa

    Mesa 2

    refrig.600mL.refrig.2 L.

    refrig.lata

    kg refeio

    cerveja

    sobremesa

    Mesa 3

    refrig.600mL.refrig.2 L.

    refrig.lata

    kg refeio

    cerveja

    sobremesa

    Mesa 4

    refrig.600mL.refrig.2 L.

    refrig.lata

    kg refeio

    cerveja

    sobremesa

    Mesa 5

    refrig.600mL.refrig.2 L.

    refrig.lata

    kg refeio

    cerveja

    sobremesa

    Mesa 6

    refrig.600mL.refrig.2 L.

    refrig.lata

    kg refeio

    cerveja

    sobremesa

    Figura 1.1: O quadro-branco do Restaurante Caseiro Hipottico

    O quadro-branco mostrado na figura1.1 contm espaos para anotar o peso dos pratos e os pe-didos de cada mesa do restaurante. Quando os itens dos pedidos so servidos, o gerente anota,ao lado do item no quadro-branco, o nmero de itens ou peso do prato. Quando o cliente pede aconta, o gerente se refere ao quadro-branco para calcular o valor devido. O quadro-branco ummodelodo restaurante, representando de forma simplificada as informaes do restaurante queso necessrias para a contabilizao dos pedidos feitos para os garons e gerente.1

    O modelo do restaurante representa certosdadosou informaes, que no caso so os itens edados emmodelos quantidade dos pedidos por mesa. Como o modelo uma simplificao do mundo real, os da-

    dos contidos no modelo so somente os relevantes abstrao do mundo real sendo feita. Porexemplo, para a anotao dos pedidos e clculo da conta dos clientes do restaurante, alguns da-dos sobre o restaurante como endereo e data da inaugurao so irrelevantes, e no devem serrepresentadas pelo modelo em questo.

    Um modelo comumente contmoperaesou procedimentos associados a ele. Estas operaesoperaes emmodelos so listas de comandos que processaro os dados contidos no prprio modelo (e em alguns casos,

    dados adicionais). Algumas operaes que podemos fazer no modelo do Restaurante Caseiro Hi-pottico seriam a incluso de um pedido para uma mesa, a modificao dostatusde um pedidode uma mesa (isto , se o pedido foi servido ou no), o encerramento dos pedidos dos clientes deuma mesa e apresentao da conta para os clientes.

    Tambm possvel a criao de modelos que contenham somente dados ou somente operaes.Modelos que contenham somente dados so pouco usados: normalmente os valores destes dados

    1O modelo, neste caso, bem simples, mas representa adequadamente o tipo de artigo vendido no Restaurante Ca-seiro Hipottico e seu nmero de mesas. Modelos ou quadros-brancos similares poderiam ser criados para restaurantesbem mais sofisticados ou com mais mesas.

    Introduo Programao Orientada a Objetos usando Java

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Rafael Santos

    http://www.bioinfo.univap.br/~POO

  • 1.2. O QUE SO MODELOS ?

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    5

    variam de uso para uso do modelo (ex. cada mesa do modelo do Restaurante Caseiro Hipotticopode ter quantidades de itens pedidos diferentes), portanto operaes que modificam os valoresdos dados sero necessrias. Quando criamos modelos para representao de dados interessan-te e til adicionar algumas operaes para manipulao destes dados.

    Modelos que contenham somente operaes podem ser consideradosbibliotecas de operaes- bibliotecas deoperaesexemplos so grupos de funes matemticas e de processamento de dados que no precisem ser

    armazenados. A criao e uso de bibliotecas de operaes em Java ser vista no captulo5.

    Para manter a conveno de nomes que ser usada quando transformarmos os modelos em clas-ses e programas em Java, de agora em diante, nomes de modelos, dados de modelos e operaessero apresentados em fonteproporcional, sendo que dados e operaes sero com mins-culas alternadas de maisculas e modelos tero a primeira letra maiscula. Considerando oexemplo mostrado, o modelo poderia ser chamadoRestauranteCaseiro, e poderia ter os da-dosquantasGramas equantidadeDoItem, e as operaesadicionaItem eapresentaConta.Nomes de modelos (que sero escritos como classes)no devem conter acentos, que podem serusados livremente em nomes de dados e operaes.

    Modelos podem conter sub-modelos e ser parte de outros modelos: o quadro-branco que repre-modelosdentro demodelos

    senta um restaurante pode ser composto de diversos quadrados no quadro que representam mesasou comandas, cada uma contendo os dados relativos aos pedidos daquela mesa e aes corres-pondentes. O modeloRestauranteCaseiro poderia ento conter vrios exemplares do modeloMesaDoRestaurante que representariam diferentes mesas do restaurante. Similarmente, se ummodeloData for criado para representar em conjunto dados sobre um dia, ms e ano, podemosusar este modelo dentro de outros modelos que usem uma data para representar, por exemplo,um nascimento ou evento.

    A simplificao inerente aos modelos em muitos casos, necessria: dependendo do contexto,algumas informaes devem ser ocultas ou ignoradas. Por exemplo, a representao das infor-maes sobre uma pessoa pode ser feita de maneira diferente dependendo do contexto, como nostrs exemplos mostrados abaixo:

    Pessoa como Empregado de Empresa: Para a representao uma pessoa como sendoempregado de uma empresa, para fins de processamento de folha de pagamento, serianecessria a representao donome, cargo, salrio e horasExtrasTrabalhadas destapessoa, dentre outros dados. Este modelo poderia conter as operaescalculaSalrio eaumentaSalrio.

    Pessoa como Paciente de uma Clnica Mdica: Para um modelo de paciente seria neces-srio representar onome, osexo, aidade, aaltura, opeso e ohistricoDeConsultasdo paciente. Este modelo poderia conter as operaesverificaObesidade, que usaria osdadossexo, altura epeso para verificar se aquela pessoa est com o peso ideal para suacategoria eadicionaInformaoAoHistrico, que adicionaria informaes recentes aohistrico do paciente.

    Pessoa como Contato Comercial: Para este modelo, seria necessrio representar onome,o telefone, o cargo e empresa da pessoa em questo. Algumas operaes teis pa-ra este modelo seriammostraTelefone que retornaria o telefone de uma certa pessoa etrabalhaEmEmpresa que informaria se a pessoa trabalha em uma certa empresa.

    As trs maneiras de representarmos os dados de uma pessoa e operaes nestes dados (ou os trssupermodelomodelos de representao de pessoas) so dependentes de contexto: alguns dados e operaes

    Rafael Santos

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Introduo Programao Orientada a Objetos usando Java

    http://www.bioinfo.univap.br/~POO

  • 6

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    CAPTULO 1. INTRODUO PROGRAMAO ORIENTADA A OBJETOS

    que podem ser teis para um modelo de representao de pessoas podem ser irrelevantes paraoutro - por exemplo, no faria sentido representar osalrio de uma pessoa para fins de regis-tros no banco de dados de pacientes de uma clnica ou a operaoverificaObesidade de umapessoa que no seja paciente de uma clnica mdica. Por esta razo, e apesar dos trs exemplosacima representarem pessoas de forma genrica, difcil, se no impossvel, elaborar umsupermodelo capaz de representartodosos dados e operaes relativos a uma pessoa, independentedo contexto, e usar este modelo no lugar de todos os outros mais especializados ou dependentesde contexto.

    Modelos podem ser reutilizados para representar diferentes objetos, pessoas ou itens: o mesmomodeloPacienteDeClinica poderia ser utilizado para representar cada um dos pacientes deuma clnica - os pacientes podem ser representados pelo mesmo modelo, mas os dados individu-ais de cada um podem ser diferentes, criando a necessidade de diversos exemplos de cada modelo- assimJoo, Pedro e Maria seriam exemplos do modeloPaciente, cada um contendo dadosde um paciente, provavelmente diferentes entre si. Vemos que no necessria a criao de ummodelo para cada item, pessoa ou objeto do mundo real.

    A criao e uso de modelos uma tarefa natural e a extenso desta abordagem programaodeu origem ao paradigmaProgramao Orientada a Objetos.

    1.3 O que Programao Orientada a Objetos ?

    Programao Orientada a Objetosou, abreviadamente,POO, um paradigma de programaoO que POOde computadores onde se usam classes e objetos, criados a partir dos modelos descritos anterio-mente, para representar e processar dados usando programas de computadores.

    Em programao orientada a objetos, os dados pertencentes aos modelos so representados portipos de dados nativos, ou seja, que so caractersticos da linguagem de programao. Dadostambm podem ser representados por modelos j existentes na linguagem ou por outros modeloscriados pelo programador. As principais diferenas entre os modelos descritos na seo1.2e asclasses e objetos criados em programas orientados a objetos so devidas limitao nas tarefasque um computador pode executar e s limitaes da prpria linguagem de programao.

    Um exemplo destas diferenas pode ser analisado considerando o modeloPacienteDeClinica,descrito anteriormente, e a sua operaoadicionaInformaoAoHistrico. Se este modelofosse usado manualmente, ou seja, sem o uso de computadores, esta operao se resumiria aescrever em uma ficha prpria as informaes adicionais, que provavelmente estaro juntas sinformaes prvias. A implementao deste modelo e operao em programas de computadorprovavelmente ter que ser feita usando arquivos para armazenar as informaes, e provavelmen-te existiro restries quanto ao tipo e tamanho das informaes a serem adicionadas - possivel-mente somente informaes textuais podero ser armazenadas, mas no grficos, ao menos nasaplicaes mais simples.

    Mesmo com a limitao inerente aos modelos que devem ser implementados em um computador,as vantagens de se usar computadores compensam as limitaes. Ainda considerando o modeloPacienteDeClinica, se o dadohistricoDeConsultas for estruturado adequadamente, seriasimples criar uma operaolistaSintomas que listaria todos os sintomas que aquele pacientej teve. Similarmente, seria simples escrever um programa que, considerando todos os pacientesda clnica, listasse os que tem potencial para hipertenso verificando, para cada paciente, os seusdadosidade, peso e histricoDeConsultas - esta tarefa seria complicada e demorada se os

    Introduo Programao Orientada a Objetos usando Java

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Rafael Santos

    http://www.bioinfo.univap.br/~POO

  • 1.4. ENCAPSULAMENTO

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    7

    modelos fossem fichas em papel.

    A modelagem dos dados e operaes nestes dados em um programa de computador permite oprocessamento de dados de forma coesa, rpida e menos suscetvel a erros. Por outro lado, maisateno tem que ser dada aodesigndos modelos que sero implementados, em especial s regrase limitaes dos computadores e linguagens de programao. Os detalhes de implementao demodelos em Java sero mostrados no captulo2.

    1.4 Encapsulamento

    Vimos que modelos podem conter dados para representao das informaes ou dados relativosao que se deseja modelar e operaes para manipulao destes dados. Em muitos casos serdesejvel que os dados no possam ser acessados ou usados diretamente, mas somente atravsdas operaes cuja especialidade ser a manipulao destes dados.

    Como analogia, vamos considerar uma cmera fotogrfica automtica. Quando um usurio dacmera clica o boto para tirar uma foto, diversos mecanismos entram em ao que fazem comque a velocidade e abertura apropriada do obturador sejam selecionadas, levando em conta otipo do filme e as condies de iluminao. Para o usurio, os detalhes de como os dados comovelocidade, abertura, tipo de filme e iluminao so processados so irrelevantes, o que interessaa ele que a foto seja tirada.

    O mecanismo de seleo da cmeraocultaos dados (iluminao, tipo de filme, abertura, veloci-ocultao dedadosdade, etc.) e a maneira com que estes so processados, no deixando que o usurio modifique-os

    vontade. A cmera deixa para o usurio somente uma maneira simplificada de efetuar os cl-culos (mais exatamente, pedir cmera que calcule os dados) e tirar a foto de acordo com osresultados obtidos: o boto que aciona o obturador.

    Em muitos modelos teremos vantagens em usar um mecanismo de ocultao de dados: sempreque existir uma maneira de deixar ao modelo a capacidade e responsabilidade pela modificaode um de seus dados, devemos criar uma operao para faz-lo. Como um exemplo, conside-remos a classePacienteDeClnica. Para quem estiver usando este modelo, ser mais prticodeixar que a operaoadicionaInformaoAoHistrico esconda os detalhes de como umainformao ser adicionada ao histrico de um paciente. Similarmente, para um modelo que re-presente uma conta bancria, a operaoretira poderia ser encarregada de verificar se o saldopermite a retirada de um valor especificado, sem permitir acesso direto ao valor do saldo.

    A capacidade de ocultar dados dentro de modelos, permitindo que somente operaes especia-encapsulamentolizadas ou dedicadas manipulem estes dados ocultos chama-seencapsulamento, e um dos be-nefcios mais palpveis de programao orientada a objetos. Modelos que encapsulam os dadospossibilitam a criao de programas com menos erros e mais clareza. Encapsulamento de dadosem modelos deve ser um dos principais objetivos do programador que use linguagens orientadasa objetos.

    1.5 Mais exemplos de modelos

    Nesta seo veremos mais alguns exemplos de modelos para fixao dos conceitos. Os modelossero descritos usando pseudo-cdigo em portugus. O pseudo-cdigo somente uma ferramentaprtica para expresso dos modelos de forma concisa e formal mas sem entrar nos detalhes de

    Rafael Santos

    Verso182 compilada em30 de julho de 2001. Visite o site de apoio emhttp://www.bioinfo.univap.br/POO.

    Introduo Programao Orientada a Objetos usando Java

    http://www.bioinfo.univap.br/~POO

  • 8

    Estaaa verso do livro est incom

    pleta, e foi disponibilizada para os alunos da Univap para acom

    panhamento da disciplina.

    Cpia Reproduo,

    distribuio

    e venda

    proibidas

    CAPTULO 1. INTRODUO PROGRAMAO ORIENTADA A OBJETOS

    implementao de classes em Java2.

    1.5.1 Exemplo 1: Uma lmpada incandescente

    Consideremos uma lmpada incandescente comum e um modelo para represent-la. Esta lmpa-da tem um dado bsico, que seu estado (ligada ou desligada). As operaes que podemosefetuar nesta lmpada tambm so simples: podemos lig-la ou deslig-la. O ato de ligar a lm-pada equivale a modificar seu estado para ligada, enquanto que desligar a lmpada significamodificar seu estado para desligada. Para saber se uma lmpada est ligada ou desligada pode-mos pedir que uma operao mostre o valor do estado. Nota-se neste exemplo que a modelagemde entidades do mundo real pode ser muito diferente da que vai ser usada em programas de com-putador: no mundo real, para saber se a lmpada est ligada ou no basta observ-la, enquantoque na modelagem para uso em um computador precisamos de uma operao para saber se almpada est ou no ligada.

    A figura 1.2mostra o modeloLampada usando uma variante do diagrama de classes da Lingua-UMLgem Unificada de Modelagem (Unified Modeling Language, UML). Neste diagrama, o retngulosuperior mostra o nome do modelo ou classe, o retngulo central mostra que dados do modelo oucampos da classe podem ser manipulados e o retngulo inferior mostra que operaes do modeloou mtodos da classe podem ser usados. Os nomes das operaes ou mtodos so seguidos deparnteses, e quando argumentos ou parmetros devem ser especificados para as operaes, elesso listados dentro dos parnteses.3 Para facilitar a transio entre estes diagramas de modelos,as listagens de modelos e as classes que sero desenvolvidas a partir destes, a conveno de no-mes de modelos, dados e operaes ser usada.

    Lampada estadoDaLmpada

    acende()

    mostraEstado()

    apaga()

    Figura 1.2: O modeloLampada, seus dados e atributos

    importante ressaltar que os nomes dos dados e operaes devem descrever a sua funo, mes-mo que com isto nomes longos apaream nos diagramas e listagens, como no exemplo mostradona figura1.2.

    Na figura1.2podemos ver que alguns dados de lmpadas como consumo em watts, cor e tama-nho foram deixados de lado. A deciso de que dados e operaes devem pertencer a um modelodependem da abrangncia e escopo deste modelo: se as lmpadas a serem representadas poreste modelo fossem itens venda em um supermercado, certamente os dadosestado e opera-esacende, apaga e mostraEstado no seriam usados. Se o modelo da lmpada fosse usadoem uma aplicao de controle de qualidade, dados comonm