Alt om uke 43
I uke 43 avslutter vi kapittelet om klasser, og tar ett skritt videre ved å introdusere arv og objektorientert programmering (OOP).
Hovedpunkter
Det er to hovedpunkter denne uken:
1. Special methods
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.
2. Arv og OOP (kapittel 9):
- 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 h 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, og 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 IN1900-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.