(Parte 1 de 5)

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 primos63
10.2 Uma biblioteca de funções matemáticas65
10.3 do...while6

10 Mergulhando no while 63

1.1 Um tipo para representar caracteres69
1.2 Cadeias de caracteres (Strings)71

1 Caracteres e Cadeias de Caracteres 69

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

12 A Memória e as Variáveis 75

13.1 Sistemas de numeração79
13.2 Conversão entre sistemas de numeração80

13 Manipulando Números Utilizando Diferentes Bases 79

14.1 Criação de programas Java85

14 Arrays (vetores) 83

15.1 O comando for89
15.2 Leitura do teclado90
15.3 Conversão de String para números92

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

16.1 Laços encaixados95
16.2 Matrizes (arrays multidimensionais)96
16.3 Exemplo: LIFE, o jogo da vida97

16 Laços Encaixados e Matrizes 95

17.1 Busca103
17.2 Pondo ordem na casa104
18.1 Busca binária107
18.2 Complexidade Computacional108
18.3 Fusão109

18 Busca Binária e Fusão 107

19.1 Construtores1

SUMÁRIO ix

20.1 O conceito de interfaces117
20.2 Um primeiro exemplo117
20.3 Implementando mais de uma interface por vez121
20.4 Um exemplo mais sofisticado123
20.5 A importância de interfaces127
21.1 O Conceito de herança131
21.2 Terminologia de herança132
21.3 Implementação de herança na linguagem Java132
21.4 Hierarquia de classes134
21.5 Relacionamento “é um”135
21.6 Resumo135
23.1 O C que há em Java143
23.2 Detalhes de entrada e saída145
23.3 Declaração de variáveis146
23.4 Parâmetros de funções146
23.5 Um último exemplo146

23 O C Que Há em Java 143

A.1 Conversor de Temperatura simples151
A.2 Tratando erros154

A Utilizando o Dr. Java 151

B.1 O Exemplo159

B Desenvolvimento Dirigido por Testes 159 Bibliografia 175 x SUMÁRIO x SUMÁRIO

2.1 Arquitetura do ENIAC10
2.2 Arquitetura de Von Neumann1
21.1 Diagrama de herança132
21.2 Hierarquia de classes representando os seres vivos134
21.3 Hierarquia errada135
2.1 Documentação gerada pelo Javadoc141

Lista de Figuras xi xii LISTA DE FIGURAS xii LISTA DE FIGURAS

Prefácio

Caros leitores, sejam bem-vindos ao maravilhoso mundo da Ciência da Computação. Com este livro, vocês terão a oportunidade de aprender os elementos básicos da programação de computadores e terão contato com alguns dos conceitos fundamentais da Ciência da Computação.

Este livro é resultado da experiência dos autores na disciplina de Introdução à Ciência da Computação ministrada no IME/USP utilizando orientação a objetos e a linguagem Java de 2003 a 2006. Desde 2005, esta abordagem também é aplicada na USPLeste com os 180 alunos do curso de Sistemas de Informação. Influenciada pelo método proposto pela ACM (Association for Computing Machinery) e pelo IEEE (Institute of Electrical and Electronics Engineers) em seu currículo Objects-first, nossa abordagem evita o problema de se ensinar a programar sem o uso de objetos para depois exigir do estudante uma mudança de paradigma com a introdução de objetos. Elimina-se assim a necessidade de dizer “esqueça a forma que programamos até agora; agora vamos aprender o jeito correto”.

Apresentando os conceitos de orientação a objetos desde o início do ensino de programação, a abordagem adotada aqui permite que o aluno inicie sua formação em programação de forma equilibrada. Aprendendo conceitos tanto algorítmicos quanto estruturais ao mesmo tempo em que toma contato com práticas fundamentais de programação como testes automatizados e o uso de nomes claros para os elementos do código, o leitor obtém uma visão básica porém ampla do que é mais importante para o desenvolvimento de software.

