Introdução à Ciência da Computação

Introdução à Ciência da Computação

(Parte 1 de 10)

Departamento de Ciência da Computação

Introdução à Ciência da Computação com Java e Orientação a Objetos

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

QA724K82i

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-6

1. Linguagem de Programação 2. Programação orientada a objeto 3. Java I. Goldman, Alfredo I. Silva, Paulo J. S. II. 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

C O M M O N S D E E D Atribuição-Uso Não-Comercial-Compartilhamento pela mesma licença 2.5

Você pode: • copiar, distribuir, exibir e executar a obra

• criar obras derivadas Sob as seguintes condições:

Atribuição. Você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante.

Uso Não-Comercial. Você não pode utilizar esta obra com finalidades comerciais.

Compartilhamento pela mesma Licença. Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta.

• Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra. • Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do autor.

Qualquer direito de uso legítimo (ou "fair use") concedido por lei, ou qualquer outro direito protegido pela legislação local, não são em hipótese alguma afetados pelo disposto acima.

Este é um sumário para leigos da Licença Jurídica (que pode ser obtida na íntegra em http://creativecommons.org/licenses/by-nc-sa/2.5/legalcode).

Termo de exoneração de responsabilidade

Esta Licença Simplificada não é uma licença propriamente dita. Ela é apenas uma referência útil para entender a Licença Jurídica (a licença integral) - ela é uma expressão dos seus termos-chave que pode ser compreendida por qualquer pessoa. A Licença Simplifica em si não tem valor legal e seu conteúdo não aparece na licença integral.

O Creative Commons não é um escritório de advocacia e não presta serviços jurídicos. A distribuição, exibição ou inclusão de links para esta Licença Simplificada não estabelece qualquer relação advocatícia.

i i

A nossas esposas e filhos, fonte de força e alegria em nossas vidas.

iv iv

Agradecimentos

Este livro não seria possível sem a colaboração de inúmeros alunos e professores 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. Agradecemos 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 vi

Sumário

Prefácio xiii

1.1 Disputa de pênaltis1

1 Teatro de Objetos 1

2.1 História da Computação e Arquitetura do Computador7
2.2 Evolução das Linguagens de Programação12

2 História da Computação 7

3.1 Analogia entre dramatização da disputa de pênaltis e Programação Orientada a Objetos15
3.2 Um exemplo real em Java: um conversor de Celsius para Fahrenheit16

3 Conversor de Temperaturas 15 4 Testes Automatizados 19

5.1 Atributos26
5.2 A importância da escolha de bons nomes29

5 Métodos com Vários Parâmetros 25 6 if else Encaixados 3 7 Programas com Vários Objetos 39

8.1 Laços em linguagens de programação45
8.2 O laço while46
8.3 Números primos48
9.1 Condições como expressões53
9.2 Precedência de operadores56
9.3 Exemplos57

9 Expressões e Variáveis Lógicas 53 vii viii SUMÁRIO

10.1 Um pouco mais sobre primos61
10.2 Uma biblioteca de funções matemáticas63
10.3 do...while64

10 Mergulhando no while 61

1.1 Um tipo para representar caracteres67
1.2 Cadeias de caracteres (Strings)69

1 Caracteres e Cadeias de Caracteres 67

12.1 A Memória do Computador73
12.2 O que são as Variáveis?74

12 A Memória e as Variáveis 73

13.1 Sistemas de numeração7
13.2 Conversão entre sistemas de numeração78

13 Manipulando Números Utilizando Diferentes Bases 7

14.1 Criação de programas Java83

14 Arrays (vetores) 81

15.1 O comando for87
15.2 Leitura do teclado8
15.3 Conversão de String para números90

15 for, leitura do teclado e conversão de Strings 87

16.1 Laços encaixados93
16.2 Matrizes (arrays multidimensionais)94
16.3 Exemplo: LIFE, o jogo da vida95

16 Laços Encaixados e Matrizes 93

17.1 Busca101
17.2 Pondo ordem na casa102
18.1 Busca binária105
18.2 Complexidade Computacional106
18.3 Fusão107

18 Busca Binária e Fusão 105

19.1 Construtores109

SUMÁRIO ix

(Parte 1 de 10)

Comentários