Versions Compared

Key

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

...

Excerpt

Denne oppgaven handler om å lage en felles abstrakt superklasse Account AbstractAccount for CreditAccount, DebitAccount- og SavingsAccount SavingsAccount2-klassene.

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. Felles for alle kontoer er den abstrakt Account-klassen, som er en utvidelse grensesnittet fra SavingsAccount-oppgavenAccount-klassen har tre metoder. 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.

Metodene i AbstractAccount-klassen, er omtrent de samme som dem vi definerte i Account-grensesnittet i SavingsAccount-oppgaven, og er som følger:

  • 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 internalWithdrawabstract void withdraw(double) - minsker  minsker kontobalansen med beløpet som blir tatt ut. Merk at reglene for for uttak er ulik for klassene som implementerer AccountAbstractAccount, og må derfor implementeres i hver klasse. Hvis uttaksbeløpet er negativt skal metoden kaste en IllegalArgumentException, og hvis det ikke er mulig å ta ut det angitte beløpet skal metoden kaste utløse en IllegalStateException.
  • double getbalancegetBalance() - returnerer kontobalansen.

Alle metodene utenom den absktrakte må implementeres. I tillegg må Account AbstractAccount ha en tilstand balance for saldo på kontoen. Saldoen skal settes til 0 i konstruktøren.

Vær oppmerksom på at du i Del 2 skal lage subklasser av Account AbstractAccount og at du ved å bruke rett innkapsling (hintprotected-modifikatoren) kan skal la subklassene nyttiggjøre seg superklassen i størst mulig grad.


Del 2 - DebitAccount extends

...

AbstractAccount

En debetkonto er den enkleste formen for konto, hvor det eneste kravet er at saldoen til enhver tid må være større eller lik 0. DebitAccount skal implementere Account utvide (arve fra med extends) AbstractAccount og sikre at saldoen aldri går blir lavere enn 0.

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



Del 3 - CreditAccount
extends Accountextends 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 kastes en IllegalStateExceptionutlø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.

Konstruktøren CreditAccount(double) skal sette kredittlinjen.

JExercise-testkode for Testkode for oppgavene finner du her: inheritance/CreditAccountTest.java. Originalkoden (jextest) for testen finner du her: inheritance/CreditAccount.jextest.


Del 4 -

SavingsAccount extends Account

SavingsAccount2 extends AbstractAccount

En SavingsAccount2 (merk at navnet er endret, for ikke å kræsje med SavingsAccount-klassen fra den tidligere oppgaven!)

En SavingsAccount  kan kun ha positiv saldo. I tillegg har kontoen uttaksbegrensinger. En SavingsAccount SavingsAccount2 har antall antall uttak (withdrawals). Dersom man ønsker å ta ut penger etter alle uttak er alle uttak er brukt opp, skal saldoen belastes med en avgiftet gebyr (fee)Både antall uttak og avgift Både withdrawals (antall)og fee (beløp) settes i konstruktøren SavingsAccountSavingsAccount2(int, double).

 

Testkode for JExercise-testkode for oppgavene finner du her:  Originalkoden  inheritance/SavingsAccount2Test.java. Originalkoden (jextest) for testen finner du her: inheritance/SavingsAccount2.jextest.

 

Exercise-panelet

Bruk av Exercise-panelet er obligatorisk for denne øvingen. Du må ha panelet åpent med AbstractAccount.ex-filen (tests > inheritance > AbstractAccount.ex) i før du begynner med oppgaven. For mer informasjon/hjelp, se nederst på forrige side, altså hovedsiden for Øving 9.

 

Include Page
Bunntekst for JExercise- oppgaver
Bunntekst for JExercise- oppgaver