Вы находитесь на странице: 1из 9

Prefcio XV

Antes de comear XXXIII

1 Introduo aos computadores, Internet e World Wide Web 1


1.1 Introduo 2
1.2 O que um computador? 3
1.3 Organizao do computador 3
1.4 Primeiros sistemas operacionais 4
1.5 Computao pessoal, distribuda e cliente/servidor 4
1.6 Internet e World Wide Web 5
1.7 Linguagens de mquina, linguagens assembly e linguagens de alto nvel 5
1.8 Histria do C e do C++ 6
1.9 Histria do Java 6
1.10 Bibliotecas de classe do Java 7
1.11 FORTRAN, COBOL, Pascal e Ada 7
1.12 BASIC, Visual Basic, Visual C++, C# e .NET 8
1.13 Ambiente de desenvolvimento Java tpico 8
1.14 Notas sobre o Java e este livro 11
1.15 Test-drive de um aplicativo Java 11
1.16 Estudo de caso de engenharia de software: Introduo tecnologia de objetos e UML
(obrigatrio) 14
1.17 Concluso 17
1.18 Recursos da Web 18

2 Introduo aos aplicativos Java 24


2.1 Introduo 25
2.2 Primeiro programa Java: imprimindo uma linha de texto 25
2.3 Modificando nosso primeiro programa Java 30
2.4 Exibindo texto com printf 31
2.5 Outros aplicativos Java: adicionando inteiros 32
2.6 Conceitos de memria 36
2.7 Aritmtica 36
2.8 Tomada de deciso: operadores de igualdade e operadores relacionais 39
2.9 (Opcional) Estudo de caso de engenharia de software: Examinando o documento de
requisitos 42
2.10 Concluso 48

3 Introduo a classes e objetos 57


3.1 Introduo 58
3.2 Classes, objetos, mtodos e variveis de instncia 58
3.3 Declarando uma classe com um mtodo e instanciando um objeto de uma classe 59
3.4 Declarando um mtodo com um parmetro 62
3.5 Variveis de instncia, mtodos set e get 64
3.6 Tipos primitivos versus tipos por referncia 68
3.7 Inicializando objetos com construtores 68
3.8 Nmeros de ponto flutuante e tipo double 70
3.9 (Opcional) Estudo de caso de GUIs e imagens grficas: Utilizando caixas de dilogo 74
3.10 (Opcional) Estudo de caso de engenharia de software: Identificando classes em um
documento de requisitos 76
3.11 Concluso 81

4 Instrues de controle: parte 1 86

4.1 Introduo 87
4.2 Algoritmos 87
4.3 Pseudocdigo 87
4.4 Estruturas de controle 88
4.5 A instruo de uma nica seleo if 89
4.6 A instruo de seleo dupla ifelse 90
4.7 A instruo de repetio while 93
4.8 Formulando algoritmos: repetio controlada por contador 94
4.9 Formulando algoritmos: repetio controlada por sentinela 98
4.10 Formulando algoritmos: instrues de controle aninhadas 104
4.11 Operadores de atribuio compostos 108
4.12 Operadores de incremento e decremento 108
4.13 Tipos primitivos 110
4.14 (Opcional) Estudo de caso de GUIs e imagens grficas: Criando desenhos simples 111
4.15 (Opcional) Estudo de caso de engenharia de software: Identificando atributos de classe
114
4.16 Concluso 117

5 Instrues de controle: parte 2 126


5.1 Introduo 127
5.2 Princpios bsicos de repetio controlada por contador 127
5.3 A instruo de repetio for 128
5.4 Exemplos com a estrutura for 131
5.5 A estrutura de repetio dowhile 135
5.6 A estrutura de seleo mltipla switch 136
5.7 Instrues break e continue 142
5.8 Operadores lgicos 143
5.9 Resumo de programao estruturada 147
5.10 (Opcional) Estudo de caso de GUIs e imagens grficas: Desenhando retngulos e ovais
151
5.11 (Opcional) Estudo de caso de engenharia de software: Identificando estados e atividades
dos objetos 153
5.12 Concluso 157

