Uke 8 - Referanser og objekter

 

I seminarvideoene blir det snakket om lister av lister. Disse er også viktige å også se.

Stikkord

  • Objektorientering
  • None
  • Referanser

None

  • Brukes til å representere fraværet av en verdi.

Altså hvis man har en variabel som refererer til et objekt og ønsker at det ikke skal ha verdi kan man sette variablene til “None”.

Et eksempel hvor None er brukt:

(dette er en del av et større program som skal programmeres senere. Her har man en liste av student-objekter og ønsker å se om man finner studenten med det oppgitte navnet):

def finn_stud(self, navn) :
    student = None
    for s in self._studentliste :
        if str(s) == navn :
            student = s
    return student

Denne metoden vil enten returnere et objekt av typen student (dersom den finner riktig student), hvis den ikke finner den så vil den returnere None.

Vi kan også skrive om kodesnutten til:

def finn_stud(self, navn) :
    for s in self._studentliste :
        if str(s) == navn :
            return s

Hva er forskjellen på disse kodesnuttene?

 

None er også default (standard) verdien som returneres fra enhver metode, med mindre noe annet er definert. Med andre ord: lager vi en metode uten returverdi, så ser det ut som den ikke returnerer noe, men i virkeligheten returnerer den “None”.

Fra der metoden er kalt kan vi skrive:

student = finn_stud(navn)
if student is None:
    print("Fant ikke studenten")
else:
    #<gjøre andre ting, feks kalle på metoder fra student-objektet>

Forsøker vi å gjøre feks student.skriv_info() og student er None vil programmet kræsje.

 

Oppgave 1

Skriv en klasse sirkel. En sirkel har en radius, lag en konstruktør som setter radius.

Lag tre metoder til: en som returnerer diameteren til sirkelen, en som returnerer omkretsen til sirkelen og en som returnerer arealet til sirkelen.

Hint: omkrets av en sirkel er diameter pi, arealet av en sirkel er radius^2 pi. Eksponenter skrives som <base>**<eksponent>, f.eks. 28 skrives 2**8.

Lag deretter 2 sirkler med ulik radius. Skriv ut den ene sirkelens omkrets og areal, og den andre sirkelens diameter.

I omkrets bør man benytte seg av diameter()-metoden

 

Datastruktur og kontrollflyt

Vi skal nå se litt mer på datastruktur og referanser.

Referanser

En referanse er en måte å få tak i objekter på. En slags peker.

Om vi ser på koden

hund = Dyr("hund", 23, 2.5)

er her “hund” en referanse til et objekt av typen dyr.

Pekere

Vi har i oppgave 4 fra forrige uke laget tre instanser av klassen Dyr.

hund = Dyr("hund", "hann", 10.2)
katt = Dyr("katt", "hunn", 5.7)
sau = Dyr("sau", "hann", 30.6)

Vi kan tegne opp dette med bokser og pekere:

Dyr 1

Hva skjer om vi skriver hund = katt?

 

Når vi setter hund = katt endrer vi pekeren hund til å peke på samme objekt som katt peker på. Dette kan vi tegne opp som: Tegning av dyr der hund nå peker på samme instans som katt

Hund er altså ikke selve Dyre-objektet, men refererer kun til det!

 

Oppgave 2

Tegn datastruktur-tegninger for oppgave 1.

 

Oppgave 3

Lag en klasse Blomst.

En blomst har en art, en høyde, en instansvariabel som sier om blomsten har det bra eller ikke (denne verdien er en boolean), og en verdi som forteller hvor lenge siden blomsten ble vannet sist. Konstruktøren setter alle disse verdiene, når en blomst blir opprettet vil blomsten alltid ha det bra og det vil være 0 dager siden den ble vannet sist.

En blomst har en metode hentStatus som returnerer verdien som forteller om blomsten har det bra eller ikke.

I tillegg har den metoden skrivUtInfo, som skriver ut en info streng om blomsten

Videre har en blomst en metode nesteDag, som øker antall dager siden den ble vannet med en. Hvis det er mer enn tre dager siden blomsten ble vannet sist vil statusen til blomsten være at den har det dårlig. Hvis statusen til blomsten er at den har det bra vokser blomsten 1 cm.

Den siste metoden en blomst har er metoden vann. Hvis det er mindre enn 3 dager siden blomsten ble vannet vil statusen til blomsten bli dårlig (over vanning), ellers vil statusen være bra.

Skriv denne klassen + lag et testprogram for å teste klassen din

Publisert 7. okt. 2020 19:19 - Sist endret 13. okt. 2020 00:05