Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Denne oppgaven er en annen variant SavingsAccount-oppgaven, med fokus på bruk av abstrakte klasser og arv.

Del 1 - Abstrakt klasse AbstractAccount

En bank består av mange ulike type kontoer: sparekontoer, brukskontoer, depositumskontoer, støttekontoer etc. Siden disse har mye felles, f.eks. har alle en balanse, så er det praktisk å samle så mye som mulig av den felles logikken i en superklasse, som alle kan arve fra. Denne superklassen er imidlertid ikke noen egen type konto, og derfor gjør vi den abstrakt, slik at den ikke kan instansieres. De konkrete konto-klassene som arver fra den, må selvsagt være instansierbare.

...

  • void deposit(double) - øker kontobalansen med innskutt beløp. Merk at det innskutte beløpet må være positivt. Ved ulovlig innskudd skal en IllegalArgumentException utløses.
  • void withdraw(double) -  Metoden kaller internalWithdraw(uttaksbeløp), som implementeres i hver subklasse. Hvis uttaksbeløpet er negativt skal metoden utløse en IllegalArgumentException. 
  • abstract void internalWithdraw(double) - minsker kontobalansen med beløpet som blir tatt ut. Merk at reglene for uttak er ulik for klassene som implementerer AbstractAccount, og må derfor implementeres i hver klasse. Hvis det ikke er mulig å ta ut det angitte beløpet skal metoden utløse en IllegalStateException.
  • double getbBalancegetBalance() - returnerer kontobalansen.

...

Testkode for oppgavene finner du her: inheritance/DebitAccountTest.java. Originalkoden (jextest) for testen finner du her: inheritance/DebitAccount.jextest.



Del 3 - CreditAccount extends 
AbstractAccount

En CreditAccount har i tillegg til balance en tilstand for creditLine, altså tilgjengelig kreditt på kontoen. Denne kredittlinjen tillater at kontoen kan overtrekkes (at saldoen er negativ) innenfor kredittlinjen. Klassen må ha tilgangsmetoder (getters and setters) for creditLine. Merk at kredittlinjen alltid må være større eller lik 0, hvis ikke skal det utløses en IllegalArgumentException. Hvis en ny kredittlinje settes og balansen er negativ, må den nye kredittlinjen dekke den eksisterende balansen. Ellers skal det utløses en IllegalStateException og ingen endring i kredittlinjen.

...