6 Mtodos: um exame mais profundo 164


6.1 Introduo 165
6.2 Mdulos de programa em Java 165
6.3 Mtodos static, campos static e classe Math 166
6.4 Declarando mtodos com mltiplos parmetros 168
6.5 Notas sobre a declarao e utilizao de mtodos 171
6.6 Pilha de chamadas de mtodo e registros de ativao 172
6.7 Promoo e coero de argumentos 172
6.8 Pacotes da API do Java 173
6.9 Estudo de caso: Gerao de nmeros aleatrios 174
6.10 Estudo de caso: Um jogo de azar (introduo a enumeraes) 178
6.11 Escopo das declaraes 181
6.12 Sobrecarga de mtodo 184
6.13 (Opcional) Estudo de caso de GUIs e imagens grficas: Cores e formas preenchidas 186
6.14 (Opcional) Estudo de caso de engenharia de software: Identificando operaes de classe
188
6.15 Concluso 193

7 Arrays 203

7.1 Introduo 204


7.2 Arrays 204
7.3 Declarando e criando arrays 205
7.4 Exemplos que utilizam arrays 206
7.5 Estudo de caso: Simulao de embaralhamento e distribuio de cartas 213
7.6 A estrutura for aprimorada 216
VIII Sumrio
7.7 Passando arrays para mtodos 217
7.8 Estudo de caso: Classe GradeBook utilizando um array para armazenar notas 219
7.9 Arrays multidimensionais 223
7.10 Estudo de caso: Classe GradeBook utilizando um array bidimensional 227
7.11 Listas de argumentos de comprimento varivel 232
7.12 Utilizando argumentos de linha de comando 233
7.13 (Opcional) Estudo de caso de GUIs e imagens grficas: Desenhando arcos 235
7.14 (Opcional) Estudo de caso de engenharia de software: Colaborao entre objetos 237
7.15 Concluso 242

8 Classes e objetos: um exame mais profundo 256


8.1 Introduo 257
8.2 Estudo de caso da classe Time 257
8.3 Escopo de classe 260
8.4 Referenciando membros do objeto atual com a referncia this 261
8.5 Estudo de caso da classe Time: Construtores sobrecarregados 263
8.6 Construtores-padro e sem argumentos 267
8.7 Notas sobre os mtodos Set e Get 268
8.8 Composio 269
8.9 Enumeraes 271
8.10 Coleta de lixo e o mtodo finalize 273
8.11 Membros da classe static 274
8.12 Import static 278
8.13 Variveis de instncia final 278
8.14 Capacidade de reutilizao de software 280
8.15 Abstrao de dados e encapsulamento 281
8.16 Estudo de caso da classe Time: Controlando o acesso a membros 282
8.17 Acesso de pacote 286
8.18 (Opcional) Estudo de caso de GUIs e imagens grficas: Utilizando objetos com imagens
grficas 286
8.19 (Opcional) Estudo de caso de engenharia de software: Comeando a programar as
classes do sistema ATM 290
8.20 Concluso 294

9 Programao orientada a objetos: herana 300


9.1 Introduo 301
9.2 Superclasses e subclasses 302
9.3 Membros protected 303
9.4 Relacionamento entre superclasses e subclasses 303
9.5 Construtores em subclasses 323
9.6 Engenharia de software com herana 328
9.7 Classe Object 329
9.8 (Opcional) Estudo de caso de GUIs e imagens grficas: Exibindo texto e imagens utilizando
rtulos 330
9.9 Concluso 332

10 Programao orientada a objetos: polimorfismo 335


