2.1 Modifikationer af Konto klassen
Denne opgave tager udgangspunkt i programmet Babybank som vi allerede har set på ved forelæsningen. Lav følgende ændringer i programmet:
således en konto med 60 kroner. Det er tilladt at ændre på de private egenskaber af klassen Konto, men ingen offentlige egenskaber må ændres! I har behov for at bruge Arrays (eller lignende) i denne opgave. Vi har endnu ikke set på dette emne i stor detalje, men jeg har lavet et kort demonstrationsprogram, som viser hvordan man bruger arrays. Vi vender lidt senere i kurset tilbage til arrays og lister. |
Solution
Jeg har valgt at bruge native Java arrays som transaktioner. Man kunne overveje
at lave en mere fleksibel løsning involverende en Collection klasse og en
Transaktions klasse. I så fald skulle et objekt af typen Transkation repræsentere
en enkelt transaktion på kontoten. Her er min simple løsning:
Her er endvidere et link til det rene Java program . |
2.2 Klassen Spillekort
Et kortspil består af 52 kort fordelt på fire farver (betegnet
hjerter, ruder, klør og spar) og 13 værdier (fra 1 til 10 samt
knægt, dronning og konge). Skriv en klasse Spillekort, som repræsenterer et enkelt kort i et kortspil. Datarepræsentation skal være privat i klassen. Vi ønsker at bruge instanser af Spillekort i spil, hvor kortene skal sammenlignes størrelsesmæssigt med andre kort. Derfor skal der være operationer størreEnd, ligMed og mindreEnd i klassen. Sammenligningen af to kort beror udelukkende på kortets værdi; farven spiller altså ingen rolle. Vi ønsker følgende orden, hvor to er mindst og es er størst: 2 < 3 < ... < 9 < 10 < knægt < dronning < konge < 1 Redefiner metoden toString fra Object til at returnere en tekst streng, som identificerer et spillekort entydigt i forhold til de andre spillekort, f.eks. 'klør 5' og 'spar es'. Programmer en eller flere konstruktorer i klassen Spillekort, således at instantiering af et helt kortspil (52 kort) bliver så let som mulig (se herefter). Skriv dernæst et program, som konstruerer et komplet spil kort bestående af 52 kort. Med andre ord, ønsker vi at programmet laver 52 objekter af klassen Spillekort. Vi ønsker ikke at skulle skrive 52 kald af new Spillekort(...) efter hinanden med forskellige parametre; det vil naturligvis være særdeles hensigtsmæssigt at kunne foretage instantieringen i en løkke. En forudsætning for at kunne gøre dette er en hensigtsmæssigt valgt Spillekort konstruktor. Organiser kortspillet i et array. |
Solution
Jeg vil gerne fremhæve konstanterne for kortfarver og værdier (som ikke er numeriske).
Læg også mærke til de to private operationer som hjælper toString() med at præsentere et kort
på en pæn måde. I praksis ville vi nok ikke implementere ligMed, men derimod redefinere operationen equals.
Min udgave af klassen Spillekort ser således ud:
Her er endvidere et link til det rene Java program . Et helt kortspil kan repræsenteres af klassen KortSpil, som endvidere indeholder et hovedprogram der laver et spil kort:
Bemærk at vi samler kortene op i et array af størrelse 52. Bemærk også hvor omstændeligt det er at putte kortene ind i dette array (indeks beregninger). Vi vil senere i kurset møde andre array-linenede klasser, som gør dette meget lettere - og mere elegant. Her er et link til det rene Java program af KortSpil . |
2.3 Lighed mellem bankkonti
I denne opgave arbejder vi videre på babybank som tidligere i denne lektion har været under behandling i en opgave. Tilføj en metode equals, der angiver at to bankkonti er ens hvis følgende betingelser er opfyldt:
Lav en klasse med en main metode, som laver to konti. Prøvekør programmet med det formål at teste om equals virker efter specifikationen. |
Solution
Mit program, som løser problemet, er følgende:
Her er et link til programmet.Bemærk for det første, at vi vælger at lade other være at typen Object, og ikke Konto. Herved opnår vi at equals virkelig 'overrider' equals fra Object. Hvis vi valgte definitionen: public boolean equals(Konto other){ ... }ville der være tale om en ny definition løsrevet fra metoden i Object. Det skal også bemærkes at på trods af at både instansvariablene navn og saldo er private, så kan vi i equal se other's private instansvariable. Årsagen er, at det private relaterer sig til klassen - ikke de individuelle objekter. En privat egenskab i et objekt af klassen Konto kan altså ses fra alle andre Konto objekter. Vi kunne også overveje at aflæse egenskaberne i den anden konto, other, via de offentlige metoder i klientgrænsefladen. Det har vi dog ikke gjort i vores implementation. Bemærk også at vi returnerer false hvis other ikke er en Konto. Den generelle type af other tillader os f.eks. at afvise lighed mellem en Konto og et String objekt. |
Generated: Monday March 31, 2008, 12:08:03
on the system cs-unix