arquivo linguagem de programação1

Embed Size (px)

Citation preview

Material sugerido para as disciplinas Programao Orientada a Objetos I e Programao Orientada a Objetos II dos cursos de Cincia da Computao e Engenharia da Computao da Faculdade de Cincia da Computao da Universidade do Vale do Paraba

29 de maio de 2000

i

Sumrio1 Sobre este livro 1.1 O que este livro ? . . . . . . . . . . . . . . . . . . . . . . . 1.2 Como usar este livro . . . . . . . . . . . . . . . . . . . . . . 1.3 Sobre a organizao deste livro . . . . . . . . . . . . . . . . . 1.3.1 Planos para futuras verses deste livro . . . . . . . . . 1.3.2 Convenes usadas neste livro . . . . . . . . . . . . . 1.3.2.1 Convenes para os exerccios propostos . . 1.4 Porqu Java ? . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.1 Tipos de Programas em Java . . . . . . . . . . . . . . 1.5 Informaes para alunos da FCC/Univap . . . . . . . . . . . . 1.5.1 Sobre a disciplina Programao Orientada a Objetos I 1.5.2 Sobre a disciplina Programao Orientada a Objetos II 1.6 Agradecimentos . . . . . . . . . . . . . . . . . . . . . . . . . Introduo a Programao Orientada a Objetos 2.1 O que so modelos ? . . . . . . . . . . . . . 2.2 O que POO ? . . . . . . . . . . . . . . . . 2.3 Classes, Objetos e Instncias . . . . . . . . . 2.4 Encapsulamento . . . . . . . . . . . . . . . . 2.5 Mais Exemplos de Classes e Objetos . . . . . 2.6 Exerccios do captulo 2 . . . . . . . . . . . . 1 1 2 2 3 3 3 4 5 5 5 6 6 7 7 8 8 10 10 14 17 17 17 19 21 23 28 33 33 33 34 36 36 37 40

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

3

Criando Classes em Java 3.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Criando Classes em Java . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Atributos e dados so tipos nativos ou instncias de outras classes 3.2.2 Operaes ou funes so Mtodos . . . . . . . . . . . . . . . . 3.3 Exemplos de Classes em Java . . . . . . . . . . . . . . . . . . . . . . . . 3.4 Exerccios do captulo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . Criando Programas em Java 4.1 Introduo . . . . . . . . . . . . . . . . . . . 4.2 Criando Programas em Java . . . . . . . . . 4.2.1 Exemplos de programas em Java . . . 4.3 A palavra-chave new . . . . . . . . . . . . . 4.4 Processando argumentos da linha de comando 4.5 Subrotinas em Programas em Java . . . . . . 4.6 Exerccios do captulo 4 . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

4

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

ii 5 Herana 5.1 Introduo . . . . . . . . . . . . . . . . . . 5.2 O mecanismo de sobrecarga . . . . . . . . 5.3 Herana de variveis e mtodos privados . . 5.4 Outros exemplos e mecanismos de herana 5.5 Exerccios do captulo 5 . . . . . . . . . . . Polimorsmo 6.1 Introduo . . . . . . . . . . . . 6.2 Regras de polimorsmo . . . . . 6.3 Mais exemplos de polimorsmo 6.4 Exerccios do captulo 6 . . . . . 43 43 46 48 50 53 57 57 60 61 64 67 67 69 71 73 74 78 78 78 80 82 85 86 88 89 91 92 99 99 99 101 103 105 105 106 116 116 117 123 124 126 127 131

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

6

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

7

Construtores 7.1 Introduo . . . . . . . . . . . . . . . 7.1.1 O construtor default . . . . . 7.2 Construtores, herana e polimorsmo 7.3 O mtodo toString() . . . . . . . . . . 7.4 Exerccios do captulo 7 . . . . . . . . Estruturas de Deciso e Controle 8.1 Introduo . . . . . . . . . . . . 8.2 Operadores lgicos . . . . . . . 8.3 A estrutura de deciso if/else . . 8.4 A estrutura de deciso switch . . 8.5 Estruturas de repetio . . . . . 8.6 A estrutura de repetio while . 8.7 A estrutura de repetio do-while 8.8 A estrutura de repetio for . . . 8.9 Os comandos break e continue . 8.10 Exerccios do captulo 8 . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

8

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

9

A Classe String 9.1 Introduo . . . . . . . . . . . . . . 9.2 Mtodos bsicos da classe String . 9.3 Mtodos para comparao de Strings 9.4 Mtodos para modicao de Strings 9.5 Mtodos para seleo em Strings . . 9.6 Mtodos para procura em Strings . . 9.7 Exerccios do captulo 9 . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

10 Arrays em Java 10.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . 10.2 Arrays de tipos nativos . . . . . . . . . . . . . . . . . 10.2.1 Caso especial: Processando a linha de comando 10.3 Arrays Multidimensionais . . . . . . . . . . . . . . . 10.3.1 Arrays Irregulares . . . . . . . . . . . . . . . 10.4 Arrays de instncias de classes . . . . . . . . . . . . . 10.5 Exerccios do captulo 10 . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

iii 11 Funes Matemticas 11.1 Funes Matemticas em Java . . . . . . . 11.2 Constantes . . . . . . . . . . . . . . . . . . 11.3 Mtodos de comparao e arredondamento 11.4 Mtodos trigonomtricos . . . . . . . . . . 11.5 Mtodos exponenciais . . . . . . . . . . . 11.6 Outros mtodos . . . . . . . . . . . . . . . 11.7 Exerccios do captulo 11 . . . . . . . . . . 142 142 142 142 143 144 145 146 149 149 151 153 154 158 159 159 160 161 161 162 165 167 167 169 172

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

12 Excees 12.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2 O que so excees ? . . . . . . . . . . . . . . . . . . . . . 12.2.1 Tipos de excees . . . . . . . . . . . . . . . . . . 12.3 Usando excees em classes desenvolvidas pelo programador 12.4 Exerccios do captulo 12 . . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

13 Entrada e Sada usando Arquivos 13.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.1 Acesso a arquivos em Java . . . . . . . . . . . . . . . . . . . 13.1.2 Sobre os arquivos usados neste captulo . . . . . . . . . . . . 13.2 Arquivos Sequenciais para Strings . . . . . . . . . . . . . . . . . . . 13.2.1 Leitura em arquivos sequenciais para Strings . . . . . . . . . 13.2.2 Gravao em arquivos sequenciais para Strings . . . . . . . . 13.3 Arquivos Sequenciais para Tipos Nativos . . . . . . . . . . . . . . . 13.3.1 Leitura em arquivos sequenciais para dados de tipos nativos . 13.3.2 Gravao em arquivos sequenciais para dados de tipos nativos 13.4 Exerccios do captulo 13 . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

14 Estruturas de Dados Bsicas em Java 177 14.1 A classe Vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 14.2 A classe Hashtable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 A Tipos de Dados em Java A.1 Tipos de dados nativos em Java . . . . . . . . . . . . A.1.1 O tipo bsico byte . . . . . . . . . . . . . . A.1.2 O tipo bsico char . . . . . . . . . . . . . . A.1.3 O tipo bsico short . . . . . . . . . . . . . . A.1.4 O tipo bsico int . . . . . . . . . . . . . . . A.1.5 O tipo bsico long . . . . . . . . . . . . . . A.1.6 O tipo bsico oat . . . . . . . . . . . . . . A.1.7 O tipo bsico double . . . . . . . . . . . . . A.1.8 O tipo bsico boolean . . . . . . . . . . . . . A.2 Classes para representao de dados . . . . . . . . . A.2.1 A classe String . . . . . . . . . . . . . . . . A.2.2 Classes para encapsulamento de tipos nativos A.2.2.1 A classe Byte . . . . . . . . . . . A.2.2.2 A classe Character . . . . . . . . . A.2.2.3 A classe Short . . . . . . . . . . . A.2.2.4 A classe Integer . . . . . . . . . . A.2.2.5 A classe Long . . . . . . . . . . . 178 178 178 180 181 182 183 184 185 186 187 187 190 191 192 193 195 196

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

iv A.2.2.6 A.2.2.7 A.2.2.8 A classe Float . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 A classe Double . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 A classe Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 201 201 201 202 202 203 203 204 205 205 206 206 207 210 217 217 217 217 218 218 218 218 218 218 219 221 221 221 221 221 221 222 222 222 222 222

B A Classe Keyboard B.1 A classe Keyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.1.1 Usando a classe Keyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.1.1.1 Usando a classe Keyboard para leitura de valores tipo boolean . . . . B.1.1.2 Usando a classe Keyboard para leitura de valores tipo byte . . . . . B.1.1.3 Usando a classe Keyboard para leitura de valores tipo char . . . . . B.1.1.4 Usando a classe Keyboard para leitura de valores tipo short . . . . . B.1.1.5 Usando a classe Keyboard para leitura de valores tipo int . . . . . . B.1.1.6 Usando a classe Keyboard para leitura de valores tipo long . . . . . B.1.1.7 Usando a classe Keyboard para leitura de valores tipo oat . . . . . B.1.1.8 Usando a classe Keyboard para leitura de valores tipo double . . . . B.1.1.9 Usando a classe Keyboard para leitura de instncias da classe String B.2 Outros exemplos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.3 Cdigo fonte da classe Keyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C Usando o Java Development Kit C.1 Sobre o Java Development Kit (JDK) . . . . . . . . . . . . . . . . . C.1.1 Obtendo e Instalando o JDK . . . . . . . . . . . . . . . . . C.2 Como um programa em Java compilado e executado . . . . . . . . C.3 Usando o JDK no Linux . . . . . . . . . . . . . . . . . . . . . . . C.3.1 Compilando e Executando Programas em Java no Linux . . C.4 Usando o JDK no Windows . . . . . . . . . . . . . . . . . . . . . . C.4.1 Editores de Texto para o Windows . . . . . . . . . . . . . . C.4.2 Compilando e Executando Programas em Java no Windows C.5 Esclarecimentos Sobre Nomes de Classes e Arquivos . . . . . . . . C.6 Possveis Erros de Compilao e Execuo . . . . . . . . . . . . .

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

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

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

