Sei sulla pagina 1di 22

i

i
POO-2ED 2013/8/5 9:15 page i #1

i
i

i
POO-2ED 2013/8/5 9:15 page ii #2

i
i

i
POO-2ED 2013/8/5 9:15 page iii #3

i
i

i
POO-2ED 2013/8/5 9:15 page iv #4

2013, Elsevier Editora Ltda.


Todos os direitos reservados e protegidos pela Lei n 9.610, de 19/02/1998.
Nenhuma parte deste livro, sem autorizao prvia por escrito da editora, poder ser
reproduzida ou transmitida sejam quais forem os meios empregados: eletrnicos, mecnicos,
fotogrficos, gravao ou quaisquer outros.
Reviso: Hugo de Lima Correa
Editorao Eletrnica: Rafael Santos
Elsevier Editora Ltda.
Conhecimento sem Fronteiras
Rua Sete de Setembro, 111 16 andar
20050-006 Centro Rio de Janeiro RJ Brasil
Rua Quintana, 753 8 andar
04569-011 Brooklin So Paulo SP
Servio de Atendimento ao Cliente
0800-0265340
sac@elsevier.com.br
ISBN 978-85-352-7433-2
ISBN e-book: 978-85-352-7434-9
Nota: Muito zelo e tcnica foram empregados na edio desta obra. No entanto, podem
ocorrer erros de digitao, impresso ou dvida conceitual. Em qualquer das hipteses,
solicitamos a comunicao ao nosso Servio de Atendimento ao Cliente, para que possamos
esclarecer ou encaminhar a questo.
Nem a editora nem o autor assumem qualquer responsabilidade por eventuais danos ou
perdas a pessoas ou bens, originados do uso desta publicao.
CIP-BRASIL. CATALOGAO-NA-FONTE
SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ
S238i
2. ed.
Santos, Rafael
Introduo programao orientada a objetos usando Java /
Rafael Santos. - 2. ed. - Rio de Janeiro : Elsevier, 2013.
336 p. : il. ; 24 cm.
Inclui bibliografia
ISBN 978-85-352-7433-2
1. Java (Linguagem de programao de computador). 2.
Programao orientada a objetos (Computao). I. Ttulo.
13-02857

CDD: 005.133
CDU: 004.43

i
i

i
POO-2ED 2013/8/5 9:15 page v #5

Prefcio para a segunda edio


Sobre este livro
Este livro tem como finalidade possibilitar ao estudante o aprendizado dos conceitos
bsicos de programao orientada a objetos usando a linguagem Java, e adquirir conhecimentos sobre a linguagem que possibilitem estudos avanados sobre a mesma.
O livro parte do pressuposto de que o estudante conhece computadores como ferramentas de desenvolvimento de software, tem noes elementares de algoritmos e sabe o
que uma linguagem de programao, mas sem necessariamente possuir conhecimentos
profundos de uma. O livro tambm pode ser usado por estudantes que j conheam
alguma linguagem de programao mas estejam interessados em aprender Java.
Ao escrever este livro, minha motivao principal foi apresentar os conceitos de programao orientada a objetos com clareza e simplicidade, mostrando exemplos e sugerindo
problemas prticos e ilustrativos de conceitos e de algoritmos em geral. Muitos livros de
programao orientada a objetos (abreviadamente, POO), especialmente usando a linguagem Java, concentram-se em aspectos visuais, deixando de lado a teoria e explicao
dos detalhes que so necessrias para melhor compreenso das tcnicas e conceitos. Na
maioria dos casos, demonstraes das capacidades da linguagem so apresentadas desde
cedo, sem as explicaes necessrias para compreenso do que acontece nos programas-exemplo. Em contraste, este livro concentra-se nas tcnicas de 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 objetos quando
forem utiliz-los em aplicaes mais complexas.
Para reforar e ilustrar os conceitos apresentados em cada captulo, 162 listagens
contendo classes, programas e trechos de cdigo foram includas. O cdigo nestas listagens comentado detalhadamente, tanto para esclarecer os pontos mais importantes
quanto para acostumar o leitor com a ideia de ler comentrios em paralelo com cdigo e
tambm incentiv-lo a comentar cdigo.
Cada captulo conta com uma lista de exerccios, disponvel no site de suporte,
em http://www.elsevier.com.br/rafaelsantos. No site tambm podem ser obtidos
material complementar a este livro, como erratas, listas de exerccios, material adicional,
links teis e informaes para professores que adotarem o livro como texto em suas aulas.
v

i
i

i
i

i
POO-2ED 2013/8/5 9:15 page vi #6

vi Introduo Programao Orientada a Objetos Usando Java

Sobre a organizao deste livro


Cada captulo deste livro cobre um tema especfico. Os captulos e um resumo de seu
contedo so apresentados a seguir:
Captulo 1: Introduo Programao Orientada a Objetos apresenta
conceitos bsicos de programao orientada a objetos, esclarecendo as diferenas
e relaes entre modelos, classes, objetos e instncias. Neste captulo, os conceitos apresentados so puramente tericos, mas essenciais para a compreenso dos
princpios bsicos de orientao a objetos.
Captulo 2: Criando Classes em Java mostra como classes em Java so declaradas, e apresenta os tipos de dados e os mecanismos de criao de campos e
mtodos nas classes.
Captulo 3: Criando Aplicaes em Java mostra como podemos criar aplicaes ou 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 Sobrecarga apresenta construtores, mtodos especiais que sero chamados quando objetos das classes que os contm forem criados.
O captulo tambm descreve como fazer a sobrecarga de mtodos, que permite que
vrios mtodos com o mesmo nome mas diferentes funes possam ser declarados
e usados.
Captulo 5: Campos e Mtodos Estticos mostra como podemos criar mtodos e campos estticos em aplicaes ou outras classes em Java. Mtodos e campos
estticos no precisam ter suas classes instanciadas para ser usados.
Captulo 6: Estruturas de Deciso e Controle - Condicionais apresenta as
estruturas de execuo de trechos do cdigo baseadas em condies, juntamente
com uma introduo aos operadores lgicos de Java.
Captulo 7: Estruturas de Deciso e Controle - Repetio apresenta as
estruturas de repetio de Java baseadas em condies, juntamente com noes
sobre recurso.
Captulo 8: Reutilizao de Classes mostra dois mecanismos de Programao
Orientada a Objetos que permitem o uso de uma classe j existente para criao
de uma classe derivada, mais especializada.
Captulo 9: Classes Abstratas e Interfaces apresenta os conceitos de classes
abstratas e interfaces, que tambm servem como mecanismos de herana de Java
com caractersticas especiais.
Captulo 10: Arrays em Java apresenta os mecanismos de criao e uso de arrays (vetores de dados) unidimensionais e multidimensionais em Java, assim como
tcnicas de Programao Orientada a Objetos para a criao de classes que implementam arrays de forma robusta.

