När du skapar en klass för att modellera informationen för ett sparkonto i Java , ett antal särskilda överväganden spelar in . Den viktigaste av dessa är en subtil svaghet i Java genomförandet av flottören och dubbla primitiva datatyper som gör att de ibland tillbaka något felaktiga svar på aritmetiska operationer . Dessa felaktigheter , i de flesta fall , skulle vara försumbar . Men när det handlar om uppgifter om valuta , där små felaktigheter kan lägga upp till dramatiska , verkliga konsekvenser över tid , kan de bli allvarliga . Saker du behöver
Computer Review, Java IDE Review, Java Development Kit Review, Java Runtime Environment
Visa fler instruktioner
1
Skapa SavingsAccount klass . Om du använder en specialiserad Java IDE , det finns förmodligen en möjlighet att skapa skelett klasser automatiskt för dig i menyn Arkiv . Annars , helt enkelt skapa en fil som heter " SavingsAccount.java " och skriver följande information i det : .
/*** Denna klass representerar information som är gemensam för alla sparkonton * /public class SavingsAccount {
//Allt annat i handledningen kommer att skrivas i detta området!
}
2
deklarera klassen fälten . Vid minsta , kommer du förmodligen vill lagra ett kontonummer , den nuvarande balansen , en förteckning över kontoinnehavare , och ett register över alla transaktioner på kontot . Skriv följande i klassen :
/*** Kontonumret * /String accountNumber ,
/*** Den nuvarande balansen . . Använd aldrig flöten eller dubbel för valuta ! Det finns felaktigheter i float och double aritmetik * /private BigDecimal balans , .
/*** Detta lagrar en lista med namn kontoinnehavaren som en sträng . Ett alternativ skulle kunna vara att skapa en kontohavaren klass , och butik som här * /ArrayList kontohavare = new ArrayList ( ) , .
/*** En historia av transaktioner som utförs på kontot . Återigen skulle ett alternativ vara att skapa en transaktion klass för att hålla mer än beloppet för transaktionen * /private ArrayList transaktioner = new ArrayList ( ) ;
Dokumentera ditt arbete är viktigt för att kodens läsbarhet och framtida underhåll , så inte försumma dina javadoc kommentarer .
En mycket viktig sak du bör märka är att balans och transaktionerna inte representerade som flöten eller dubbel , utan snarare med klassen BigDecimal . BigDecimal är en långsammare och mer minne - intensiv metod för att lagra flyttal. Den saknar dock de små felaktigheter av flottören och dubbla stammar . Eftersom du har att göra med valuta , bör du föredrar noggrannhet i verksamheten till de små vinster som tillhandahålls av float och fördubblas i hastighet och minne konsumtionen .
3
Skapa en konstruktör . I de flesta klasser , men du vill överbelasta konstruktören , som är , vill du ha mer än en metod för att bygga ett nytt konto instans . Du kan själv bestämma vilka typer av konstruktörer kommer att passa dina behov , men vid minsta , bör det finnas en konstruktor för att skapa ett nytt konto givet ett kontonummer och ett startkapital , så lägg till följande metod för att din klass :
/*** Skapa ett nytt konto * @ param accountNumber det nya kontots nummer * @ param saldo på kontot start balans * /SavingsAccount ( String accountNumber , BigDecimal balans ) { this.accountNumber = accountNumber , this.balance = balans ; }
4
Skapa en balans " getter " och en performTransaction metod . Det är standard objektorienterad programmering praxis att skapa get-och set för alla fält i en klass . Detta är emellertid olämpligt för balansen fältet . Medan du bör definitivt ge den balans som skall ses , vill du inte godtyckliga till balansen . Snarare vill du alla ändringar av balansen att uppstå i form av en transaktion . Därför lägger de följande två metoder för att din klass
/*** @ return aktuellt saldo * /BigDecimal getBalance ( ) . {Return balans ;}
/*** Utför en transaktion på kontot . * @ param belopp hur mycket att ta ut /deposition ? Återtar bör vara negativ. Insättningar ska vara positiv . * @ Return true om framgångsrik . False om det inte lyckas . Ett alternativ till att använda en boolean här skulle vara att skapa en " TransactionFailedException " klass som kan ge användaren mer information om orsakerna till misslyckandet . * /Boolean performTransaction ( BigDecimal belopp ) {if ( amount.compareTo ( BigDecimal.ZERO ) = = -1 ) { //Detta är en withdrawif ( amount.abs ( ) compareTo ( balans ) == 1 ) { //den återkalla beloppet är större än balance.return false; . } else { //det finns tillräckligt med pengar att täcka tillbaka . Ändra balansen och logga transaction.balance = balance.add ( belopp ) , transactions.add ( belopp ) , return true ; } } else { //Detta är en insättning . Lägg till balansen och logga transaction.balance = balance.add ( belopp ) , transactions.add ( belopp ) , return true ; } }
Detta ger ditt sparkonto klass med minimum den behöver för att fungera , men det finns fortfarande förbättringar som kan göras för att det . Kontoinnehavare och transaktioner bör vara sina egna klasser , snarare än enkla strängar och BigDecimals , eftersom du kanske vill lagra mer information om en transaktion än att bara involverade beloppet .