Når du oppretter en klasse å 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 tilbake litt unøyaktige svar på aritmetiske operasjoner . Disse unøyaktigheter , under de fleste omstendigheter, ville være trivielt . 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 . Du trenger
Computer
Java IDE
Java Development Kit
Java Runtime Environment
Vis flere instruksjoner
en
Lag en SavingsAccount klasse . Hvis du bruker en spesialisert Java IDE , er det sannsynligvis et alternativ for å skape skjelett klasser automatisk for deg i Fil-menyen. Ellers bare lage en fil som heter " SavingsAccount.java " og skriv følgende info i det: .
/*** Denne klassen representerer informasjon som er felles for alle sparekontoer * /public class SavingsAccount {
< p> //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 , gjeldende saldo , en liste over kontoinnehavere , og en oversikt over alle transaksjoner på kontoen. Skriv følgende i klassen : en
/*** Kontonummeret * /String kontonummer ;
/*** Den nåværende balanse. . Bruk aldri flyter eller dobbeltrom for valuta! Det er unøyaktigheter i float og double aritmetiske * /private BigDecimal balanse ; .
/*** Dette lagrer en liste over kontoholderen navn som en streng. Et alternativ kan være å lage en kontohaver klasse , og butikk som her * /ArrayList accountholders = new ArrayList (); .
/*** En historie om transaksjoner utført på kontoen. Igjen , ville en alternativ være å opprette en Transaction klassen til å holde mer informasjon enn mengden av transaksjonen * /private ArrayList transaksjoner = new ArrayList ();
Dokumentere arbeidet ditt er viktig å kode lesbarhet og fremtidig vedlikehold , så ikke overse 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 minne - intensive metoden for lagring av flyttall . Imidlertid mangler det de små unøyaktigheter i float og double primitive . Siden du har å gjøre med valuta, bør du foretrekker nøyaktighet i driften til de små gevinster gitt av float og doble i hastighet og minneforbruk .
3
Lag en konstruktør . I de fleste klasser , vil du ønsker å overbelaste konstruktøren , det er, vil du ønsker å ha mer enn én metode for å bygge en ny konto eksempel. Du kan bestemme selv hva slags konstruktører vil dekke dine behov , men på minimum, bør det være en konstruktør for å opprette en ny konto gitt et kontonummer og en start balanse , så legger du til følgende metode i klassen din :
/*** Opprett en ny konto * @ param kontonummer den nye kontoen nummer * @ param balanse kontoens start balanse * /SavingsAccount (String kontonummer , BigDecimal balanse) { this.accountNumber = kontonummer ; this.balance = balanse ; }
4
Lag en balanse " getter " og en performTransaction metode. Det er standard objektorientert programmering praksis å skape getters og settere for alle felt i en klasse . Dette er imidlertid uhensiktsmessig for det balanse -feltet. Mens du bør absolutt tillate balansen for å bli sett , om du ikke ønsker vilkårlige manipulasjoner til balansen . Snarere ønsker du alle endringer i balansen å skje i form av en transaksjon . Derfor legger du til følgende to metoder til klassen
/*** @ return gjeldende saldo * /BigDecimal getBalance ( ) . {Return balanse ;}
/*** Utfører en transaksjon på kontoen. * @ param beløpet hvor mye du skal trekke /depositum? Trekker seg skal være negative. Innskudd bør være positiv. * @ Return True fra vellykket. Usann hvis mislykket . Et alternativ til å bruke en boolean her vil være å lage en " TransactionFailedException " class som kan gi brukeren mer informasjon om årsakene til svikten . * /Boolean performTransaction ( BigDecimal beløp) { if ( amount.compareTo ( BigDecimal.ZERO ) = = -1 ) { //Dette er en withdrawif ( amount.abs ( ) compareTo ( balanse) == 1 ) { //The trekke beløpet er større enn balance.return false; . } else { //det er nok penger å dekke trekke seg . Endre balansen og logge transaction.balance = balance.add ( beløp) ; transactions.add ( beløp) ; return true ;} } else { //Dette er et depositum . Legg til balanse og logge transaction.balance = balance.add ( beløp) ; transactions.add ( beløp) ; return true ;} }
p Dette gir din sparekonto klasse med minimum den trenger for å fungere, om det 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 beløpet som er involvert .