i
i

i
POO-2ED 2013/8/5 9:15 page vii #7

vii
Captulo 11: Classes para Manipulao de Strings apresenta e demonstra o uso de duas classes para processamento de cadeias de caracteres: String e
StringBuilder.
Captulo 12: Colees de Objetos apresenta algumas classes que implementam
estruturas de dados simples em Java e suas aplicaes.
Alm destes captulos o livro contm o Apndice A: A classe Keyboard, que apresenta a classe Keyboard, que pode ser usada para facilitar a leitura de valores de tipos
nativos e instncias da classe String a partir do teclado, adicionando flexibilidade aos
programas que no usam interfaces grficas.

Convenes usadas neste livro


Para destacar alguns conceitos apresentados neste livro, fontes diferentes sero usadas. Nomes de classes, mtodos, pacotes, comandos etc. sero mostrados em fonte
proporcional. Conceitos apresentados pela primeira vez ou que meream destaque e
palavras que no sejam parte do portugus corrente sero mostrados em fonte itlica.
Adicionalmente, as listagens includas no livro sero estilizadas, isto , palavras-chave
e partes do cdigo como comentrios sero mostradas em tonalidades ou estilos de texto
diferentes para facilitar a leitura. As linhas dos programas tambm sero numeradas
para fcil referncia.

Por que Java?


Existem diversas linguagens de programao orientadas a objeto, cada uma com diferentes caractersticas e apelos de mercado, educacionais ou acadmicos. Nesta seo algumas
das razes da escolha da linguagem Java sero apresentadas.
Java obrigatoriamente orientada a objetos. Em Java, todas as variveis e mtodos devem estar organizados em classes, forando o uso de orientao a objetos
at mesmo em tarefas simples. Dessa forma, o estudante de programao orientada
a objetos que esteja usando Java estar usando mais as tcnicas de POO.
Java simples. A estrutura de programas e classes em Java segue a organizao de
linguagens tradicionais como C e C++, mas sem elementos que tornam programas e programao mais complexos. Aps o aprendizado dos conceitos bsicos de
programao orientada a objetos, o estudante da linguagem pode comear a criar
aplicativos teis de forma mais rpida.
A simplicidade se reflete tambm na maneira com que arquivos contendo programas
em Java so compilados e executados: se as recomendaes bsicas forem seguidas,
o compilador se encarregar de compilar todas as classes necessrias em uma aplicao automaticamente, sem necessidade de arquivos adicionais de configurao e
incluso de bibliotecas.
i

i
i

i
POO-2ED 2013/8/5 9:15 page viii #8

viii Introduo Programao Orientada a Objetos Usando Java


Java porttil. O cdigo-fonte de um programa ou classe em Java pode ser compilado
em qualquer computador, usando qualquer sistema operacional, contanto que este
tenha uma mquina virtual Java adequada a mquina virtual o ambiente de execuo das aplicaes em Java. As classes criadas podem ser copiadas e executadas
em qualquer computador nas mesmas condies, aumentando a utilidade da linguagem atravs da independncia de plataformas, contanto que verses compatveis da
mquina virtual sejam usadas.
Java flexvel. Conhecimentos sobre a linguagem podem ser usados para desenvolver
aplicaes que so executadas em terminais, com ou sem interfaces grficas, aplicaes que so executadas em um servidor com navegadores como cliente, e aplicaes
embarcadas em smartphones e outros dispositivos mveis. O conhecimento bsico
sobre a linguagem habilita o programador a aprender os conceitos especficos das
diversas plataformas mais rapidamente.
Java robusta. Administrao de memria (alocao e liberao) e o uso de ponteiros,
duas das fontes de erros e bugs mais frequentes em programas em C e C++, so
administrados internamente na linguagem, de forma transparente para o programador. De maneira geral, programas em Java tm restries no acesso memria
que resultam em maior segurana para os programas sem diminuir a utilidade dos
mesmos.
Java tambm tem um poderoso mecanismo de excees que permite melhor tratamento de erros em tempo de execuo dos programas.
Java tem bibliotecas prontas para diversas aplicaes. As bibliotecas de classes
da mquina virtual Java contm vrias classes que implementam diversos mecanismos de entrada e sada, acesso Internet, manipulao de strings (cadeias de
caracteres) em alto nvel, poderosas estruturas de dados, utilitrios diversos e um
conjunto completo de classes para implementao de interfaces grficas.
Vale a pena relembrar que estas bibliotecas so padro de Java qualquer mquina
virtual Java permite o uso destas bibliotecas, sem a necessidade de instalar pacotes adicionais e que, mesmo que o compilador usado no tenha interface grfica
similar de linguagens visuais, os programas criados com este compilador podem
ter interfaces grficas complexas.
Alm das bibliotecas padro da mquina virtual Java possvel usar uma ampla gama de bibliotecas adicionais que permitem o desenvolvimento de aplicaes
complexas.

Categorias de softwares em Java


