Bij het aanmaken van een klasse om de informatie voor een spaarrekening in Java model , een aantal bijzondere overwegingen een rol gaan spelen . De belangrijkste van deze is een subtiele zwakte in de Java-implementatie van de vlotter en dubbele primitieve types data die ervoor zorgt dat ze enigszins onjuiste antwoorden op rekenkundige bewerkingen af en toe terug te keren . Deze onnauwkeurigheden , onder de meeste omstandigheden , triviaal zou zijn . Echter , bij de behandeling van dossiers van de munt , waar kleine onnauwkeurigheden kan oplopen tot dramatische , echte wereld de gevolgen in de tijd , kunnen ze ernstig worden. Wat je nodig hebt Computer Java IDE Java Development Kit Java Runtime Environment Toon Meer Aanwijzingen 1 Maak een spaarrekening klasse . Als u gebruik maakt van een gespecialiseerde Java IDE , is er waarschijnlijk een optie om skelet klassen automatisch maken voor u in het menu Bestand . Anders gewoon een bestand met de naam " SavingsAccount.java " te maken en schrijf de volgende informatie in het : . /*** Deze klasse vertegenwoordigt informatie die voor alle spaarrekeningen * /public class spaarrekening { //Al het andere in de tutorial zal worden geschreven in deze ruimte ! } 2 Verklaar de klasse velden . Op het minimum , zult u waarschijnlijk willen een rekeningnummer , het huidige evenwicht , een lijst van rekeninghouders , en een overzicht van alle transacties op te slaan op de rekening . Schrijf de volgende in de klas : /*** Het rekeningnummer * /String rekeningnummer ; /*** De huidige balans. . Gebruik nooit vlotters of dubbelspel voor valuta ! Er zijn onnauwkeurigheden in float en double rekenkundige * /private BigDecimal balans ; . /*** Dit slaat een lijst van namen rekeninghouders als een string . Een alternatief zou kunnen zijn om een rekeninghouder klasse te maken , en de winkel die hier * /ArrayList rekeninghouders = new ArrayList ( ) ; . /*** Een geschiedenis van de transacties uitgevoerd op de rekening . Nogmaals , zou een alternatief zijn voor een transactie klas om meer informatie dan het bedrag van de transactie houden maken * /private ArrayList transacties = new ArrayList ( ) ; documenteren van je werk is het belangrijk om code leesbaarheid en toekomstig onderhoud , dus vergeet niet uw JavaDoc opmerkingen. Een heel belangrijk ding dat je zou moeten opvallen is dat de balans en transacties worden niet weergegeven als vlotters of dubbelspel , maar eerder met de klas BigDecimal . BigDecimal is een langzamere en meer geheugen -intensieve methode voor het opslaan van floating point getallen . Echter , het ontbreekt de kleine onnauwkeurigheden van de vlotter en dubbele primitieven . Omdat je te maken met valuta , dient u nauwkeurig liever in operaties aan de kleine winsten die door vlotter en verdubbelen in snelheid en geheugengebruik . 3 Maak een constructeur . In de meeste klassen , zult u wilt uw constructeur overbelasten , dat is , wil je meer dan een methode voor het bouwen van een nieuwe account hebben bijvoorbeeld . U kunt zelf bepalen wat voor soort constructeurs past bij uw behoeften , maar op het minimum , moet er een aannemer voor het maken van een nieuwe account krijgt een rekeningnummer en een beginnend saldo , dus voeg de volgende methode om je klas : /*** Maak een nieuw account * @ param rekeningnummer nummer van de nieuwe account * @ param evenwicht start saldo van de rekening * /spaarrekening ( String rekeningnummer , BigDecimal balans ) { this.accountNumber = rekeningnummer ; this.balance = evenwicht; } 4 Maak een evenwicht " getter " en een performTransaction methode . Het is standaard Object Oriented Programming praktijk getters en setters te creëren voor alle velden in een klasse . Dit is echter niet met de realiteit evenwicht . Terwijl je moet zeker mogelijk de balans te worden bekeken , wil je niet willekeurige manipulaties aan het evenwicht . Integendeel, je wilt dat alle wijzigingen in de balans voor te komen in de vorm van een transactie . Daarom voeg de volgende twee methoden om je klas /*** @ return het huidige evenwicht * /BigDecimal getBalance ( ) . { Return balans ; } /*** Voert een transactie op de rekening . * @ param bedrag hoeveel aan /borg te trekken ? Terugtrekt moet negatief zijn . Deposito moet positief . * @ Return True van succesvolle . Onwaar als dit niet lukt . Een alternatief voor het gebruik van een boolean hier zou zijn om een " TransactionFailedException " klasse die de gebruiker meer informatie over de redenen voor de mislukking . * /Boolean performTransaction ( BigDecimal bedrag ) { if ( amount.compareTo ( BigDecimal.ZERO ) = zou kunnen bieden te creëren = -1 ) { //Dit is een withdrawif ( amount.abs ( ) compareTo ( balans ) == 1 ) { //het trekken bedrag hoger is dan de balance.return false; . } else { //Er is genoeg geld te dekken het trekken . Wijzig de balans en log de transaction.balance = balance.add ( bedrag ) ; transactions.add ( bedrag ) ; return true; } } else { //Dit is een aanbetaling . In de balans en log de transaction.balance = balance.add ( bedrag ) ; transactions.add ( bedrag ) ; return true; } } Dit biedt uw spaarrekening klas met het minimum die het nodig heeft om te functioneren , hoewel er nog verbeteringen kunnen worden aangebracht. Rekeninghouder en transacties moeten hun eigen klassen , in plaats van eenvoudige strijkers en BigDecimals , omdat je zou willen meer informatie over een transactie te slaan dan alleen het betrokken bedrag .
|