Baixe Ciência da Computação com Java e Orientação a Objetos - Apostilas - Informática Part1 e outras Notas de estudo em PDF para Informática, somente na Docsity!
UNIVERSIDADE DE SÃO PAULO
INSTITUTO DE MATEMÁTICA E ESTATÍSTICA
Departamento de Ciência da Computação
Introdução à Ciência da Computação
com Java e Orientação a Objetos
1 a^ edição
Alfredo Goldman Fabio Kon Paulo J. S. Silva
Editado e Revisado por: Raphael Y. de Camargo
Ficha Catalográfica Elaborada pela Biblioteca do IME-USP
QA K82i
Kon, Fabio; Goldman, Alfredo; Silva P. J. S. Introdução à ciência da computação com Java e orientação a objetos, editado e revisado por Raphael Y. de Camargo. 1. ed. São Paulo : IME-USP, 2006. 190p.
ISBN: 85-88697-10-
- Linguagem de Programação 2. Programação orientada a objeto 3. Java I. Goldman, Alfredo II. Silva, Paulo J. S. III. Camargo, Raphael Y. de, ed. e rev. IV. Universidade de São Paulo, Instituto de Matemática e Estatística. Departamento de Ciência da Computação.
CDD 600
ii
iii
A nossas esposas e filhos,
fonte de força e alegria em nossas vidas.
v
Agradecimentos
Este livro não seria possível sem a colaboração de inúmeros alunos e profes- sores do IME/USP.
Leo Kazuhiro Ueda e Nelson Posse Lago atuaram como assistentes de ensino na primeira vez em que esta disciplina foi ministrada e foram responsáveis por inúmeras contribuições. O apêndice sobre o Dr. Java foi preparado pelo Leo. Fabiano Mitsuo Sato, George Henrique Silva e Igor Ribeiro Sucupira foram monitores da disciplina também em 2003 e colaboraram com alguns exercícios.
Raphael Y. de Camargo realizou um excelente trabalho na edição e revisão do livro além de colaborar com alguns exercícios. O Prof. João Eduardo Ferreira, nosso colega no ensino da disciplina de introdução, o Prof. Valdemar Setzer, nosso experiente e sábio colega de departamento, e o Prof. Marcos Chaim, da USPLeste, nos deram inúmeras sugestões úteis que, sempre que possível, foram incorporadas ao texto final.
Agradecemos ao Prof. Walter Savitch da Universidade da California em San Diego por ter autorizado o uso de sua classe para entrada de dados. Agrade- cemos também a Giuliano Mega pela diagramação da capa e a Stefano Mega pelos objetos nadando na xícara de Java.
Finalmente, agradecemos aos alunos e professores que não foram citados mas que deram sugestões e nos incentivaram a escrever este livro.
vi
- 1 Teatro de Objetos Prefácio xiii
- 2 História da Computação
- 2.1 História da Computação e Arquitetura do Computador
- 2.2 Evolução das Linguagens de Programação
- 3 Conversor de Temperaturas
- 3.1 Analogia entre dramatização da disputa de pênaltis e Programação Orientada a Objetos
- 3.2 Um exemplo real em Java: um conversor de Celsius para Fahrenheit
- 4 Testes Automatizados
- 5 Métodos com Vários Parâmetros
- 5.1 Atributos
- 5.2 A importância da escolha de bons nomes
- 6 if else Encaixados
- 7 Programas com Vários Objetos
- 8 Laços e Repetições
- 8.1 Laços em linguagens de programação
- 8.2 O laço while
- 8.3 Números primos
- 9 Expressões e Variáveis Lógicas
- 9.1 Condições como expressões
- 9.2 Precedência de operadores
- 9.3 Exemplos
- 10 Mergulhando no while viii SUMÁRIO
- 10.1 Um pouco mais sobre primos
- 10.2 Uma biblioteca de funções matemáticas.
- 10.3 do...while
- 11 Caracteres e Cadeias de Caracteres
- 11.1 Um tipo para representar caracteres
- 11.2 Cadeias de caracteres (Strings)
- 12 A Memória e as Variáveis
- 12.1 A Memória do Computador
- 12.2 O que são as Variáveis?
- 13 Manipulando Números Utilizando Diferentes Bases
- 13.1 Sistemas de numeração
- 13.2 Conversão entre sistemas de numeração
- 14 Arrays (vetores)
- 14.1 Criação de programas Java
- 15 for , leitura do teclado e conversão de String s
- 15.1 O comando for
- 15.2 Leitura do teclado
- 15.3 Conversão de String para números
- 16 Laços Encaixados e Matrizes
- 16.1 Laços encaixados
- 16.2 Matrizes (arrays multidimensionais)
- 16.3 Exemplo: LIFE, o jogo da vida
- 17 Busca e Ordenação
- 17.1 Busca
- 17.2 Pondo ordem na casa
- 18 Busca Binária e Fusão
- 18.1 Busca binária
- 18.2 Complexidade Computacional
- 18.3 Fusão
- 19 Construtores e Especificadores de Acesso
- 19.1 Construtores
- 19.2 Especificadores de acesso
- 20 Interfaces SUMÁRIO ix
- 20.1 O conceito de interfaces
- 20.2 Um primeiro exemplo
- 20.3 Implementando mais de uma interface por vez
- 20.4 Um exemplo mais sofisticado
- 20.5 A importância de interfaces
- 21 Herança
- 21.1 O Conceito de herança
- 21.2 Terminologia de herança
- 21.3 Implementação de herança na linguagem Java
- 21.4 Hierarquia de classes
- 21.5 Relacionamento “é um”
- 21.6 Resumo
- 22 Javadoc
- 23 O C Que Há em Java
- 23.1 O C que há em Java
- 23.2 Detalhes de entrada e saída
- 23.3 Declaração de variáveis
- 23.4 Parâmetros de funções
- 23.5 Um último exemplo
- A Utilizando o Dr. Java
- A.1 Conversor de Temperatura simples
- A.2 Tratando erros
- B Desenvolvimento Dirigido por Testes
- Bibliografia
Lista de Figuras
2.1 Arquitetura do ENIAC...................................... 10 2.2 Arquitetura de Von Neumann................................... 11
21.1 Diagrama de herança....................................... 132 21.2 Hierarquia de classes representando os seres vivos........................ 134 21.3 Hierarquia errada......................................... 135
22.1 Documentação gerada pelo Javadoc............................... 141
xi
xii LISTA DE FIGURAS
xiv PREFÁCIO
Capítulo 1
Teatro de Objetos
Vamos iniciar a nossa jornada ao fascinante mundo da orientação a objetos de forma dramática: com um Teatro de Objetos. Se você está usando este livro em um curso, reserve juntamente com seu professor uma parte da primeira aula para realizar a encenação descrita neste capítulo. Se você trabalha em uma empresa, reúna-se com colegas de trabalho ou com amigos interessados em programação para exercitar suas qualidades dramáticas. Liberte o artista que existe dentro de você!’ O objetivo do Teatro de Objetos é fazer com que os alunos vivenciem um jogo interativo do qual participam vários “objetos” realizando diferentes formas de ações e comunicações. Os conceitos de orientação a objetos empregados no teatro não são explicitamente explicados já no primeiro capítulo mas serão abordados ao longo do livro. Em um curso de Introdução á Ciência da Computação, normalmente a primeira metade da primeira aula é dedicada a uma conversa informal com os alunos explicando quais são os objetivos da disciplina (e do curso inteiro, se for o caso). É sempre interessante também conversar sobre contatos prévios que os alunos tiveram com informática e com programação. É bom deixar claro que este livro pode ser acompanhado por uma pessoa que nunca viu um computador na frente em sua vida, mas que aprender a programar não é uma tarefa fácil, é preciso se empenhar. Na segunda metade da aula, exercitamos as habilidades dramáticas: para ilustrar o funcionamento de um programa de computador complexo, vamos fazer de conta que somos partes de um programa de computador trabalhando em conjunto para atingir um certo objetivo. Se você estiver organizando a encenação com seus colegas, você pode fazer um certo suspense sobre qual é o objetivo (simular uma disputa de pênaltis) e sobre como ele será alcançado.
1.1 Disputa de pênaltis
A “peça” que encenaremos representará uma disputa de pênaltis entre dois times e contará com a participa- ção de cerca de 26 atores desempenhando 8 papéis. Se você não tiver 26 atores disponíveis, você pode elaborar a sua própria adaptação da peça. Os papéis são:
- Técnico (2 atores)
- Juiz (1 ator)
- Bandeirinha (2 atores)
- Gandula (1 ator)
1
1.1. DISPUTA DE PÊNALTIS 3
- Goleiro
- Cartão de Identificação
- Nome do Papel: Goleiro
- Mensagens que entende: SuaVez, Cobrança Autorizada, VenceuOTimeX
- Atributos: Time: , Camisa número: 1
- Comportamento (Script)
- mensagem: SuaVez ⇒ ação: posiciona-se na frente do gol e fica esperando pela cobrança do pênalti.
- mensagem: CobrançaAutorizada ⇒ ação: concentra-se na bola que será chutada pelo ad- versário e faz de tudo para não deixar que a bola entre no gol. O goleiro não pode se adiantar antes do chute do adversário. Após a cobrança sair do gol para dar lugar ao goleiro adversário.
- mensagem: VenceuOTimeX ⇒ ação: se TimeX é igual ao atributo Time no seu cartão de iden- tificação, comemore; caso contrário, xingue o juiz (polidamente! :-).
- Batedor de Pênalti
- Cartão de Identificação
- Nome do Papel: Batedor de Pênalti
- Mensagens que entende: SuaVez, CobrançaAutorizada, VenceuOTimeX
- Atributos: Time: , Camisa número:
- Comportamento
- mensagem: SuaVez ⇒ ação: posiciona-se na frente da bola e fica esperando pela autorização do juiz.
- mensagem: CobrançaAutorizada ⇒ ação: chuta a bola tentando marcar um gol. Após a cobrança voltar para junto do seu técnico para dar lugar à próxima cobrança.
- mensagem: VenceuOTimeX ⇒ ação: se TimeX é igual ao atributo Time no seu cartão de iden- tificação, comemore; caso contrário, xingue o juiz (polidamente! :-).
- Torcedor Educado
- Cartão de Identificação
- Nome do Papel: Torcedor Educado
- Mensagens que entende: Ação, VenceuOTimeX
- Atributos: Time: , Camisa número: 12
- Comportamento
- mensagem: Ação ⇒ ação: assista ao jogo emitindo opiniões inteligentes sobre o andamento da peleja e manifestando o seu apreço e desapreço pelo desenrolar da disputa.
- mensagem: VenceuOTimeX ⇒ ação: se TimeX é igual ao atributo Time no seu cartão de identificação, comemore e faça um comentário elogioso sobre o seu time; caso contrário, elogie o adversário e parabenize o seu time pelo empenho.
4 CAPÍTULO 1. TEATRO DE OBJETOS
- Torcedor Mal-Educado
- Cartão de Identificação
- Nome do Papel: Torcedor Mal-Educado
- Mensagens que entende: Ação, VenceuOTimeX
- Atributos: Time: , Camisa número: 12
- Comportamento
- mensagem: Ação ⇒ ação: assista ao jogo emitindo opiniões duvidosas sobre o andamento da peleja e manifestando a sua raiva ou alegria pelo desenrolar do jogo.
- mensagem: VenceuOTimeX ⇒ ação: se TimeX é igual ao atributo Time no seu cartão de identi- ficação, xingue o adversário. Caso contrário, xingue o adversário desesperadamente (mas, por favor, não se esqueça que estamos em uma universidade).
- Juiz
- Cartão de Identificação
- Nome do Papel: Juiz
- Mensagens que entende: Ação, Irregularidade
- Comportamento
- mensagem: Ação ⇒ ação: coordene o andamento da disputa de pênaltis enviando mensagens SuaVez para o técnico do time batedor e para o goleiro defensor a cada nova batida. Quando os personagens estiverem a postos, emita a mensagem CobrançaAutorizada. Faça a contagem de gols e quando houver um vencedor, emita a mensagem VenceuOTimeX onde TimeX é o nome do time vencedor. A disputa de pênaltis é feita alternadamente, 5 cobranças para cada time. Se não houver um ganhador após as 5 cobranças, são feitas novas cobranças alternadamente até que haja um vencedor.
- mensagem: Irregularidade ⇒ ação: se a mensagem foi enviada por um Bandeirinha, ignore a cobrança recém-efetuada e ordene que ela seja realizada novamente enviando a mensagem RepitaCobrança ao técnico apropriado.
- Gandula
- Cartão de Identificação
- Nome do Papel: Gandula
- Mensagens que entende: CobrançaAutorizada
- Comportamento
- mensagem: CobrançaAutorizada ⇒ ação: preste atenção à cobrança do pênalti. Após a conclusão da cobrança, pegue a bola e leve-a de volta à marca de pênalti.