Existem basicamente trs categorias de software que podem ser criados em Java e que
sero apresentadas neste livro:
Classes para representao de modelos. Classes so usadas para representar, em
linguagem de programao, modelos e abstraes de dados como os mostrados
no captulo 1. Classes para representao de modelos no podem ser executadas
diretamente, mas instncias destas classes podem ser usadas dentro de aplicaes

i
i

i
POO-2ED 2013/8/5 9:15 page ix #9

ix
e applets. Detalhes e mecanismos de criao de classes em Java sero vistos no
captulo 2.
Aplicaes ou Programas. Aplicaes ou programas podem ser executadas por um
sistema operacional, podendo envolver ou no maior interao com o usurio, e
podendo ou no ter uma interface grfica. Informaes sobre a criao de aplicaes
em Java (sem uso de interface grfica) sero mostradas no captulo 3. Aplicaes
que so executadas em um servidor (servlets, Java Server Pages, web services e
similares) no sero cobertas neste livro.
Classes como conjuntos de rotinas. Classes podem conter somente mtodos (rotinas) ao invs de representar dados. Estas classes funcionam como bibliotecas de
mtodos ou funes que tem algo em comum. Detalhes sobre a criao deste tipo
de classes sero vistos no captulo 5.
Esta lista no considera aplicaes com interfaces grficas, aplicaes que so executadas em um servidor, aplicaes embarcadas ou para dispositivos mveis como smartphones, que no so cobertas neste livro.

Modificaes na Segunda Edio


Todos os captulos do livro foram revisados para a segunda edio, com melhorias no
contedo e apresentao e correes no texto. Alguns exemplos foram melhorados para
ficar mais realistas, enquanto outros foram removidos por serem redundantes ou no
corresponder adequadamente a novas caractersticas da linguagem.
Alguns conceitos que no foram includos na primeira edio o foram na segunda:
enumeradores (seo 5.6), laos para iterao em arrays e colees (seo 10.2.1), argumentos variveis (seo 10.6), tipos genricos (seo 12.1.1) e autoboxing (seo 12.1.2).
O captulo sobre pacotes foi removido, e seu contedo apresentado no captulo 2.
Classes foram organizadas em pacotes correspondentes aos captulos do livro, e so declaradas como pblicas logo desde os primeiros exemplos.
As listagens foram separadas das figuras, com um ndice parte. O cdigo tambm
foi revisado para melhor padronizao.
Alguns apndices foram removidos do texto, por tratar de conceitos tecnolgicos que
mudam muito com o tempo (por exemplo, ambientes integrados de desenvolvimento). O
contedo destes apndices ser apresentado em material parte, que ser disponibilizado
no site de suporte.

Dedicatria e Agradecimentos
Este livro dedicado a minha esposa Yukari, pela enorme pacincia e suporte, e a nossos
filhos Miyuki e Hiroshi, pela constante alegria que proporcionam. Dedico tambm o livro
aos meus pais, Elias e Mariza, pelas vrias lies de vida.
i

i
i

i
POO-2ED 2013/8/5 9:15 page x #10

x Introduo Programao Orientada a Objetos Usando Java


Sou grato aos estudantes dos cursos da Faculdade de Cincia da Computao da
Universidade do Vale do Paraba (Univap) e do antigo IBTA (Instituto Brasileiro de Tecnologia Avanada) que contriburam com ideias e perguntas que resultaram em exemplos
e exerccios, e em especial, aos estudantes que participaram na reviso do livro.
Sou tambm grato a vrios colegas da Univap, IBTA e INPE (Instituto Nacional de
Pesquisas Espaciais) por sugestes e esclarecimentos necessrios para alguns exerccios,
professora Claudia Maria Bauzer Medeiros da Unicamp, por vrias sugestes para o
texto, e aos editores e funcionrios da Elsevier, por acreditarem na ideia apesar de todos
os atrasos que causei.

i
i

i
POO-2ED 2013/8/5 9:15 page xi #11

Sumrio
Prefcio para a segunda edio

Sumrio

xi

Lista de Figuras

xiv

Lista de Listagens

xv

Lista de Tabelas

xxii

1 Introduo programao orientada a objetos


1.1 O que um programa de computador? . . . . . . . . . . . .
1.2 O que so modelos? . . . . . . . . . . . . . . . . . . . . . .
1.3 O que programao orientada a objetos? . . . . . . . . . .
1.4 Encapsulamento . . . . . . . . . . . . . . . . . . . . . . . .
1.5 Mais exemplos de modelos . . . . . . . . . . . . . . . . . . .
1.5.1 Exemplo 1: Uma lmpada incandescente . . . . . . .
1.5.2 Exemplo 2: Uma conta bancria simplificada . . . .
1.5.3 Exemplo 3: Uma data . . . . . . . . . . . . . . . . .
1.5.4 Exemplo 4: Um registro acadmico de aluno . . . .
1.6 Classes, objetos, instncias, referncias, atributos e mtodos
1.7 Orientao a objetos necessria? . . . . . . . . . . . . . .
1.8 Papis de programadores que utilizam orientao a objetos

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

1
1
2
5
6
7
8
10
12
14
16
18
18

2 Criando classes em Java


2.1 Introduo . . . . . . . . . . . . . . . . . . . . . .
2.2 Sintaxe bsica para a criao de classes em Java
2.3 Atributos de classes em Java . . . . . . . . . . .
2.3.1 Usando dados nativos em Java . . . . . .
2.3.2 Declarando atributos em classes em Java
2.3.3 Que tipos de dados devem ser usados? . .
2.4 Mtodos em classes em Java . . . . . . . . . . . .
2.5 Escopo . . . . . . . . . . . . . . . . . . . . . . . .
2.6 Modificadores de acesso . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

20
20
20
23
24
26
28
29
33
34

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

xi

i
i

i
i

i
POO-2ED 2013/8/5 9:15 page xii #12

xii Introduo Programao Orientada a Objetos Usando Java


3 Criando aplicaes em Java
3.1 Introduo . . . . . . . . . . . . . . . . . . . . .
3.2 Criando aplicaes em Java . . . . . . . . . . .
3.3 A palavra-chave new . . . . . . . . . . . . . . .
3.4 A palavra-chave null . . . . . . . . . . . . . .
3.5 Escrevendo classes e aplicaes mais interativas

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

