Klasser og objekter del 2 (kap. 8 (hele) og 12 (hele) i "Rett p? Java" 3. utg.)
M?l
F? et f?rste innblikk i hvordan man programmerer med klasser og objekter.
Oppgave merket med n?kkelsymbol er plukket ut som spesielt representativ for de viktigste temaene fra ukens forelesning, og alle b?r ha som minimumsm?l ? l?se denne selvstendig.
Oppgaver
Programmer en klasse "Type" som kan v?re enten "Hjerter", "Ruter", "Kl?ver" eller "Spar". Lag deretter en ny klasse "Kort" som inneholder et tall mellom 1 og 13 i tillegg til en type. Lag deretter en klasse Kortstokk som skal inneholde 52 kort (dette skal v?re lagret i klassen, Hint: Bruk en array). Programmer deretter
- Oppgavene fra forrige uke:
Det er en god idé ? starte med enkle oppgaver n?r du skal l?re ? programmere med objekter, s? begynn med ? l?se ferdig de av oppgavene fra forrige uke du ikke ble ferdig med.
- Modell av barneskole: (kap. 8, oppg. 7, side 176)
En forenklet modell av en barneskole er: ?En barneskole har N klasserom (for eksempel N=17) og underviser barn i klasser p? alle klassetrinn fra 1 til 7. P? et klassetrinn er det et antall grupper. Det er maksimalt 28 elever i en gruppe. Det kan godt hende at det er opptil 4 grupper p? et bestemt klassetrinn (eks. 2A, 3B, ...). En gruppe er alene om ? bruke ett bestemt klasserom.?
(a) Lag et klassediagram i UML om oppplysningene (klassene Skole, KlasseTrinn, og Gruppe).
(b) Programmér s? klassene i Java slik at du ved hjelp av en heltallsarray-parameter til konstrukt?ren til klassen Skole f?r opprettet en array med pekere til syv KlasseTrinn-objekter (Arrayen som brukes som parameter skal inneholde 7 elementer, som angir hvor mange grupper det er i hvert av klassetrinnene 1 - 7). Hvert av disse (KlasseTrinn-objekter) har en array med plass til: fire pekere til hvert sitt Gruppe-objekt. La parameteren til Skole-konstrukt?ren bestemme hvor mange Gruppe-objekter du lager i hvert KlasseTrinn-objekt.
(c) Legg inn et navn i hvert Gruppe-objekt (1A, 4B, osv.). Lag en metode skrivUt() i hver av de tre klasseene, slik at du ved kall p? skrivUt()-metoden i det ene Skole-objektet du har, f?r skrevet ut alle navnene p? gruppene slik at du starter med f?rsteklassene.
- UML klasse- og objekt-diagrammer: (kap. 12, oppg. 1 - 5, side 239)
- Oppgave 1:
En student har null eller flere eksamener. Lag et klassediagram om dette forholdet mellom klassene Student og Eksamen. - Oppgave 2:
Ane har frimerker fra forskjellige land i frimerkesamlingen sin. Lag et objektdiagram for et datasystem som skal kunne skrive ut hvilke frimerker Ane har fra et bestemt land, alle frimerkene hun har, og data om et bestemt frimerke. - Oppgave 3:
En B-bank har flere bankkonti, og en kunde kan ha flere bankkonti i B-bank.
(a) Lag et klassediagram i UML over B-bank, kunder, og konti, og f? med antall p? forholdene mellom klassene.
(b) Finn ut hvordan du vil lage en programstruktur som kan svare p? sp?rsm?l om hvilke bankkonti en kunde har i B-bank, og som kan skrive ut samlet saldo p? alle konti for en kunde og samlet for B-bank. Tegn et objektdiagram for systemet. - Oppgave 4:
En forenklet modell av en barneskole er at den har N klasserom (for eksempel N = 17) og underviser barn i klasser p? alle klassetrinn fra 1 til 7. Det er ikke lov ? ha flere enn 28 elever i én klasse. Det kan godt hende at det er mer enn én klasse p? et bestemt klassetrinn (eks. 2A og 2B), og hver klasse har sitt eget klasserom.
Tenk at du skal lage et system som h?ndterer at det begynner og slutter elever (skoleklasser kan bli opprettet og nedlagt). Tegn et klassediagram for problemet. - Oppgave 5:
(Se side 240 i l?reboka)
- Oppgave 1:
- Kort og kortstokk (Litt vanskelig, men dette g?r!)
Programmer en klasse "Type" som kan v?re av typen "Hjerter", "Ruter", "Spar" eller "Kl?ver". Programmer deretter en annen klasse "Kort" som skal inneholde en type og et tall mellom 1 og 13. Lag videre en ny klasse "Kortstokk" som inneholder 52 objekter av typen "Kort" (dette skal lagres i klassen. Hint: Bruk en array).
-
Programmer en "dealer" som har en kortstokk og som skal ha metoder for ? kontrollere at alle spillekortene i er i kortsokken. Metoden b?r returnere true hvis kortstokken inneholder alle kortene, og false hvis kort mangler.
-
Lag deretter en metode til dealeren for ? kunne stokke korten. Dette betyr at vi skal bytte om p? rekkef?lgen til kortene ( Hint: bruk Random.nextInt(52) for ? finne en tilfeldig plass i kortstokken).
- Ta inn antall spillere fra brukeren og lag en metode som gj?r at delaeren kan dele ut kortene til spillerne som vil spille. Du skal alts? skrive ut til skjerm for hver spiller rundt bordet.
- Ekstra: Lag en metode i Kortstokk som oppretter sine kort og en metode bruk. Bruk random for ? finne ut om noen kort ble tapt (og evt hvilke) under bruk. I s? fall m? du sette dette kortets plass i beholderen tom.
Tibakemelding om dette oppgavesettet kan du sende p? mail til ingridgg [a] ifi.uio.no