Wie erstelle ich eine Sparkonto-Klasse mit Java

November 22

Wenn Sie eine Klasse, um die Informationen für ein Sparkonto in Java model erstellen, kommen eine Reihe von speziellen Überlegungen ins Spiel. Die wichtigste davon ist eine subtile Schwachstelle in der Java-Implementierung von Float und doppelte primitive Datentypen, die bewirkt, dass sie gelegentlich etwas ungenaue Antworten auf arithmetische Operationen zurück. Diese Ungenauigkeiten in den meisten Fällen wäre trivial. Beim Umgang mit Aufzeichnungen der Währung, wo kleine Ungenauigkeiten zu dramatischen addieren können, realen Welt folgen im Laufe der Zeit können sie jedoch ernst werden.

Anweisungen

1 Erstellen Sie eine Klasse "SavingsAccount". Wenn Sie eine spezielle Java-IDE verwenden, ist wahrscheinlich eine Option zum Skelett Klassen automatisch für Sie im Menü Datei zu erstellen. Andernfalls erstellen Sie einfach eine Datei namens \"SavingsAccount.java\" und schreibt die folgende Infos drin:

/**

Diese Klasse stellt Informationen für alle Sparkonten.*/öffentliche Klasse "SavingsAccount" {}

Alles, was in dem Tutorial wird in diesem Raum geschrieben!

} 2 Deklarieren Sie die Klassenfelder. Mindestens werden Sie wahrscheinlich eine Kontonummer, den aktuellen Saldo, eine Liste von Kontoinhabern und alle Transaktionen auf dem Konto speichern möchten. Die folgende innerhalb der Klasse:

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

GEHEN

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

GEHEN

/** * 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>()

GEHEN

/** * 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>()

GEHEN

Dokumentieren Ihre Arbeit ist wichtig, Lesbarkeit des Codes und zukünftige Wartung, so dass Ihr JavaDoc-Kommentaren nicht zu vernachlässigen.

Eine sehr wichtige Sache, die Sie beachten sollten ist, dass die Balance und Transaktionen nicht als Schwimmer oder verdoppelt, sondern mit der Klasse BigDecimal vertreten sind. BigDecimal ist ein langsamer und mehr Speicher-Intensive Methode zum Speichern von Gleitkommazahlen. Allerdings fehlt ihr die kleinen Ungenauigkeiten Float und doppelte primitive. Da Sie Währung beschäftigen, sollten Sie die Genauigkeit bei Vorgängen, die kleinen Gewinne zur Verfügung gestellt von Float und Double in Geschwindigkeit und Verbrauch vorziehen.

3 Erstellen Sie einen Konstruktor. In den meisten Klassen sollten Sie Ihren Konstruktor überladen; Das heißt, sollten Sie mehr als eine Methode zum Erstellen einer neue Instanz der Konto haben. Sie können selbst entscheiden, welche Arten von Konstruktoren werden Ihre Bedürfnisse, aber mindestens sollte ein Konstruktor für die Erstellung eines neuen Kontos eine Kontonummer und eine beginnende Balance gegeben, so fügen Sie die folgende Methode zu Ihrer Klasse:

/**

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

"SavingsAccount" (String AccountNumber, BigDecimal Gleichgewicht) {}

this.accountNumber = accountNumber

GEHEN

this.balance = balance

GEHEN}

4 Erstellen Sie ein Gleichgewicht-\"getter\" und eine PerformTransaction-Methode. Es ist die objektorientierte Programmierung üblich-Getter und-Setter für alle Felder in einer Klasse zu erstellen. Dies ist jedoch ungeeignet für das Feld "Saldo". Während Sie das Gleichgewicht betrachtet werden sicherlich ermöglichen soll, will man nicht beliebige Manipulationen auf den Saldo. Vielmehr wollen Sie alle Änderungen an das Gleichgewicht in Form einer Transaktion auftreten. Fügen Sie daher die folgenden beiden Methoden zu Ihrer Klasse.

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

GEHEN

}

/** * Performs a transaction on the account. * @param amount how much to withdraw/deposit? Withdraws should be negative. Deposits should be positive. * @return True of successful. False if unsuccessful. An alternative to using a boolean here would be to create a \"TransactionFailedException\" class that could provide the user more information about the reasons for the failure. */ boolean performTransaction(BigDecimal amount) { if (amount.compareTo(BigDecimal.ZERO) == -1) { // This is a withdraw if (amount.abs().compareTo(balance) == 1) { // The withdraw amount is greater than the balance. return false

GEHEN

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

GEHEN

transactions.add(amount)

GEHEN

return true

GEHEN

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

GEHEN

transactions.add(amount)

GEHEN

return true

GEHEN

} }

Dies stellt Ihr Sparkonto-Klasse mit einem Minimum muss es funktionieren, aber es gibt immer noch Verbesserungen, die es gestellt werden können. Kontoinhaber und Transaktionen sollte ihre eigenen Klassen, eher als einfache Zeichenfolgen und BigDecimals, da Sie mehr Informationen über eine Transaktion als einfach den betreffenden Betrag speichern möchten.