43
43
43
47
53
55

4 Construtores e sobrecarga
4.1 Introduo . . . . . . . . . . . . . . . . . . . .
4.2 O que so construtores? . . . . . . . . . . . .
4.3 Sobrecarga de mtodos . . . . . . . . . . . . .
4.3.1 A palavra-chave this . . . . . . . . .
4.3.2 Cuidados com sobrecarga de mtodos

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

57
57
60
64
69
72

.
.
.
.
.
.

75
75
75
82
85
86
89

.
.
.
.
.
.

94
94
95
100
100
104
105

5 Atributos e mtodos estticos


5.1 Introduo . . . . . . . . . . . . .
5.2 Atributos estticos em classes . .
5.3 Mtodos estticos em classes . .
5.4 Atributos e mtodos estticos em
5.5 Fbricas de instncias . . . . . .
5.6 Enumeradores . . . . . . . . . . .

. . . . . .
. . . . . .
. . . . . .
aplicaes
. . . . . .
. . . . . .

.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

6 Estruturas de deciso e controle Condicionais


6.1 Introduo . . . . . . . . . . . . . . . . . . . . . .
6.2 Operadores lgicos em Java . . . . . . . . . . . .
6.3 Estruturas de deciso e execuo seletiva . . . . .
6.3.1 As instrues if-else . . . . . . . . . . .
6.3.2 O operador condicional ? . . . . . . . . .
6.3.3 A instruo switch . . . . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

7 Estruturas de deciso e controle Repetio


7.1 Estruturas de repetio ou iterao . . . . . .
7.1.1 Contadores . . . . . . . . . . . . . . .
7.1.2 O lao while . . . . . . . . . . . . . .
7.1.3 O lao do-while . . . . . . . . . . . .
7.1.4 O lao for . . . . . . . . . . . . . . .
7.2 Introduo recurso . . . . . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

110
110
111
113
117
121
125

8 Reutilizao de classes
8.1 Introduo . . . . . . . . . . . . .
8.2 Delegao ou composio . . . .
8.2.1 Delegao e modificadores
8.2.2 Delegao e construtores .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

134
134
135
141
145

. . . . . .
. . . . . .
de acesso
. . . . . .

.
.
.
.

i
i

i
POO-2ED 2013/8/5 9:15 page xiii #13

Sumrio xiii
8.3

8.4

Herana . . . . . . . . . . . . . . . . . . . . . .
8.3.1 A palavra-chave super . . . . . . . . . .
8.3.2 Sobreposio e ocultao . . . . . . . .
8.3.3 O modificador protected . . . . . . . .
8.3.4 Polimorfismo . . . . . . . . . . . . . . .
Comentrios finais sobre composio e herana

9 Classes abstratas e interfaces


9.1 Introduo . . . . . . . . . . . . . . .
9.2 Classes e mtodos abstratos . . . . .
9.3 Interfaces . . . . . . . . . . . . . . .
9.4 Herana mltipla usando interfaces .
9.4.1 Conflitos de herana mltipla

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

10 Arrays em Java
10.1 Introduo . . . . . . . . . . . . . . . . . . . .
10.2 Arrays unidimensionais . . . . . . . . . . . .
10.2.1 Laos para iterao em arrays . . . . .
10.3 Arrays de instncias de classes . . . . . . . .
10.4 Arrays multidimensionais . . . . . . . . . . .
10.4.1 Arrays irregulares . . . . . . . . . . .
10.5 Processando argumentos da linha de comando
10.6 Argumentos variveis . . . . . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

145
152
160
165
170
178

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

179
179
180
185
194
203

.
.
.
.
.
.
.
.

208
208
209
216
217
222
227
230
233

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

11 Classes para manipulao de strings


11.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2 A classe String . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2.1 Construindo instncias da classe String . . . . . . . . . .
11.2.2 Mtodos bsicos da classe String . . . . . . . . . . . . .
11.2.3 Mtodos para comparao de instncias da classe String
11.2.4 Mtodos para procura em instncias da classe String . .
11.2.5 Mtodos para modificao de instncias da classe String
11.2.6 Mtodos de converso da classe String . . . . . . . . . .
11.2.7 Separando uma string em componentes . . . . . . . . . .
11.3 A classe StringBuilder . . . . . . . . . . . . . . . . . . . . . . .
11.3.1 Mtodos bsicos da classe StringBuilder . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

236
236
236
237
238
241
243
244
246
246
248
248

12 Colees de objetos
12.1 Introduo . . . . . . . . . .
12.1.1 Tipos Genricos . .
12.1.2 Autoboxing . . . . .
12.2 Conjuntos (sets) de objetos
12.2.1 Diferenas adicionais

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

252
252
253
254
255
263

. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
entre as classes

. . . . .
. . . . .
. . . . .
. . . . .
TreeSet

.
.
.
.
e

. . . . . .
. . . . . .
. . . . . .
. . . . . .
HashSet .

i
i

i
POO-2ED 2013/8/5 9:15 page xiv #14

xiv Introduo Programao Orientada a Objetos Usando Java


12.3 Listas de objetos . . . . . . . . . . . . . . . . . . . . . . . . .
12.3.1 Pilhas e filas implementadas como instncias de listas
12.4 Mapas (ou arrays associativos) de objetos . . . . . . . . . . .
12.5 Algoritmos em colees . . . . . . . . . . . . . . . . . . . . .
12.6 Comparadores e ordem natural de objetos . . . . . . . . . . .
A A classe Keyboard
A.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2 A classe Keyboard . . . . . . . . . . . . . . . . . . . . . .
A.2.1 Exemplos de uso dos mtodos da classe Keyboard
A.2.2 Sumrio dos mtodos da classe Keyboard . . . . .
A.3 Usando arquivos de respostas . . . . . . . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

264
271
277
282
283

.
.
.
.
.