D Usando o Sistema Operacional Linux D.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D.2 A estrutura de arquivos e diretrios do Linux . . . . . . . . . . . . . . . . D.3 Uma introduo aos comandos bsicos do Linux . . . . . . . . . . . . . . . D.3.1 Executando comandos no Linux . . . . . . . . . . . . . . . . . . . D.3.2 Comandos de listagem de diretrios e arquivos . . . . . . . . . . . D.3.3 Comandos de criao, remoo e modicao de diretrios . . . . . D.3.4 Comandos de cpia, remoo e modicao de arquivos e diretrios D.3.5 Comandos de exibio do contedo de arquivos . . . . . . . . . . . D.3.6 Editores de Texto para o Linux . . . . . . . . . . . . . . . . . . . . D.3.6.1 Xemacs e Emacs . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

v

Lista de Figuras2.1 2.2 2.3 2.4 2.5 2.6 10.1 10.2 10.3 10.4 Uma classe veculo e vrios objetos desta classe. . . . Uma lmpada, seus atributos e operaes . . . . . . . Uma data, seus atributos e operaes . . . . . . . . . . Um registro de aluno, seus atributos e operaes . . . . Um modelo de computador, seus atributos e operaes Uma conta bancria, seus atributos e operaes . . . . Exemplo de arrays . . . . . . . . . . . . Exemplo de arrays multidimensionais . . Exemplo de arrays irregulares . . . . . . Exemplo de arrays de instncias de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 10 11 12 13 13 116 125 127 128

13.1 Encapsulamento de arquivos por classes . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 13.2 Funcionamento de ponteiros em arquivos sequenciais de texto . . . . . . . . . . . . . . . 161 13.3 Funcionamento de ponteiros em arquivos sequenciais binrios . . . . . . . . . . . . . . . 167 C.1 Como um programa em Java compilado e executado . . . . . . . . . . . . . . . . . . . . 217 D.1 Interface grca do Xemacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 D.2 Interface grca do Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

vi

Lista de Listagens3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 4.1 4.2 4.3 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 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 Uma classe vazia em Java . . . . . . . . . . . . . . . . . . Criao e inicializao de variveis de tipos nativos em Java Exemplo de alguns mtodos em Java . . . . . . . . . . . . A classe Lampada (primeira verso) . . . . . . . . . . . . . A classe Data (primeira verso) . . . . . . . . . . . . . . . A classe RegistroDeAluno (primeira verso) . . . . . . . A classe ModeloDeComputador (primeira verso) . . . . . A classe ContaBancaria (primeira verso) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 20 22 23 23 25 26 27 34 34 35 36 37 38 38 39 39 43 44 45 45 46 47 48 49 51 51 52 57 58 58 59 60 61 61 63 63

Um programa mnimo em Java: HelloWorld.java . . . . . . . . . . . . . . . . . Um programa que usa instncias da classe Lampada . . . . . . . . . . . . . . . . . Um programa que usa instncias da classe Data . . . . . . . . . . . . . . . . . . . Um programa que conta quantos argumentos foram passados pela linha de comando Uma classe com o mtodo main e uma subrotina . . . . . . . . . . . . . . . . . . . Uma classe cujas subrotinas chamam uma outra . . . . . . . . . . . . . . . . . . Uma classe com variveis estticas . . . . . . . . . . . . . . . . . . . . . . . . . . Uma classe com algumas variveis e mtodos estticos . . . . . . . . . . . . . . . . Um programa que usa a classe com algumas variveis e mtodos estticos . . . . . . A classe Veiculo . . . . . . . . . . . . . . . . . . . . . . . . Criao de instncias da classe Veiculo . . . . . . . . . . . . A classe VeiculoTerrestre . . . . . . . . . . . . . . . . . . Criao de instncias da classe Veiculo e VeiculoTerrestre A classe VeiculoTerrestre, segunda verso . . . . . . . . . Problemas com sobrecarga de variveis . . . . . . . . . . . . . Exemplo de problemas com variveis privadas e herana . . . . Soluo do problema de variveis privadas e herana . . . . . . A classe Aluno (verso simples) . . . . . . . . . . . . . . . . . A classe AlunoMestrado (primeira verso) . . . . . . . . . . . A classe AlunoMestrado (segunda verso) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

A classe Hora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Um programa que demonstra usos da classe Hora . . . . . . . . . . . . . . . . . . . A classe Hora, com mtodos polimrcos . . . . . . . . . . . . . . . . . . . . . . . Um programa que demonstra usos da classe Hora que contm mtodos polimrcos A classe Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A classe Livro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A classe LivroComSoftware, herdeira da classe Livro . . . . . . . . . . . . . . . A classe MatBasica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Um programa que demonstra a classe MatBasica . . . . . . . . . . . . . . . . . .

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

vii 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 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 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 10.10 10.11 Um programa que usa instncias da classe RegistroDeAluno . . . . . . . . . . . . . . . A classe Lampada, com um construtor . . . . . . . . . . . . . . . . . . . . . . . . . . . . Classe que usa instncias da classe Lampada com construtor . . . . . . . . . . . . . . . . A classe Data com um construtor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Classe que usa instncias da classe Data com construtor . . . . . . . . . . . . . . . . . . A classe Veiculo com construtores polimrcos . . . . . . . . . . . . . . . . . . . . . . A classe VeiculoTerrestre com construtores polimrcos . . . . . . . . . . . . . . . . Uma classe que usa instncias da classe VeiculoTerrestre com construtores polimrcos Uma classe que demonstra o uso implcito dos mtodos toString . . . . . . . . . . . . . A classe Data com um construtor e o mtodo toString() . . . . . . . . . . . . . . . . . Um programa que demonstra os operadores de comparao numrica de Java Um programa que demonstra combinaes de operadores lgicos . . . . . . Um programa que demonstra as estruturas if e else . . . . . . . . . . . . . Um programa que demonstra aninhamento de if e else . . . . . . . . . . . Uma classe que usa estruturas if e else cascateadas . . . . . . . . . . . . . Trecho de programa que demonstra a estrutura switch . . . . . . . . . . . . Um programa que demonstra a estrutura switch . . . . . . . . . . . . . . . Uma classe que usa a estrutura switch . . . . . . . . . . . . . . . . . . . . Uma classe com mtodo main que usa o lao while . . . . . . . . . . . . . A classe Escolha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplos de uso do lao while como contador . . . . . . . . . . . . . . . . Uma classe com mtodo main que usa o lao do-while . . . . . . . . . . . Uma classe cujo construtor usa o lao do-while . . . . . . . . . . . . . . . Uma classe com mtodo main que usa o lao for . . . . . . . . . . . . . . . A classe ProbabilidadeBasica . . . . . . . . . . . . . . . . . . . . . . . Uma classe cujo construtor usa o lao while e o comando break . . . . . . Exemplo de uso do comando continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 68 69 69 70 71 72 72 73 74 79 79 80 81 82 83 83 84 86 87 87 88 89 90 90 91 91 99 100 101 102 102 103 104 105 106 117 118 118 119 120 121 121 122 123 124 125

Clculo do comprimento de uma String (mtodo length()) . . . . . . . . . . . . . . Extrao de caracteres (mtodo charAt()) . . . . . . . . . . . . . . . . . . . . . . . Comparaes entre Strings (mtodos equals() e equalsIgnoreCase()) . . . . . . . Comparaes entre Strings (mtodo compareTo()) . . . . . . . . . . . . . . . . . . . Comparaes entre Strings (mtodos startsWith() e endsWith()) . . . . . . . . . Modicao de caracteres (mtodos replace(), toLowerCase() e toUpperCase()) Modicao de caracteres de Strings (mtodos concat() e trim()) . . . . . . . . . Seleo de trechos de Strings (mtodo substring()) . . . . . . . . . . . . . . . . . Procura de substrings em Strings (mtodos indexOf() e lastIndexOf()) . . . . . . Um programa que cria e popula um array de inteiros . . . . . . . . . . . . . . . . . Demonstrao da inicializao imediata de arrays . . . . . . . . . . . . . . . . . . Um programa que demonstra a passagem de arrays como argumentos para mtodos Um programa que mostra que arrays se comportam como referncias . . . . . . . . Um programa que demonstra erros potenciais relacionados ndices de arrays . . . A classe ArrayDeQuadrados, que encapsula um array . . . . . . . . . . . . . . . . Um programa que usa a classe ArrayDeQuadrados . . . . . . . . . . . . . . . . . A classe ArrayDeFloats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Um programa que usa instncias da classe ArrayDeFloats . . . . . . . . . . . . . Um programa que demonstra usos da linha de comando . . . . . . . . . . . . . . . Um programa que demonstra o uso de arrays multidimensionais . . . . . . . . . . . . . . . . . . . . . .

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

