1.3-Object-Georienteerd-Programmeren

Bankrekeningen

We gaan een simulatie bouwen van bankrekeningen. Er zijn twee soorten bankrekeningen: betaalrekeningen en spaarrekeningen. Met een betaalrekening kun je geld storten (deposit), geld opnemen (withdraw) en geld overmaken naar een andere rekening (transfer). Bij je betaalrekening mag je rood staan tot een maximum bedrag. Dit is instelbaar wanneer je de rekening aanmaakt en kan daarna NIET meer gewijzigd worden.

Een spaarrekening lijkt op een betaalrekening maar heeft een aantal ristricties. Je kunt wel geld storten op de spaarrekening, maar niet direct geld opnemen van je spaarrekening. Je kunt wel geld overboeken (transfer), maar enkel van je spaarrekening naar je betaalrekening. Daarnaast krijg je ieder jaar rente op je spaarrekening. Bij het aanmaken van de spaarrekening geef je mee hoeveel rente je jaarlijks krijgt. Op je spaarrekening mag je niet rood staan!

We willen nu klassen gaan bouwen voor de betaalrekening en de spaarrekening. Aangezien er een aantal attributen en methoden zijn die in beide klassen gebruikt worden zou het handig kunnen zijn om een gemeenschappelijke superklasse te maken waarin deze overeenkomstigheden worden opgeslagen.

Intermezzo: met geld omgaan

Tot nu toe hebben wij altijd een variabele van het type double gebruikt om geldbedragen op te slaan, maar eigenlijk is dit niet zo netjes. Voer bijvoorbeeld maar eens de code System.out.println(0.1 + 0.2); uit en je zal snel zien wat wij precies bedoelen. Omdat als je met geld werkt je misschien soms ook nog wel eens wat extra rekenwerk wil verrichten (bijv. met conversies tussen geld uit verschillende landen) zijn er tegenwoordig ook losse libraries beschikbaar die omgaan met geldbedragen eenvoudiger maken. Wij houden in het deze module echter simpel en gaan vanaf nu geldbedragen (in centen) op slaan in int variabelen om de afrondingsproblemen die je met doubles kan verwachten te voorkomen. Ga er dus in deze opdracht van uit dat het getal 500 dus eigenlijk 5 euro is (want 500 centen) en 100 euro representeren we dus met de int waarde 10000.

Let bij het implementeren van je code op de volgende punten:

Voorbeeld

Voel je vrij om onze main methode te gebruiken (of verzin er zelf eentje)!

public static void main(String[] args) {
    // Accounts for person 1
    ChequeAccount chequePerson1 = new ChequeAccount("NL02ABNA0123456789", 50000);
    SavingsAccount savingPerson1 = new SavingsAccount("NL03ABNA9876543210", 3.5);

    // Register that there is a relationship between the saving account and the checking account
    savingPerson1.addChequeAccount(chequePerson1);

    // Accounts for person 2
    ChequeAccount cheque1Person2 = new ChequeAccount("NL02RABO0111111111", 100000);
    ChequeAccount cheque2Person2 = new ChequeAccount("NL02RABO0222222222", 0);
    SavingsAccount savingPerson2 = new SavingsAccount("NL02RABO0333333333", 2.0);

    // Register that there is a relationship between the saving account and the checking accounts
    savingPerson2.addChequeAccount(cheque1Person2);
    savingPerson2.addChequeAccount(cheque2Person2);

    // Deposit some money to each account
    chequePerson1.deposit(10000);
    cheque1Person2.deposit(30000);
    cheque2Person2.deposit(25000);

    // Print state
    System.out.println(chequePerson1);
    System.out.println(savingPerson1);
    System.out.println(cheque1Person2);
    System.out.println(cheque2Person2);
    System.out.println(savingPerson2);

    System.out.println();

    // Withdraw some money from the accounts and transfer also some money
    chequePerson1.withdraw(5000);
    cheque1Person2.withdraw(20000);
    cheque2Person2.transfer(25000, savingPerson2);
    savingPerson2.transfer(2000, cheque1Person2);
    savingPerson2.addYearlyInterest();

    // Print state
    System.out.println(chequePerson1);
    System.out.println(savingPerson1);
    System.out.println(cheque1Person2);
    System.out.println(cheque2Person2);
    System.out.println(savingPerson2);
}

Bovenstaande code levert de output van hier onder op:

[Cheque] IBAN: NL02ABNA0123456789, balance: €100,00
[Saving] IBAN: NL03ABNA9876543210, balance: €0,00
[Cheque] IBAN: NL02RABO0111111111, balance: €300,00
[Cheque] IBAN: NL02RABO0222222222, balance: €250,00
[Saving] IBAN: NL02RABO0333333333, balance: €0,00

[Cheque] IBAN: NL02ABNA0123456789, balance: €50,00
[Saving] IBAN: NL03ABNA9876543210, balance: €0,00
[Cheque] IBAN: NL02RABO0111111111, balance: €120,00
[Cheque] IBAN: NL02RABO0222222222, balance: €0,00
[Saving] IBAN: NL02RABO0333333333, balance: €234,60

Testen

Als je denk dat je klaar bent kun je de test methoden uit TestApplication uitvoeren. Repareer je code indien de testen falen.