Obligatorisk oppgave 6

IN1000, våren 2026

Innleveringsfrist: onsdag 18. mars, kl. 23:59

Du kan også få godkjent obligen ved å jobbe med den på gruppetimene - se mer info om dette på emnesidene.

Nettskjema for egenmelding ved behov for utsatt frist (max 3 dager) finner du her.

Filer som skal leveres:

Oppgave 1

Filnavn: test_dato.py

Du skal lage noen egne Dato-objekter som du trenger til et Python-program (og disse vil du lage i oblig 7), men for å gjøre prosessen lettere for deg selv velger du å fokusere på grensesnittet først, slik at du vet hva du skal lage før du begynner å tenke på hvordan du skal lage det.

I den vedlagte filen oblig7.py har du laget noen prototyper som gjør at du kan bruke alle bruke Dato-objekter som forklart under (koden kjører, men det er mye som ikke er laget ferdig). Du vil ikke trenge å lese eller forstå koden i oblig7.py for å løse oppgavene - det er der bare for at du skal kunne kjøre din egen kode uten feilmeldinger. Selv om de ikke virker som de skal enda, skal vi likevel skrive programmet som bruker disse objektene som om de var ferdige og fungerte som de skal. Denne øvelsen er nemlig gull verdt når vi senere fikser på hvordan objektene skal fungere. (Det samme gjelder i oppgave 2.)

Importer objekt-typene du trenger og gjør skriv et program som skal teste objektene på følgende måte:

Vær klar over at prototypene gjør minst mulig, så når du har løst oppgaven riktig vil programmet bare skrive ut følgende (minneadressene til objektene vil ikke være de samme som i figuren):

Vær klar over at målet med oppgaven er å kunne bruke objektene riktig, ikke å få riktig utskrift. Det er koden du skriver som blir vurdert, ikke utskriften den produserer (som bare er der for å hjelpe deg å bruke objektene riktig).

Grensesnittene til alle typene som brukes finner du her (og du må sette deg inn i disse for å løse oppgaven, men det er ikke slik at all informasjonen må brukes - noe av dette er først nyttig i oblig 7):

Objekter av typen Dato opprettes med Dato(ddmmåååå) hvor argumentet er:

Objekter av typen Dato har følgende metoder:

Metode Parametre Returverdi Kommentar
hent_år - int Henter ut året fra datoen
dag_er_lik int bool True hvis dagen i datoen er lik tallet, False hvis ikke
neste_dag - - Øker verdien av dagen i datoen med 1
endre_til str - Endrer datoen til en ny dato

Objekter av typen Dato støtter følgende operasjoner:

Operasjon Kommentar
print(dato) Skriver ut datoen på formatet dd.mm.åååå

Oppgave 2

Filnavn: test_fotball.py

Du vil lage en fotballsimulator som simulerer fotballkamper og spår resultater i Python. Du skal lage noen egne objekter til dette programmet (og disse vil du lage i oblig 7), men for å gjøre prosessen lettere for deg selv velger du å fokusere på grensesnittet først, slik at du vet hva du skal lage før du begynner å tenke på hvordan du skal lage det.

I den vedlagte filen oblig7.py har vi laget noen veldig enkle prototyper som gjør at du kan bruke alle objekt-typene under (koden kjører, men det er mye som ikke er laget ferdig). Du skal likevel øve deg på å bruke disse objektene riktig allerede nå (som om de var ferdiglaget).

Importer objekt-typene du trenger og gjør skriv et program som skal teste objektene på følgende måte:

Vær klar over at prototypene gjør minst mulig, så når du har løst oppgaven riktig vil programmet bare skrive ut noe som ligner følgende (minneadressene til objektene vil ikke være de samme som i figuren):

Vær klar over at målet med oppgaven er å kunne bruke objektene riktig, ikke å få riktig utskrift. Det er koden du skriver som blir vurdert, ikke utskriften den produserer (som bare er der for å hjelpe deg å bruke objektene riktig).

