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