291
291
292
303
305
307

ndice Remissivo

309

Lista de Figuras
1.1
1.2
1.3
1.4
1.5
1.6

Comanda do Restaurante Caseiro Hipottico. . . . . . . . . . . . . .


Representao de encapsulamento. . . . . . . . . . . . . . . . . . . .
O modelo Lampada, seus atributos e operaes. . . . . . . . . . . . .
O modelo ContaBancariaSimplificada, seus atributos e operaes.
O modelo Data, seus atributos e operaes. . . . . . . . . . . . . . .
O modelo RegistroAcademico, seus atributos e operaes. . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

3
7
8
11
13
15

3.1
3.2

Referncias e instncias criadas na classe UsaDataEncapsulada. . . . . . .


Coordenadas no espao cartesiano de duas dimenses. . . . . . . . . . . .

48
49

5.1

Caixas de bancos com e sem fila nica. . . . . . . . . . . . . . . . . . . . .

76

7.1
7.2
7.3

Ilustrao do problema das Torres de Hani. . . . . . . . . . . . . . . . . . 128


Passos na soluo do problema das Torres de Hani. . . . . . . . . . . . . 129
Chamadas recursivas ao mtodo fibonacci. . . . . . . . . . . . . . . . . . 133

8.1

Diagrama de herana envolvendo vrias classes. . . . . . . . . . . . . . . . 151

10.1 Exemplo de array irregular de duas dimenses. . . . . . . . . . . . . . . . 228


10.2 Tringulo de Pascal com seis linhas. . . . . . . . . . . . . . . . . . . . . . 229

i
i

i
POO-2ED 2013/8/5 9:15 page xv #15

Lista de Listagens xv

Lista de Listagens
1.1
1.2
1.3
1.4

O
O
O
O

.
.
.
.

9
11
13
15

2.1
2.2

Uma classe vazia em Java. . . . . . . . . . . . . . . . . . . . . . . . . . . .


A classe RegistroAcademicoSimples, que demonstra declaraes de alguns atributos e seus tipos. . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe DataSemMetodos, que demonstra mais declaraes de alguns atributos e seus tipos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe DataSimples, que apresenta declaraes de atributos e mtodos. .
A classe Triangulo, que encapsula os atributos e mtodos para representar
tringulos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaDataSimples, que pode ser executada como uma aplicao e
que demonstra o uso de instncias da classe DataSimples. . . . . . . . . .
A classe DataEncapsulada, que implementa uma poltica de ocultao de
atributos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaDataEncapsulada, que pode ser executada e que demonstra o
uso de instncias da classe DataEncapsulada. . . . . . . . . . . . . . . . .

22

2.3
2.4
2.5
2.6
2.7
2.8

3.1
3.2
3.3
3.4
3.5

4.1
4.2
4.3

modelo
modelo
modelo
modelo

Lampada, em pseudocdigo. . . . . . . . . . . . . .
ContaBancariaSimplificada, em pseudocdigo. .
Data, em pseudocdigo. . . . . . . . . . . . . . . .
RegistroAcademico, em pseudocdigo. . . . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

A classe UsaDataEncapsulada, que demonstra outros usos de instncias da


classe DataEncapsulada. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe Ponto2D, que encapsula um ponto no espao cartesiano de duas
dimenses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaPonto2D, que demonstra instncias da classe Ponto2D. . . . .
A classe OutrosExemplosDataEncapsulada, que demonstra mais exemplos
de referncias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaPontoTeclado, que demonstra instncias da classe Ponto2D
que sero inicializadas com valores lidos do teclado. . . . . . . . . . . . . .
A classe RegistroAcademicoSemConstrutor, que encapsula alguns dados
de um registro acadmico. . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaRegistroAcademicoSemConstrutor, que demonstra o uso de
instncias da classe RegistroAcademicoSemConstrutor. . . . . . . . . . .
A classe EventoAcademico, que representa um evento acadmico. . . . . .

26
27
30
33
35
38
41

44
49
51
53
55

57
59
61

i
i

i
POO-2ED 2013/8/5 9:15 page xvi #16

xvi Introduo Programao Orientada a Objetos Usando Java


4.4
4.5
4.6
4.7
4.8
4.9

5.1
5.2
5.3
5.4

5.5
5.6
5.7
5.8
5.9
5.10
5.11
5.12
5.13
5.14
5.15
5.16

A classe UsaEventoAcademico, que demonstra o uso de instncias da classe


EventoAcademico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe RoboSimples, que encapsula dados e comportamento de um rob
mvel simulado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaRoboSimples, que demonstra a criao e o uso de instncias
da classe RoboSimples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe RoboSimplesRevisto, que encapsula dados e comportamento de
um rob mvel simulado (com melhorias). . . . . . . . . . . . . . . . . . .
Trecho de cdigo que exemplifica uso da palavra-chave this para diferenciar argumentos de atributos. . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaRoboSimplesComErros, que demonstra o uso de chamadas com
argumentos incorretos a construtores e mtodos da classe RoboSimples. . .
A classe SimuladorDeCaixaDeBanco, que simula o mecanismo de atendimento de um caixa de banco. . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaSimuladorDeCaixaDeBanco, que demonstra usos de instncias
da classe SimuladorDeCaixaDeBanco. . . . . . . . . . . . . . . . . . . . . .
Resultado da execuo da classe UsaSimuladorDeCaixaDeBanco. . . . . . .
A classe SimuladorDeCaixaDeBancoRevisto, que simula o mecanismo de
atendimento de um caixa de banco (com senhas unificadas para o atendimento). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Resultado da execuo da classe UsaSimuladorDeCaixaDeBanco, reescrita
para usar instncias de SimuladorDeCaixaDeBancoRevisto. . . . . . . . .
A classe ConstantesMatematicas, que contm algumas constantes matemticas teis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaConstantesMatematicas, que demonstra o uso dos atributos
estticos na classe ConstantesMatematicas. . . . . . . . . . . . . . . . . .
A classe ConversaoDeUnidadesDeComprimento, que contm mtodos estticos para a converso de unidades de comprimento. . . . . . . . . . . . . .
A classe UsaConversaoDeUnidadesDeComprimento, que demonstra o uso
dos mtodos estticos na classe ConversaoDeUnidadesDeComprimento. . .
A classe CalculoDePrecoDeTerreno, que calcula o preo de um terreno
baseado em sua rea e localizao, usando um mtodo esttico. . . . . . .
A classe DataComFabrica, que contm uma fbrica de instncias da prpria
classe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaDataComFabrica, que demonstra usos da classe DataComFabrica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
O enumerador EstadosDoBrasil, que declara constantes para todos os
estados do Brasil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaEstadosDoBrasil, que demonstra o uso do enumerador EstadosDoBrasil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
O enumerador EstadosDoBrasilRevisto, que associa vrias informaes
s constantes de um enumerador. . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaEstadosDoBrasilRevisto, que demonstra o uso do enumerador EstadosDoBrasilRevisto. . . . . . . . . . . . . . . . . . . . . . . . . .

