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.