UC – Prog. Orientada a Objetos Docente: André Luiz Silva de Moraes 3º sem – Análise e Desenvolvimento de Sistemas Programação Orientada a Objetos - 3º semestre Prof. André Moraes 2.3 AULA 02 CONTINUANDO A ABORDAGEM A ALGUNS CÓDIGOS ESCRITOS EM JAVA Faremos mais alguns programas apenas para nos certificarmos do comportamento da linguagem e dos recursos de compilação e execução da linguagem Java. EXEMPLO 1 – AS GARRAFAS DE CERVEJA SOBRE A MESA Salve o arquivo com o nome Cerveja.java OBSERVAÇÕES: • Neste exemplo montamos um contador de garrafas que decresce até finalizar a contagem, o código é implementado em um loop while inicial e através de testes decide a impressão das mensagens com o contador de garrafas; • Note que o contador no loop verifica a quantidade de cervejas para poder decidir sobre o que irá escrever na variável palavra; • As cervejas estão armazenadas na variável num_Cerveja e são decrescidas até chegarem a 1, onde será impressa a útima frase e finalizando o aplicativo; P á g | 10 Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004. 2.3.1 UC – Prog. Orientada a Objetos Docente: André Luiz Silva de Moraes 3º sem – Análise e Desenvolvimento de Sistemas 2.3.2 EXEMPLO 2 – GERADOR DE PALAVRAS AUTOMÁTICO Neste exemplo desenvolveremos um gerador automático de frases, ainda nos exemplos para a interação da linguagem, utilizaremos um jogo de variáveis com uso de matrizes de strings. OBSERVAÇÕES: Etapas do programa: 1. A primeira etapa é criar uma matriz de strings, que serão os contêineres que armazenarão todas as palavras. Neste caso foram usadas as variáveis listaPalavras1, listaPalavras2 e listaPalavras3. Todas as palavras estão entre aspas e foram separadas por vírgulas; 2. Em cada uma das três listas, o objetivo é selecionar uma palavra aleatória, portanto, temos que saber quantas palavras existem em cada lista. Se houver 14 palavras na lista, precisaremos de um número aleatório entre 0 e 13. O detalhe interessante de matrizes é o código: a. Na sua declaração: i. String[ ] testando = {“andre”, “ana”, “laura”}; b. Obtendo a quantidade de elementos da matriz: i. int x = testando.length; 3. Precisaremos de 3 números aleatório. O Java vem empacotado, independente, predefinido e habilitado em sua memória central com um conjunto de métodos de cálculo (por enquanto as consideraremos como funções). 4. O método random(), utilizado anteriormente, retorna um número aleatório entre 0 e 1, e foi usado para multiplicar pela quantidade de elementos (considerando o tamanho da matriz) da nossa listagem de elementos. Para conseguir fazer uma saída com um número inteiro aleatório, tivemos de forçar que o resultado fosse um inteiro com a conversão (int) que foi utilizada no código. 5. E por último realizamos a construção da frase, selecionando uma palavra em cada uma das três listas e unindo-as (inserindo espaços em branco entre elas). Note que para conseguirmos realizar a seleção de uma palavra foi utilizada as variáveis [rand1], [rand2] e [rand3] para isso. P á g | 11 Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004. Seja o código a seguir: UC – Prog. Orientada a Objetos Docente: André Luiz Silva de Moraes 3º sem – Análise e Desenvolvimento de Sistemas 3 Uma introdução na orientação a objetos Faremos uma pequena explanação sobre classes e objetos, porém é interessante inicialmente criarmos uma a partir de um exemplo para podermos visualizar melhor o que está acontecendo em nosso código e em seguida tirarmos nossas próprias conclusões. 3.1 CRIANDO NOVAS CLASSES Agora veremos como são os procedimentos para a criação de classes e também os nossos objetos a serem utilizados nos projetos Java. Iniciaremos criando um pequeno exemplo muito simples para testarmos uma comunicação entre métodos e objetos. 3.1.1 EXEMPLO 3 – CRIANDO A PRIMEIRA CLASSE Salve como Cachorro.java Em seguida, criaremos outra classe com o nome TestaCachorro Salve como TestaCachorro.java OBSERVAÇÕES: • Logicamente se pode perceber que realizamos a criação de duas classes, e podemos notar que existe uma relação entre as duas de alguma forma; • A classe cachorro possui apenas declarações de variáveis e um método com um retorno de impressão de tela com o latido do cachorro; • A classe TestaCachorro é a classe onde tudo acontece de fato, note que nesta classe existe o método main (que sempre existirá na classe principal do software). Esta classe utiliza uma operação com uso do operador 3.2 . (ponto). Este operador lhe dará acesso ao estado e comportamento de um objeto. ENTENDENDO UM POUCO SOBRE AS CLASSES Por enquanto, a abordagem principal sobre o assunto de classes pode ser entendida da seguinte maneira: Quando projetarmos uma classe precisamos pensar nos objetos que serão criados com a classe, e precisamos considerar: P á g | 12 Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004. Criaremos uma classe inicial com o nome Cachorro: UC – Prog. Orientada a Objetos Docente: André Luiz Silva de Moraes 3º sem – Análise e Desenvolvimento de Sistemas • As coisas que o objeto conhece; • As coisas que o objeto faz; Exemplos: Pessoa Nome Tamanho Sexo setNome( ) getNome( ) dormir( ) Conhece Faz As coisas que um objeto conhece sobre ele são chamadas de variáveis de instância. Elas representam o estado de um objeto (os dados) e podem ter valores exclusivos para cada objeto desse tipo. É comum um objeto ter métodos que leiam ou gravem os valores das variáveis de instância. Por exemplo, um objeto despertador tem uma variável de instância que armazena a hora de despertar e dois métodos que poderiam capturar e configurar esta hora. Despertador Hora setHora( ) getHora( ) despertar( ) 3.3 QUAL A DIFERENÇA ENTRE CLASSE E OBJETO? Uma classe não é um objeto, mas é usada para construí-los. A classe pode ser entendida como um projeto de um objeto. Ela informa à máquina virtual como criar um objeto desse tipo específico. Cada objeto criado a partir dessa classe terá seus próprios valores para as variáveis de instância da classe. Por exemplo, podemos usar a classe Botão para criar vários botões diferentes, e cada botão poderá ter sua própria cor, tamanho, forma, rótulo e assim por diante. 3.3.1 EXEMPLO 4 – CRIANDO A CLASSE FILME Neste exemplo criaremos a classe filme, que armazenará algumas informações sobre filmes e a classe testadora para podermos visualizar as informações sendo atualizadas nas variáveis de objeto. Salve o arquivo como Filme.java P á g | 13 Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004. Podemos considerar a instância como outra maneira de dizer objeto. E as coisas que um objeto faz são chamadas de métodos. Assim, quando projetarmos uma classe, precisaremos pensar nos dados que um objeto terá de conhecer sobre si mesmo e também projetar os métodos que operarão sobre esses dados. UC – Prog. Orientada a Objetos Docente: André Luiz Silva de Moraes 3º sem – Análise e Desenvolvimento de Sistemas E agora a classe testadora: OBSERVAÇÕES: A classe filmeTestDrive cria objetos (instâncias) da classe Filme e usa o operador ponto ( ) para configurar as variáveis de instância com um valor específico. • A classe filmeTestDrive também referencia (chama) um método em um dos objetos. 3.3.2 EXEMPLO 5 – CRIANDO UM PEQUENO JOGO EM JAVA Criaremos um jogo de adivinhação, envolvendo um objeto “jogo” e três objetos “jogadores”. O jogo gera um número aleatório entre 0 e 9 e os três objetos jogadores tentam adivinhá-lo. Classe Jogador.java P á g | 14 Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004. . • UC – Prog. Orientada a Objetos Docente: André Luiz Silva de Moraes 3º sem – Análise e Desenvolvimento de Sistemas Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004. Classe JogoAdivinha,Java Classe principal do aplicativo: LancaJogo.java P á g | 15 UC – Prog. Orientada a Objetos Docente: André Luiz Silva de Moraes 3º sem – Análise e Desenvolvimento de Sistemas OBSERVAÇÕES: • Podemos notar que é na classe LancaJogo que o jogo é realmente inicializado, pois é a classe que contém o método Java principal main( ); • No método main( ), um objeto GuessGame é criado e seu método startGame( ) é chamado; • É no método StartGame do objeto AdivinhaJoo que o jogo inteiro se desenrola. Ele cria 3 jogadores e, em seguida, “pensa” em um número aleatório (o que os jogadores devem adivinhar). Depois ele solicita a cada jogador que adivinhe, verifica o resultado e exibe informações sobre o(s) jogador(es) vencedor(es) ou pede que adivinhem novamente. Em outras palavras: LancaJogo main(String[ ] args ) Cria um objeto AdivinhaJogo e solicita que inicie o jogo. p1 p2 p3 Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004. AdivinhaJogo Variáveis de instância dos 3 jogadores startGame( ) Jogador numero Palpite do jogador para o número adivinhação( ) Método para dar um palpite P á g | 16