Roteiro do Programa e Entrada/Saída c Professores de ALPRO I Faculdade de Informática PUCRS 03/2012 ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 1 / 32
Sumário 1 Relembrando 2 Programa Definição de programa A aplicação 3 Entrada e Saída Exibindo informações na tela Papéis de variáveis Obtendo informações pelo teclado ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 2 / 32
Relembrando Sumário 1 Relembrando 2 Programa Definição de programa A aplicação 3 Entrada e Saída Exibindo informações na tela Papéis de variáveis Obtendo informações pelo teclado ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 3 / 32
Relembrando Classes, Objetos, Atributos e Métodos Até agora já criamos classes completas contendo atributos e métodos. As classes foram criadas através da interface gráfica do BlueJ. As mensagem foram enviadas manualmente com o BlueJ. Veremos agora como agrupar essas chamadas em um roteiro especificado por uma sequência de passos: um programa. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 4 / 32
Programa Sumário 1 Relembrando 2 Programa Definição de programa A aplicação 3 Entrada e Saída Exibindo informações na tela Papéis de variáveis Obtendo informações pelo teclado ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 5 / 32
Programa Definição de programa Revendo a classe Conta O comportamento da classe Conta é definido por 5 métodos: Construtor. depositar. sacar. transferir. getsaldo. public class Conta { private double saldo; public Conta() { saldo = 0; public void depositar(double valor) { saldo = saldo + valor; public void sacar(double valor) { saldo = saldo - valor; public void transferir(conta destino, double valor) { sacar(valor); destino.depositar(valor); public double getsaldo() { return saldo; ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 6 / 32
Programa Definição de programa Definindo uma sequência de passos Como definir uma sequência de passos que realizem as seguintes ações: Criar uma conta. Depositar inicialmente R$ 4000,00. Sacar R$ 100,00. Sacar R$ 280,00. Obter o saldo final? ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 7 / 32
Programa Definição de programa Definindo uma sequência de passos Como definir uma sequência de passos que realizem as seguintes ações: Criar uma conta. Depositar inicialmente R$ 4000,00. Sacar R$ 100,00. Sacar R$ 280,00. Obter o saldo final? Solução: criar um método que controle essa sequência de passos. Método executa Método que executa ações definidas, na ordem especificada. É que se costuma chamar de programa principal. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 7 / 32
Programa Definição de programa O método executa public void executa() { Conta conta1 = new Conta(); conta1.depositar(4000); conta1.sacar(100); conta1.sacar(280); O primeiro passo é criar uma instância. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 8 / 32
Programa Definição de programa O método executa public void executa() { Conta conta1 = new Conta(); conta1.depositar(4000); conta1.sacar(100); conta1.sacar(280); O primeiro passo é criar uma instância. Chamamos conta1 de variável local, pois só existe neste método. conta1 é uma variável de objeto, pois armazena uma referência para a instância criada pelo comando new. conta1 ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 8 / 32
Programa Definição de programa O uso do comando new Conta conta1 = new Conta(); Classe da variável Variável Comando de instanciação Nome do método construtor conta1 Instância ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 9 / 32
Programa Definição de programa Enviando mensagens no programa public void executa() { Conta conta1 = new Conta(); conta1.depositar(4000); conta1.sacar(100); conta1.sacar(280); O comando de instanciação cria objetos da mesma forma que o BlueJ. Usando a variável de objeto conta1 podemos ativar os métodos do objeto referenciado. conta1 ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 10 / 32
Programa A aplicação Modelando a aplicação A classe Conta descreve os atributos e métodos relacionados com a descrição de uma conta bancária. Dizemos que a classe Conta modela uma conta bancária. Mas o método executa não faz parte dela, então onde devemos localizá-lo? ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 11 / 32
Programa A aplicação Modelando a aplicação A classe Conta descreve os atributos e métodos relacionados com a descrição de uma conta bancária. Dizemos que a classe Conta modela uma conta bancária. Mas o método executa não faz parte dela, então onde devemos localizá-lo? Ele descreve a sequência de passos que a aplicação deverá realizar. Portanto, ele faz parte da modelagem da aplicação. Conclusão: deve haver uma classe que represente a aplicação. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 11 / 32
Programa A aplicação A classe App Classe App Classe que representa a aplicação ou sistema. Deve conter o método executa. Dizemos que a execução de um programa depende da existência de um objeto App. Fazemos isso no BlueJ, da mesma forma que criamos objetos de outras classes. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 12 / 32
Programa A aplicação Complementando... Código completo da classe App: public class App { public void executa() { Conta conta1 = new Conta(); conta1.depositar(4000); conta1.sacar(100); conta1.sacar(280); ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 13 / 32
Programa A aplicação A classe App no BlueJ Diagrama de classes da aplicação: A seta denota que App faz uso dos serviços (métodos) de Conta. Para que uma classe possa referenciar objetos de outra, basta que as duas estejam dentro do mesmo projeto. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 14 / 32
Programa A aplicação Executando aplicações no BlueJ Para executar uma aplicação dentro do BlueJ: Crie uma instância de App. Envie a mensagem executa() para ela. Mas qual o resultado da execução? Você saberia explicá-lo? ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 15 / 32
Entrada e Saída Sumário 1 Relembrando 2 Programa Definição de programa A aplicação 3 Entrada e Saída Exibindo informações na tela Papéis de variáveis Obtendo informações pelo teclado ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 16 / 32
Entrada e Saída Comunicação com o usuário Entrada e Saída A classe Terminal representa os principais dispositivos de comunicação de um computador: Teclado (entrada) Tela (saída) Denominamos esse conjunto de Terminal, ou seja, um terminal de computador com teclado e tela. Classe Terminal Classe que representa o teclado e a tela do computador. Oferece métodos capazes de realizar entrada e saída de dados. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 17 / 32
Entrada e Saída Exibindo informações na tela Exibindo mensagens para o usuário Para utilizar a classe Terminal é necessário indicar a utilização do pacote pucrs.alpro. A partir daí, basta utilizar os métodos adequados: O método println exibe mensagens de texto na tela. import pucrs.alpro.*; public class App { public void executa() { Conta conta1 = new Conta(); conta1.depositar(4000); conta1.sacar(100); conta1.sacar(280); Terminal.println("Saldo atual: " + conta1.getsaldo()); ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 18 / 32
Entrada e Saída Exibindo informações na tela Entendendo o método println O método println é capaz de exibir informações diversas na tela: valores numéricos ou texto. Porém, se for necessário agrupar valores com texto, deve-se empregar o operador +. Novidade: para exibir um texto qualquer, coloque este entre aspas duplas. Esse tipo de dado é denominado cadeia de caracteres ou texto (String of characters). Terminal.println("Saldo atual: "+conta1.getsaldo()); Java converte automaticamente o resultado double do método getsaldo para uma String que pode ser concatenada com o texto inicial. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 19 / 32
Entrada e Saída Exibindo informações na tela Importando a classe Terminal Para usar a classe Terminal em seus projetos, proceda da seguinte maneira: Faça dowload do arquivo terminal-1.0.jar; Mova o arquivo para a pasta lib/userlib na sua instalação do BlueJ A classe Terminal possui diversos outros métodos para entrada e saída de dados, que veremos mais adiante. Obs: essa classe não faz parte da biblioteca de classes padrão de Java. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 20 / 32
Entrada e Saída Exibindo informações na tela Exercício ➊ Escreva um programa Java que: Cria duas contas bancárias conta1 e conta2; Deposita R$ 1000,00 em conta1 e R$ 2000,00 em conta2; Transfere R$ 250,00 de conta2 para conta1; Exibe na tela o saldo das duas contas. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 21 / 32
Entrada e Saída Papéis de variáveis Papéis de variáveis Dizemos que as variáveis em um programa têm papéis definidos, ou seja, desempenham funções específicas. Já conhecemos um desses papéis: o acumulador. Acumulador Variável que armazena a soma de um conjunto de valores. A soma é acumulada ao longo do tempo. Exemplos: Dinheiro no parquímetro. Saldo na conta bancária. Combustível e quilometragem no carro. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 22 / 32
Entrada e Saída Papéis de variáveis Exemplo: acumulando quilometragem Considerando uma classe Automovel, podemos ter um atributo que represente a quilometragem total do veículo. Esse atributo é um acumulador. public class Automovel { private double litros; private double distancia;... public void mover(double dist) { distancia = distancia + dist; // Assume 15 km/l de consumo litros = litros - dist/15;... public double getdistancia() { return distancia; ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 23 / 32
Entrada e Saída Papéis de variáveis Outro papel: o contador Contador Variável que armazena um valor que representa a quantidade de ocorrências de um evento. Geralmente é incrementada de uma em uma unidade. Exemplos: Quantos tickets o parquímetro já imprimiu? Quantos saques foram feitos de uma conta? Quantas pessoas visitaram o zoológico? Quantas pessoas foram à sessão de cinema? ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 24 / 32
Entrada e Saída Papéis de variáveis Exemplo: contar tickets impressos Considerando a classe Parquimetro, podemos ter um atributo que represente a quantidade de tickets já impressos. Esse atributo é um contador. public class Parquimetro { private int quanttickets; private double total;... public void pagarcentavos(double valor) { total = total + valor; public void imprimirticket() {... quanttickets = quanttickets + 1; public int getquanttickets() { return quanttickets; ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 25 / 32
Entrada e Saída Obtendo informações pelo teclado Entrada de dados Até o momento, nossos programas só manipulam valores fixos. Para que seja possível a entrada de dados, devem ser empregados métodos da classe Terminal: readint: lê e retorna um valor numérico inteiro. readdouble: lê e retorna um valor numérico real; Esses métodos devem ser sempre usados no lado direito de atribuições. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 26 / 32
Entrada e Saída Obtendo informações pelo teclado Exemplo: depositando um valor digitado Este programa cria uma conta, pergunta ao usuário o valor a ser depositado e realiza o depósito: public void executa() { Conta conta1 = new Conta(); Terminal.print("Digite o valor do depósito: "); double valor = Terminal.readDouble(); conta1.depositar(valor); Terminal.println("O saldo inicial da conta é: "+conta1.getsaldo ()); O método print faz o mesmo que println, mas não move o cursor para a linha seguinte. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 27 / 32
Entrada e Saída Obtendo informações pelo teclado Declarando e usando variáveis locais Armazenar o resultado de cálculos intermediários ou expressões em variáveis locais facilita a leitura do programa: public void executa() { Conta conta1 = new Conta(); Terminal.print("Digite o valor do depósito: "); double valor = Terminal.readDouble(); conta1.depositar(valor); double saldo = conta.getsaldo(); Terminal.println("O saldo inicial da conta é: "+saldo); ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 28 / 32
Entrada e Saída Obtendo informações pelo teclado Manipulando variáveis locais Além disso, evita a alteração indesejada de valores: Por exemplo, vamos supor que o banco ofereça 1% em juros para o saldo inicial depositado. Podemos utilizar a variável local saldo para armazenar esse resultado temporário: public void executa() { Conta conta1 = new Conta(); Terminal.print("Digite o valor do depósito: "); double valor = Terminal.readDouble(); conta1.depositar(valor); double saldo = conta.getsaldo(); saldo = saldo + saldo * 0.01; Terminal.println("O saldo inicial da conta (mais juros) será: "+ saldo); Observe que o atributo saldo do objeto conta1 não foi alterado! ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 29 / 32
Entrada e Saída Obtendo informações pelo teclado Exercício ➋ Em Impostolândia, o governo tarifa todas as movimentações bancárias em 2%. Em função disso, escreva um programa que: Cria uma instância de Conta. Faz um depósito de R$ 4000,00. Calcula o valor do imposto. Exibe o saldo real, o valor do imposto e o saldo restante após o desconto do imposto. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 30 / 32
Entrada e Saída Obtendo informações pelo teclado Exercício ➌ Escreva um programa que: Crie duas instâncias de Conta: conta1 e conta2. Solicita ao usuário o valor do depósito inicial de conta1. Realiza o depósito na conta1. Solicita o valor a ser transferido de conta1 para conta2. Executa a transferência. Exibe o saldo final das duas contas. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 31 / 32
Entrada e Saída Obtendo informações pelo teclado Leitura adicional recomendada HORSTMANN, Cay. Big Java, Capítulo 2 - Introdução a objetos e classes. In: Big Java. Porto Alegre: Bookman, 2004. p. 44-86. ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 32 / 32