62
65
68
69
72
73

77
77
78

79
80
81
81
83
84
85
87
88
89
90
91
93

i
i

i
POO-2ED 2013/8/5 9:15 page xvii #17

Lista de Listagens xvii


6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
6.10

7.1
7.2
7.3
7.4
7.5
7.6
7.7
7.8
7.9
7.10
7.11
7.12
7.13
7.14
7.15

A classe Comparavel, que encapsula um valor e contm mtodos para compar-lo com outros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaComparavel, que demonstra usos de instncias e mtodos da
classe Comparavel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pseudocdigo usado para calcular o preo de uma entrada de cinema. . . .
A classe EntradaDeCinema, que calcula o preo de uma entrada de cinema.
Trecho de cdigo que demonstra ifs aninhados. . . . . . . . . . . . . . . .
Trecho de cdigo que demonstra ifs aninhados e blocos de comandos. . . .
A classe DataIf, com um mtodo que demonstra o uso da instruo if em
cascata. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe ComparaSimples, que demonstra o uso do operador condicional ?.
A classe DataSwitch, com mtodos que demonstram a instruo switch. .
A classe UsaEstadosDoBrasilComSwitch, que demonstra como as constantes do enumerador EstadosDoBrasil podem ser usadas com a instruo
switch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe ExemplosWhile, que demonstra vrios usos do lao while. . . . .
A classe EscolhaComWhile, que encapsula um mecanismo de escolha de
valores (usando um bloco while). . . . . . . . . . . . . . . . . . . . . . . .
A classe EscolhaComWhileEContinue, que encapsula um mecanismo de
escolha de valores (usando um bloco while e o comando continue). . . . .
A classe EscolhaComDoWhile, que encapsula um mecanismo de escolha de
valores (usando um bloco do-while). . . . . . . . . . . . . . . . . . . . . .
A classe JogoDeAdivinhacao, que implementa um jogo simples de adivinhao de nmeros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaJogoDeAdivinhacao, que demonstra o uso de uma instncia
da classe JogoDeAdivinhacao. . . . . . . . . . . . . . . . . . . . . . . . . .
A classe ExemplosFor, que demonstra vrios usos do lao for. . . . . . . .
A classe Combinatoria, que contm alguns mtodos estticos para clculos
bsicos de combinatria. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaCombinatoria, que demonstra o uso dos mtodos estticos da
classe Combinatoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe ExemplosForEnumeradores, que demonstra como percorrer as
constantes do enumerador EstadosDoBrasil com um lao for. . . . . . .
Pseudocdigo para calcular somatria recursivamente. . . . . . . . . . . . .
A classe SomatoriaRecursiva, que demonstra o clculo da somatria recursiva dos primeiros N nmeros inteiros. . . . . . . . . . . . . . . . . . . .
Resultado da execuo da classe SomatoriaRecursiva com o valor 6. . . .
A classe TorresDeHanoi, que demonstra a soluo recursiva para o problema das Torres de Hani. . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe FibonacciRecursiva, que demonstra o clculo da srie de Fibonacci recursivamente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

96
99
100
101
102
102
103
104
105

108
113
114
116
117
119
120
121
123
124
125
126
126
128
130
131

i
i

i
POO-2ED 2013/8/5 9:15 page xviii #18

xviii Introduo Programao Orientada a Objetos Usando Java


8.1
8.2
8.3
8.4
8.5
8.6
8.7
8.8
8.9
8.10

8.11
8.12
8.13
8.14
8.15
8.16
8.17
8.18
8.19
8.20
8.21
8.22
8.23
8.24

