Alt om uke 43

I uke 43 avslutter vi kapittelet om klasser, og tar ett skritt videre ved å introdusere arv og objektorientert programmering (OOP).

Det er to hovedpunkter denne uken:
  • Første nye tema denne uken er såkalte special methods. Dette er en egen kategori av funksjoner i Python, med bestemte forhåndsdefinerte navn, som gir objekter av en klasse spesielle egenskaper. Det viktigste eksempelet, som vi allerede har sett og brukt, er konstruktøren __init__. Denne metoden (funksjonen) kalles hver gang vi oppretter et nytt objekt av en klasse. Selve funksjonen er som en helt vanlig Python-funksjon, og vi kan skrive hva vi vil i den, men navnet __init__ gjør at den kalles hver gang et nytt objekt genereres. Det spesielle med special methods er derfor ikke selve metodene, men navnene de har og hvordan de kalles. Alle special methods har navn som begynner og slutter med to streker (underscore). Eksempler er __call__, som gjør at objekter av en klasse kan kalles som en vanlig funksjon, __add__ som lar oss legge sammen objekter med +, og __getitem__ som lar oss indeksere objekter som vi gjør med lister.

  • Andre nye tema er arv og OOP (kap 9.1-9.2):

    • OOP er et stort felt, som lett kunne fylt et helt programmeringskurs. I IN1900 fokuserer vi på to punkter; arv og klasse-hierarkier.
    • Arv bygger direkte på kapittelet om klasser fra forrige uke. Kort fortalt er arv at vi lar en klasse være en underklasse av en annen. Underklassen (sub-class) arver alle data og funksjoner (attributter og metoder) fra baseklassen (base class). I tillegg kan underklassen definere sine egne metoder og attributter, eller overskrive metoder fra baseklassen med sine egne spesialversjoner. Dette gir effektive måter å programmere objekter som har en del fellestrekk men som ikke er helt like.
    • Vi kan la flere klasser være underklasser av en baseklasse, og vi kan la underklassene ha nye underklasser. Dette kan vi utvide til et hierarki av klasser, med en baseklasse og flere nivåer av underklasser. I programmeringskurs illustreres dette ofte med eksempler fra andre områder. F.eks. kan "kjøretøy" være en baseklasse, og naturlige underklasser er "bil", "motorsykkel" etc. Underklassen "bil" kan ha nye underklasser "personbil", "varebil" o.l. Dette gir et naturlig klassehierarki, men likner på klassehierarkier i programmering ved at alle kjøretøy har noen felles egenskaper, som samles i baseklassene, og noen spesielle egenskaper, som implementeres i hver enkelt underklasse. I praksis er det imidlertid vanskelig å finne gode INF1100-eksempler hvor vi har bruk for å implementere en kjøretøy-klasse, så vi skal illustrere klassehierarkier med ODE-løsere. Dette er små programmer som implementerer ulike numeriske metoder for ODEer. De har typisk en del funksjoner som er felles for alle metodene, og noen få som er spesielle, så de egner seg godt for å implementeres som et klassehierarki.
Læringsmål for uke 43:
  • Forstå hvordan special methods brukes i Python, og kunne navnet på de viktigste special methods.
  • Forstå hva arv er, hvordan arv kan brukes til å lage et hierarki av klasser, og hvorfor dette er nyttig.
Av Joakim Sundnes
Publisert 12. okt. 2018 10:18