10.1 Introduo 336
10.2 Exemplos de polimorfismo 337
10.3 Demonstrando um comportamento polimrfico 338
10.4 Classes e mtodos abstratos 340
10.5 Estudo de caso: Sistema de folha de pagamento utilizando polimorfismo 341
10.6 Mtodos e classes final 353
10.7 Estudo de caso: Criando e utilizando interfaces 353
10.8 (Opcional) Estudo de caso de GUIs e imagens grficas: Desenhando com polimorfismo
363
10.9 (Opcional) Estudo de caso de engenharia de software: Incorporando herana ao sistema
ATM 364
10.10 Concluso 369

11 Componentes GUI: parte 1 372


11.1 Introduo 373
11.2 Entrada/sada baseada em GUI simples com JOptionPane 374
11.3 Viso geral de componentes Swing 376
11.4 Exibio de texto e imagens em uma janela 378
11.5 Campos de texto e uma introduo ao tratamento de eventos com classes aninhadas 381
11.6 Tipos comuns de eventos GUI e interfaces ouvintes 386
11.7 Como o tratamento de evento funciona 388
11.8 Jbutton 389
11.9 Botes que mantm o estado 392
11.10 JComboBox e utilizao de uma classe interna annima para tratamento de evento 397
11.11 Jlist 399
11.12 Listas de seleo mltipla 401
11.13 Tratamento de evento de mouse 404
11.14 Classes adaptadoras 407
11.15 Subclasse JPanel para desenhar com o mouse 410
11.16 Tratamento de eventos de teclado 413
11.17 Gerenciadores de layout 415
11.18 Utilizando painis para gerenciar layouts mais complexos 423
11.19 JTextArea 424
11.20 Concluso 427

12 Imagens grficas e Java 2D 437


12.1 Introduo 438
12.2 Contextos grficos e objetos grficos 438
12.3 Controle de cor 440
12.4 Controle de fonte 445
12.5 Desenhando linhas, retngulos e ovais 449
12.6 Desenhando arcos 452
12.7 Desenhando polgonos e polilinhas 454
12.8 API do Java 2D 457
12.9 Concluso 462

13 Tratamento de exceo 469


13.1 Introduo 470
13.2 Viso geral do tratamento de excees 471
13.3 Exemplo: Diviso por zero sem tratamento de excees 471
13.4 Exemplo: Tratando ArithmeticExceptions e InputMismatchExceptions 473

13.5 Quando utilizar o tratamento de excees 476


13.6 Hierarquia de excees em Java 477
13.7 Bloco finally 479
13.8 Desempilhamento de pilha 482
13.9 printStackTrace, getStackTrace e getMessage 483
13.10 Excees encadeadas 486
13.11 Declarando novos tipos de exceo 487
13.12 Precondies e ps-condies 488
13.13 Assertivas 488
13.14 Concluso 489

14 Arquivos e fluxos 494


14.1 Introduo 495
14.2 Hierarquia de dados 496
14.3 Arquivos e fluxos 497
14.4 Classe File 498
14.5 Arquivos de texto de acesso seqencial 501
14.6 Serializao de objeto 514
X Sumrio
14.7 Arquivos de acesso aleatrio 522
14.8 Classes java.io adicionais 539
14.9 Abrindo arquivos com JFileChooser 540
14.10 Concluso 543

15 Recurso 551
15.1 Introduo 552
15.2 Conceitos de recurso 553
15.3 Exemplo que utiliza recurso: Fatoriais 553
15.4 Exemplo que utiliza recurso: Srie de Fibonacci 555
15.5 Recurso e a pilha de chamadas do mtodo 557
15.6 Recurso versus iterao 558
15.7 Permutaes de string 560
15.8 Torres de Hani 563
15.9 Fractais 565
15.10 Retorno recursivo 574
15.11 Concluso 574
15.12 Internet e recursos Web 575

16 Pesquisa e classificao 582


16.1 Introduo 583
16.2 Algoritmos de pesquisa 583
16.3 Algoritmos de classificao 591
16.4 Invariantes 602
16.5 Concluso 603

17 Estruturas de dados 607


