




























































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Manual de Programação Orientada a Objetos
Tipologia: Notas de aula
1 / 514
Esta página não é visível na pré-visualização
Não perca as partes importantes!





























































































ii
Este livro tem como finalidade possibilitar ao estudante o aprendizado dos conceitos básicos de programação orientada a objetos usando a linguagem Java. O livro parte do pressuposto de que o estudante conhece e usa computadores, tem noções elementares de algoritmos e sabe o que é uma linguagem de programação, mas sem necessariamente possuir conhecimentos profundos de uma. Evidentemente o livro também pode ser usado por estudantes que já conheçam alguma linguagem de programação mas estejam interessados em aprender Java.
O livro foi inicialmente desenvolvido como sendo o material sugerido para as disciplinas Progra- mação Orientada a Objetos I e Programação Orientada a Objetos II dos cursos de Ciência da Computação e Engenharia da Computação oferecidos pela Faculdade de Ciência da Computação da Universidade do Vale do Paraíba (UNIVAP). O material original foi ampliado consideravel- mente para a publicação como livro.
Ao desenvolver este livro, minha motivação principal foi apresentar os conceitos de programa- ção orientada a objetos com clareza e simplicidade, mostrando exemplos e sugerindo problemas práticos e ilustrativos dos conceitos e de algoritmos em geral. Muitos livros de programação ori- entada a objetos (abreviadamente, POO), especialmente usando a linguagem Java, concentram-se em aspectos visuais, deixando de lado a teoria e explicação dos detalhes que são necessárias para melhor compreensão das técnicas e conceitos. Na maioria dos casos, demonstrações das capaci- dades da linguagem são apresentadas desde cedo, sem as explicações necessárias para compreen- são do que acontece nos programas-exemplo. Em contraste, este livro concentra-se nas técnicas de programação orientada a objetos, explicando a teoria e apresentando a prática de cada tópico. Espero que com isto os estudantes estejam mais confortáveis com os conceitos de classes e obje- tos quando forem utilizá-los em aplicações mais complexas.
Para reforçar a aplicabilidade deste livro em cursos de programação em escolas técnicas e uni- versidades, 169 programas, classes e trechos de código foram incluidos, com comentários para esclarecer os pontos mais importantes. Ao final de cada capítulo, vários exercícios de fixação com diferentes níveis de complexidade são apresentados, em um total de 881 exercícios.
Este livro é dividido em cinco partes principais, cada uma subdividida em vários capítulos. Cada capítulo cobre um tema específico. As partes e capítulos são:
Introdução à Programação Orientada a Objetos usando Java Rafael Santos
iv
- Capítulo ??: Classes para Representação de Estruturas de Dados apresenta algu- mas classes que implementam estruturas de dados simples em Java e suas aplicações. - Capítulo ??: Exceções apresenta os mecanismos de tratamento e criação de exce- ções em Java para processamento de erros. - Capítulo ??: Entrada e Saída usando Arquivos apresenta as classes em Java que permitem a abstração de acesso à arquivos de diversos tipos. - Capítulo ??: Recebendo e Enviando Dados via Internet apresenta um mecanismo simples de envio e recebimento de dados via Internet. - Capítulo ??: Programação Cliente-Servidor com Sockets mostra como podemos criar aplicações simples com o modelo cliente/servidor e a classe Socket. - Capítulo ??: Linhas de Execução ( Threads ) mostra como programas podem ser preparados para executar mais de uma tarefa simultaneamente através do uso de li- nhas de execução.
Introdução à Programação Orientada a Objetos usando Java Rafael Santos
v
- Capítulo ??: Uma Planilha Simples apresenta as estruturas e conceitos para desen- volvimento de uma planilha de cálculos simples, e exercícios para fazer um aplicativo mais útil.
Para destacar alguns conceitos apresentados neste livro, fontes diferentes serão usadas. Nomes de classes, métodos, pacotes, comandos, etc. serão mostrados em fonte proporcional. Concei- tos apresentados pela primeira vez ou que mereçam destaque e palavras que não sejam parte do português corrente serão mostrados em fonte itálica.
Adicionalmente, os programas incluídos no livro serão colorizados , isto é, palavras-chave e par- tes do código como comentários serão mostradas em cores diferentes para facilitar a leitura. As linhas dos programas também serão numeradas para fácil referência.
Os exercícios apresentados ao fim de cada capítulo são divididos em cinco categorias de dificul- categorias de dade, marcadas com um número de estrelas correspondente: exercícios
Rafael Santos Introdução à Programação Orientada a Objetos usando Java
vii
existem limitações na distribuição da máquina virtual, fazendo de Java uma plataforma extremamente econômica para desenvolvedores e usuários finais.
Java é robusta. Administração de memória (alocação e liberação) e o uso de ponteiros, duas das fontes de erros e bugs mais frequentes em programas em C e C++, são administrados internamente na linguagem, de forma transparente para o programador. De maneira geral, programas em Java tem restrições no acesso à memória que resultam em maior segurança para os programas sem diminuir a utilidade dos mesmos. Java também tem um poderoso mecanismo de exceções que permite melhor tratamento de erros em tempo de execução dos programas.
Java tem bibliotecas prontas para diversas aplicações. As bibliotecas de classes de Java con- tém várias classes que implementam diversos mecanismos de entrada e saída, acesso à Internet, manipulação de Strings em alto nível, poderosas estruturas de dados, utilitários diversos e um conjunto completo de classes para implementação de interfaces gráficas. Vale a pena relembrar que estas bibliotecas são padrão de Java - qualquer máquina virtual Java permite o uso destas bibliotecas, sem a necessidade de instalar pacotes adicionais, e que mesmo que o compilador usado não tenha interface gráfica similar à de linguagens vi- suais, os programas criados com este compilador podem ter interfaces gráficas complexas.
Existem basicamente quatro categorias de softwares que podem ser criados em Java:
Classes para representação de modelos. Classes são usadas para representar, em linguagem classes para representação de modelos
de programação, modelos e abstrações de dados como os mostrados nos capítulos 1. Clas- ses para representação de modelos não podem ser executadas diretamente, mas instâncias destas classes podem ser usadas dentro de aplicações e applets. Detalhes e mecanismos de criação de classes em Java serão vistos no capítulo 2.
Classes como conjuntos de rotinas. Classes podem conter somente métodos (rotinas) ao invés bibliotecas de representar dados. Estas classes funcionam como bibliotecas de métodos ou funções que tem algo em comum. Detalhes sobre a criação deste tipo de classes serão vistos na seção 5.3.
Aplicações ou Programas. Aplicações ou programas podem ser executadas a partir de um ter- aplicações minal do sistema operacional (terminais gráficos de Unix ou da janela do MS-DOS), po- dendo envolver ou não maior interação com o usuário, e podendo ou não ter uma interface gráfica. Informações sobre a criação de programas em Java serão mostradas no capítulo 3 (sem uso de interface gráfica) e nos capítulos da parte III (com interfaces gráficas).
Applets****. Applets são programas executáveis em Java que podem ser embutidos em páginas em applets HTML e carregados e executados via Internet. Sua execução é controlada pelo navegador que está sendo usado para ler as páginas. Por razões de segurança, applets são limitadas nas tarefas que podem fazer, e obrigatoriamente devem ter interface gráfica. Detalhes e mecanismos de criação de applets em Java serão vistos no capítulo ??.
Eis aqui uma lista dos tópicos que não serão cobertos pelo livro. Ao invés de considerar a lista como um atestado de que o livro está incompleto, por favor considere que o livro é uma introdução, e certos tópicos são complexos demais para um livro deste tipo ou simplesmente não são interessantes, úteis ou comuns o suficiente para merecer discussão.
Rafael Santos Introdução à Programação Orientada a Objetos usando Java
viii
Este livro é dedicado a minha esposa Yukari, e a nossa filha Miyuki, pela infinita paciência, cari- nho e suporte demonstrados durante a criação deste livro; e aos meus pais pelas várias lições de vida.
Sou grato aos estudantes dos cursos da Faculdade de Ciência da Computação da Univap que con- tribuiram com idéias e perguntas que resultaram em exemplos e exercícios, e em especial, aos estudantes que participaram na revisão do livro. Entre estes, destaco Nádia Maria França Borges, por inúmeras correções e sugestões.
Sou também grato aos professores Paulo de Castro Lobo, Moacir de Almeida Prado e Carlos Manoel Fenile Péris por esclarecimentos necessários para alguns exercícios.
Esta seção somente será mantida enquanto o livro estiver em desenvolvimento.
A lista de modificações previstas para as próximas versões deste livro são, em ordem aproximada de prioridade:
Introdução à Programação Orientada a Objetos usando Java Rafael Santos
x
Introdução à Programação Orientada a Objetos usando Java
Rafael Santos
xiii
1.1 O quadro-branco do Restaurante Caseiro Hipotético................ 4 1.2 O modelo Lampada, seus dados e atributos..................... 8 1.3 O modelo ContaBancariaSimplificada, seus dados e atributos........ 10 1.4 O modelo Data, seus dados e atributos....................... 12 1.5 O modelo RegistroAcademico, seus dados e atributos.............. 14
2.1 Pontos, linhas e retângulos no espaço cartesiano bidimensional........... 54
3.1 Referências e instâncias criadas na classe MaisDemoData............. 58 3.2 Coordenadas no espaço cartesiano de duas dimensões............... 59
5.1 Bancos com e sem fila única............................ 93
6.1 Intersecção de dois retângulos............................ 125
7.1 Chamadas recursivas ao método fibonacci.................... 140
8.1 Esquema de herança envolvendo várias classes.................. 187 8.2 Herança com várias classes e separação para métodos polimórficos sobrecarregados
9.1 Duas maneiras de se modificar a escala de um retângulo.............. 251
11.1 Exemplo de array irregular de duas dimensões................... 284 11.2 Retângulo envolvente de uma série de pontos................... 305 11.3 Jogo da velha e respectiva matriz de decisão da próxima jogada.......... 312 11.4 Vizinhanças para cálculo da heurística de jogo do jogo go............. 313 11.5 Primeiro passo do algoritmo da resolução de um sistema de equações lineares pelo método de Gauss................................ 315 11.6 Segundo passo do algoritmo da resolução de um sistema de equações lineares pelo método de Gauss................................ 316 11.7 Algumas iterações do jogo da vida, mostradas como imagens........... 318 11.8 Valores numéricos de algumas iterações do jogo da vida.............. 318
13.1 Rotação de um ponto em duas dimensões em volta da origem do sistema de coordenadas..................................... 375 13.2 Representação gráfica da aproximação da integral pela somatória das áreas de trapézios....................................... 378 13.3 Ilustração do algoritmo de bisecção sucessiva para localização de raízes de uma função........................................ 380 13.4 Representação gráfica do algoritmo de Buffon.................... 382 13.5 Medidas de uma parábola.............................. 396 13.6 Movimento de um robô com orientação livre.................... 416 13.7 O casco convexo de um conjunto de pontos..................... 417
Rafael Santos Introdução à Programação Orientada a Objetos usando Java
xiv
1.1 O modelo Lampada, em pseudo-código....................... 9 1.2 O modelo ContaBancariaSimplificada, em pseudo-código........... 10 1.3 O modelo Data, em pseudo-código......................... 12 1.4 O modelo RegistroAcademico, em pseudo-código................ 14
2.1 Uma classe vazia em Java.............................. 25 2.2 A classe RegistroAcademicoSimples....................... 28 2.3 A classe DataSemMetodos.............................. 29 2.4 A classe DataSimples................................ 31 2.5 A classe Triangulo................................. 34 2.6 A classe DemoDataSimples, que pode ser executada e que demonstra o uso de instâncias da classe DataSimples.......................... 35 2.7 A classe Data, que implementa uma política de ocultação de campos....... 38 2.8 A classe DemoData, que pode ser executada e que demonstra o uso de instâncias da classe Data.................................... 40
3.1 A classe MaisDemoData, que demonstra mais usos de instâncias da classe Data.. 56 3.2 A classe Ponto2D, que encapsula um ponto no espaço cartesiano de duas dimen- sões.......................................... 59 3.3 A classe DemoPonto2D, que demonstra usos da classe Ponto2D.......... 61 3.4 A classe DemoReferencias, que demonstra mais exemplos de referências..... 62 3.5 A classe DemoPonto2DK, que demonstra usos da classe Ponto2D, que serão ini- cializados com valores lidos do teclado....................... 64
4.1 A classe RegistroAcademicoSemConstrutor, que encapsula alguns dados de um registro acadêmico................................ 71 4.2 A classe DemoRegistroAcademicoSemConstrutor, que demonstra o uso de instâncias da classe RegistroAcademicoSemConstrutor............. 72 4.3 A classe EventoAcademico, que representa um evento acadêmico......... 74 4.4 A classe DemoEventoAcademico, que demonstra o uso de instâncias da classe EventoAcademico.................................. 75 4.5 A classe RoboSimples0, que encapsula dados de um robô móvel simulado.... 77 4.6 A classe DemoRoboSimples0, que demonstra a criação e uso de instâncias da classe RoboSimples0................................ 79 4.7 A classe RoboSimples, que encapsula dados de um robô móvel simulado (com melhorias)...................................... 81 4.8 A classe DemoRoboSimplesComErros, que demonstra o uso de chamadas com argumentos incorretos à construtores e métodos da classe RoboSimples...... 83
Introdução à Programação Orientada a Objetos usando Java Rafael Santos
xvi
7.12 Trecho de código que demonstra o uso de variáveis auxiliares de ponto flutuante para evitar variáveis de controle de ponto flutuante em laços............ 143 7.13 A classe OtimizacaoDesenrolamentoDeLacos, que demonstra otimização de código eliminando pequenos laços onde for possível................ 143 7.14 A classe OtimizacaoRemocaoDeChamadasAMetodos, que demonstra otimiza- ção de código eliminando chamadas desnecessárias à métodos............ 145
8.1 A classe DataHora, que reusa as classes Data e Hora através de delegação.... 174 8.2 A classe RegistroAcademicoDeGraduacao, que reusa a classe Data através de delegação....................................... 175 8.3 A classe DemoRegistroAcademicoDeGraduacao, que demonstra a criação e o uso de instâncias da classe RegistroAcademicoDeGraduacao........... 177 8.4 A classe Pessoa0, que encapsula os dados de identificação de uma pessoa..... 178 8.5 A classe Funcionario0, que encapsula os dados básicos de um funcionário de uma empresa..................................... 179 8.6 A classe DemoFuncionario0, que demonstra o uso de uma instância da classe Funcionario0.................................... 180 8.7 A classe Pessoa, que encapsula os dados de identificação de uma pessoa..... 183 8.8 A classe Funcionario, que encapsula os dados básicos de um funcionário de uma empresa e herda da classe Pessoa....................... 183 8.9 A classe ChefeDeDepartamento, que encapsula os dados básicos de um chefe de um departamento de uma empresa e herda da classe Funcionario....... 186 8.10 A classe Automovel, que encapsula os dados de um automóvel simples à venda.. 190 8.11 A classe AutomovelBasico, que encapsula os dados de um automóvel básico à venda, e que herda da classe Automovel....................... 192 8.12 A classe AutomovelDeLuxo, que encapsula os dados de um automóvel de luxo à venda, e que herda da classe AutomovelBasico.................. 194 8.13 A classe DemoAutomoveis, que demonstra instâncias das classes Automovel, AutomovelBasico e AutomovelDeLuxo...................... 196 8.14 A classe ConcessionariaDeAutomoveis, que demonstra polimorfismo com ins- tâncias das classes herdeiras da classe Automovel................. 199 8.15 A classe EmprestimoBancario, que demonstra polimorfismo com instâncias das classes herdeiras da classe Pessoa.......................... 200 8.16 A classe EmprestimoBancarioComCast, que demonstra polimorfismo e cast de instâncias de classes................................. 203
9.1 A classe abstrata RoboAbstrato, que define que métodos e campos mínimos uma classe que implementa um robô deve conter.................. 217 9.2 A classe RoboSimples, que herda da classe RoboAbstrato e que representa um robô de comportamento simples........................... 220 9.3 A classe RoboABateria, que estende a classe RoboAbstrato e representa um robô que consome energia com seus movimentos.................. 221 9.4 A classe DemoRobos, que demonstra instâncias e usos dos métodos das classes RoboSimples e RoboABateria........................... 222 9.5 A interface ObjetoGeometrico, que representa um objeto geométrico bidimen- sional......................................... 224 9.6 A classe Circulo, que implementa a interface ObjetoGeometrico e representa um círculo...................................... 225 9.7 A classe Retangulo, que implementa a interface ObjetoGeometrico e repre- senta um retângulo.................................. 226
Introdução à Programação Orientada a Objetos usando Java Rafael Santos
xvii
9.8 A classe DemoObjetosGeometricos, que demonstra instâncias de classes que implementam a interface ObjetoGeometrico.................... 227 9.9 A classe DemoObjetosGeometricosEPolimorfismo, que demonstra caracterís- ticas de polimorfismo com interfaces e classes que as implementam........ 229 9.10 A interface Escalavel, que define que métodos um objeto que seja escalável (possa ter seu tamanho modificável)......................... 230 9.11 A classe CirculoEscalavel, que implementa as interfaces ObjetoGeometrico e Escalavel..................................... 230 9.12 A classe DemoCirculoEscalavel, que demonstra o uso dos métodos da classe CirculoEscalavel................................. 232 9.13 A interface ItemDeBiblioteca, que declara os campos e métodos que qualquer item em uma biblioteca deve ter........................... 233 9.14 A classe Livro, que encapsula os dados de um livro................ 234 9.15 A classe LivroDeBiblioteca, que encapsula os dados de um livro de uma bi- blioteca........................................ 235 9.16 A classe DemoLivroDeBiblioteca, que demonstra o uso de instâncias da classe LivroDeBiblioteca................................. 237 9.17 A interface ItemRaroDeBiblioteca, que declara os campos e métodos que itens raros de uma biblioteca devem ter.......................... 237 9.18 A classe Mapa, que encapsula os dados de um mapa................. 238 9.19 A classe MapaDeBiblioteca, que encapsula os dados de um mapa de uma bibli- oteca......................................... 239
10.1 A classe Data, que encapsula os dados de uma data qualquer e que faz parte do pacote DataHora................................... 253 10.2 A classe Hora, que encapsula os dados de uma hora qualquer e que faz parte do pacote DataHora................................... 254 10.3 A classe DataHora, que encapsula os dados de uma data e uma hora simultane- amente e que faz parte do pacote DataHora..................... 255 10.4 A classe DemoDataHora, que demonstra usos de instâncias das classes que fazem parte do pacote DataHora.............................. 256 10.5 A classe Pessoa, que encapsula os dados de identificação de uma pessoa e que faz parte do pacote Pessoal............................. 258 10.6 A classe Funcionario, que encapsula os dados básicos de um funcionário de uma empresa e que faz parte do pacote Pessoal.................. 259 10.7 A classe ChefeDeDepartamento, que encapsula os dados básicos de um chefe de departamento de uma empresa e que faz parte do pacote Pessoal........ 261 10.8 A classe DemoPessoal, que demonstra usos de instâncias das classes que fazem parte do pacote Pessoal............................... 262
11.1 Trecho de código que demonstra a declaração de arrays em Java.......... 270 11.2 Trecho de código que demonstra a declaração e inicialização de arrays em Java.. 270 11.3 A classe CalculoPiQuadradoSobre6, que calcula o valor de pi quadrado sobre seis.......................................... 272 11.4 A classe ArrayDeFloats, que encapsula um array de valores do tipo float.... 273 11.5 A classe DemoArrayDeFloats, que demonstra o uso de instâncias da classe ArrayDeFloats................................... 276 11.6 A classe Equipe, que demonstra o uso de um array de instâncias da classe Funcionario..................................... 277
Rafael Santos Introdução à Programação Orientada a Objetos usando Java
xix
A.2 A classe DemoTipoBooleanComErros, que demonstra usos incorretos do tipo nativo boolean.................................... 425 A.3 A classe DemoTipoChar, que demonstra usos do tipo nativo char......... 426 A.4 A classe DemoTipoCharComErros, que demonstra usos incorretos do tipo nativo char......................................... 427 A.5 A classe DemoTipoByte, que demonstra usos do tipo nativo byte......... 428 A.6 A classe DemoTipoByteComErros, que demonstra usos incorretos do tipo nativo byte......................................... 428 A.7 A classe DemoTipoShort, que demonstra usos do tipo nativo short........ 430 A.8 A classe DemoTipoShortComErros, que demonstra usos incorretos do tipo nati- vo short....................................... 430 A.9 A classe DemoTipoInt, que demonstra usos do tipo nativo int........... 431 A.10 A classe DemoTipoIntComErros, que demonstra usos incorretos do tipo nativo int.......................................... 431 A.11 A classe DemoTipoLong, que demonstra usos do tipo nativo long......... 432 A.12 A classe DemoTipoLongComErros, que demonstra usos incorretos do tipo nativo long......................................... 433 A.13 A classe DemoTipoFloat, que demonstra usos do tipo nativo float........ 434 A.14 A classe DemoTipoFloatComErros, que demonstra usos incorretos do tipo nati- vo float....................................... 435 A.15 A classe DemoTipoDouble, que demonstra usos do tipo nativo double...... 436 A.16 A classe DemoTipoDoubleComErros, que demonstra usos incorretos do tipo na- tivo double...................................... 437 A.17 A classe DemoClasseBoolean, que demonstra usos da classe Boolean...... 438 A.18 A classe DemoClasseBooleanComErros, que demonstra usos incorretos da clas- se Boolean...................................... 439 A.19 A classe DemoClasseCharacter, que demonstra usos da classe Character.... 441 A.20 A classe DemoClasseCharacterComErros, que demonstra usos incorretos da classe Character.................................. 442 A.21 A classe DemoClasseByte, que demonstra usos da classe Byte.......... 444 A.22 A classe DemoClasseByteComErros, que demonstra usos incorretos da classe Byte......................................... 445 A.23 A classe DemoClasseShort, que demonstra usos da classe Short......... 448 A.24 A classe DemoClasseShortComErros, que demonstra usos incorretos da classe Short......................................... 449 A.25 A classe DemoClasseInteger, que demonstra usos da classe Integer...... 452 A.26 A classe DemoClasseIntegerComErros, que demonstra usos incorretos da clas- se Integer...................................... 453 A.27 A classe DemoClasseLong, que demonstra usos da classe Long.......... 456 A.28 A classe DemoClasseLongComErros, que demonstra usos incorretos da classe Long......................................... 457 A.29 A classe DemoClasseFloat, que demonstra usos da classe Float......... 460 A.30 A classe DemoClasseFloatComErros, que demonstra usos incorretos da classe Float......................................... 461 A.31 A classe DemoClasseDouble, que demonstra usos da classe Double........ 464 A.32 A classe DemoClasseDoubleComErros, que demonstra usos incorretos da classe Double........................................ 465
B.1 A classe Keyboard, que permite entrada simples via teclado............ 467 B.2 A classe DemoKeyboard, que demonstra o uso dos métodos na classe Keyboard.. 476
Rafael Santos Introdução à Programação Orientada a Objetos usando Java
xx
B.3 A classe DataKeyboard, cujo construtor lê os valores dos campos do teclado... 478 B.4 A classe DemoDataKeyboard, que demonstra instâncias da classe DataKeyboard. 478 B.5 Um exemplo de arquivo de respostas para uso com a classe DemoDataKeyboard. 481
Introdução à Programação Orientada a Objetos usando Java Rafael Santos