Ao criar uma classe para modelar as informações para uma conta poupança em Java, uma série de considerações especiais entram em jogo. O mais importante deles é a fraqueza sutil na implementação Java do float e tipos primitivos de dados dupla que faz com que eles voltem ocasionalmente respostas ligeiramente imprecisos para operações aritméticas . Essas imprecisões , na maioria das circunstâncias , seria trivial. No entanto, quando se lida com registros de moeda , onde pequenos erros pode adicionar até dramáticos , as consequências do mundo real ao longo do tempo , eles podem se tornar graves. Coisas que você precisa
Computer Fotografia de Java IDE
kit de desenvolvimento Java
Java Runtime Environment
Show Mais instruções
1
Crie uma classe SavingsAccount . Se você estiver usando uma IDE Java especializado , provavelmente há uma opção para criar classes esqueleto automaticamente para você no menu Arquivo. Caso contrário , basta criar um arquivo chamado " SavingsAccount.java " e escreva a seguinte informação nele: .
/*** Esta classe representa informações comuns a todas as contas de poupança * /public class SavingsAccount {
//Tudo o resto do tutorial será escrito neste espaço !
}
2
Declare os campos de classe . No mínimo, você provavelmente vai querer armazenar um número de conta , o saldo atual, uma lista de titulares da conta , e um registro de todas as transações na conta. Escreva o seguinte dentro da classe :
/*** O número da conta * /String accountNumber ;
/*** O saldo atual. . Nunca use flutuadores ou duplos para moeda ! Há imprecisões na bóia e aritmética double * /equilíbrio BigDecimal privado; .
/*** Este armazena uma lista de nomes de titular de conta como uma string. Uma alternativa poderia ser a criação de uma classe de correntistas, e loja que aqui * /ArrayList correntistas = new ArrayList ( ); .
/*** A história de operações realizadas sobre a conta. Mais uma vez, uma alternativa seria a criação de uma classe de transação para armazenar mais informação do que o valor da transação * /ArrayList transações privadas = new ArrayList ();
Documentando seu trabalho é importante para legibilidade do código e manutenção futura , por isso não negligencie os seus comentários JavaDoc .
Uma coisa muito importante que você deve observar é que o balanço e as transações não são representados como flutuadores ou duplos , mas sim com a classe BigDecimal . BigDecimal é um método de uso intensivo de memória mais lenta e de armazenar números de ponto flutuante . No entanto, ela não tem as pequenas imprecisões do flutuador e primitivas de duplas. Como você está lidando com a moeda , você deve preferir precisão nas operações para os pequenos ganhos fornecidos pelo flutuador e dobrar de velocidade e consumo de memória.
3
Criar um construtor. Na maioria das classes, você vai querer sobrecarregar o construtor , ou seja, você vai querer ter mais de um método para a construção de uma nova instância de conta. Você pode decidir por si mesmo que tipo de construtores irá atender as suas necessidades, mas , no mínimo , deve haver um construtor para criar uma nova conta dado um número de conta e saldo começando , então adicione o seguinte método para sua classe:
/*** Criar uma nova conta * @ param accountNumber número da nova conta * @ param equilibrar a conta de saldo inicial * /SavingsAccount (String accountNumber , equilíbrio BigDecimal ) { this.accountNumber = accountNumber ; this.balance = saldo ; }
4
Criar um equilíbrio " getter " e um método performTransaction . É Orientada a Objetos prática de programação padrão para criar getters e setters para todos os campos de uma classe. No entanto, este não é apropriado para o campo de equilíbrio. Enquanto você certamente deve permitir o equilíbrio para ser visto, você não quer manipulações arbitrárias para o equilíbrio. Em vez disso , você quer que todas as alterações no equilíbrio de ocorrer na forma de uma transação. Portanto , adicione os seguintes dois métodos para a sua classe
/*** @ return o saldo atual * /BigDecimal getBalance () { return equilíbrio ;} .
/*** Realiza uma transação na conta * quantidade . @ param quanto a retirar /depósito? Retiradas deve ser negativo . Depósitos deve ser positivo . * @ Return true de sucesso. False se infrutíferas. Uma alternativa ao uso de um boolean aqui seria criar uma classe " TransactionFailedException " que poderia proporcionar ao usuário mais informações sobre as razões para o fracasso . * /PerformTransaction boolean ( BigDecimal valor ) {if ( amount.compareTo ( BigDecimal.ZERO ) = = -1 ) {//Esta é uma withdrawif ( amount.abs () compareTo (saldo) == 1 ) { //a retirar valor é maior que o balance.return falso ; . } else {//Não há dinheiro suficiente para cobrir a retirada . Modifique o equilíbrio e registrar o transaction.balance = balance.add ( quantidade ); transactions.add ( quantidade ); return true; }} else {//Este é um depósito . Adicionar ao equilíbrio e registrar o transaction.balance = balance.add ( quantidade ); transactions.add ( quantidade ); return true; }}
Isto fornece sua conta poupança da classe com o mínimo que necessita para funcionar , embora ainda há melhorias que podem ser feitas a ele. Titular e transações de conta deve ser suas próprias classes , ao invés de cordas simples e BigDecimals , já que você pode querer armazenar mais informações sobre a transação do que simplesmente o valor envolvido .