17.1 Introduo 608
17.2 Classes empacotadoras de tipo para tipos primitivos 608
17.3 Autoboxing e auto-unboxing 609
17.4 Classes auto-referenciais 609

17.5 Alocao dinmica de memria 610


17.6 Listas vinculadas 610
17.7 Pilhas 618
17.8 Filas 622
17.9 rvores 624
17.10 Concluso 629

18 Genricos 645
18.1 Introduo 646
18.2 Motivao para mtodos genricos 646
18.3 Mtodos genricos: implementao e traduo em tempo de compilao 648
18.4 Questes adicionais da traduo em tempo de compilao: mtodos que utilizam um
parmetro de tipo como o tipo
de retorno 650
18.5 Sobrecarregando mtodos genricos 653
18.6 Classes genricas 653
18.7 Tipos brutos 661
18.8 Curingas em mtodos que aceitam parmetros de tipo 662
18.9 Genricos e herana: notas 668
18.10 Concluso 668
18.11 Internet e recursos da Web 668

19 Colees 672
19.1 Introduo 673
19.2 Viso geral das colees 673
19.3 Classe Arrays 674
Sumrio XI
19.4 Interface Collection e classe Collections 676
19.5 Listas 677
19.6 Algoritmos de colees 686
19.7 Classe Stack do pacote java.util 697
19.8 Classe PriorityQueue e Interface Queue 699
19.9 Conjuntos 700
19.10 Mapas 703
19.11 Classe Properties 706
19.12 Colees sincronizadas 709
19.13 Colees no-modificveis 709
19.14 Implementaes abstratas 709
19.15 Concluso 710

20 Introduo aos applets Java 715


20.1 Introduo 716
20.2 Applets de exemplo fornecidas com o JDK 716
20.3 Applet Java simples: desenhando uma string 719
20.4 Mtodos de ciclo de vida de applet 722
20.5 Inicializando uma varivel de instncia com o mtodo init 723
20.6 Modelo de segurana da caixa de areia 724
20.7 Concluso 725
20.8 Internet e recursos da Web 725

21 Multimdia: applets e aplicativos 728


21.1 Introduo 729
21.2 Carregando, exibindo e dimensionando imagens 730
21.3 Animao de uma srie de imagens 732
21.4 Mapas de imagem 735
21.5 Carregando e reproduzindo clipes de udio 736
21.6 Reproduzindo vdeo e outros tipos de mdia com o Java Media Framework 740
21.7 Concluso 744
21.8 Internet e recursos da Web 744

22 Componentes GUI: parte 2 749


22.1 Introduo 750
22.2 JSlider 750
22.3 Windows: notas adicionais 753
22.4 Utilizando menus com frames 754
22.5 JPopupMenu 760
22.6 Aparncia e comportamento plugveis 763
22.7 JDesktopPane e JInternalFrame 767
22.8 JTabbedPane 770
22.9 Gerenciadores de layout: BoxLayout e GridBagLayout 771
22.10 Concluso 782

23 Multithreading 786
23.1 Introduo 787
23.2 Estados de thread: Classe Thread 788
23.3 Prioridades de thread e agendamento de thread 789
23.4 Criando e executando threads 791
23.5 Sincronizao de thread 793
23.6 Relacionamento entre produtor e consumidor sem sincronizao 795
23.7 Relacionamento entre produtor e consumidor com sincronizao 800
23.8 Relacionamento de produtor/consumidor: Buffer circular 805
23.9 Relacionamento de produtor/consumidor: ArrayBlockingQueue 811
23.10 Multithreading com GUI 813
23.11 Outras classes e interfaces em java.util.concurrent 818
23.12 Monitores e bloqueios de monitor 818
23.13 Concluso 823