Grensesnittene til alle typene som brukes finner du her (og du må sette deg inn i disse for å løse oppgaven, men det er ikke slik at all informasjonen må brukes - noe er først nyttig i oblig 7). Objektene opprettes uten argumenter (for eksempel Sesong() for Sesong) med mindre annet er spesifisert. Det er ikke sikkert du vil trenge å bruke alle typene objekter i oblig 6.

Sesong

Objekter av typen Sesong har følgende metoder:

Metode Parametre Returverdi Kommentar
les_lag_fra_fil str - Leser inn informasjon om lagene i serien fra filen med dette filnavnet
runde int Runde Lager et nytt Runde-objekt som får dette rundenummeret hvis det ikke finnes et slikt objekt fra før. Returnerer Runde-objektet med dette rundenummeret.

Runde

Objekter av typen Runde opprettes med Runde(sesong) hvor argumentet er:

Objekter av typen Runde har følgende metoder:

Metode Parametre Returverdi Kommentar
legg_til str, str - Lager og legger til en nytt Kamp-objekt som hører til et Runde-objekt. Første parameter er hjemmelagets navn, andre parameter er bortelagets navn (disse navnene må finnes i filen som er lest inn til Sesong-objektet Runden tilhører)

Objekter av typen Runde støtter følgende operasjoner:

Operasjon Kommentar
for .. in .. Går gjennom Runde-objektet med en for-løkke og returnerer ett og ett Kamp-objekt

Kamp

Objekter av typen Kamp opprettes med Kamp(hjemme, borte) hvor argumentene er:

Objekter av typen Kamp har følgende instansvariabler:

Instansvarabel Type Kommentar
hjemme Lag (se ovenfor)
borte Lag (se ovenfor)
hmål int / None Antall mål hjemmelaget scoret (eller None dersom kampen ikke er spilt)
bmål int / None Antall mål bortelaget scoret (eller None dersom kampen ikke er spilt)

Objekter av typen Kamp har følgende metoder:

Metode Parametre Returverdi Kommentar
simuler - - Simulerer kampen slik at den får et resultat (hjemmelaget og bortelaget får et antall mål hver)

Objekter av typen Kamp støtter følgende operasjoner:

Operasjon Kommentar
print(kamp) Skriver ut: hjemmelagets navn - bortelagets navn, og hvis kampen er spilt: hjemmelagets mål - bortelagets mål. Eksempler: "Bodø/Glimt - Manchester City 3 - 1" (spilt kamp) "Atlético Madrid - Bodø/Glimt" (ikke spilt kamp)

Lag

Objekter av typen Lag opprettes med Lag(navn, elo, mål) hvor argumentene er:

Objekter av typen Lag har følgende instansvariabler:

Instansvarabel Type Kommentar
navn str (se ovenfor)
elo int (se ovenfor)
mål float (se ovenfor)

Objekter av typen Lag støtter i tillegg følgende operasjoner:

Operasjon Kommentar
print(lag) Skriver ut lagets navn.

Oppgave 3

Filnavn: teori.txt

Gi korte svar på spørsmålene under (hentet fra forelesning 7):

  1. Hva er innkapsling? Hvorfor er det nyttig?
  2. Hva er grensesnittet til en klasse? Hvordan skiller det seg fra implementasjonen av en klasse?
  3. Hva er en instansmetode (ofte kalt bare metode)? Hvordan skiller metoder seg fra prosedyrene/funksjonene vi har jobbet med hittil?

Oppgave 4

Filnavn: begreper.txt

Se illustrasjonseksempelet nederst i oppgaven om du er i tvil om hvordan oppgaven skal besvares.

For hvert av begrepene i listen under, oppgi et linjenummer i programmet der du finner et eksempel på begrepet. Hvert begrep er gjennomgått i uke 7. Hvis eksempelet går over flere linjer, oppgir du start- og sluttlinje.

Illustrasjonseksempel

For hvert av begrepene i listen under, oppgi et linjenummer i programmet der du finner et eksempel på begrepet. Hvis eksempelet går over flere linjer, oppgir du start- og sluttlinje.

Mulige riktige svar på spørsmålene i eksempelet: