Expand | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Oppgave a)Gitt følgende klasse:
I tillegg til koden er det spesifisert at deposit- og withdraw-metodene skal utløse unntak (og ikke endre objektet) dersom beløpet som gis som argument, er negativt. Hva kalles det at metoder sjekker argumentene sine før de utfører evt. endringer på objektet? Fyll inn kode for
Se også Koding av valideringsmetoder Oppgave b)Tegn et objekttilstandsdiagram for et Account-objekt som viser hva som skjer når sekvensen deposit(100), getBalance(), withdraw(150) og withdraw(-50) utføres på objektet.
Se også Objekttilstandsdiagrammer Oppgave c)I koden over så initialiseres balance-feltet i deklarasjonen. Hva slags annen teknikk finnes for initialisering av et objekt og hvordan virker den? Hva er fordeler/ulemper med denne teknikken?
Oppgave d)Gitt følgende kode for en Transaction-klasse, for å registrere data om én overføring mellom to konti:
Hva betyr nøkkelordet final her og hva mangler for å gjøre klassen korrekt gitt denne bruken av final? I hvilken grad støtter Transaction-klassen innkapsling?
|
Expand | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
I denne oppgaven skal du implementere klasser knyttet til håndtering av konti i en bank og transaksjoner mellom dem. Utgangspunktet for klassen for konto er gitt i oppgave 1. Du skal utvide denne til å håndtere flere krav, og implementere en klasse for banken kalt Bank. Oppgaven videreføres i resten av oppgavesettet, så det kan være greit å lese gjennom alle delene før du begynner å jobbe med din løsning. Oppgave a)Kontonummer. Du skal først utvide Account-klassen slik at den støtter kontonummer. Kontonummeret består av en sekvens med siffer og skal kun kunne settes ved opprettelse, og det skal kunne leses med metoden String getAccountId(). Skriv kode for nødvendige felt og metoder.
Oppgave b)Øvre grense for uttak. Skriv (kode for) nødvendige felt og metoder (og evt. andre endringer i eksisterende kode) for å støtte en øvre grense for (størrelsen til) et uttak. Dersom beløpet som ønskes tatt ut med withdraw-metoden overskrider denne grensen, så skal det utløses et passende unntak.
Oppgave c)Bank-klasse med konti. Du skal lage en Bank-klasse som inneholder et sett med konti (Account-objekter). Skriv metodene addAccount og createAccount og nødvendige felt for å støtte dem:
Oppgave d)Transaksjoner. Bank-klassen skal la en utføre overføringer mellom to konti, altså uttak og innskudd som hører sammen. Transaction-klassen fra oppgave 1 brukes for å registrere informasjon om en slik overføring. Bank-klassen skal ha en transfer-metode for å overføre et beløp mellom to registrerte konti, med følgende signatur: void transfer(Account source, Account target, int amount). Oppførselen skal være som følger:
Oppgave e)Implementer metoden getTransferSum(Account account, int year, int month). Basert på lagrede transaksjoner, så skal den returnere summen av alle uttak fra account-argumentet som ble utført i løpet av den angitte måneden og året.
|
...
Expand | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||
Skriv testkode for å sjekke at Account oppfører seg som beskrevet i oppgave 1 (og dokumentert i objekttilstandsdiagrammet ditt). Du kan, men trenger ikke bruke JUnit-rammeverket, siden det viktigste er den generelle testmetoden.
Se også Enhetstesting med JUnit |