24 Redes 827
24.1 Introduo 828
24.2 Manipulando URLs 829
24.3 Lendo um arquivo em um servidor Web 833
24.4 Estabelecendo um servidor simples utilizando sockets de fluxo 836
24.5 Estabelecendo um cliente simples utilizando sockets de fluxo 837
24.6 Interao cliente/servidor com conexes de socket de fluxo 837
24.7 Interao cliente/servidor sem conexo com datagramas 848
24.8 Jogo-da-velha cliente/servidor que utiliza um servidor com multithread 854
24.9 Segurana e redes 867
24.10 Estudo de caso: Servidor e cliente DeitelMessenger 867
24.11 Concluso 888

25 Acesso a bancos de dados com o JDBC 894


25.1 Introduo 895
25.2 Bancos de dados relacionais 896
25.3 Viso geral de banco de dados relacional: o banco de dados books 896
25.4 SQL 899
25.5 Instrues para instalar o MySQL e o MySQL Conector/J 905
25.6 Instrues para a configurao da conta de usurio do MySQL 905
25.7 Criando banco de dados books no MySQL 906
25.8 Manipulando bancos de dados com o JDBC 906
25.9 Procedures armazenadas 919
25.10 Interface RowSet 919
25.11 Concluso 922
25.12 Internet e recursos da Web 922

26 Servlets 928
26.1 Introduo 929
26.2 Viso geral e arquitetura de servlets 930
26.3 Configurando o servidor Apache Tomcat 933
26.4 Tratando solicitaes get de HTTP 935
26.5 Tratando solicitaes get de HTTP contendo dados 941
26.6 Tratando solicitaes post de HTTP 943
26.7 Redirecionando solicitaes para outros recursos 946
26.8 Aplicativos de mltiplas camadas: utilizando JDBC a partir de um servlet 949
26.9 Arquivos welcome 952
26.10 Concluso 955
26.11 Internet e recursos Web 955

27 JavaServer Pages (JSP) 959


27.1 Introduo 960
27.2 Viso geral das JavaServer Pages 960
27.3 Primeiro exemplo de JSP 961
27.4 Objetos implcitos 963
27.5 Script 964
27.6 Aes-padro 967
27.7 Diretivas 977
27.8 Estudo de caso: Livro de visitas 980
27.9 Concluso 989
27.10 Internet e recursos da Web 989

28 Sada formatada 993


28.1 Introduo 994
28.2 Fluxos 994
28.3 Formatando a sada com printf 994
28.4 Imprimindo inteiros 995
28.5 Imprimindo nmeros de ponto flutuante 996
28.6 Imprimindo strings e caracteres 997
28.7 Imprimindo datas e horas 997
28.8 Outros caracteres de converso 999
28.9 Imprimindo com larguras e precises de campos 1000
28.10 Utilizando flags na string de formato printf 1001
28.11 Imprimindo com ndices de argumento 1005
28.12 Imprimindo literais e seqncias de escape 1005

28.13 Formatar a sada com a classe Formatter 1005


28.14 Concluso 1007

29 Strings, caracteres e expresses regulares 1011


29.1 Introduo 1012
29.2 Fundamentos de caracteres e strings 1012
29.3 Classe String 1013
29.4 Classe StringBuffer 1022
29.5 Classe Character 1029
29.6 Classe StringTokenizer 1032
29.7 Expresses regulares, classe Pattern e classe Matcher 1034
29.8 Concluso 1040
A Tabela de precedncia de operadores 1048
A.1 Precedncia de operadores 1048
B Conjunto de caracteres ASCII 1050
C Palavras-chave e palavras reservadas 1051
D Tipos primitivos 1052
E (No CD) Sistemas de numerao 1053
F (No CD) Unicode 1054
G Utilizando a documentao da API do Java 1055
G.1 Introduo 1055
G.2 Navegando pela API do Java 1055
H (No CD) Criando documentao com o javadoc 1062
I (No CD) Manipulao de bit 1063
J (No CD) Cdigo para o estudo de caso do ATM 1064
K (No CD) Instrues break e continue rotuladas 1065
L (No CD) UML 2: Tipos de diagramas adicionais 1066
M (No CD) Padres de projeto 1067
N (No CD) Utilizando o depurador 1068