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.