Programmering nivå 2
Kap 3.1 – Vad är OOP?
Förstå hur objekt, klasser, attribut och metoder används för att strukturera program.
Mål med lektionen
När du har arbetat klart med denna lektion ska du:
- Känna till grunderna i objektorienterad programmering (OOP).
- Förstå varför OOP används och vad det innebär att tänka i objekt.
- Kunna skilja mellan begreppen klass, objekt, konstruktor, attribut och metod.
Så här lär du dig bäst
Börja med att läsa igenom hela lektionen för att få en helhetsbild. Försök tänka på hur du skulle beskriva verkliga företeelser med kod: en bil, en bok eller en elev. Jämför gärna hur samma problem skulle kunna lösas med fristående funktioner respektive med objekt.
Centrala begrepp
- Klass: en mall eller ritning för att skapa objekt, till exempel typen
Bok. - Objekt: ett självständigt paket av data och funktionalitet, till exempel en specifik bok.
- Metod: en funktion som hör till en klass eller ett objekt, till exempel
skriv_ut_info(). - Konstruktor: den metod som körs när ett nytt objekt skapas. I Python heter den
__init__(). - Egenskap eller attribut: data som hör till ett objekt, till exempel en boks titel eller författare.
- Funktion: en fristående koddel som kan anropas med sitt namn, till exempel
print()ellerberakna_summa(). - Inkapsling: att dölja interna detaljer i ett objekt och exponera en tydlig yta.
- Återanvändning: att skapa kod som kan användas flera gånger genom att skapa nya objekt.
Klass och objekt: Klassen kan du se direkt i koden. Den
beskriver hur objekt ska skapas och fungera. Ett objekt skapas först när programmet körs och koden
anropar klassen, till exempel bok = Bok(...).
Dessa begrepp är viktiga eftersom de bygger upp strukturen i objektorienterad programmering. När du skriver program i Python kommer du att använda dem ofta.
Vad är objektorienterad programmering?
Objektorienterad programmering är ett sätt att skriva program där man utgår från objekt. Ett objekt innehåller både data, till exempel ett namn, och funktioner, till exempel en metod som skriver ut information om objektet.
I traditionell programmering skriver du ofta kod i fristående funktioner. I OOP organiseras programmet runt klasser som beskriver hur objekt ska fungera. En klass är som en ritning. När programmet körs skapas riktiga objekt, alltså instanser av klassen.
Funktion, metod och konstruktor
En funktion är en koddel som står fritt och anropas med sitt namn. En metod är också en funktion, men den ligger inuti en klass och hör till objekt som skapas från klassen.
# Funktion
def skriv_hej():
print("Hej")
class Bok:
# Metod
def skriv_ut_info(self):
print("Information om boken")
I exemplet är skriv_hej() en vanlig funktion. skriv_ut_info() är en metod
eftersom den ligger i klassen Bok. Metoder har ofta parametern self, som
betyder "det här objektet".
En konstruktor används för att ge ett nytt objekt startvärden. I Python skrivs
konstruktorn som __init__(). Den körs automatiskt när du skapar ett objekt, till
exempel med bok1 = Bok("Project Hail Mary", "Andy Weir").
Exempel: böcker
Föreställ dig att du vill skapa ett program som hanterar böcker. Med OOP kan du skapa en klass
Bok med egenskaper som titel och författare, och metoder som skriver ut information.
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()
I exemplet är Bok klassen. Raden def __init__(self, titel, forfattare):
är konstruktorn. Den tar emot startvärden när ett objekt skapas. Raderna
self.titel = titel och self.forfattare = forfattare sparar värdena i det
objekt som skapas. När koden kör bok1.skriv_ut_info() anropas metoden på just objektet
bok1.
Repetition från kap 1.3: titel och
forfattare är parametrar eftersom de står i metodens definition. När programmet kör
Bok("Project Hail Mary", "Andy Weir") är "Project Hail Mary" och
"Andy Weir" argument eftersom de skickas in till konstruktorn. self är
också en parameter, men Python skickar in objektet själv automatiskt när metoden anropas.
Interaktiv övning: skapa bokobjekt
Testa hur klassen Bok används som mall. Varje gång du skapar en bok får objektet
egna värden i attributen titel och forfattare. När du kör metoden
skriv_ut_info() används objektets egna attribut.
Prova till exempel att:
- skapa
bok1och kör metoden - ändra titel och författare och skapa
bok2 - jämföra hur objekten sparar olika attribut
Programmering 2-koppling: klassen är mallen, men varje objekt har egna attributvärden. Samma metod kan därför ge olika utskrift för olika objekt.
OOP är särskilt användbart när du bygger större program. Det gör koden mer strukturerad, lättare att felsöka och enklare att återanvända.
Öva: tänk objekt
Föreställ dig att du ska skapa ett program som hanterar elever i en skola. Fundera på:
- Vilka egenskaper har en elev?
- Vilka metoder skulle en elev kunna ha?
- Hur skulle du representera detta i kod?
Skriv ner din idé som en klassbeskrivning i pseudokod:
Klass: Elev
Egenskaper: namn, klass, ålder
Metoder: skriv_ut_info(), byt_klass(ny_klass)
När du har försökt själv kan du ladda ner ett lösningsförslag: kap3-1-elev-losningsforslag.py
Sammanfattning
- Objektorienterad programmering handlar om att organisera koden runt objekt.
- En klass är en ritning och ett objekt är en instans av klassen.
- En konstruktor,
__init__(), ger objektet startvärden när det skapas. - En metod liknar en funktion, men hör till en klass eller ett objekt.
- OOP gör det enklare att bygga stora program genom att separera logik och data.
- Centrala begrepp är klass, objekt, konstruktor, attribut, metod och inkapsling.