Obligatorisk innlevering uke 7

Frist for innlevering: 12.10. kl 23:59

Spørsmål eller kommentarer til oppgaveteksten sendes til ivargry@ifi.uio.no.

Introduksjon

Denne innlevering er en innføring i hvordan vi kan bruke objektorientert programmering til å representere og holde orden på objekter i en verden. I neste innlevering tar vi dette videre ved å bruke lignende objekter i et spill.

Vi skal her lage klasser for å representere sauer og ulver, og ha en klasse som representerer verdenen disse dyrene befinner seg i. For hver klasse er det tester som skal kjøres for å validere at klassen fungerer som den skal.

I neste oblig skal vi arbeide med en 2-dimensjonal verden, men for å gjøre ting litt enklere skal vi her jobbe i en endimensjonal verden som består av 10 mulige posisjoner (1-10). Hvert dyr kan altså befinne seg i posisjonen 1 til 10.

Denne uken er det ingen konkurranseoppgave.

Oppgave 1

Filnavn: sau.py

Lag en klasse Sau i filen sau.py.

Klassen skal ha en konstruktør med parameterene navn og posisjon og opprette instansvariablene _navn og _posisjon som holder på informasjonen. I tillegg skal klassen ha en instansvariabel _lever som i utgangspunktet er satt til True. Denne variabelen skal representere hvorvidt sauen lever eller ikke.

Klassen skal også ha noen metoder:

Oppgave 2

Filnavn: test_sau.py

  1. Importer klassen Sau: from sau import Sau
  2. Lag et objekt av klassen Sau og sjekk at sauen lever. Hvis variabelen sau peker på et Sau-objekt, kan du sjekke at sauen lever slik: assert sau.lever(). Hvis du synes assert er vanskelig å bruke, kan du i stedet bruke if /else-setninger for å sjekke om ting fungerer som det skal.
  3. Kall metoden blir_spist på sau-objektet og sjekk at sauen nå ikke lenger lever.

Oppgave 3

Filnavn: ulv.py

Lag en klasse Ulv i filen ulv.py.

Klassen skal ha en konstruktør med parametere navn og posisjon og tilsvarende instansvariable som holder på informasjonen. I tillegg skal ulven ha en instansvariabel _vekt som representerer vekten til ulven. Vekten er alltid 20 i utgangspunktet.

Klassen skal ha følgende metoder:

Oppgave 4:

Filnavn: test_sau_og_ulv.py

I filen test_sau_og_ulv.py skal vi teste at Sau- og Ulv-klassene fungerer som de skal ved å la en sau bli spist av en ulv. Gjør følgende:

Oppgave 5:

Filnavn: verden.py

Vi ønsker nå en klasse Verden som kan holde orden på sauene og ulvene.

Konstruktøren til klassen Verden skal ikke ta noen parametere, men initialisere to variable, _sauer og _ulver, som holder på sauene og ulvene i verdenen. Velg en passelig datastruktur.

Klassen skal også ha følgende metoder:

Oppgave 6:

Filnavn: test_verden.py

Test klassen Verden:

Oppgave 7:

Utvide klassen Ulv med to nye metoder:

Utvid klassen Verden med en metode oppdater. Denne metoden skal:

Lag også en metode finn_feiteste_ulv som returnerer ulven (et objekt) som veier mest.

Oppgave 8

Utvid test_verden.py ved å legge til en håndfull sauer og ulver (du velger selv antall) og kall oppdater en del ganger (f. eks 10 ganger). Print til slutt navnet på den ulven som er feitest.

Krav til innlevering

Hvordan levere oppgaven

Kommenter på følgende spørsmål i kommentarfeltet i Devilry. Spørsmålene skal besvares.

For å levere:

  1. Logg inn på Devilry.
  2. Lever alle .py-filene , og husk å svare på spørsmålene i kommentarfeltet.
  3. Husk å trykke lever/add delivery og sjekk deretter at innleveringen din er komplett. Du kan levere flere ganger, men alle filer må være med i hver innlevering.
  4. Den obligatoriske innleveringen er minimum av hva du bør ha programmert i løpet av en uke. Du finner flere oppgaver for denne uken på semestersiden.