Come creare una classe di conto di risparmio con Java

October 19

Quando si crea una classe per modellare le informazioni per un conto di risparmio in Java, una serie di considerazioni speciali entrano in gioco. La più importante di queste è una debolezza sottile nel implementazione Java del float e double tipi di dati primitivi che li induce a tornare di tanto in tanto le risposte un po 'imprecise all'aritmetica operazioni. Queste imprecisioni, nella maggior parte dei casi, sarebbe banale. Tuttavia, quando si tratta di registrazioni di valuta, in cui le piccole imprecisioni possono aggiungere fino a drammatiche conseguenze reali nel corso del tempo, possono diventare seri.

istruzione

1 Creare una classe SavingsAccount. Se si utilizza una speciale Java IDE, vi è probabilmente la possibilità di creare classi scheletro automaticamente per voi nel menu File. In caso contrario, è sufficiente creare un file denominato \ "SavingsAccount.java \" e scrivere le seguenti informazioni in esso:

/ **

Questa classe rappresenta informazioni comuni a tutti i conti di risparmio.
* /
public class SavingsAccount {

// Tutto il resto nel tutorial sarà scritto in questo spazio!

}

2 Dichiarare i campi della classe. Al minimo, probabilmente si vuole memorizzare un numero di conto, il saldo corrente, un elenco di titolari di conti, e un record di tutte le transazioni sul conto. Scrivere il seguente all'interno della classe:

/**
* The account number.
*/
String accountNumber

ANDARE

/**
* The current balance. Never use floats or doubles for currency! There are inaccuracies in float and double arithmetic.
*/
private BigDecimal balance

ANDARE

/**
* This stores a list of account holder names as a string. An alternative might be to create an AccountHolder class, and store that here.
*/
ArrayList<String> accountHolders = new ArrayList<String>()

ANDARE

/**
* A history of transactions performed upon the account. Again, an alternative would be to create a Transaction class to hold more information than the amount of the transaction
*/
private ArrayList<BigDecimal> transactions = new ArrayList<BigDecimal>()

ANDARE

Documentare il vostro lavoro è importante per la leggibilità del codice e la manutenzione futura, in modo da non trascurare i tuoi commenti JavaDoc.

Una cosa molto importante che si dovrebbe notare è che l'equilibrio e le transazioni non sono rappresentati come galleggianti o doppie, ma piuttosto con la BigDecimal classe. BigDecimal è un metodo più lento e più intensivo della memoria di memorizzare numeri in virgola mobile. Tuttavia, manca le piccole imprecisioni del float e double primitive. Dal momento che avete a che fare con la moneta, si dovrebbe preferire la precisione nelle operazioni ai piccoli guadagni fornite dal galleggiante e doppie in termini di velocità e consumo di memoria.

3 Creare un costruttore. Nella maggior parte delle classi, ti consigliamo di sovraccaricare il costruttore; che è, si vorrà avere più di un metodo per la costruzione di una nuova istanza account. Si può decidere per te quali tipi di costruttori soddisfa le tue esigenze, ma al minimo, ci dovrebbe essere un costruttore per la creazione di un nuovo account dato un numero di conto e un equilibrio di partenza, in modo da aggiungere il seguente metodo alla classe:

/ **

* Create a new account
* @param accountNumber the new account's number
* @param balance the account's start balance
*/

SavingsAccount (String accountNumber, equilibrio BigDecimal) {

this.accountNumber = accountNumber

ANDARE

this.balance = balance

ANDARE
}

4 Creare un equilibrio \ un metodo performTransaction "getter \" e. È standard Object Oriented Programming pratica per creare getter e setter per tutti i campi di una classe. Tuttavia, non è appropriato per il campo equilibrio. Mentre si dovrebbe certamente consentire l'equilibrio per essere visualizzato, non si vuole manipolazioni arbitrarie alla bilancia. Piuttosto, si desidera che tutte le modifiche al bilancio che si verifichi sotto forma di una transazione. Quindi, aggiungere i seguenti due metodi per la classe.

/**
* @return the current balance
*/
BigDecimal getBalance() {
return balance

ANDARE

}

/ **
* Esegue una transazione sul conto.
* @param Quantità quanto per ritirare / deposito? Ritira dovrebbe essere negativo. I depositi dovrebbero essere positivi.
* @return True di successo. Falso in caso di insuccesso. Un'alternativa all'utilizzo di un valore booleano qui sarebbe quello di creare un \ & quot; TransactionFailedException \ & quot; classe che potrebbe fornire all'utente ulteriori informazioni sulle ragioni del fallimento.
* /
booleano performTransaction (BigDecimal importo) {
if (amount.compareTo (BigDecimal.ZERO) == -1) {
// Questo è un ritirarsi
if (amount.abs (). compareTo (equilibrio) == 1) {
// L'importo ritirare è maggiore del saldo.
return false

ANDARE

} else {
// There is enough money to cover the withdraw. Modify the balance and log the transaction.
balance = balance.add(amount)

ANDARE

transactions.add(amount)

ANDARE

return true

ANDARE

}
} else {
// This is a deposit. Add to the balance and log the transaction.
balance = balance.add(amount)

ANDARE

transactions.add(amount)

ANDARE

return true

ANDARE

}
}

Questo fornisce vostro conto di risparmio di classe con il minimo di cui ha bisogno per funzionare, anche se ci sono ancora miglioramenti che possono essere fatte ad esso. Titolare del conto e le transazioni devono essere loro classi, piuttosto che le stringhe semplici e BigDecimals, dal momento che si potrebbe desiderare di memorizzare più informazioni su una transazione che semplicemente l'importo in questione.