A classe DataHora, que reutiliza as classes Data e Hora atravs do mecanismo de delegao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe RegistroAcademicoDeGraduacao, que reutiliza a classe Data atravs de delegao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
O enumerador CursosDeGraduacao, que contm constantes e mtodos para
representar alguns cursos de graduao. . . . . . . . . . . . . . . . . . . . .
A classe UsaRegistroAcademicoDeGraduacao, que demonstra a criao e
o uso de instncias da classe RegistroAcademicoDeGraduacao. . . . . . .
A classe PessoaSimples, que encapsula os dados de identificao de uma
pessoa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe FuncionarioSimples, que encapsula os dados bsicos de um funcionrio de uma empresa. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaFuncionarioSimples, que demonstra o uso de uma instncia
da classe FuncionarioSimples. . . . . . . . . . . . . . . . . . . . . . . . .
A classe Pessoa, que encapsula os dados de identificao de uma pessoa. .
A classe Funcionario, que encapsula os dados bsicos de um funcionrio
de uma empresa e herda da classe Pessoa. . . . . . . . . . . . . . . . . . .
A classe ChefeDeDepartamento, que encapsula os dados bsicos de um
chefe de um departamento de uma empresa e que herda da classe Funcionario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe ObjetoSimulado, que encapsula os dados de um objeto genrico
em um simulador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe ObjetoMovelSimulado, que encapsula os dados de um objeto simulado que pode se mover. . . . . . . . . . . . . . . . . . . . . . . . . . . .
O enumerador DirecoesSimulador, que lista os possveis valores para a
direo para movimento de um objeto simulado. . . . . . . . . . . . . . . .
A classe ObjetoRoboSimulado, que herda da classe ObjetoMovelSimulado
e que representa um rob simulado. . . . . . . . . . . . . . . . . . . . . . .
A classe SimuladorSimples, que cria e usa algumas instncias de classes
que herdam de ObjetoSimulado. . . . . . . . . . . . . . . . . . . . . . . .
A classe ObjetoRoboPesadoSimulado, que herda de ObjetoRoboSimulado.
A classe SimuladorSimplesRobos, que cria e usa algumas instncias de
ObjetoRoboSimulado e ObjetoRoboPesadoSimulado. . . . . . . . . . . . .
A classe Pessoa (segunda verso). . . . . . . . . . . . . . . . . . . . . . . .
A classe Funcionario (segunda verso). . . . . . . . . . . . . . . . . . . .
A classe ChefeDeDepartamento (segunda verso). . . . . . . . . . . . . . .
A classe SimuladorPolimorfismo, que demonstra polimorfismo com instncias de ObjetoSimulado e classes herdeiras. . . . . . . . . . . . . . . . .
A classe EmprestimoBancario, que demonstra implementao de mtodos
com polimorfismo e sobrecarga. . . . . . . . . . . . . . . . . . . . . . . . .
A classe EmprestimoBancarioComCast, que demonstra implementao de
mtodos com polimorfismo e cast de instncias. . . . . . . . . . . . . . . .
Trecho de cdigo que demonstra algumas regras de cast de instncias de
classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

135
137
139
140
141
142
143
146
147

149
154
156
157
157
159
161
162
165
166
168
170
172
175
177

i
i

i
POO-2ED 2013/8/5 9:15 page xix #19

Lista de Listagens xix


9.1
9.2
9.3
9.4
9.5
9.6
9.7
9.8
9.9
9.10
9.11
9.12
9.13
9.14
9.15
9.16
9.17
9.18
9.19
9.20
9.21

10.1
10.2
10.3

A classe abstrata ContaBancaria, que representa uma conta bancria simples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


A classe ContaSimples, que representa uma conta bancria simples, e que
pode ser instanciada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe ContaEspecial, que representa uma conta bancria especial. . . .
A classe UsaContasBancarias, que demonstra o uso de classes que herdam
de ContaBancaria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A interface ObjetoGeometrico, que declara que mtodos um objeto geomtrico genrico deve implementar. . . . . . . . . . . . . . . . . . . . . . .
A classe Ponto2D, que representa um ponto em duas dimenses. . . . . . .
A classe Circulo, que implementa a interface ObjetoGeometrico e representa um crculo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe Retangulo, que implementa a interface ObjetoGeometrico e representa um retngulo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaObjetosGeometricos, que demonstra instncias de classes que
implementam a interface ObjetoGeometrico. . . . . . . . . . . . . . . . . .
A classe UsaObjetosGeometricosComPolimorfismo, que demonstra efeitos
de polimorfismo em classes que implementam uma interface comum. . . . .
A classe Escalavel, que define que mtodos um objeto que seja escalvel
(possa ter seu tamanho modificvel) deve implementar. . . . . . . . . . . .
A classe CirculoEscalavel, que implementa as interfaces ObjetoGeometrico e Escalavel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaCirculoEscalavel, que demonstra o uso dos mtodos da classe
CirculoEscalavel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe ItemDeBiblioteca, que declara que atributos e mtodos devem
ser usados para representar itens em uma biblioteca. . . . . . . . . . . . .
O enumerador Estado, que representa os estados de emprstimo de um
item de biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe Livro, que encapsula os dados de um livro. . . . . . . . . . . . . .
A classe LivroDeBiblioteca, que encapsula os dados de um livro de uma
biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaLivroDeBiblioteca, que demonstra o uso de instncias da
classe LivroDeBiblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe ItemRaroDeBiblioteca, que declara os atributos e mtodos que
itens raros de uma biblioteca devem ter. . . . . . . . . . . . . . . . . . . .
A classe Mapa, que encapsula os dados de um mapa. . . . . . . . . . . . . .
A classe MapaDeBiblioteca, que encapsula os dados de um mapa de uma
biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

181
182
183
184
185
186
187
189
191
192
194
195
196
197
198
199
200
202
203
204
205

Trecho de cdigo que demonstra a declarao de arrays em Java. . . . . . 209


Trecho de cdigo que demonstra a declarao e inicializao de arrays em
Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
A classe AvaliaNotas, que manipula arrays de notas para criar um array
de enumeradores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

i
i

i
POO-2ED 2013/8/5 9:15 page xx #20

xx Introduo Programao Orientada a Objetos Usando Java


10.4
10.5
10.6
10.7
10.8
10.9
10.10
10.11
10.12
10.13
10.14
10.15
10.16
10.17
10.18

11.1
11.2
11.3
11.4
11.5
11.6
11.7
11.8

O enumerador Situacao, que manipula arrays de notas para criar um array


