You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

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

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

Del 1 - Abstrakt klasse Account

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-oppgaven

Account-klassen har tre metoder:

  • 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.
  • abstract void withdraw(double) - minsker kontobalansen med beløpet som blir tatt ut. Merk at reglene for for uttak er ulik for klassene som implementerer Account.
  • double getbalance() - returnerer kontobalansen.

I tillegg må Account 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 og at du ved å bruke rett innkapsling (hintprotected-modifikatoren) kan la subklassene nyttiggjøre seg superklassen i størst mulig grad.

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

Del 2 - BSU extends SavingsAccount

I tillegg til generelle sparekontoer finnes det en spesiell type sparekonto som heter BSU. Du skal nå lage en BSU-klasse som arver fra SavingsAccount-superklassen. Her er målet at du skal gjenbruke mest mulig av superklassen og samtidig støtte BSU-spesifikk oppførsel. En BSU-konto er, i tillegg til å være en sparekonto, spesiell i den forstand at det kun er lovlig å sette inn inntil et forhåndsbestemt beløp per år (kr 25 000 for 2014 fastsatt av den nye regjeringen) og at det kun er lovlig å ta ut av det beløpet som er satt inn siste år. M.a.o. vil en ved årsskifte få mulighet til å sette inn nye innskudd innenfor innskuddsgrensen, men en har ikke lenger mulighet til å ta ut hele balansen (innskudd fra tidligere år låses). Dessuten gir en BSU-konto 20% skattefradrag for innskudd beløp.

Du må selv avgjøre hvilke felt som må legges til før å støtte den beskrevne oppførsel. I tillegg stilles følgende krav til klassen:

  • BSU(double, double) - konstruktør som tar inn rentefoten på kontoen og et desimaltall som angir hvor mye det er tillatt å sette inn på kontoen per år. 

  • double getTaxDeduction() - returnerer skattefradrag for inneværende år. Dette vil være 20% av innskutt(e) beløp siste år.

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


Del 3 - ForeldreSpar extends SavingsAccount

En annen spesiell type sparekonto, her kalt ForeldreSpar, har et begrenset antall lovlige uttak per år (ofte i bytte mot en høyere rente). Du skal nå lage en slik ForeldreSpar-klasse som arver fra SavingsAccount-superklassen. Her er igjen målet at du skal gjenbruke mest mulig av superklassen samtidig som støtte ForeldreSpar-spesifikk oppførselen. Denne klassen skal sikre at kun det lovlige antallet uttak gjøres i løpet av et år.

Du må selv avgjøre hvilke felt som må legges til før å støtte den beskrevne oppførsel. I tillegg stilles følgende krav til klassen:

  • ForeldreSpar(double, int) - konstruktør som tar inn rentefoten på kontoen og et heltall som angir antall lovlige uttak per år.

  • int getRemainingWithdrawals() - returnerer antall gjenstående uttak fra sparekontoen.

JExercise-testkode for oppgavene finner du her: inheritance/ForeldreSparTest.java. Originalkoden (jextest) for testen finner du her: inheritance/ForeldreSpar.jextest.



JExercise lar deg sjekke din egen kode vha. forhåndslagde JUnit-tester og JExercise-panelet

Bruk av JExercise:

  1. Sørg for at jexercise-standalone.jar er lagt til i ditt prosjekts Build Path. Dette må gjøres hver gang du oppretter et nytt prosjekt, og det er derfor lurt å gjenbruke samme prosjekt til alle oppgaver.
  2. JExercise-tillegget må være installert. Installer tillegget fra følgende oppdateringsadresse: http://folk.ntnu.no/hal/dev/updatesite.
  3. Åpne JExercise-panelet via Window -> Show View -> Other, og navigere deg fram til JExercise i vinduet som kommer opp, velge det og klikke OK.
  4. Klikke og dra oppgavens testklasse, <oppgavenavn>Test.java fra pakkeoversikten og slippe den i JExercise panelet. 
  5. Testene kan så kjøres ved å dobbeltklikke på testen som ønskes kjørt.

Ved trøbbel, se først om du finner løsningen i Løsninger på trøbbel med JExercise.

Unknown macro: {html}

Twitre gjerne om oppgaven når du er ferdig: <a href="https://twitter.com/share" class="twitter-share-button" data-hashtags="jexercise">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>

  • No labels