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() eller berakna_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 bok1 och kör metoden
  • ändra titel och författare och skapa bok2
  • jämföra hur objekten sparar olika attribut
Inga bokobjekt är skapade än. Välj bok1 eller bok2 och tryck på Skapa objekt.

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.

Tillbaka till Kapitel 3