de enumeradores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe ArrayDeFloats, que encapsula um array de valores do tipo nativo
float. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaArrayDeFloats, que demonstra o uso de instncias da classe
ArrayDeFloats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Trecho de cdigo que demonstra as duas formas de iterao em arrays. . .
A classe Equipe, que cria e usa um array de instncias de classes que
herdam de Funcionario. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe ArrayDeObjetosGeometricos, que encapsula um array de instncias de classes que implementam a interface ObjetosGeometricos. . . . .
A classe UsaArrayDeObjetosGeometricos, que demonstra o uso de instncias da classe ArrayDeObjetosGeometricos. . . . . . . . . . . . . . . . . .
Trecho de cdigo que demonstra a declarao de arrays multidimensionais
em Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe MatrizDeDoubles, que encapsula um array bidimensional (matriz)
de valores do tipo double. . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe TabuleiroDeJogoDeDamas, que encapsula um tabuleiro de jogo de
damas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
O enumerador PecasDoJogoDeDamas, que representa as peas em um jogo
de damas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Trecho de cdigo que demonstra a declarao e uso de arrays irregulares
em Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe TrianguloDePascal, que implementa um tringulo de Pascal
como um array irregular. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe CalculadoraDeLinhaDeComando, que implementa uma calculadora simples usando argumentos passados pela linha de comando. . . . . .
A classe ArgumentosVariaveis, que demonstra a criao e uso de mtodos
com argumentos variveis. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Trecho de cdigo que demonstra a criao de instncias de String. . . . .
A classe JogoDaForca, que encapsula o mecanismo de um jogo da forca
simples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaJogoDaForca, que demonstra o uso da classe JogoDaForca. . .
Trecho de cdigo que exemplifica a ordem de chamada de concatenao de
strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe SeparacaoDeStrings, que demonstra como usar algumas expresses regulares para separar strings em componentes. . . . . . . . . . . . . .
Trecho de cdigo que ilustra mtodos de modificao da classe StringBuilder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Trecho de cdigo que exemplifica uso do mtodo delete da classe StringBuilder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Trecho de cdigo que exemplifica uso do mtodo replace da classe StringBuilder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

212
213
215
217
217
219
221
223
223
225
226
228
229
231
233
237
238
241
246
247
249
250
250

i
i

i
POO-2ED 2013/8/5 9:15 page xxi #21

Lista de Listagens xxi


12.1
12.2
12.3
12.4
12.5
12.6
12.7
12.8
12.9
12.10
12.11
12.12
12.13
12.14
12.15
12.16
12.17
12.18
12.19
12.20
12.21
12.22
12.23
12.24

Trecho de cdigo que demonstra autoboxing. . . . . . . . . . . . . . . . . .


Trecho de cdigo que demonstra mtodos da classe HashSet. . . . . . . . .
A classe MegaSena, que contm um mtodo esttico que demonstra o uso
de um Set para sortear nmeros sem repeties. . . . . . . . . . . . . . . .
A classe OperacoesEmConjuntos, que demonstra algumas operaes em
conjuntos (sets). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe ConjuntoDePalavras, que encapsula um conjunto de palavras sem
repetio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaConjuntoDePalavras, que demonstra o uso da classe ConjuntoDePalavras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Trecho de cdigo que demonstra o uso de mtodos de TreeSet. . . . . . .
Trecho de cdigo que demonstra uso de instncias da classe LinkedList. .
A classe MovimentoDeRobo, que representa um nico movimento de um
rob (que consiste em um nmero de passos dados em uma certa direo).
O enumerador DirecoesDoRobo, que contm constantes para representar
os pontos cardeais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe RoboComMemoria, que representa um rob que armazena os movimentos feitos por ele. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaRoboComMemoria, que demonstra o uso de uma instncia da
classe RoboComMemoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Trecho de cdigo que demonstra outros mtodos de classes que implementam List. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Trecho de cdigo que demonstra como implementar uma fila com a classe
LinkedList. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Trecho de cdigo que demonstra como implementar uma pilha com a classe
LinkedList. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe PilhaDeDoubles, que representa uma pilha onde podemos armazenar e recuperar valores do tipo double. . . . . . . . . . . . . . . . . . . .
A classe AvaliadorDeExpressoes, que contm um mtodo esttico que
permite a avaliao de expresses matemticas do tipo postfix. . . . . . . .
A classe UsaAvaliadorDeExpressoes, que demonstra o uso do mtodo
avaliaExpressoPostfix da classe AvaliadorDeExpressoes. . . . . . . .
Trecho de cdigo que demonstra mtodos bsicos de classes que implementam Map. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe DicionarioDeIPs, que cria e permite a consulta a um minidicionrio de nomes de servidores e seus IPs. . . . . . . . . . . . . . . . . . . . . .
A classe ArrayEsparsoDeDoubles, que encapsula um array esparso de valores de ponto flutuante. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe UsaArrayEsparsoDeDoubles, que demonstra o uso de uma instncia da classe ArrayEsparsoDeDoubles. . . . . . . . . . . . . . . . . . .
Trecho de cdigo que exemplifica o uso de alguns mtodos da classe Collections para reorganizar listas. . . . . . . . . . . . . . . . . . . . . . . .
A classe DisciplinaCursada, que encapsula dados referentes a uma disciplina cursada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

254
256
257
259
261
262
263
265
266
266
267
269
270
272
272
274
275
276
278
279
280
282
283
284

i
i

i
POO-2ED 2013/8/5 9:15 page xxii #22

xxii Introduo Programao Orientada a Objetos Usando Java


12.25
12.26
12.27
12.28
12.29

A.1
A.2
A.3

O enumerador CodigoDisciplina, que representa as disciplinas que podem


ser cursadas em uma universidade. . . . . . . . . . . . . . . . . . . . . . .
A classe AlunoDeGraduacao, que encapsula alguns dados de um aluno de
graduao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A classe ComparaPorNomeCrescente, que permite a comparao de instncias de AlunoDeGraduacao pelos nomes. . . . . . . . . . . . . . . . . . . .
A classe ComparaPorNotaDecrescente, que permite a comparao de instncias de AlunoDeGraduacao pelas mdias de notas. . . . . . . . . . . . .
A classe TurmaDeAlunos, que demonstra operaes em uma turma (lista)
de alunos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

285
285
287
288
289

A classe Keyboard, que permite a leitura de valores simples via teclado. . . 292
A classe UsaKeyboard, que demonstra o uso da classe Keyboard. . . . . . . 303
Um exemplo de arquivo de respostas para uso com a classe UsaKeyboard. . 308

Lista de Tabelas
2.1
2.2

Palavras reservadas em Java. . . . . . . . . . . . . . . . . . . . . . . . . .


Tipos bsicos de Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22
25

i
i

Potrebbero piacerti anche