viii 10.12 10.13 10.14 10.15 10.16 10.17 Uma classe que encapsula um tabuleiro de jogo de damas . . . . . . . . . Um programa que demonstra o uso de arrays multidimensionais irregulares A classe Pessoa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uma classe que usa arrays de instncias da classe Pessoa . . . . . . . . . Uma classe que encapsula arrays de instncias da classe Pessoa . . . . . . Uma classe que demonstra o uso da classe ListaDePessoas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 127 128 129 129 130 142 143 144 145 145 149 150 150 151 152 152 154 155 155 156 157 157

11.1 Um programa que demonstra usos das constantes da classe Math . . . . . . . . . . . . . . 11.2 Um programa que demonstra usos de mtodos de comparao e arredondamento da classe Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Um programa que demonstra usos de mtodos trigonomtricos da classe Math . . . . . . 11.4 Um programa que demonstra usos de mtodos exponenciais da classe Math . . . . . . . . 11.5 Um programa que demonstra usos do mtodo random da classe Math . . . . . . . . . . . 12.1 12.2 12.3 12.4 12.5 12.6 12.7 12.8 12.9 12.10 12.11 12.12 13.1 13.2 13.3 13.4 13.5 13.6 13.7 13.8 A.1 A.2 A.3 A.4 A.5 A.6 A.7 A.8 A.9 A.10 A.11 A.12 A.13 Vrios erros de sintaxe em um programa exemplo . . . . . . . . . . . . . . . . . . . . . Erros em potencial de um programa exemplo . . . . . . . . . . . . . . . . . . . . . . . . Correo dos erros em potencial de um programa exemplo . . . . . . . . . . . . . . . . . Estrutura de um bloco try/catch/finally . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo de programa que processa erros atravs de excees . . . . . . . . . . . . . . . Outro exemplo de programa que processa erros atravs de excees . . . . . . . . . . . . A classe ArrayDeFloats com mtodos que lanam excees . . . . . . . . . . . . . . . Uma classe que representa uma exceo . . . . . . . . . . . . . . . . . . . . . . . . . . . A classe ArrayDeFloats com mtodos que lanam excees ExcecaoDeArray . . . . . Uma classe que representa uma exceo que deve ser pega . . . . . . . . . . . . . . . . . A classe ArrayDeFloats com mtodos que lanam excees ExcecaoRigorosaDeArray Um programa que usa a classe ArrayDeFloats com excees que devem obrigatoriamente ser pegas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Um programa que l as linhas de um arquivo como Strings . . . . . . . . . . . . . . . . . 162 Listagem parcial do arquivo que contm informaes sobre livros de uma livraria . . . . . 163 Classe que representa um Livro de Livraria . . . . . . . . . . . . . . . . . . . . . . . . . 164 Programa que usa a classe LivroLivraria e l os dados de um arquivo . . . . . . . . . . 164 Um programa que grava Strings em um arquivo . . . . . . . . . . . . . . . . . . . . . . . 166 Um programa que l valores do tipo oat de um arquivo . . . . . . . . . . . . . . . . . . 168 A classe ContaBancaria que faz operaes de gravao e leitura em um arquivo . . . . . 170 Programa que usa instncias da classe ContaBancaria (inicializadas a partir de um arquivo)171 Programa que demonstra usos do tipo byte . . . . . . . Programa que demonstra usos incorretos do tipo byte . Programa que demonstra cast (converso) de tipos . . . Programa que demonstra usos do tipo char . . . . . . . Programa que demonstra usos incorretos do tipo char . Programa que demonstra usos do tipo short . . . . . . Programa que demonstra usos incorretos do tipo short Programa que demonstra usos do tipo int . . . . . . . Programa que demonstra usos incorretos do tipo int . . Programa que demonstra usos do tipo long . . . . . . . Programa que demonstra usos incorretos do tipo long . Programa que demonstra usos do tipo float . . . . . . Programa que demonstra usos incorretos do tipo float . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 179 179 180 180 181 182 182 182 183 183 184 185

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

ix A.14 A.15 A.16 A.17 A.18 A.19 A.20 A.21 A.22 A.23 A.24 A.25 A.26 A.27 A.28 A.29 A.30 A.31 A.32 A.33 A.34 A.35 A.36 B.1 B.2 B.3 B.4 B.5 B.6 B.7 B.8 B.9 B.10 B.11 B.12 B.13 Programa que demonstra usos do tipo double . . . . . . . . . . Programa que demonstra usos incorretos do tipo double . . . . . Programa que demonstra usos do tipo boolean . . . . . . . . . . Programa que demonstra usos incorretos do tipo boolean . . . . Programa que demonstra usos da classe String . . . . . . . . . Programa que demonstra usos de concatenao da classe String Programa que demonstra usos incorretos da classe String . . . . Programa que demonstra usos da classe Byte . . . . . . . . . . . Programa que demonstra usos incorretos da classe Byte . . . . . Programa que demonstra usos da classe Character . . . . . . . Programa que demonstra usos incorretos da classe Character . . Programa que demonstra usos da classe Short . . . . . . . . . . Programa que demonstra usos incorretos da classe Short . . . . Programa que demonstra usos da classe Integer . . . . . . . . . Programa que demonstra usos incorretos da classe Integer . . . Programa que demonstra usos da classe Long . . . . . . . . . . . Programa que demonstra usos incorretos da classe Long . . . . . Programa que demonstra usos da classe Float . . . . . . . . . . Programa que demonstra usos incorretos da classe Float . . . . Programa que demonstra usos da classe Double . . . . . . . . . Programa que demonstra usos incorretos da classe Double . . . . Programa que demonstra usos da classe Boolean . . . . . . . . . Programa que demonstra usos incorretos da classe Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 186 186 187 188 189 189 191 191 192 193 193 194 195 196 196 197 197 198 199 199 200 200 202 203 203 204 204 205 206 206 207 207 208 209 210

Exemplo de uso da classe Keyboard para leitura de valores tipo boolean . . . . Exemplo de uso da classe Keyboard para leitura de valores tipo byte . . . . . . Exemplo de uso da classe Keyboard para leitura de valores tipo char . . . . . . Exemplo de uso da classe Keyboard para leitura de valores tipo short . . . . . Exemplo de uso da classe Keyboard para leitura de valores tipo int . . . . . . . Exemplo de uso da classe Keyboard para leitura de valores tipo long . . . . . . Exemplo de uso da classe Keyboard para leitura de valores tipo float . . . . . Exemplo de uso da classe Keyboard para leitura de valores tipo double . . . . . Exemplo de uso da classe Keyboard para leitura de instncias da classe String Mais exemplos de usos da classe Keyboard . . . . . . . . . . . . . . . . . . . . Exemplo de uso da classe Keyboard na classe Aluno . . . . . . . . . . . . . . . Exemplo de uso da classe Aluno com instncias da classe Keyboard . . . . . . A classe Keyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

x

Lista de Tabelas3.1 Tipos bsicos de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

A.1 Combinaes especiais de caracteres e resultados em Strings . . . . . . . . . . . . . . . . 188 C.1 Exemplos de nomes de arquivos e classes geradas pelo compilador . . . . . . . . . . . . . 219 C.2 Alguns erros de compilao e execuo, suas causas e possveis solues . . . . . . . . . . 220 D.1 Comandos bsicos de teclado para o Emacs/Xemacs . . . . . . . . . . . . . . . . . . . . . 224

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

1

Captulo 1 Sobre este livro1.1 O que este livro ?

Este livro contm o material sugerido para as disciplinas Programao Orientada a Objetos I e Programao Orientada a Objetos II dos cursos de Cincia da Computao e Engenharia da Computao oferecidos pela Faculdade de Cincia da Computao da Universidade do Vale do Paraba (UNIVAP). Ao desenvolver este livro, as motivaes principais foram apresentar os conceitos de programao orientada a objetos com clareza e simplicidade, mostrando exemplos e sugerindo problemas prticos e ilustrativos dos conceitos. Muitos livros de programao orientada a objetos, especialmente usando a linguagem Java, concentram-se em aspectos visuais, deixando a teoria necessria para melhor compreenso das tcnicas de lado. 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, deixando a parte visual para os ltimos captulos. Espera-se que com isto os alunos estejam mais confortveis com os conceitos de classes e objetos quando forem utiliz-los em aplicaes grcas. Este livro tambm pode ser usado por outros estudantes interessados em tcnicas de programao orientada a objetos e na linguagem Java, e possivelmente por turmas inteiras, se o professor da disciplina correspondente estiver interessado. Em qualquer caso, por favor informe o autor por e-mail ([email protected]), para comentrios, correes, sugestes e/ou incentivo melhorias. Este livro denitivamente no um guia completo linguagem Java ou orientao a objetos - vrios conceitos tericos e detalhes prticos da linguagem sero deixados de lado. O enfoque dado aos aspectos bsicos e mais prticos. Material complementar este livro pode ser encontrado na pgina http://www1.univap.br/rafael, assim como novas verses e ltimas notcias. Eventualmente um manual do instrutor com todas as respostas aos exerccios propostos ser colocado disposio de instrutores interessados em adotar o livro para seus cursos. Adicionalmente, um site de suporte com exemplos, perguntas e respostas e listas de discusso (ainda em desenvolvimento) ser colocado disposio de usurios, dependendo do interesse e do feedback deste livro para o autor. Esta verso do livro est sendo colocada disposio dos interessados como uma cortesia da Faculdade de Cincia da Computao da Universidade do Vale do Paraba. Ningum tem o direito de cobrar pelo acesso ou cpias deste livro sem a permisso expressa da Faculdade de Cincia da Computao e do autor do livro - em caso de dvida, consulte o autor por e-mail ([email protected]).Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

