Kap 3.1
Vad är OOP?
Objektorienterad programmering organiserar kod runt objekt.
Mål
Efter lektionen ska du kunna...
- förklara vad objektorienterad programmering är
- skilja mellan klass och objekt
- förklara attribut, metod och konstruktor
- läsa ett enkelt klass-exempel i Python
Idén
Data och beteende tillsammans
Ett objekt kan ha data.
Ett objekt kan också ha metoder.
Då ligger information och funktionalitet på samma ställe.
Exempel
En bok som objekt
- Titel:
Project Hail Mary - Författare:
Andy Weir - Metod: skriv ut bokens information
Klass
Klassen är mallen
pass måste bara vara med om klassen är tom.
class Bok:
Det här fungerar inte. Python väntar på kod efter kolon.
class Bok:
pass
pass betyder: här kommer inget mer än.
Så fort klassen får en metod behövs inte pass.
Objekt
Objekt skapas från klassen
bok1 = Bok()
bok2 = Bok()
Bok är klassen.
bok1 och bok2 är två objekt.
En instans är ett konkret objekt som har skapats från en klass.
Konstruktor
__init__() ger startvärden
class Bok:
def __init__(self, titel, forfattare):
self.titel = titel
self.forfattare = forfattare
Konstruktorn körs när ett nytt objekt skapas.
Attribut
Data som hör till objektet
self.titel = titel
self.forfattare = forfattare
self.titel sparas i objektet.
Varje bokobjekt får egna attributvärden.
Skapa objekt
Argument skickas in
bok1 = Bok("Project Hail Mary", "Andy Weir")
"Project Hail Mary"blirtitel."Andy Weir"blirforfattare.- Värdena sparas i
bok1.
Metod
En funktion i en klass
def skriv_ut_info(self):
print(f"{self.titel} av {self.forfattare}")
Metoden använder objektets egna attribut.
Anrop
Kör metoden på ett objekt
bok1.skriv_ut_info()
Project Hail Mary av Andy Weir
Python använder attributen som finns i just bok1.
self
self betyder detta objekt
class Bok:
def skriv_ut_info(self):
print(self.titel)
bok1.skriv_ut_info()
bok2.skriv_ut_info()
Samma metod kan köras på olika objekt.
När metoden körs på bok1 betyder self bok1.
När metoden körs på bok2 betyder self bok2.
Hela exemplet
Klassen Bok
class Bok:
def __init__(self, titel, forfattare):
self.titel = titel
self.forfattare = forfattare
def skriv_ut_info(self):
print(f"{self.titel} av {self.forfattare}")
bok1 = Bok("Project Hail Mary", "Andy Weir")
bok2 = Bok("Surely You're Joking, Mr. Feynman!", "Richard P. Feynman")
bok1.skriv_ut_info()
bok2.skriv_ut_info()
Utskrift
Vad skriver programmet?
Project Hail Mary av Andy Weir
Surely You're Joking, Mr. Feynman! av Richard P. Feynman
Samma klass används för två olika objekt.
Jämförelse
Funktion eller metod?
def skriv_hej():
print("Hej")
En vanlig funktion står fritt, alltså utanför en klass.
class Bok:
def skriv_ut_info(self):
print("Information")
En metod är en funktion som ligger i en klass.
Alla metoder är funktioner, men alla funktioner är inte metoder.
Bara funktioner som hör till en klass eller ett objekt kallas metoder.
Begrepp
Orden du måste kunna
- klass: mall för objekt
- objekt: konkret sak som skapats från en klass
- instans: ett annat ord för ett objekt som skapats från en klass
- attribut: data i objektet
- metod: funktion som hör till objektet
- konstruktor:
__init__()
Varför OOP?
När program växer
- Data och funktioner hålls ihop.
- Koden blir lättare att dela upp.
- Samma klass kan skapa många objekt.
- Det blir enklare att bygga vidare.
Öva
Tänk objekt
Klass: Elev
Attribut:
namn, klass, ålder
Metoder:
skriv_ut_info()
byt_klass(ny_klass)
Börja med att beskriva objektet innan du skriver Pythonkod.
Sammanfattning
Kom ihåg
- En klass är en mall.
- Ett objekt skapas från klassen.
- Attribut är objektets data.
- Metoder är objektets funktioner.
selfbetyder objektet som används just nu.