Ukeoppgaver 7:  5 - 11. okt (INF1000 - Høst 2011)

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.

[Nøkkeloppg.]: 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

For de som ønsker å lese en annerledes og fin forklaring av klasser og objekter anbefaler vi "objekter.pdf" i Marit Nybakkens notater, skrevet av en legendarisk tidligere gruppelærerinne i kurset.

  1. Oppgavene fra forrige uke: (kap. 8, oppg. 1 - 6, side 175)
    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 oppgave 0 - 6 fra forrige uke som du ikke ble ferdig med.


  2. [Nøkkeloppg.]: Modell av barneskole:  (kap. 8, oppg. 7, side 176)
    [ Flere tips til denne oppgaven finner du i kommentar #11 - #18 i bloggposten "Ukeoppgaver". ]
    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.


  3. 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)

Løsningsforslag

Her kan du finne løsningsforslag til nøkkeloppgaven, og noen av oppgavene fra læreboka har løsningsforslag på Lærebokens hjemmeside. Det anbefales å løse oppgavene på egen hånd før du studerer løsningsforslagene.


Tibakemelding om dette oppgavesettet kan du skrive i bloggen eller sende på mail til josek [a] ifi.uio.no