return expressão; ou return; Exemplo: return balance; Objetivo:
Especifi car o valor que um método retorna e sair desse método imediatamente. O valor de retorno torna-se o valor da expressão da chamada do método.
ch03/account/BankAccount.java
1 /**
2 Uma conta bancária tem um saldo que pode ser alterado por
3 depósitos e saques.
4 */
5 public class BankAccount
6 { 7 /**
8 Constrói uma conta bancária com saldo zero.
9 */ 10 public BankAccount() 11 { 12 balance = 0; 13 } 14 15 /**
16 Constrói uma conta bancária com saldo especifi cado.
17 @param initialBalance saldo inicial
Utilize a instrução return
para especifi car o valor que um método retorna a quem o chamou.
18 */
19 public BankAccount(double initialBalance)
20 {
21 balance = initialBalance; 22 }
23
24 /**
25 Deposita dinheiro na conta bancária.
26 @param amount valor a depositar
27 */
28 public void deposit(double amount)
29 {
30 double newBalance = balance + amount;
31 balance = newBalance; 32 }
33
34 /**
35 Retira dinheiro da conta bancária.
36 @param amount valor a retirar
37 */
38 public void withdraw(double amount)
39 {
40 double newBalance = balance - amount;
41 balance = newBalance; 42 }
43
44 /**
45 Obtém o saldo atual da conta bancária.
46 @return saldo atual
47 */
48 public double getBalance()
49 {
50 return balance;
51 } 52
53 private double balance;
54 }
AUTOVERIFICAÇÃODAAPRENDIZAGEM
9. A classe Rectangle tem quatro campos de instância: x, y, width e height. Forneça uma possível implementação para o método getWidth.
10. Forneça uma possível implementação para o método translate da classe Rec- tangle.
Implementando uma classe
Esta é a primeira das várias seções “Como Fazer” deste livro. Usuários do sistema opera- cional Linux têm guias “como fazer” que fornecem respostas a questões comuns do tipo “Como começo?” e “O que eu faço em seguida?”. Da mesma forma, as seções Como Fa- zer deste livro fornecem procedimentos passo a passo para executar tarefas específi cas.
Freqüentemente você será solicitado a implementar uma classe. Por exemplo, uma lição de casa poderia solicitar para você implementar uma classe CashRegister.
Passo 1 Descubra quais métodos você foi encarregado de fornecer.
No exemplo da caixa registradora, você não terá de fornecer todos os recursos de uma caixa registradora real – há um número muito grande. O exercício deve informar quais
aspectos de uma caixa registradora sua classe deve simular. Você deve ter recebido
uma descrição, em linguagem simples, das operações que um objeto da sua classe deve executar, como esta:
Registrar o preço de venda de um item adquirido.
•
Inserir o valor do pagamento.
•
Calcular o troco devido ao cliente.
•
Por simplicidade, estamos examinando uma caixa registradora muito simples. Um mo- delo mais sofi sticado seria capaz de calcular o imposto sobre as vendas, o total das vendas diárias etc.
Passo 2 Especifi que a interface pública.
Transforme a lista no Passo 1 em um conjunto de métodos, com tipos específi cos para os parâmetros e para os valores de retorno. Muitos programadores acham que esse pas- so seria mais simples se escrevessem chamadas de método que poderiam ser aplicadas a um objeto de exemplo, como mostrado a seguir:
CashRegister register = new CashRegister(); register.recordPurchase(29.95);
register.recordPurchase(9.95); register.enterPayment(50);
double change = register.giveChange();
Agora temos uma lista específi ca dos métodos.
public void recordPurchase(double amount)
•
public void enterPayment(double amount)
•
public double giveChange()
•
Para completar a interface pública, você precisa especifi car os construtores. Pense nas informações necessárias para criar um objeto desta classe. Às vezes, são desejáveis dois construtores: um que confi gura todos os campos com um padrão e outro que os confi gu- ra com valores fornecidos pelo usuário.
No caso do exemplo da caixa registradora, um único construtor que cria um re- gistro vazio é sufi ciente. Uma caixa registradora mais realista iniciaria com algumas moedas e cédulas para poder fornecer o troco exato, mas isso está além do escopo deste exercício.
Portanto, adicionaremos um único construtor:
public CashRegister()
•
Passo 3 Documente a interface pública.
/**
Uma caixa registradora soma as vendas e calcula o troco devido.
*/
public class CashRegister {
/**
Constrói uma caixa registradora vazia (sem dinheiro).
*/
public CashRegister() {
} /**
Registra a venda de um item.
@param amount preço do item
*/
public void recordPurchase(double amount) {
} /**
Insere o pagamento recebido do cliente.
@param amount valor do pagamento
*/
public void enterPayment(double amount) {
} /**
Calcula o troco devido e redefi ne a máquina para o próximo cliente.
@return troco devido ao cliente
*/
public double giveChange() {
} }
Passo 4 Determine os campos de instância.
Pense nas informações que um objeto precisa armazenar para fazer o trabalho. Lembre-se de que os métodos podem ser chamados em qualquer ordem! O objeto precisa ter me- mória interna sufi ciente para poder processar cada método utilizando apenas os campos de instância e os parâmetros de método. Analise cada método, talvez iniciando com um simples ou com um interessante, e pense no que é necessário para executar a tarefa dele. Faça os campos de instância armazenarem as informações que ele precisa.
No exemplo da caixa registradora, seria interessante manter um registro do valor total da compra e do valor do pagamento. Você pode calcular o troco devido a partir desses dois valores.
public class CashRegister {
...
private double purchase; private double payment }
Passo 5 Implemente construtores e métodos.
Implemente os construtores e os métodos da sua classe, um por vez, iniciando com os mais fáceis. Por exemplo, eis a implementação do método recordPurchase:
public void recordPurchase(double amount) {
double newTotal = purchase + amount; purchase = newTotal;
}
Segue o método giveChange. Observe que esse método é um pouco mais sofi sticado – ele calcula o troco devido e também redefi ne a caixa registradora para a próxima venda.
public double giveChange() {
double change = payment - purchase; purchase = 0;
payment = 0; return change; }
Se você achar que tem problemas com a implementação, talvez precise repensar sua escolha dos campos de instância. É comum que um iniciante comece com um conjun- to de campos que pode não refl etir exatamente o estado de um objeto. Não hesite em voltar atrás, adicionar ou modifi car os campos.
Depois de concluir a implementação, compile sua classe e corrija todos os erros de compilador.
Passo 6 Teste sua classe.
Escreva um pequeno programa testador e o execute. O programa testador pode execu- tar as chamadas de método encontradas no Passo 2.
public class CashRegisterTester {
public static void main(String[] args) {
CashRegister register = new CashRegister(); register.recordPurchase(29.50);
register.recordPurchase(9.25); register.enterPayment(50);
double change = register.giveChange(); System.out.println(change);
System.out.println("Expected: 11.25"); }
}
A saída desse programa de teste é:
11.25
Expected: 11.25
Alternativamente, se você estiver usando um programa que permite testar objetos inte- rativamente, como o BlueJ, construa um objeto e aplique as chamadas de método.