Hvordan lage en sparekonto klasse med Java

Når du oppretter en klasse for å modellere informasjon for en sparekonto i Java, en rekke spesielle hensyn spiller inn. Den viktigste av disse er en subtil svakhet i Java gjennomføringen av float og double primitive datatyper som får dem til å av og til gå tilbake litt unøyaktige svar på regneoperasjoner. Disse unøyaktigheter, under de fleste forhold, vil være ubetydelig. Men når du arbeider med registreringer av valuta, der små unøyaktigheter kan legge opp til dramatiske, reelle konsekvenser over tid, kan de bli alvorlig.

Bruksanvisning

1 Lag en SavingsAccount klasse. Hvis du bruker en spesialisert Java IDE, er det sannsynligvis en mulighet til å skape skjelett klasser automatisk for deg i Fil-menyen. Ellers bare lage en fil som heter \ "SavingsAccount.java \" og skrive følgende info i det:

/ **

Denne klassen representerer informasjon som er felles for alle sparekontoer.
* /
public class SavingsAccount {

// Alt annet i opplæringen vil bli skrevet i dette rommet!

}

2 Erklærer klassen felt. På minimum, vil du sannsynligvis ønske å lagre et kontonummer, den nåværende balanse, en liste over kontoinnehavere, og en registrering av alle transaksjoner på kontoen. Skriv følgende i klassen:

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

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

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

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

Dokumentere arbeidet er viktig for å kode lesbarhet og fremtidig vedlikehold, så ikke overse dine javadoc kommentarer.

En svært viktig ting du bør legge merke til er at balanse og transaksjoner er ikke representert som flyter eller dobbeltrom, men heller med klassen BigDecimal. BigDecimal er en langsommere og mer hukommelse krevende metode for lagring av tall med flytende komma. Imidlertid mangler det de små unøyaktigheter i flottør og doble primitiver. Siden du har å gjøre med valuta, bør du foretrekker nøyaktighet i operasjoner til de små gevinster gitt av float og double i hastighet og minneforbruk.

3 Lag en konstruktør. I de fleste klasser, vil du ønsker å overbelaste konstruktøren; det vil si, vil du ønsker å ha mer enn én metode for å bygge en ny konto eksempel. Du kan bestemme selv hva slags konstruktører passer dine behov, men på minimum, bør det være en konstruktør for å lage en ny konto gitt et kontonummer og en start balanse, så legger du til følgende metode til klassen:

/ **

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

SavingsAccount (String kontonummer, BigDecimal balanse) {

this.accountNumber = accountNumber

this.balance = balance


}

4 Lag en balanse \ "getter \" og en performTransaction metode. Det er standard Objektorientert programmering praksis for å skape kundeskaffere og settere for alle felt i en klasse. Dette er imidlertid upassende for balansen feltet. Mens du bør absolutt gi balanse for å bli sett, om du ikke ønsker vilkårlige manipulasjoner til balansen. Heller, vil man alle endringer av de resterende forekomme i form av en transaksjon. Derfor legger du til følgende to metodene til klassen.

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

}

/ **
* Utfører en transaksjon på kontoen.
* @param Mengde hvor mye du skal ta ut / depositum? Trekker seg skulle være negativ. Innskudd bør være positiv.
* @return True fra vellykket. False hvis mislykket. Et alternativ til å bruke en boolsk her vil være å skape en \ & quot; TransactionFailedException \ & quot; klasse som kan gi brukeren mer informasjon om årsakene til svikt.
* /
boolean performTransaction (BigDecimal beløp) {
if (amount.compareTo (BigDecimal.ZERO) == -1) {
// Dette er en uttreknings
if (amount.abs (). compareTo (balanse) == 1) {
// Den trekke tilbake verdi er større enn den balanse.
return false

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

transactions.add(amount)

return true

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

transactions.add(amount)

return true

}
}

Dette gir din sparekonto klasse med minimum den trenger for å fungere, men det er fortsatt forbedringer som kan gjøres til det. Kontohaver og transaksjoner bør være egne klasser, snarere enn enkle strenger og BigDecimals, siden du kanskje ønsker å lagre mer informasjon om en transaksjon enn bare involvert beløp.