2

As verses do livro so identicadas por sua data - esta verso foi compilada em 29 de maio de 2000, e contm 164 programas e 326 exerccios, sendo que 132 so de uma estrela, 106 so de duas estrelas, 62 so de trs estrelas, 19 so de quatro estrelas e 7 so de cinco estrelas. Verique regularmente a pgina http://www1.univap.br/rafael para novas verses, anncios e informaes.

1.2 Como usar este livroEsta verso deste livro est disponibilizada como um livro digital, no formato PDF, que pode ser lido pelo software Adobe Acrobat Reader. Este software distribudo gratuitamente pela Adobe, e pode ser copiado do site da Adobe (http://www.adobe.com), onde verses para diversos sistemas operacionais podem ser encontradas. Para usar este livro na sua forma eletrnica, basta copi-lo para um computador com o Acrobat Reader instalado e abri-lo usando o Acrobat Reader. O livro tambm pode ser impresso atravs do Adobe Acrobat Reader, mas vrias das caractersticas interessantes disponveis na verso digital (links diretos para sees, listagens e guras, ndices que funcionam como links, etc.) sero, evidentemente, perdidas. Adicionalmente, novas verses com correes e modicaes podem estar sendo liberadas brevemente, invalidando impresses anteriores. FCC/UNIVAP Usurios de computadores que rodam Linux nos laboratrios da FCC podem acessar a ltima verso deste livro diretamente dos seus terminais com o comando acroread -geometry 800x555 POO/POO.pdf. O parmetro -geometry 800x555 faz com que a tela no aparea maximizada, garantindo a visibilidade dos menus e barra da janela do acroread.

1.3

Sobre a organizao deste livro

Cada captulo deste livro dedicado a um tema especco que pode ser coberto em uma ou mais aulas tericas e de laboratrio. Os captulos (presentes nesta verso) e seu contedo so: Captulo 2: Introduo a 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 3: Criando Classes em Java mostra como criamos classes em Java usando os tipos de dados e mecanismos de criao de mtodos. Apndice A: Tipos de Dados em Java apresenta os diferentes tipos de dados e classes bsicas da linguagem Java, incluindo caractersticas e problemas relacionados representao de tipos e classes nativas em Java e vrios programas-exemplo. Apndice B: A classe Keyboard apresenta a classe Keyboard, adaptada do livro An Introduction to Computer Science Using Java, de Samuel N. Kamin, M. Dennis Mickunas e Edward M. Reingold, que permite a leitura de valores de tipos nativos do teclado, adicionando exibilidade aos programas.

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

3

1.3.1 Planos para futuras verses deste livroFuturas verses deste livro contero material sobre: Interfaces e mecanismo de herana com interfaces e implementaes. O modicador final e suas aplicaes.

1.3.2 Convenes usadas neste livroPara simplicar a leitura deste livro, fontes diferentes sero usadas para destacar alguns elementos do texto. Nomes de classes, mtodos, pacotes, comandos, etc. sero mostrados em fonte proporcional. Conceitos apresentados pela primeira vez sero mostrados em fonte itlica. Adicionalmente, programas includos no texto sero mostrados com diferentes cores para facilitar a leitura: comentrios em vermelho, conjuntos de caracteres em cinza, palavras reservadas em diferentes cores de acordo com sua categoria. As linhas dos programas tambm sero numeradas para fcil referncia. Alguns tpicos, exerccios, arquivos, ferramentas, etc. mencionados neste livro esto disponveis somente para alunos da Faculdade de Cincia da Computao da Universidade do Vale do Paraba. Estes tpicos estaro marcados com FCC/UNIVAP.

1.3.2.1 Convenes para os exerccios propostos Ao nal de cada captulo, alguns exerccios sero apresentados. Estes exerccios sero marcados com um nmero de estrelas que indicam a sua diculdade: Uma estrela ( ): Exerccios tericos ou prticos que podem ser resolvidos rapidamente, geralmente atravs de consultas a programas mostrados ou respostas de outros exerccios, e modicao de exemplos ou outras respostas. Em muitos casos podem ser resolvidos mentalmente, isto , sem a necessidade de escrever, compilar e executar programas. Duas estrelas ( ): Exerccios tericos ou prticos que exigem um pouco mais de raciocnio e modicaes ligeiras de exemplos apresentados. Exerccios desta categoria geralmente precisaro ser compilados e executados para vericao dos resultados. Trs estrelas ( ): Exerccios que requerem compreenso mais completa dos conceitos envolvidos, mas mesmo assim podem ser resolvidos com base em exemplos ou respostas a outros exerccios. Quatro estrelas ( ): Exerccios que requerem compreenso mais profunda dos conceitos e que geralmente no podem ser resolvidos tomando como base exemplos ou respostas a outros exerccios. Cinco estrelas ( ): Exerccios que requerem a soluo de um problema mais completo e complexo, envolvendo vrios conceitos diferentes da disciplina. Estes exerccios podem servir como base para projetos mais interessantes. FCC/UNIVAP Alguns exerccios esto marcados com Novo ! : estes exerccios foram includos nos captulos algum tempo depois da disponibilizao ocial dos mesmos. Estes novos exerccios no sero usados para criao das provas, mas devem ser feitos para aumentar a compreenso dos tpicos relacionados.Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

4

1.4

Porqu Java ?

Existem diversas linguagens de programao orientadas a objeto, cada uma com diferentes caractersticas e apelos de mercado, educacionais ou acadmicos. Nesta seo, as razes da escolha de Java sobre outras possveis linguagens (C++, Eiffel, Smalltalk) sero apresentadas. Java obrigatoriamente orientada a objetos. Algumas linguagens permitem que objetos e variveis existam em diversos pontos de um programa, como se estivessem desatreladas de qualquer estrutura exceto funes. Em Java, todas as variveis e mtodos devem estar localizados dentro de 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 e complexos. A simplicidade se reete 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 congurao e incluso de bibliotecas. Java porttil. O cdigo-fonte de um programa ou classe em Java pode ser compilado em qualquer computador, executando qualquer sistema operacional, que tenha uma mquina virtual Java adequada (veja o apndice C). Adicionalmente, as classes criadas podem ser copiadas e executadas em qualquer computador nas mesmas condies, aumentando a utilidade da linguagem atravs da independncia de plataformas. Java gratuita. A mquina virtual Java, mencionada acima, est disposio para cpia no site da Sun e em vrios outros. Compiladores simples, de linha de comando (sem interfaces visuais elaboradas) fazem parte do JDK, o ambiente de desenvolvimento gratuito de Java. Aplicaes em Java precisam de uma mquina virtual para sua execuo, mas no existem sequer royalties de distribuio, fazendo de Java uma plataforma extremamente econmica para desenvolvedores e usurios nais. 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 tem 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 permitem melhor tratamento de erros em tempo de execuo dos programas. Java tem bibliotecas prontas para diversas aplicaes. As bibliotecas de classes de Java contm vrias classes que implementam diversos mecanismos de entrada e sada, acesso Internet, manipulao de Strings de alto nvel, poderosas estruturas de dados, utilitrios diversos e um conjunto completo de classes para implementao de interfaces grcas. 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 quemesmo que o compilador usado no tenha interface grca similar de linguagens visuais, os programas criados com este compilador podem ter interfaces grcas complexas.

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

5

1.4.1 Tipos de Programas em JavaExistem basicamente trs tipos de programas que podem ser criados em Java: Classes para representao de modelos. Classes so usadas para representar, em linguagem de programao, modelos e abstraes de dados como os mostrados no captulo 2. Classes no podem ser executadas diretamente, mas instncias destas classes podem ser usadas dentro de aplicaes e applets. Criao de classes em Java ser vista na seo 3.2. Classes como conjuntos de rotinas. Classes podem conter somente mtodos (rotinas) ao invs de representar dados. Estas classes funcionam como uma biblioteca de mtodos ou funes que tem algo em comum. A criao deste tipo de classes ser vista na seo 4.5 (listagem 4.8). Aplicaes ou Programas. Aplicaes ou programas podem ser executadas a partir de um terminal do Linux ou da janela do MS-DOS, podendo envolver ou no maior interao com o usurio, e podendo ou no ter uma interface grca. Criao de programas em Java ser coberta no captulo 4. Applets. Applets so programas executveis em Java que podem ser embutidos em pginas da Internet. Sua execuo controlada pelo navegador que est sendo usado para ler as pginas. Por razes de segurana, applets so limitadas nas tarefas que podem fazer, e obrigatoriamente devem ter interface grca. Para este curso, somente sero criadas e usadas classes e programas, dada a sua simplicidade e abrangncia de aplicaes.

1.5

Informaes para alunos da FCC/Univap

Esta seo contm informaes sobre o uso deste livro na FCC/Univap nas disciplinas Programao Orientada a Objetos I e Programao Orientada a Objetos II.

1.5.1

Sobre a disciplina Programao Orientada a Objetos I

A disciplina Programao Orientada a Objetos I visa levar os estudantes a: Compreender a metodologia de programao orientada a objetos; Compreender os conceitos e aplicaes de encapsulamento, herana, polimorsmo e sobrecarga; Entender como os conceitos podem ser usados para criao de programas orientados a objetos na linguagem Java; Entender os conceitos e funcionamento de algumas das classes mais comuns de Java. As unidades da disciplina Programao Orientada a Objetos I (com os captulos correspondentes neste livro) so: 1. Introduo aos conceitos de Programao Orientada a Objetos e comparao com Programao Procedural. 2. Fundamentos do Paradigma Programao Orientada a Objetos: Tipos Abstratos de Dados, Classes e Objetos (Captulo 2), Encapsulamento (Captulo 2), Herana, Polimorsmo e Sobrecarga. Implementao dos conceitos em Java. 3. Programao em Java: Conceitos Bsicos, Comandos de Iterao, Comandos de Deciso, Vetores de Dados. 4. Classes e Mtodos para Entrada e Sada.Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

6

1.5.2 Sobre a disciplina Programao Orientada a Objetos IIA disciplina Programao Orientada a Objetos II visa levar os estudantes a: Compreender as vantagens e problemas da extenso de classes nativas de Java; Conhecer e ser capaz de criar programas com interfaces grcas em Java; Compreender os mecanismos e a implementao de programas com eventos; Conhecer ferramentas da linguagem Java para interao pela Internet. As unidades da disciplina Programao Orientada a Objetos II (com os captulos correspondentes neste livro) so: Introduo classes de estruturas de dados genricas de Java: String, Vector, Hashtable, Classes que representam tipos nativos. Programao usando sockets e usando URLs para obter dados via Internet. Programao de aplicaes com interfaces grcas: o Abstract Windowing Toolkit. Programao com uxo linear e programao com eventos: registrando e processando eventos.

1.6

Agradecimentos

Este livro no teria sido possvel sem o incentivo e pacincia da minha esposa, Yukari, qual sou grato por muitas outras coisas. Agradeo tambm colegas da Univap pelo incentivo criao deste livro, e aos alunos que colaboraram de uma forma ou de outra.

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

7

Captulo 2 Introduo a Programao Orientada a Objetos2.1 O que so modelos ?

Modelos so representaes simplicadas de objetos, pessoas, itens, tarefas, conceitos, idias, etc., usados comumente por pessoas no seu dia-a-dia, independente do uso de computadores. A simplicao inerente aos modelos nos permite armazenar, representar, processar e trocar informaes de maneira eciente. Muitas vezes a simplicao necessria para que no tenhamos que representar informaes inteis em determinado contexto. Por exemplo, consideremos a tarefa de representar os dados relativos uma pessoa: se estamos pensando em uma pessoa que faz parte de uma folha de pagamento de empregados, representaremos o nome, o cargo e o salrio desta pessoa. Se estamos considerando que esta pessoa faz parte do banco de dados de pacientes de um mdico, representaremos o nome, o sexo, a idade, a altura, o peso e o histrico de consultas desta pessoa. Ainda, se queremos representar os dados de um amigo ou conhecido na nossa lista telefnica particular, usaremos o seu nome, seu endereo e seu telefone. Podemos notar que os trs modelos citados representam, cada um a seu modo, uma pessoa, e no existe necessidade nem sentido em criar um super modelo capaz de representar cada dado relativo uma pessoa e usar este modelo em cada ocasio em que se faz necessrio: seria absurdo ou ao menos sem propsito representarmos o histrico de consultas de uma pessoa em uma lista telefnica pessoal ou representarmos o salrio na nossa lista telefnica. Modelos, alm de conterem dados necessrios para representar um objeto ou conceito qualquer, podem conter operaes relativas aos dados contidos neles. Por exemplo, no modelo pessoa-paciente descrito acima, poderamos ter as operaes adiciona-informao-ao-histrico, que adicionaria informaes recentes ao histrico do paciente, ou verifica-obesidade, que usaria os dados sexo, idade, altura e peso para vericar se aquela pessoa est com o peso ideal para sua categoria. Similarmente, podemos imaginar uma operao calcula-horas-extras no modelo pessoa-empregado. Estas operaes tem sentido somente para os modelos que representam dados que podem ser processados por eles: no h sentido em termos a operao verifica-obesidade disponvel para uso na nossa lista telefnica. Modelos podem ser reutilizados innitamente para representar diferentes objetos, pessoas ou itens: nos exemplos mostrados acima, o modelo adequado seria usado para cada pessoa distinta na lista telefnica ou na folha de pagamento. Considere a representao dos dados dos livros em uma biblioteca: um modelo que contenha os dados ttulo, autor, nmero-de-registro, editora e outros poderia ser usado para representar os livros, mas cada um dos livros ter um ttulo, autor, etc. diferente dos outros.Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

8

Modelos podem tambm conter outros modelos: se resolvermos representar os dados de uma data usando um modelo chamado, por exemplo, data-de-calendrio que contenha valores para representar dia, ms e ano, podemos, sempre que a representao de uma data for necessria, usar o modelo criado ao invs de representarmos separadamente o dia, ms e ano desta data. Em outras palavras, ao invs de separadamente usarmos valores para dia, ms e ano em outros modelos, podemos usar o data-de-calendrio que foi criado anteriormente. Por exemplo, em um modelo mais completo para os livros da biblioteca, poderamos incluir a data-de-aquisio que seria baseada no modelo data-de-calendrio (contendo os dados deste). Em resumo, a criao e uso de modelos uma tarefa natural e a extenso desta abordagem programao deu origem ao paradigma Programao Orientada a Objetos.

2.2

O que Programao Orientada a Objetos ?

Programao Orientada a Objetos ou, abreviadamente, POO, um paradigma de programao onde se usam objetos, criados a partir dos modelos descritos anteriomente, para representar e processar dados usando programas de computadores. Em Programao Orientada a Objetos, os dados pertencentes aos modelos so representados por tipos de dados nativos, caractersticos da linguagem de programao, ou de outros modelos criados pelo programador. As principais diferenas entre os modelos naturais descritos na seo 2.1 e os articiais 1 criados em programas orientados a objetos so a limitao nas tarefas que um computador pode executar e a limitao da prpria linguagem de programao. Como exemplo das diferenas entre modelos do mundo real e os implementados em linguagens de programao, consideremos a operao adiciona-informao-ao-histrico, do modelo pessoa-paciente, descrito anteriormente. Podemos imaginar que no mundo real esta operao se resume a escrever em uma cha prpria as informaes adicionais, que provavelmente estaro juntas s informaes prvias (em uma cha, por exemplo). A implementao deste modelo e operao em programas de computador provavelmente ter que ser feita usando arquivos para armazenar as informaes, e provavelmente existiro restries quanto ao tipo e tamanho das informaes a serem adicionadas - possivelmente somente informaes textuais podero ser armazenadas, mas no grcos. Modelagem dos dados e operaes nestes dados em um programa de computador, apesar das limitaes, permite processamento de dados de forma mais coesa, natural e menos suscetvel erros de programao. Por outro lado, mais ateno tem que ser dada ao design dos modelos que sero implementados. Os detalhes de implementao de modelos em Java sero dados no captulo 3, mas antes alguns detalhes tericos precisam ser elucidados.

2.3 Classes, Objetos e InstnciasEmbora o paradigma seja conhecido como Programao Orientada a Objetos, programadores que o usam criam classes, que so relacionadas diretamente com os modelos descritos anteriormente.modelo, por se tratar de uma simplicao do mundo real, um pouco articial. Os termos natural e articial so usados para distinguir a linguagem usada para descrever os modelos: nos modelos imaginrios apresentados nesta seo podemos usar palavras para descrever os atributos e as operaes em cada modelo, mas quando usamos uma linguagem de programao estamos limitados ao vocabulrio articial desta, da os termos usados na distino.1 Todo

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

9

Classes so escritas com os recursos da linguagem de programao orientada a objetos para implementao dos modelos, mas elas no podem ser utilizadas diretamente nos programas - classes so somente moldes ou formas que representam os modelos abstratamente. Nos modelos e classes, sabemos que o dado endereo do modelo lista-telefnica representa o endereo, mas no h como determinar de quem o endereo, ou seja, o dado representa uma informao genrica e no uma informao sobre uma pessoa cujos dados so usados no modelo. Para que possamos representar dados especcos usando classes necessrio que criemos objetos, instncias, exemplos ou amostras desta classe. Um objeto ou instncia (termos mais comumente usados) uma materializao da classe, e pode ser usado para representar dados. Para cada item que queiramos representar no nosso programa, devemos criar um objeto da classe adequada. Um exemplo mais detalhado dado na gura 2.1.

Objeto Automvel Nmero de passageiros: 5 Velocidade Mxima: 200 km/h areo ?: no terrestre ?: sim

Objeto Jato Comercial

Classe Veculo Nmero de passageiros Velocidade Mxima areo ? terrestre ?

Nmero de passageiros: 260 Velocidade Mxima: 950 km/h areo ?: sim terrestre ?: no

Objeto Motocicleta Nmero de passageiros: 2 Velocidade Mxima: 250 km/h areo ?: no terrestre ?: sim

Objeto Navio Nmero de passageiros: 450 Velocidade Mxima: 90 km/h areo ?: no terrestre ?: no

Figura 2.1: Uma classe veculo e vrios objetos desta classe. Na gura 2.1 temos uma classe Veculo e quatro objetos desta classe. Cada objeto um veculo, ento cada objeto ter as mesmas informaes (Nmero de passageiros, areo, etc.), mas os valores destas informaes (suas caractersticas) sero diferentes para cada objeto. Podemos dizer que a classe representa todos os objetos de maneira abstrata, sem entrar em detalhes de cada um. Nota-se que neste exemplo a classe Veculo contm somente valores ou atributos, mas no operaes.

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

10

2.4

Encapsulamento

Nos exemplos descritos at agora, os dados relativos um modelo qualquer foram agrupados ou encapsulados em uma classe. O encapsulamento de dados em uma classe uma das caractersticas mais importantes e teis de Programao Orientada a Objetos. O encapsulamento dos dados e operaes para processamento destes dados nos garante que, ao criarmos instncias ou objetos desta classe, todos os dados e operaes necessrios para representar o objeto e processar seus dados estaro presentes. Outra funo importante do encapsulamento a ocultao de informao: se uma classe bem preparada, ela pode ter operaes que permitam a um programador modicar e ler os dados representados, mas no diretamente, para garantir a integridade destes dados. Toda a manipulao dos dados seria feita atravs de interfaces que seriam operaes especcas para manipulao dos dados das classes. Como exemplo, consideremos a classe Data, que implementa o modelo de mesmo nome, descrito anteriormente. Esta classe conteria valores para representar o dia, ms e ano da data. Se um programador fosse usar um objeto desta classe em um programa e tivesse livre acesso aos dados encapsulados, ele ou ela poderia tentar colocar valores invlidos nos dados, como por exemplo, 45 no valor que representa o dia. Seria desejvel que o valor que representa o dia casse escondido dentro da classe, e que a nica maneira de modicar este valor fosse atravs de uma operao que vericaria se o valor passado vlido.

2.5

Mais Exemplos de Classes e Objetos

Para exemplicar melhor os conceitos de modelos, classes, objetos, encapsulamento e operaes, veremos alguns exemplos mais detalhados nesta seo. Exemplo 1: Uma Lmpada Incandescente Consideremos um modelo para uma lmpada incandescente comum - este modelo tem alguns atributos e operaes que so ilustrados pela gura 2.2.

Atributos Estado (ligada ou desligada)

Operaes Ligar Desligar

Figura 2.2: Uma lmpada, seus atributos e operaes Uma lmpada incandescente comum tem um estado, que pode ser ligada ou desligada. Este estado pode ser modicado atravs das operaes ligar e desligar. Desta forma, todo o mecanismo de funcionamento de lmpadas estaria encapsulado na classe mostrado na gura 2.2. Instncias da classe lmpadaClique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

11 poderiam ser usadas para representar lmpadas especcas, que a qualquer momento podem ter estados diferentes (uma lmpada pode estar ligada e outra, desligada). Uma classe que representasse este modelo poderia, atravs do encapsulamento, garantir que um programador que usasse instncias da classe lmpada poderia modicar seu estado acesa/apagada somente atravs das operaes ligar/desligar. Desta forma, quando vrias instncias ou objetos da classe lmpada forem criados (por exemplo, lmpada_sala, lmpada_quarto, etc.) cada uma ter seu atributo acesa/apagada e poder ser ligada/desligada atravs da suas operaes ligar/desligar. Nota-se que alguns atributos bvios que denem uma lmpada incandescente foram deixados de lado, como consumo em watts, tamanho e cor do bulbo. A deciso sobre o que deve ou no pertencer um objeto um pouco arbitrria, e dependente da aplicao - para um exemplo simples, os dados mostrados na gura 2.2 bastam, enquanto que para uma aplicao real de controle de qualidade, por exemplo, dados como nmero do lote, data de fabricao e unidade produtora seriam necessrios. Exemplo 2: Uma data Consideremos o exemplo de uma data simples (como a de um evento como aniversrio, etc.) - esta data tem alguns atributos e operaes que so mostrados na gura 2.3.

Atributos Dia Ms Ano

March 2000

Operaes Ajusta dia Ajusta ms Ajusta ano Ajusta simultaneamente dia, ms e ano Imprime data

Figura 2.3: Uma data, seus atributos e operaes Uma data conforme o modelo acima tem os atributos dia, ms e ano, que representam valores distintos com faixas de valores aceitveis distintas. O ms pode ser representado por um valor numrico de 1 a 12 ou pelos nomes dos meses (Janeiro, Fevereiro, etc.). Pode-se imaginar que algumas das operaes da classe que implementa o modelo data so redundantes para que ajustar ou inicializar os valores dia, ms e ano atravs de operaes quando podemos fazer isto diretamente ? A resposta simples: quando a classe for implementada em uma linguagem de programao, os atributos sero representados por tipos de dados dependentes da linguagem de programao. Por exemplo, o valor dia ser representado por um valor numrico, que pode representar valores numa faixa muito mais ampla do que o necessrio para representar um dia. Isso signica que um usurio da classe data poderia, por desateno, atribuir o valor 45 ao dia. Para impedir que valores indevidos sejam colocados nos atributos, podemos fazer com que eles passem por um ltro, que so operaes que, antes de atribuir valores atributos, vericam se estes valores soClique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

12 realmente vlidos. Uma verso simplicada da operao ajusta_dia2 na classe data poderia vericar se um valor passado pelo usurio adequado, e caso no seja, mostre uma mensagem de erro. As operaes consideradas neste exemplo permitem que valores sejam atribudos separadamente para os atributos dia, ms e ano, ou todos de uma vez atravs da operao ajusta_dia_ms_ano. posvel tambm solicitar s instncias da classe data que imprimam os valores atravs da operao imprime_data. Exemplo 3: Um registro acadmico de aluno O modelo do prximo exemplo representa uma registro acadmico simplicado de um aluno em uma faculdade. Esta cha contm os atributos nome, nmero_de_matrcula, data_de_nascimento, ano (em que se encontra no curso), turma e _bolsista. Podemos pensar neste registro como um formulrio a ser preenchido com os valores acima. A gura 2.4 mostra os atributos e operaes de uma classe que implementa este registro.

Atributos Nome Nmero de Matrcula Data de Nascimento Ano Turma Tem bolsa de estudos ?

Operaes Entra os dados Imprime os dados Calcula a mensalidade

Figura 2.4: Um registro de aluno, seus atributos e operaes Na gura 2.4, alm dos atributos descritos anteriormente, temos as operaes entra_dados, que seria encarregada de vericar se dados passados por um usurio so condizentes com os esperados dentro da classe, e a operao imprime_dados que poderia imprimir os dados da classe formatados como um relatrio. Uma operao interessante que pode ser denida nesta classe a calcula_mensalidade que, a partir dos valores dos atributos ano (em que se encontra no curso) e _bolsista de uma instncia da classe, calcule o valor da mensalidade a ser paga. Este mais um exemplo de uso das operaes embutidas em um objeto - ao invs de entrarmos o valor da mensalidade manualmente em um registro acadmico de aluno (no modelo do mundo real), possibilitamos que valores da mensalidade sejam calculados pela classe (usando uma linguagem de programao e o conceito de operaes). Exemplo 4: Um modelo de computador (para compra em loja virtual) Consideremos o seguinte exemplo: uma empresa de computadores pessoais oferece, via uma loja virtual na Internet ou um catlogo de vendas por encomenda, a possibilidade do usurio escolher a congurao exata do computador que quer comprar. Para isto, criou uma classe para representar os computadores, mostrada na gura 2.5.nomes dados s operaes so diferentes dos mostrados nas guras dos exemplos: os nomes mostrados nos textos seguem regras das linguagens de programao enquanto os das guras so mais descritivos.2 Os

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

13

Atributos Processador MB de memria RAM GB de disco Tamanho do monitor

Operaes Entra os dados Imprime os dados Calcula o preo

Figura 2.5: Um modelo de computador, seus atributos e operaes Na gura 2.5 temos todos os atributos necessrios para congurar o computador, alm das operaes entra_dados, usada para que um cliente entre os dados do computador que quer, imprime_dados, para impresso de um relatrio de compras ou nota scal e calcula_preo para que o preo seja calculado de acordo com a congurao escolhida. Da mesma maneira que com a classe data mostrada no exemplo 2, poderamos dispensar as operaes entra_dados e imprime_dados, mas poderamos ter um problema similar: considerando que cada modelo de computador tem uma limitao na quantidade de memria RAM que pode ter, seria imprudente deixar que um usurio entrasse um valor arbitrrio no campo quantidade_memria_RAM. Da mesma maneira, existem apenas poucos tipos de monitores de vdeo, e o usurio no deveria escolher vontade, mas somente um dos tipos disponveis. A garantia de que somente valores vlidos sero entrados nos atributos pode ser feita atravs de operaes que vericam os valores entrados, ltrando os no-vlidos. Exemplo 5: Uma conta bancria simplicada Como ltimo exemplo nesta seo, consideremos um modelo de uma conta bancria simples, que tem somente um correntista e no tem outras contas vinculadas. A gura 2.6 mostra um modelo grco deste modelo, com os atributos e operaes considerados importantes para ele.

Atributos Nome do correntista Nmero da conta Data de abertura Saldo conta especial ?

Operaes Abre a conta (entra os dados) Retira valor Deposita valor Imprime o saldo

Figura 2.6: Uma conta bancria, seus atributos e operaes Na gura 2.6 temos os atributos que denem uma conta bancria e algumas operaes que so variaes de outras j vistas em outros exemplos nesta seo. Duas operaes interessantes so deposita_valor e retira_valor: a primeira adiciona um valor ao atributo saldo enquanto que a segunda subtrai, mas ambas devem implementar mecanismos que garantam o funcionamento correto da classe: devem proibirClique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

14 o depsito de valores negativos e retirada de valores acima do saldo, exceto quando a conta for especial (atributo _conta_especial).

2.6

Exerccios do captulo 2

Para os exerccios deste captulo, considere que as classes que so pedidas precisam apenas ter o nome e a descrio de seus atributos e operaes, conforme mostrado nas guras dos exemplos da seo 2.5. Exerccio 2.1: Considere a classe lmpada mostrado no exemplo 1 da seo 2.5 (gura 2.2). Considere que uma lmpada possa ter um terceiro estado, queimada. Que atributos e operaes deveriam ser ento representados pela classe ? Exerccio 2.2: Escreva uma classe que represente uma hora (incluindo minutos e segundos). Dica: use o exemplo 2 da seo 2.5 (gura 2.3) como referncia. Exerccio 2.3: Usando a classes criada no exerccio 2.2 e a classe data mostrada no exemplo 2 da seo 2.5, crie uma classe datahora que represente simultaneamente uma data e uma hora. Dica: no necessrio reescrever classes, basta aproveitar classes j existentes nas que sero criadas (veja o exemplo 3 da seo 2.5 e a gura 2.4). Exerccio 2.4: Escreva uma classe que represente um livro, do ponto de vista de uma biblioteca. Que atributos e operaes devem ser representados pela classe ? (veja tambm o exerccio 2.5). Exerccio 2.5: Escreva uma classe que represente um livro, do ponto de vista de uma livraria. Que atributos e operaes devem ser representados pela classe ? (veja tambm o exerccio 2.4). Exerccio 2.6: Usando como base os exerccios 2.4 ou 2.5, escreva uma classe dicionrio para representar dicionrios de lnguas (ex. portugus-ingls, latim-aramaico, etc.) Que atributos e operaes devem ser representados pela classe ? Quais as diferenas entre a classe usada como referncia e a classe dicionrio ? Exerccio 2.7: Escreva uma classe professor, nos moldes da classe registro_acadmico (veja o exemplo 3 da seo 2.5 e gura 2.4) que contenha dados relativos um professor de uma disciplina qualquer. Exerccio 2.8: Neste captulo vimos algumas classes que contm atributos e operaes ou somente atributos, mas tambm possvel o desenvolvimento e uso de classes que contenham somente operaes. Escreva uma classe arremesso_de_dado, que modele o resultado de um dado arremessado (ou seja, um valor aleatrio), usando somente operaes (no necessrio armazenar os resultados, somente imprim-los).

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

15

Exerccio 2.9: Considerando o exerccio 2.8, imagine uma classe variante da classe arremesso_de_dado, que armazene quantas vezes um nmero saiu a cada vez que o dado foi arremessado. Para isto, alguns atributos e operaes devero ser criados. Crie esta classe variante da classe arremesso_de_dado. Exerccio 2.10: Crie uma classe carta_de_baralho. Dica: como supomos que instncias desta classe no devero mudar seus atributos depois de criadas, esta classe dever ter atributos (em contraste com a classe arremesso_de_dado do exerccio 2.8). Exerccio 2.11: Escreva uma classe que represente um time_de_futebol. Que atributos e operaes devem ser representados pela classe ? Exerccio 2.12: Escreva uma classe que represente uma msica (para uso em um banco de dados sobre msicas, por exemplo). Que atributos e operaes devem ser representados pela classe ? Exerccio 2.13: Escreva uma classe que represente um ponto no espao cartesiano de duas dimenses. Dica: imagine um grco no qual voc tenha que marcar ou desenhar pontos, que sero instncias desta classe ponto. Que atributos e operaes devem ser representados por esta classe ? Exerccio 2.14: Escreva uma classe relgio_despertador que use duas instncias da classe hora (exerccio 2.2) para representar a hora atual e a hora em que o despertador dever tocar. Que atributos e operaes devem ser representados por esta classe ? Exerccio 2.15: Considerando o exerccio 2.13, escreva uma classe linha que una duas instncias da classe ponto. Que atributos e operaes devem ser representados por esta classe ? Exerccio 2.16: Escreva uma classe que represente um polgono. Que atributos e operaes devem ser representados pela classe ? Inclua operaes para calcular alguns associados ao polgono (rea, permetro, etc.). Quais seriam as diferenas entre as instncias quadrado e tringulo da classe polgono ? Exerccio 2.17: Considere a gura 2.1. Nela, vrios tipos de veculos esto representados, mas podemos ver que os exemplos fazem parte de duas categorias principais: veculo_areo e veculo_terrestre. Escreva as classes veculo_areo e veculo_terrestre, comentando as diferenas e pontos comuns entre as classes.

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

16

Exerccio 2.18: Considere a classe criada no exerccio 2.11. Escreva uma classe partida_de_futebol usando dois time_de_futebol. Que atributos e operaes adicionais seriam necessrios para a classe partida_de_futebol ? Dica: evite reescrever a classe time_de_futebol. Exerccio 2.19: Escreva uma classe que represente um CD_de_msica, usando vrias instncias da classe msica (desenvolvida no exerccio 2.12). Considere que diversas instncias desta classe podem ser criadas, e algumas instncias da classe CD_de_msica podem conter somente uma ou duas instncias de msica, outras podem conter mais de vinte instncias de msica. Como resolver este problema ? Exerccio 2.20: Escreva uma classe que represente uma equao do segundo grau. Que atributos e operaes devem ser denidos nesta classe ? Como fazer com que a classe represente as trs possibilidades de soluo destas equaes ( < 0, = 0 e > 0) ?

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

17

Captulo 3 Criando Classes em Java3.1 Introduo

No captulo 2 vimos como programao orientada a objetos pode ser usada para modelagem de objetos reais ou no para representao em programas de computador. Este captulo apresenta a complementao prtica terica, atravs da explicao dos conceitos relativos implementao de classes e objetos em Java. Para melhor aproveitamento destas aulas voc deve ter acesso a um computador com o compilador e interpretador Java instalados e um editor de textos apropriado. Veja no apndice C informaes sobre onde o ambiente gratuito de desenvolvimento pode ser encontrado para download ou cpia. FCC/UNIVAP Alunos da FCC/Univap j tem o JDK instalado e pronto para o uso: uma verso atual do JDK e do editor de textos sugerido j est instalada nos computadores rodando Linux ou terminais que possibilitem o acesso contas no Linux nos laboratrios de informtica da Faculdade de Cincia da Computao.

3.2

Criando Classes em Java

Para criar uma classe voc primeiramente precisar edit-la em um editor de textos de sua preferncia. Este editor de textos deve ser capaz de gravar arquivos em formato ASCII - editores como Microsoft Word no so aconselhveis, uma vez que os arquivos criados so gravados em formato binrio. Verique o apndice C para informaes sobre editores de texto sugeridos para uso em Windows e Unix e maiores informaes. Ao digitar uma classe ou programa em Java, alguns cuidados devem ser tomados: Ao gravar o arquivo que contm a classe, a extenso dada deve ser .java - em sistemas operacionais que fazem distino entre nomes e extenses maisculas e minsculas, a extenso deve ser em minsculas. Cuidado especial deve ser tomado com editores de texto que tentam colocar extenses prprias nos arquivos gravados por eles. Java considera que caracteres maisculos e minsculos so diferentes em programas: nomes dos identicadores nos programas so considerados diferentes se qualquer dos seus caracteres for diferente. Por exemplo, os identicadores nome, Nome, NOME e NoMe so considerados diferentes, e uso indiscriminado das diversas formas pode gerar erros de compilao.

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

18 Em muitas estruturas de classes e programas, chaves ({ e }) so usadas para marcar blocos dos programas. Para cada smbolo { deve haver um smbolo } correspondente, caso contrrio erros de compilao podem ocorrer. Todos os comandos em Java (declaraes, chamadas de mtodos, etc.) so terminados por pontos-evirgulas (;), mas algumas denies (nomes das classes, nomes e argumentos dos mtodos, declaraes de laos, etc.) no devem ser terminados por pontos-e-virgulas - descuido na colocao dos pontos-e-virgulas pode levar a erros de compilao e execuo. extremamente aconselhvel que se coloque cada classe em Java em um arquivo separado, ou seja, que se evite colocar todos os programas e classes em um nico arquivo. Adicionalmente, colocar cada classe em um arquivo com o nome da classe tambm aconselhvel - por exemplo, uma classe chamada aluno deve ser escrita no arquivo aluno.java. A estrutura bsica de uma classe mostrada na listagem 3.1. Esta classe est completamente vazia, mas sua sintaxe est correta, e ela pode ser compilada pelo compilador sem problemas. Listagem 3.1: Uma classe vazia em Java1 2 3 4 5 6 7 8

/* Esta a nossa primeira classe, que deve estar muito bem documentada. Autor: Rafael Santos Data: 10 de Maro de 2000 */ class NomeDaClasse { // Tudo o que estiver entre as duas chaves pertencer classe } // fim da classe NomeDaClasse

Algumas caractersticas importantes que podemos notar na listagem 3.1 so: Toda classe em Java comea com a palavra mgica class, que deve ser digitada totalmente em letras minsculas (linha 5 da listagem 3.1). Aps a palavra class, o nome da classe deve ser digitado. Este nome no pode conter espaos, deve comear com uma letra, podendo ter nmeros e o caracter sublinhado (_) em seu nome (linha 5 da listagem 3.1). Tradicionalmente os primeiros caracteres de cada palavra do nome da classe so em caracteres maisculos, como, por exemplo, NomeDaClasse, IdentificaoDoAluno, UmNomeDeClasseExcessivamenteLongo ou Data, mas basta que as regras sejam seguidas para que seja um nome de classe vlido. O corpo de uma classe comea com o caracter { (linha 6 da listagem 3.1) e termina com o caracter } (linha 8 da listagem 3.1) - o que estiver entre estes dois caracteres ser parte da classe. Comentrios podem aparecer livremente em qualquer parte do arquivo que contm as classes. Comentrios sero ignorados pelo compilador, mas, quando bem escritos, servem para dar valiosas informaes sobre o cdigo. Existem dois tipos de comentrios mais usados em Java: comentrios em uma linha so comentrios que comeam com os caracteres //, e so ignorados pelo compilador at o nal da linha onde aparecem (linha 3 da listagem 3.1), e comentrios em mltiplas linhas, que so comentrios que so iniciados com os caracteres /* e se extendem at a prxima ocorrncia dos caracteres */ (linhas 1 a 4 da listagem 3.1). No existe uma obrigatoriedade nos espaamentos e tabulaes das linhas e comandos dos programas, embora estas sejam importantes para a clareza do programa.Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

19 De posse destas informaes bsicas a respeito da criao de classes, e conhecendo a estrutura bsica de uma classe, vamos implementar a teoria do captulo 2 em Java. Para isto precisamos entender como podemos implementar os atributos e operaes dos modelos em Java.

3.2.1

Atributos e dados so tipos nativos ou instncias de outras classes

Os atributos de uma classe, descritos no captulo 2, so representados em Java por tipos nativos ou instncias de outras classes j existentes. Para cada atributo da classe devemos escolher qual o tipo nativo ou classe adequada e criar uma varivel ou instncia deste tipo ou classe para represent-lo. Uma diferena fundamental entre a teoria mostrada no captulo 2 e a prtica (implementao das classes em Java) que precisamos escolher entre um nmero limitado de tipos de dados, que tem caractersticas bem denidas, e que so dependentes da linguagem. Para referncia rpida, a tabela 3.1 sumariza os tipos bsicos de dados de Java com alguns exemplos. O apndice A apresenta mais detalhes sobre os tipos bsicos e algumas classes padro de Java. Vale a pena lembrar que um dos conceitos bsicos de programao orientada a objetos a criao de novas classes que modelam entidades diferentes, e instncias destas novas classes podem ser usadas em outras classes e programas. Algumas informaes sobre variveis em Java so mostradas abaixo: Variveis em Java so declaradas como modificador tipo-da-varivel nome-da-varivel; note o ponto-e-vrgula ao nal da declarao. O formato de declarao de variveis que so instncias de classes modificador nome-da-classe nome-da-varivel = new nome-da-classe(); - note o ponto-e-vrgula ao nal da declarao. O comando new ser visto com mais detalhes neste e no prximo captulo. O controle de acesso as variveis pode ser feito pelos modicadores private e public. Estes modicadores implementam a ocultao de informaes vista na seo 2.4: variveis que so declaradas como public podem ser manipuladas (acessadas e modicadas) diretamente por programas que usam a classe que contm esta varivel, enquanto que variveis que so declaradas como private s podem ser manipuladas por mtodos da classe que as contm. Os nomes de variveis devem ser formados da mesma maneira que os nomes das classes: espaos no so permitidos, os nomes devem comear com um caracter alfabtico, e podem conter o caracter sublinhado (_). Ao contrrio dos nomes das classes, os nomes de variveis podem conter acentos sem restries. Para declararmos vrias variveis do mesmo tipo ao mesmo tempo, podemos usar modificador tipo-da-varivel nome1, nome2, nome3; - note que os diferentes nomes das variveis so separados por vrgulas, e que existe um ponto-e-vrgula no nal da declarao. No existem limites no nmero de variveis que podem ser declaradas em uma nica linha, mas muitas variveis em uma linha podem comprometer a clareza e legibilidade do programa. possvel criar e colocar valores ao mesmo tempo nas variveis com uma declarao modificador tipo-da-varivel nome-da-varivel = valor; Variveis podem ser criadas em qualquer ponto de um programa, classe ou rotina, mas algumas regras devem ser observadas: Variveis criadas dentro de uma classe mas fora dos mtodos (como nos exemplos que sero mostrados abaixo) podem ser vistas e modicadas de dentro de todos os mtodos da classe.Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

20 Tipo byte char Faixa de valores-128 a 127 0 a 65535

Exemplosbyte byte char char char char x1 x2 c1 c2 c3 c4 = = = = = = -1; 123-2; a; !; ; ;

NotasInteiro de 8 bits de preciso, com sinal. Veja a seo A.1.1 no apndice A. Caracteres representados em 16 bits, com suporte multilngue, podendo ser usados como tipos inteiros de 16 bits, com sinal. Veja a seo A.1.2 no apndice A. Inteiro de 16 bits de preciso, com sinal. Veja a seo A.1.3 no apndice A.

short

-32768 a 32767

int

-2147483648 a 2147483647

long

-9223372036854775808 9223372036854775807

a

float

1.40129846432481707e-45 a 3.40282346638528860e+38

double

4.94065645841246544e-324 a 1.79769313486231570e+308

String

Tamanho limitado memria disponvel.

short s1 = -130; short s2 = 32000; short s3 = 20*30; short s4 = 0; int i1 = 0; int i2 = 1000*1000; int i3 = -999*999; int i4 = 123456789; long l1 = 0; long l2 = -1; long l3 = -12345*67890; long l4 = 100000-99999; float f1 = 0.0; float f2 = 3.1416; float f3 = -123.0/124.0; float f4 = 2e5*3.2/2.7; double d1 = 0.0; double d2 = 3.141592654; double d3 = 0.01/1.07; double d4 = 2e+32*7e+18; String s1 = ""; String s2 = " "; String s3 = "3.1416"; String s4 = "nova\nlinha\n";

Inteiro de 32 bits de preciso, com sinal. Veja a seo A.1.4 no apndice A.

Inteiro de 64 bits de preciso, com sinal. Veja a seo A.1.5 no apndice A. Ponto utuante de preciso simples, armazenados em 32 bits, com sinal. Veja a seo A.1.6 no apndice A. Ponto utuante de preciso dupla, armazenados em 64 bits, com sinal. Veja a seo A.1.7 no apndice A. Cadeia de caracteres que usam dois bytes por caracter. Strings podem ser vazias (zero caracteres) e conter qualquer tipo de caracteres. Veja a seo A.2.1 no apndice A.

Tabela 3.1: Tipos bsicos de Java Variveis passadas como argumentos para os mtodos s so vlidas dentro dos mtodos. aconselhvel que o nome das variveis represente de forma sumarizada o seu signicado no programa, para maior clareza. Alguns exemplos de criao de variveis podem ser vistos no trecho de cdigo na listagem 3.2.

Listagem 3.2: Criao e inicializao de variveis de tipos nativos em Java1 2 3 4 5 6

private boolean resultado; // // resultado = true; // // int idade = 28; // //

Declaro que a varivel resultado ser do tipo boolean e que ela s poder ser acessada de dentro da classe que a contm Digo que o valor da varivel resultado ser true - s podemos atribuir valores variveis depois que as declararmos. Declaro a varivel idade como do tipo int, e atribuo o valor 28 ela. Como esta varivel no foi declarada com modificadores,

Clique aqui para ver como este documento pode ser personalizado para voc ! ( necessrio estar conectado Internet.)

21// // // // // // // // // ela ser public, podendo ser acessada de dentro e de fora da classe que a implementa. Declaro letra como sendo varivel do tipo char, podendo ser acessada de dentro e de fora da classe que a contm A atribuo o valor S varivel letra Posso mudar o valor das variveis depois Declaro palavra como sendo instncia da classe String que s poder ser acessada de dentro da classe que a contm Coloco um valor na varivel palavra

7 8 9 10 11 12 13 14 15

public char letra; letra = S; letra = Y; private String palavra; palavra = "teste";

importante lembrar que o trecho de cdigo na listagem 3.2 no pode ser compilado, porque deveria estar dentro de uma classe como a mostrada na listagem 3.1). Muitos outros exemplos de declarao, atribuio e uso de variveis em Java podem ser vistos no apndice A.

3.2.2

Operaes ou funes so Mtodos

Conforme visto no captulo 2, classes representam modelos que tem atributos e operaes. Os tipos de dados servem para representar os atributos das classes, mas para representar (e implementar) as operaes nas classes, precisaremos criar estruturas chamadas Mtodos, apresentadas nesta seo. Mtodos so blocos de cdigo, presentes dentro das classes, que podem processar dados desta classe e dados que so passados como argumentos para os mtodos. Algumas informaes sobre mtodos em Java so mostradas abaixo: O formato de declarao de mtodos modificador tipo-de-retorno nome-do-mtodo(lista-de-argumentos). Note que o pontoe-vrgula no colocado no nal da declarao. Assim como as variveis, o controle de aces