Esperamos que este livro seja útil tanto para alunos de cursos superiores de Informática quanto para profissionais do mercado e outros curiosos que queiram adquirir conhecimentos na área de desenvolvimento de software. Nosso objetivo é que este livro os ajude na fascinante empreitada de aprender a programar de forma elegante e eficaz e que ele permita um bom início rumo a uma formação sólida em programação que é uma condição fundamental que os desafios da informática do século XXI nos impõem.

Abraços e boa jornada!

São Paulo, março de 2006. Alfredo Goldman, Fabio Kon e Paulo J. S. Silva xiii xiv PREFÁCIO 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)

2 CAPÍTULO 1. TEATRO DE OBJETOS

• Jogador. Os jogadores são divididos em dois tipos:

– Goleiro (2 atores desempenham este papel) – Batedor de pênalti (10 atores)

• Torcedor. Os torcedores são divididos em dois tipos:

– Torcedor educado (4 atores) – Torcedor mal-educado (4 atores)

O professor (ou o diretor da peça, que pode ser você) será responsável por escolher as pessoas que desempenharão cada papel. Se houver limitação de espaço, é conveniente que os 8 torcedores fiquem concentrados em uma área separada (por exemplo, em uma suas próprias carteiras, se o local for uma sala de aula) para não tumultuar muito o ambiente. Obviamente, o diretor pode também aumentar ou diminuir o número de torcedores e de batedores de pênalti. Para desempenhar o papel de torcedores, uma boa dica é o diretor escolher pessoas que pareçam bem barulhentas e faladoras (por exemplo, a turma do fundão numa sala de aula :-). Ao escolher os atores, o diretor deverá entregar um cartão preso com um barbante que ficará pendurado no pescoço do ator e conterá informações sobre o papel desempenhado pelo ator. As informações são:

1. Nome do papel 2. Mensagens que o personagem é capaz de entender 3. Atributos do personagem

Os três tipos de informação acima já devem vir pré-escritos à caneta no cartão mas os valores dos atributos do personagem devem ser escritos na hora a lápis pelo diretor. Alguns papéis, como o de juiz, não possuem nenhum atributo. Outros papéis podem possuir um ou mais atributos, o jogador, por exemplo, pode possuir como atributos o nome do time ao qual pertence e o número da sua camisa. No caso de o jogador ser um goleiro, o atributo “número da camisa” pode vir escrito a caneta como valendo 1.

Além do cartão que fica pendurado no pescoço do ator, cada ator recebe um script descrevendo o seu comportamento: para cada mensagem recebida pelo ator, o script descreve quais ações devem ser tomadas pelo ator.

O diretor não deve esquecer de trazer uma bola para esta atividade e deve tomar cuidado para que nenhuma janela seja quebrada durante a realização da atividade. O tempo total estimado para a realização da atividade é de 50 minutos. A maior parte do tempo é gasto explicando-se os procedimentos. A encenação em si, demora entre 5 e 10 minutos dependendo da qualidade dos batedores de pênalti e dos goleiros.

Eis a descrição detalhada dos dados que deverão aparecer nos cartões descritivos e no script (comportamento) de cada um dos 26 atores participantes da encenação. Para obter versões PDF dos cartões prontas para impressão, visite o sítio deste livro: w.ime.usp.br/~kon/livros/Java

1.1. DISPUTA DE PÊNALTIS 3

1. Goleiro

• Cartão de Identificação

– Nome do Papel: Goleiro – Mensagens que entende: SuaVez, Cobrança Autorizada, VenceuOTimeX

– Atributos: Time: , Camisa número: 1

– 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 adversá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 identificação, comemore; caso contrário, xingue o juiz (polidamente! :-).

2. 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 identificação, comemore; caso contrário, xingue o juiz (polidamente! :-).

3. 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

4. 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 identificaçã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).

5. 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.

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

(Parte 1 de 5)

Comentários